alibabacloud-vpc20160428 6.9.3__py3-none-any.whl → 6.9.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7289,17 +7289,15 @@ class CreateCommonBandwidthPackageRequest(TeaModel):
7289
7289
  #
7290
7290
  # You can use the client to generate the token, but you must make sure that the token is unique among different requests. The client token can contain only ASCII characters.
7291
7291
  #
7292
- # >
7293
- #
7294
- # If you do not specify this parameter, the system automatically uses the **request ID** as the **client token**. The **request ID** may be different for each request.
7292
+ # > If you do not specify this parameter, the system automatically uses the **request ID** as the **client token**. The **request ID** may be different for each request.
7295
7293
  self.client_token = client_token
7296
7294
  # The description of the Internet Shared Bandwidth instance.
7297
7295
  #
7298
- # The description must be 2 to 256 characters in length and start with a letter. The description cannot start with `http://` or `https://`.
7296
+ # The description must be 0 to 256 characters in length and cannot start with `http://` or `https://`.
7299
7297
  self.description = description
7300
7298
  # The line type. Valid values:
7301
7299
  #
7302
- # * **BGP** All regions support BGP (Multi-ISP).
7300
+ # * **BGP** (default) All regions support BGP (Multi-ISP).
7303
7301
  # * **BGP_PRO** BGP (Multi-ISP) Pro lines are available in the China (Hong Kong), Singapore, Japan (Tokyo), Philippines (Manila), Malaysia (Kuala Lumpur), Indonesia (Jakarta), and Thailand (Bangkok) regions.
7304
7302
  #
7305
7303
  # If you are allowed to use single-ISP bandwidth, you can also use one of the following values:
@@ -7317,15 +7315,13 @@ class CreateCommonBandwidthPackageRequest(TeaModel):
7317
7315
  self.internet_charge_type = internet_charge_type
7318
7316
  # The name of the Internet Shared Bandwidth instance.
7319
7317
  #
7320
- # The name must be 2 to 128 characters in length, and can contain letters, digits, underscores (_), and hyphens (-). The name must start with a letter.
7318
+ # The name must be 0 to 128 characters in length and cannot start with `http://` or `https://`.
7321
7319
  self.name = name
7322
7320
  self.owner_account = owner_account
7323
7321
  self.owner_id = owner_id
7324
7322
  # The percentage of the minimum bandwidth commitment. Set the parameter to **20**.
7325
7323
  #
7326
- # >
7327
- #
7328
- # This parameter is available only on the Alibaba Cloud China site.
7324
+ # > This parameter is available only on the Alibaba Cloud China site.
7329
7325
  self.ratio = ratio
7330
7326
  # The region ID of the Internet Shared Bandwidth instance.
7331
7327
  #
@@ -9544,6 +9540,7 @@ class CreateFlowLogRequest(TeaModel):
9544
9540
  aggregation_interval: int = None,
9545
9541
  description: str = None,
9546
9542
  flow_log_name: str = None,
9543
+ ip_version: str = None,
9547
9544
  log_store_name: str = None,
9548
9545
  owner_account: str = None,
9549
9546
  owner_id: int = None,
@@ -9568,6 +9565,7 @@ class CreateFlowLogRequest(TeaModel):
9568
9565
  #
9569
9566
  # The name must be 1 to 128 characters in length and cannot start with `http://` or `https://`.
9570
9567
  self.flow_log_name = flow_log_name
9568
+ self.ip_version = ip_version
9571
9569
  # The name of the Logstore that stores the captured traffic data.
9572
9570
  #
9573
9571
  # * The name can contain only lowercase letters, digits, hyphens (-), and underscores (_).
@@ -9640,6 +9638,8 @@ class CreateFlowLogRequest(TeaModel):
9640
9638
  result['Description'] = self.description
9641
9639
  if self.flow_log_name is not None:
9642
9640
  result['FlowLogName'] = self.flow_log_name
9641
+ if self.ip_version is not None:
9642
+ result['IpVersion'] = self.ip_version
9643
9643
  if self.log_store_name is not None:
9644
9644
  result['LogStoreName'] = self.log_store_name
9645
9645
  if self.owner_account is not None:
@@ -9678,6 +9678,8 @@ class CreateFlowLogRequest(TeaModel):
9678
9678
  self.description = m.get('Description')
9679
9679
  if m.get('FlowLogName') is not None:
9680
9680
  self.flow_log_name = m.get('FlowLogName')
9681
+ if m.get('IpVersion') is not None:
9682
+ self.ip_version = m.get('IpVersion')
9681
9683
  if m.get('LogStoreName') is not None:
9682
9684
  self.log_store_name = m.get('LogStoreName')
9683
9685
  if m.get('OwnerAccount') is not None:
@@ -12711,15 +12713,60 @@ class CreateIpv6GatewayResponse(TeaModel):
12711
12713
  return self
12712
12714
 
12713
12715
 
12716
+ class CreateNatGatewayRequestAccessMode(TeaModel):
12717
+ def __init__(
12718
+ self,
12719
+ mode_value: str = None,
12720
+ tunnel_type: str = None,
12721
+ ):
12722
+ # Access mode. Valid values:
12723
+ #
12724
+ # - **route**: route mode
12725
+ #
12726
+ # - **tunnel**: tunnel mode
12727
+ #
12728
+ # > If this parameter is specified, you must set **PrivateLinkEnabled** to **true**.
12729
+ self.mode_value = mode_value
12730
+ # Tunnel mode type:
12731
+ #
12732
+ # - **geneve**: Geneve type
12733
+ #
12734
+ # > This value takes effect if the access mode is the tunnel mode.
12735
+ self.tunnel_type = tunnel_type
12736
+
12737
+ def validate(self):
12738
+ pass
12739
+
12740
+ def to_map(self):
12741
+ _map = super().to_map()
12742
+ if _map is not None:
12743
+ return _map
12744
+
12745
+ result = dict()
12746
+ if self.mode_value is not None:
12747
+ result['ModeValue'] = self.mode_value
12748
+ if self.tunnel_type is not None:
12749
+ result['TunnelType'] = self.tunnel_type
12750
+ return result
12751
+
12752
+ def from_map(self, m: dict = None):
12753
+ m = m or dict()
12754
+ if m.get('ModeValue') is not None:
12755
+ self.mode_value = m.get('ModeValue')
12756
+ if m.get('TunnelType') is not None:
12757
+ self.tunnel_type = m.get('TunnelType')
12758
+ return self
12759
+
12760
+
12714
12761
  class CreateNatGatewayRequestTag(TeaModel):
12715
12762
  def __init__(
12716
12763
  self,
12717
12764
  key: str = None,
12718
12765
  value: str = None,
12719
12766
  ):
12720
- # The tag key. The format of Tag.N.Key when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length, and cannot start with acs: or aliyun. It cannot contain http:// or https://.
12767
+ # The tag key. The format of Tag.N.Key when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
12721
12768
  self.key = key
12722
- # The tag value. The format of Tag.N.Value when you call the operation. Valid values of N: 1 to 20. The tag value cannot be an empty string. The tag value can be up to 128 characters in length, and cannot start with acs: or aliyun. It cannot contain http:// or https://.
12769
+ # The tag value. The format of Tag.N.Value when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
12723
12770
  self.value = value
12724
12771
 
12725
12772
  def validate(self):
@@ -12749,6 +12796,7 @@ class CreateNatGatewayRequestTag(TeaModel):
12749
12796
  class CreateNatGatewayRequest(TeaModel):
12750
12797
  def __init__(
12751
12798
  self,
12799
+ access_mode: CreateNatGatewayRequestAccessMode = None,
12752
12800
  auto_pay: bool = None,
12753
12801
  client_token: str = None,
12754
12802
  description: str = None,
@@ -12763,6 +12811,7 @@ class CreateNatGatewayRequest(TeaModel):
12763
12811
  owner_account: str = None,
12764
12812
  owner_id: int = None,
12765
12813
  pricing_cycle: str = None,
12814
+ private_link_enabled: bool = None,
12766
12815
  region_id: str = None,
12767
12816
  resource_owner_account: str = None,
12768
12817
  resource_owner_id: int = None,
@@ -12772,6 +12821,8 @@ class CreateNatGatewayRequest(TeaModel):
12772
12821
  v_switch_id: str = None,
12773
12822
  vpc_id: str = None,
12774
12823
  ):
12824
+ # The access mode for reverse access to the VPC NAT gateway.
12825
+ self.access_mode = access_mode
12775
12826
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12776
12827
  self.auto_pay = auto_pay
12777
12828
  # The client token that is used to ensure the idempotence of the request.
@@ -12788,13 +12839,283 @@ class CreateNatGatewayRequest(TeaModel):
12788
12839
  self.duration = duration
12789
12840
  # The mode in which the EIP is associated with the NAT gateway. Valid values:
12790
12841
  #
12791
- # * **MULTI_BINDED** (default): Multi-EIP-to-ENI mode.
12842
+ # - **MULTI_BINDED**(default): the multi-EIP-to-ENI mode.
12792
12843
  #
12793
- # * **NAT**: NAT mode. IPv4 gateways are supported in this mode.
12844
+ # - **NAT**: NAT mode, which is compatible with IPv4 addresses.
12794
12845
  #
12795
- # **\
12846
+ # > If an EIP is associated with a NAT gateway in NAT mode, the EIP occupies a private IP address of the vSwitch where the NAT gateway is deployed. Make sure that the vSwitch has sufficient private IP addresses. Otherwise, EIPs cannot be associated with the NAT gateway. In NAT mode, a maximum number of 50 EIPs can be associated with each NAT gateway.
12847
+ self.eip_bind_mode = eip_bind_mode
12848
+ # Specifies whether to enable ICMP retrieval. Valid values:
12849
+ #
12850
+ # * **true** (default)
12851
+ # * **false**\
12852
+ self.icmp_reply_enabled = icmp_reply_enabled
12853
+ # The billing method of the NAT gateway.
12854
+ #
12855
+ # Set the value to **PostPaid** (pay-as-you-go), which is the default value.
12856
+ #
12857
+ # For more information, see [Internet NAT gateway billing](https://help.aliyun.com/document_detail/48126.html) and [VPC NAT gateway billing](https://help.aliyun.com/document_detail/270913.html).
12858
+ self.instance_charge_type = instance_charge_type
12859
+ # The metering method of the NAT gateway. Set the value to **PayByLcu**, which specifies the pay-by-CU metering method.
12860
+ self.internet_charge_type = internet_charge_type
12861
+ # The name of the NAT gateway.
12862
+ #
12863
+ # The name must be 2 to 128 characters in length and can contain letters, digits, underscores (_), and hyphens (-). The name must start with a letter.
12864
+ #
12865
+ # If this parameter is not set, the system assigns a default name to the NAT gateway.
12866
+ self.name = name
12867
+ # The type of NAT gateway. Set the value to **Enhanced**, which specifies enhanced NAT gateway.
12868
+ self.nat_type = nat_type
12869
+ # The network type of the NAT gateway. Valid values:
12870
+ #
12871
+ # * **internet**: Internet
12872
+ # * **intranet**: VPC
12873
+ self.network_type = network_type
12874
+ self.owner_account = owner_account
12875
+ self.owner_id = owner_id
12876
+ # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12877
+ self.pricing_cycle = pricing_cycle
12878
+ # PrivateLink is not supported by default. If you set the value to true, PrivateLink is supported.
12879
+ self.private_link_enabled = private_link_enabled
12880
+ # The region ID of the NAT gateway.
12881
+ #
12882
+ # You can call the [DescribeRegions](https://help.aliyun.com/document_detail/36063.html) operation to obtain the region ID.
12883
+ #
12884
+ # This parameter is required.
12885
+ self.region_id = region_id
12886
+ self.resource_owner_account = resource_owner_account
12887
+ self.resource_owner_id = resource_owner_id
12888
+ # Specifies whether to enable the firewall feature. Valid values:
12889
+ #
12890
+ # * **false** (default)>Notice: This parameter is deprecated.
12891
+ self.security_protection_enabled = security_protection_enabled
12892
+ # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12893
+ self.spec = spec
12894
+ # The tags.
12895
+ self.tag = tag
12896
+ # The ID of the vSwitch to which the NAT gateway is attached.
12897
+ #
12898
+ # When you create a NAT gateway, you must specify a vSwitch for the NAT gateway. Then, the system assigns an idle private IP address from the vSwitch to the NAT gateway.
12899
+ #
12900
+ # * To attach the NAT gateway to an existing vSwitch, make sure that the zone to which the vSwitch belongs supports NAT gateways. In addition, the vSwitch must have idle IP addresses.
12901
+ # * If no vSwitch exists in the VPC, create a vSwitch in a zone that supports NAT gateways. Then, specify the vSwitch for the NAT gateway.
12902
+ #
12903
+ # > You can call the [ListEnhanhcedNatGatewayAvailableZones](https://help.aliyun.com/document_detail/182292.html) operation to query zones that support NAT gateways. You can call the [DescribeVSwitches](https://help.aliyun.com/document_detail/35748.html) operation to query idle IP addresses in a vSwitch.
12904
+ self.v_switch_id = v_switch_id
12905
+ # The ID of the VPC where you want to create the NAT gateway.
12906
+ #
12907
+ # This parameter is required.
12908
+ self.vpc_id = vpc_id
12909
+
12910
+ def validate(self):
12911
+ if self.access_mode:
12912
+ self.access_mode.validate()
12913
+ if self.tag:
12914
+ for k in self.tag:
12915
+ if k:
12916
+ k.validate()
12917
+
12918
+ def to_map(self):
12919
+ _map = super().to_map()
12920
+ if _map is not None:
12921
+ return _map
12922
+
12923
+ result = dict()
12924
+ if self.access_mode is not None:
12925
+ result['AccessMode'] = self.access_mode.to_map()
12926
+ if self.auto_pay is not None:
12927
+ result['AutoPay'] = self.auto_pay
12928
+ if self.client_token is not None:
12929
+ result['ClientToken'] = self.client_token
12930
+ if self.description is not None:
12931
+ result['Description'] = self.description
12932
+ if self.duration is not None:
12933
+ result['Duration'] = self.duration
12934
+ if self.eip_bind_mode is not None:
12935
+ result['EipBindMode'] = self.eip_bind_mode
12936
+ if self.icmp_reply_enabled is not None:
12937
+ result['IcmpReplyEnabled'] = self.icmp_reply_enabled
12938
+ if self.instance_charge_type is not None:
12939
+ result['InstanceChargeType'] = self.instance_charge_type
12940
+ if self.internet_charge_type is not None:
12941
+ result['InternetChargeType'] = self.internet_charge_type
12942
+ if self.name is not None:
12943
+ result['Name'] = self.name
12944
+ if self.nat_type is not None:
12945
+ result['NatType'] = self.nat_type
12946
+ if self.network_type is not None:
12947
+ result['NetworkType'] = self.network_type
12948
+ if self.owner_account is not None:
12949
+ result['OwnerAccount'] = self.owner_account
12950
+ if self.owner_id is not None:
12951
+ result['OwnerId'] = self.owner_id
12952
+ if self.pricing_cycle is not None:
12953
+ result['PricingCycle'] = self.pricing_cycle
12954
+ if self.private_link_enabled is not None:
12955
+ result['PrivateLinkEnabled'] = self.private_link_enabled
12956
+ if self.region_id is not None:
12957
+ result['RegionId'] = self.region_id
12958
+ if self.resource_owner_account is not None:
12959
+ result['ResourceOwnerAccount'] = self.resource_owner_account
12960
+ if self.resource_owner_id is not None:
12961
+ result['ResourceOwnerId'] = self.resource_owner_id
12962
+ if self.security_protection_enabled is not None:
12963
+ result['SecurityProtectionEnabled'] = self.security_protection_enabled
12964
+ if self.spec is not None:
12965
+ result['Spec'] = self.spec
12966
+ result['Tag'] = []
12967
+ if self.tag is not None:
12968
+ for k in self.tag:
12969
+ result['Tag'].append(k.to_map() if k else None)
12970
+ if self.v_switch_id is not None:
12971
+ result['VSwitchId'] = self.v_switch_id
12972
+ if self.vpc_id is not None:
12973
+ result['VpcId'] = self.vpc_id
12974
+ return result
12975
+
12976
+ def from_map(self, m: dict = None):
12977
+ m = m or dict()
12978
+ if m.get('AccessMode') is not None:
12979
+ temp_model = CreateNatGatewayRequestAccessMode()
12980
+ self.access_mode = temp_model.from_map(m['AccessMode'])
12981
+ if m.get('AutoPay') is not None:
12982
+ self.auto_pay = m.get('AutoPay')
12983
+ if m.get('ClientToken') is not None:
12984
+ self.client_token = m.get('ClientToken')
12985
+ if m.get('Description') is not None:
12986
+ self.description = m.get('Description')
12987
+ if m.get('Duration') is not None:
12988
+ self.duration = m.get('Duration')
12989
+ if m.get('EipBindMode') is not None:
12990
+ self.eip_bind_mode = m.get('EipBindMode')
12991
+ if m.get('IcmpReplyEnabled') is not None:
12992
+ self.icmp_reply_enabled = m.get('IcmpReplyEnabled')
12993
+ if m.get('InstanceChargeType') is not None:
12994
+ self.instance_charge_type = m.get('InstanceChargeType')
12995
+ if m.get('InternetChargeType') is not None:
12996
+ self.internet_charge_type = m.get('InternetChargeType')
12997
+ if m.get('Name') is not None:
12998
+ self.name = m.get('Name')
12999
+ if m.get('NatType') is not None:
13000
+ self.nat_type = m.get('NatType')
13001
+ if m.get('NetworkType') is not None:
13002
+ self.network_type = m.get('NetworkType')
13003
+ if m.get('OwnerAccount') is not None:
13004
+ self.owner_account = m.get('OwnerAccount')
13005
+ if m.get('OwnerId') is not None:
13006
+ self.owner_id = m.get('OwnerId')
13007
+ if m.get('PricingCycle') is not None:
13008
+ self.pricing_cycle = m.get('PricingCycle')
13009
+ if m.get('PrivateLinkEnabled') is not None:
13010
+ self.private_link_enabled = m.get('PrivateLinkEnabled')
13011
+ if m.get('RegionId') is not None:
13012
+ self.region_id = m.get('RegionId')
13013
+ if m.get('ResourceOwnerAccount') is not None:
13014
+ self.resource_owner_account = m.get('ResourceOwnerAccount')
13015
+ if m.get('ResourceOwnerId') is not None:
13016
+ self.resource_owner_id = m.get('ResourceOwnerId')
13017
+ if m.get('SecurityProtectionEnabled') is not None:
13018
+ self.security_protection_enabled = m.get('SecurityProtectionEnabled')
13019
+ if m.get('Spec') is not None:
13020
+ self.spec = m.get('Spec')
13021
+ self.tag = []
13022
+ if m.get('Tag') is not None:
13023
+ for k in m.get('Tag'):
13024
+ temp_model = CreateNatGatewayRequestTag()
13025
+ self.tag.append(temp_model.from_map(k))
13026
+ if m.get('VSwitchId') is not None:
13027
+ self.v_switch_id = m.get('VSwitchId')
13028
+ if m.get('VpcId') is not None:
13029
+ self.vpc_id = m.get('VpcId')
13030
+ return self
13031
+
13032
+
13033
+ class CreateNatGatewayShrinkRequestTag(TeaModel):
13034
+ def __init__(
13035
+ self,
13036
+ key: str = None,
13037
+ value: str = None,
13038
+ ):
13039
+ # The tag key. The format of Tag.N.Key when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
13040
+ self.key = key
13041
+ # The tag value. The format of Tag.N.Value when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
13042
+ self.value = value
13043
+
13044
+ def validate(self):
13045
+ pass
13046
+
13047
+ def to_map(self):
13048
+ _map = super().to_map()
13049
+ if _map is not None:
13050
+ return _map
13051
+
13052
+ result = dict()
13053
+ if self.key is not None:
13054
+ result['Key'] = self.key
13055
+ if self.value is not None:
13056
+ result['Value'] = self.value
13057
+ return result
13058
+
13059
+ def from_map(self, m: dict = None):
13060
+ m = m or dict()
13061
+ if m.get('Key') is not None:
13062
+ self.key = m.get('Key')
13063
+ if m.get('Value') is not None:
13064
+ self.value = m.get('Value')
13065
+ return self
13066
+
13067
+
13068
+ class CreateNatGatewayShrinkRequest(TeaModel):
13069
+ def __init__(
13070
+ self,
13071
+ access_mode_shrink: str = None,
13072
+ auto_pay: bool = None,
13073
+ client_token: str = None,
13074
+ description: str = None,
13075
+ duration: str = None,
13076
+ eip_bind_mode: str = None,
13077
+ icmp_reply_enabled: bool = None,
13078
+ instance_charge_type: str = None,
13079
+ internet_charge_type: str = None,
13080
+ name: str = None,
13081
+ nat_type: str = None,
13082
+ network_type: str = None,
13083
+ owner_account: str = None,
13084
+ owner_id: int = None,
13085
+ pricing_cycle: str = None,
13086
+ private_link_enabled: bool = None,
13087
+ region_id: str = None,
13088
+ resource_owner_account: str = None,
13089
+ resource_owner_id: int = None,
13090
+ security_protection_enabled: bool = None,
13091
+ spec: str = None,
13092
+ tag: List[CreateNatGatewayShrinkRequestTag] = None,
13093
+ v_switch_id: str = None,
13094
+ vpc_id: str = None,
13095
+ ):
13096
+ # The access mode for reverse access to the VPC NAT gateway.
13097
+ self.access_mode_shrink = access_mode_shrink
13098
+ # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
13099
+ self.auto_pay = auto_pay
13100
+ # The client token that is used to ensure the idempotence of the request.
13101
+ #
13102
+ # You can use the client to generate the token, but you must make sure that the token is unique among different requests.
13103
+ #
13104
+ # > If you do not specify this parameter, the system automatically uses the **request ID** as the **client token**. The **request ID** may be different for each request.
13105
+ self.client_token = client_token
13106
+ # The description of the NAT gateway.
13107
+ #
13108
+ # You can leave this parameter empty or enter a description. If you enter a description, the description must be 2 to 256 characters in length and cannot start with `http://` or `https://`.
13109
+ self.description = description
13110
+ # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
13111
+ self.duration = duration
13112
+ # The mode in which the EIP is associated with the NAT gateway. Valid values:
12796
13113
  #
12797
- # **Note** If a NAT gateway is associated with an EIP in NAT mode, the EIP occupies one private IP address in the vSwitch. Make sure that the vSwitch has sufficient private IP addresses. Otherwise, the NAT gateway fails to be associated with the EIP. In NAT mode, a maximum number of 50 EIPs can be associated with each NAT gateway.
13114
+ # - **MULTI_BINDED**(default): the multi-EIP-to-ENI mode.
13115
+ #
13116
+ # - **NAT**: NAT mode, which is compatible with IPv4 addresses.
13117
+ #
13118
+ # > If an EIP is associated with a NAT gateway in NAT mode, the EIP occupies a private IP address of the vSwitch where the NAT gateway is deployed. Make sure that the vSwitch has sufficient private IP addresses. Otherwise, EIPs cannot be associated with the NAT gateway. In NAT mode, a maximum number of 50 EIPs can be associated with each NAT gateway.
12798
13119
  self.eip_bind_mode = eip_bind_mode
12799
13120
  # Specifies whether to enable ICMP retrieval. Valid values:
12800
13121
  #
@@ -12811,7 +13132,7 @@ class CreateNatGatewayRequest(TeaModel):
12811
13132
  self.internet_charge_type = internet_charge_type
12812
13133
  # The name of the NAT gateway.
12813
13134
  #
12814
- # The name must be 2 to 128 characters in length, and can contain letters, digits, underscores (_), and hyphens (-). The name must start with a letter.
13135
+ # The name must be 2 to 128 characters in length and can contain letters, digits, underscores (_), and hyphens (-). The name must start with a letter.
12815
13136
  #
12816
13137
  # If this parameter is not set, the system assigns a default name to the NAT gateway.
12817
13138
  self.name = name
@@ -12826,6 +13147,8 @@ class CreateNatGatewayRequest(TeaModel):
12826
13147
  self.owner_id = owner_id
12827
13148
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12828
13149
  self.pricing_cycle = pricing_cycle
13150
+ # PrivateLink is not supported by default. If you set the value to true, PrivateLink is supported.
13151
+ self.private_link_enabled = private_link_enabled
12829
13152
  # The region ID of the NAT gateway.
12830
13153
  #
12831
13154
  # You can call the [DescribeRegions](https://help.aliyun.com/document_detail/36063.html) operation to obtain the region ID.
@@ -12868,6 +13191,8 @@ class CreateNatGatewayRequest(TeaModel):
12868
13191
  return _map
12869
13192
 
12870
13193
  result = dict()
13194
+ if self.access_mode_shrink is not None:
13195
+ result['AccessMode'] = self.access_mode_shrink
12871
13196
  if self.auto_pay is not None:
12872
13197
  result['AutoPay'] = self.auto_pay
12873
13198
  if self.client_token is not None:
@@ -12896,6 +13221,8 @@ class CreateNatGatewayRequest(TeaModel):
12896
13221
  result['OwnerId'] = self.owner_id
12897
13222
  if self.pricing_cycle is not None:
12898
13223
  result['PricingCycle'] = self.pricing_cycle
13224
+ if self.private_link_enabled is not None:
13225
+ result['PrivateLinkEnabled'] = self.private_link_enabled
12899
13226
  if self.region_id is not None:
12900
13227
  result['RegionId'] = self.region_id
12901
13228
  if self.resource_owner_account is not None:
@@ -12918,6 +13245,8 @@ class CreateNatGatewayRequest(TeaModel):
12918
13245
 
12919
13246
  def from_map(self, m: dict = None):
12920
13247
  m = m or dict()
13248
+ if m.get('AccessMode') is not None:
13249
+ self.access_mode_shrink = m.get('AccessMode')
12921
13250
  if m.get('AutoPay') is not None:
12922
13251
  self.auto_pay = m.get('AutoPay')
12923
13252
  if m.get('ClientToken') is not None:
@@ -12946,6 +13275,8 @@ class CreateNatGatewayRequest(TeaModel):
12946
13275
  self.owner_id = m.get('OwnerId')
12947
13276
  if m.get('PricingCycle') is not None:
12948
13277
  self.pricing_cycle = m.get('PricingCycle')
13278
+ if m.get('PrivateLinkEnabled') is not None:
13279
+ self.private_link_enabled = m.get('PrivateLinkEnabled')
12949
13280
  if m.get('RegionId') is not None:
12950
13281
  self.region_id = m.get('RegionId')
12951
13282
  if m.get('ResourceOwnerAccount') is not None:
@@ -12959,7 +13290,7 @@ class CreateNatGatewayRequest(TeaModel):
12959
13290
  self.tag = []
12960
13291
  if m.get('Tag') is not None:
12961
13292
  for k in m.get('Tag'):
12962
- temp_model = CreateNatGatewayRequestTag()
13293
+ temp_model = CreateNatGatewayShrinkRequestTag()
12963
13294
  self.tag.append(temp_model.from_map(k))
12964
13295
  if m.get('VSwitchId') is not None:
12965
13296
  self.v_switch_id = m.get('VSwitchId')
@@ -17022,18 +17353,25 @@ class CreateSslVpnServerRequest(TeaModel):
17022
17353
  # * **true**\
17023
17354
  # * **false** (default)
17024
17355
  self.compress = compress
17025
- # Specifies whether to enable two-factor authentication. If you enable two-factor authentication, you must configure `IDaaSInstanceId` and `IDaaSRegionId`. Valid values:
17356
+ # Specifies whether to enable two-factor authentication. To enable two-factor authentication, you need to specify `IDaaSInstanceId`, `IDaaSRegionId`, and `IDaaSApplicationId`. Valid values:
17026
17357
  #
17027
- # * **true**: enables this feature.
17028
- # * **false** (default): disables this feature.
17358
+ # * **true**\
17359
+ # * **false** (default)
17360
+ #
17361
+ # >
17029
17362
  #
17030
- # > - Two-factor authentication supports only earlier versions of IDaaS instances. If you do not have and cannot create earlier versions of IDaaS instances, you cannot enable two-factor authentication.
17031
- # > - If two-factor authentication is already enabled for existing SSL servers, you can continue to use two-factor authentication.
17363
+ # * If you use two-factor authentication for the first time, you need to complete [authorization](https://ram.console.aliyun.com/role/authorization?request=%7B%22Services%22%3A%5B%7B%22Service%22%3A%22VPN%22%2C%22Roles%22%3A%5B%7B%22RoleName%22%3A%22AliyunVpnAccessingIdaasRole%22%2C%22TemplateId%22%3A%22IdaasRole%22%7D%5D%7D%5D%2C%22ReturnUrl%22%3A%22https%3A%2F%2Fvpc.console.aliyun.com%2Fsslvpn%2Fcn-shanghai%2Fvpn-servers%22%7D) before you create an SSL server.
17364
+ #
17365
+ # * IDaaS EIAM 1.0 instances are no longer available for purchase. If your Alibaba Cloud account has IDaaS EIAM 1.0 instances, IDaaS EIAM 1.0 instances can be associated after two-factor authentication is enabled. If your Alibaba Cloud account does not have IDaaS EIAM 1.0 instances, only IDaaS EIAM 2.0 instances can be associated after two-factor authentication is enabled.
17032
17366
  self.enable_multi_factor_auth = enable_multi_factor_auth
17367
+ # The ID of the IDaaS application.
17368
+ #
17369
+ # * If an IDaaS EIAM 2.0 instance is associated, you need to specify an IDaaS application ID.
17370
+ # * If an IDaaS EIAM 1.0 instance is associated, you do not need to specify an IDaaS application ID.
17033
17371
  self.idaa_sapplication_id = idaa_sapplication_id
17034
- # The Identity as a Service (IDaaS) instance ID.
17372
+ # The ID of the IDaaS EIAM instance.
17035
17373
  self.idaa_sinstance_id = idaa_sinstance_id
17036
- # The ID of the region where the IDaaS instance is created.
17374
+ # The region ID of the IDaaS EIAM instance.
17037
17375
  self.idaa_sregion_id = idaa_sregion_id
17038
17376
  # The local CIDR block.
17039
17377
  #
@@ -21127,6 +21465,236 @@ class CreateVpnAttachmentRequestTags(TeaModel):
21127
21465
  return self
21128
21466
 
21129
21467
 
21468
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
21469
+ def __init__(
21470
+ self,
21471
+ local_asn: int = None,
21472
+ local_bgp_ip: str = None,
21473
+ tunnel_cidr: str = None,
21474
+ ):
21475
+ self.local_asn = local_asn
21476
+ self.local_bgp_ip = local_bgp_ip
21477
+ self.tunnel_cidr = tunnel_cidr
21478
+
21479
+ def validate(self):
21480
+ pass
21481
+
21482
+ def to_map(self):
21483
+ _map = super().to_map()
21484
+ if _map is not None:
21485
+ return _map
21486
+
21487
+ result = dict()
21488
+ if self.local_asn is not None:
21489
+ result['LocalAsn'] = self.local_asn
21490
+ if self.local_bgp_ip is not None:
21491
+ result['LocalBgpIp'] = self.local_bgp_ip
21492
+ if self.tunnel_cidr is not None:
21493
+ result['TunnelCidr'] = self.tunnel_cidr
21494
+ return result
21495
+
21496
+ def from_map(self, m: dict = None):
21497
+ m = m or dict()
21498
+ if m.get('LocalAsn') is not None:
21499
+ self.local_asn = m.get('LocalAsn')
21500
+ if m.get('LocalBgpIp') is not None:
21501
+ self.local_bgp_ip = m.get('LocalBgpIp')
21502
+ if m.get('TunnelCidr') is not None:
21503
+ self.tunnel_cidr = m.get('TunnelCidr')
21504
+ return self
21505
+
21506
+
21507
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
21508
+ def __init__(
21509
+ self,
21510
+ ike_auth_alg: str = None,
21511
+ ike_enc_alg: str = None,
21512
+ ike_lifetime: int = None,
21513
+ ike_mode: str = None,
21514
+ ike_pfs: str = None,
21515
+ ike_version: str = None,
21516
+ local_id: str = None,
21517
+ psk: str = None,
21518
+ remote_id: str = None,
21519
+ ):
21520
+ self.ike_auth_alg = ike_auth_alg
21521
+ self.ike_enc_alg = ike_enc_alg
21522
+ self.ike_lifetime = ike_lifetime
21523
+ self.ike_mode = ike_mode
21524
+ self.ike_pfs = ike_pfs
21525
+ self.ike_version = ike_version
21526
+ self.local_id = local_id
21527
+ self.psk = psk
21528
+ self.remote_id = remote_id
21529
+
21530
+ def validate(self):
21531
+ pass
21532
+
21533
+ def to_map(self):
21534
+ _map = super().to_map()
21535
+ if _map is not None:
21536
+ return _map
21537
+
21538
+ result = dict()
21539
+ if self.ike_auth_alg is not None:
21540
+ result['IkeAuthAlg'] = self.ike_auth_alg
21541
+ if self.ike_enc_alg is not None:
21542
+ result['IkeEncAlg'] = self.ike_enc_alg
21543
+ if self.ike_lifetime is not None:
21544
+ result['IkeLifetime'] = self.ike_lifetime
21545
+ if self.ike_mode is not None:
21546
+ result['IkeMode'] = self.ike_mode
21547
+ if self.ike_pfs is not None:
21548
+ result['IkePfs'] = self.ike_pfs
21549
+ if self.ike_version is not None:
21550
+ result['IkeVersion'] = self.ike_version
21551
+ if self.local_id is not None:
21552
+ result['LocalId'] = self.local_id
21553
+ if self.psk is not None:
21554
+ result['Psk'] = self.psk
21555
+ if self.remote_id is not None:
21556
+ result['RemoteId'] = self.remote_id
21557
+ return result
21558
+
21559
+ def from_map(self, m: dict = None):
21560
+ m = m or dict()
21561
+ if m.get('IkeAuthAlg') is not None:
21562
+ self.ike_auth_alg = m.get('IkeAuthAlg')
21563
+ if m.get('IkeEncAlg') is not None:
21564
+ self.ike_enc_alg = m.get('IkeEncAlg')
21565
+ if m.get('IkeLifetime') is not None:
21566
+ self.ike_lifetime = m.get('IkeLifetime')
21567
+ if m.get('IkeMode') is not None:
21568
+ self.ike_mode = m.get('IkeMode')
21569
+ if m.get('IkePfs') is not None:
21570
+ self.ike_pfs = m.get('IkePfs')
21571
+ if m.get('IkeVersion') is not None:
21572
+ self.ike_version = m.get('IkeVersion')
21573
+ if m.get('LocalId') is not None:
21574
+ self.local_id = m.get('LocalId')
21575
+ if m.get('Psk') is not None:
21576
+ self.psk = m.get('Psk')
21577
+ if m.get('RemoteId') is not None:
21578
+ self.remote_id = m.get('RemoteId')
21579
+ return self
21580
+
21581
+
21582
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
21583
+ def __init__(
21584
+ self,
21585
+ ipsec_auth_alg: str = None,
21586
+ ipsec_enc_alg: str = None,
21587
+ ipsec_lifetime: int = None,
21588
+ ipsec_pfs: str = None,
21589
+ ):
21590
+ self.ipsec_auth_alg = ipsec_auth_alg
21591
+ self.ipsec_enc_alg = ipsec_enc_alg
21592
+ self.ipsec_lifetime = ipsec_lifetime
21593
+ self.ipsec_pfs = ipsec_pfs
21594
+
21595
+ def validate(self):
21596
+ pass
21597
+
21598
+ def to_map(self):
21599
+ _map = super().to_map()
21600
+ if _map is not None:
21601
+ return _map
21602
+
21603
+ result = dict()
21604
+ if self.ipsec_auth_alg is not None:
21605
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
21606
+ if self.ipsec_enc_alg is not None:
21607
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
21608
+ if self.ipsec_lifetime is not None:
21609
+ result['IpsecLifetime'] = self.ipsec_lifetime
21610
+ if self.ipsec_pfs is not None:
21611
+ result['IpsecPfs'] = self.ipsec_pfs
21612
+ return result
21613
+
21614
+ def from_map(self, m: dict = None):
21615
+ m = m or dict()
21616
+ if m.get('IpsecAuthAlg') is not None:
21617
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
21618
+ if m.get('IpsecEncAlg') is not None:
21619
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
21620
+ if m.get('IpsecLifetime') is not None:
21621
+ self.ipsec_lifetime = m.get('IpsecLifetime')
21622
+ if m.get('IpsecPfs') is not None:
21623
+ self.ipsec_pfs = m.get('IpsecPfs')
21624
+ return self
21625
+
21626
+
21627
+ class CreateVpnAttachmentRequestTunnelOptionsSpecification(TeaModel):
21628
+ def __init__(
21629
+ self,
21630
+ customer_gateway_id: str = None,
21631
+ enable_dpd: bool = None,
21632
+ enable_nat_traversal: bool = None,
21633
+ tunnel_bgp_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig = None,
21634
+ tunnel_ike_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
21635
+ tunnel_index: int = None,
21636
+ tunnel_ipsec_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
21637
+ ):
21638
+ self.customer_gateway_id = customer_gateway_id
21639
+ self.enable_dpd = enable_dpd
21640
+ self.enable_nat_traversal = enable_nat_traversal
21641
+ self.tunnel_bgp_config = tunnel_bgp_config
21642
+ self.tunnel_ike_config = tunnel_ike_config
21643
+ self.tunnel_index = tunnel_index
21644
+ self.tunnel_ipsec_config = tunnel_ipsec_config
21645
+
21646
+ def validate(self):
21647
+ if self.tunnel_bgp_config:
21648
+ self.tunnel_bgp_config.validate()
21649
+ if self.tunnel_ike_config:
21650
+ self.tunnel_ike_config.validate()
21651
+ if self.tunnel_ipsec_config:
21652
+ self.tunnel_ipsec_config.validate()
21653
+
21654
+ def to_map(self):
21655
+ _map = super().to_map()
21656
+ if _map is not None:
21657
+ return _map
21658
+
21659
+ result = dict()
21660
+ if self.customer_gateway_id is not None:
21661
+ result['CustomerGatewayId'] = self.customer_gateway_id
21662
+ if self.enable_dpd is not None:
21663
+ result['EnableDpd'] = self.enable_dpd
21664
+ if self.enable_nat_traversal is not None:
21665
+ result['EnableNatTraversal'] = self.enable_nat_traversal
21666
+ if self.tunnel_bgp_config is not None:
21667
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
21668
+ if self.tunnel_ike_config is not None:
21669
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
21670
+ if self.tunnel_index is not None:
21671
+ result['TunnelIndex'] = self.tunnel_index
21672
+ if self.tunnel_ipsec_config is not None:
21673
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
21674
+ return result
21675
+
21676
+ def from_map(self, m: dict = None):
21677
+ m = m or dict()
21678
+ if m.get('CustomerGatewayId') is not None:
21679
+ self.customer_gateway_id = m.get('CustomerGatewayId')
21680
+ if m.get('EnableDpd') is not None:
21681
+ self.enable_dpd = m.get('EnableDpd')
21682
+ if m.get('EnableNatTraversal') is not None:
21683
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
21684
+ if m.get('TunnelBgpConfig') is not None:
21685
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig()
21686
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
21687
+ if m.get('TunnelIkeConfig') is not None:
21688
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig()
21689
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
21690
+ if m.get('TunnelIndex') is not None:
21691
+ self.tunnel_index = m.get('TunnelIndex')
21692
+ if m.get('TunnelIpsecConfig') is not None:
21693
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig()
21694
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
21695
+ return self
21696
+
21697
+
21130
21698
  class CreateVpnAttachmentRequest(TeaModel):
21131
21699
  def __init__(
21132
21700
  self,
@@ -21137,6 +21705,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21137
21705
  effect_immediately: bool = None,
21138
21706
  enable_dpd: bool = None,
21139
21707
  enable_nat_traversal: bool = None,
21708
+ enable_tunnels_bgp: bool = None,
21140
21709
  health_check_config: str = None,
21141
21710
  ike_config: str = None,
21142
21711
  ipsec_config: str = None,
@@ -21151,6 +21720,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21151
21720
  resource_owner_account: str = None,
21152
21721
  resource_owner_id: int = None,
21153
21722
  tags: List[CreateVpnAttachmentRequestTags] = None,
21723
+ tunnel_options_specification: List[CreateVpnAttachmentRequestTunnelOptionsSpecification] = None,
21154
21724
  ):
21155
21725
  # Specifies whether to automatically configure routes. Valid values:
21156
21726
  #
@@ -21180,9 +21750,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21180
21750
  #
21181
21751
  # > If you do not specify this parameter, the system automatically uses the **request ID** as the **client token**. The **request ID** may be different for each request.
21182
21752
  self.client_token = client_token
21183
- # The ID of the customer gateway.
21184
- #
21185
- # This parameter is required.
21753
+ # The customer gateway ID.
21186
21754
  self.customer_gateway_id = customer_gateway_id
21187
21755
  # Specifies whether to immediately start IPsec negotiations after the configuration takes effect. Valid values:
21188
21756
  #
@@ -21199,6 +21767,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21199
21767
  # * **true** (default) After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the VPN tunnel.
21200
21768
  # * **false**\
21201
21769
  self.enable_nat_traversal = enable_nat_traversal
21770
+ self.enable_tunnels_bgp = enable_tunnels_bgp
21202
21771
  # The health check configuration:
21203
21772
  #
21204
21773
  # * **HealthCheckConfig.enable**: specifies whether to enable health checks. Valid values: **true** and **false**. Default value: false.
@@ -21218,14 +21787,14 @@ class CreateVpnAttachmentRequest(TeaModel):
21218
21787
  self.health_check_config = health_check_config
21219
21788
  # The configurations of Phase 1 negotiations:
21220
21789
  #
21221
- # * **IkeConfig.Psk**: The pre-shared key that is used for authentication between the VPN gateway and the data center.
21790
+ # * **IkeConfig.Psk**: the pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
21222
21791
  #
21223
- # * It must be 1 to 100 characters in length, and can contain letters, digits, and the following characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21224
- # * If you do not specify a pre-shared key, the system generates a random 16-character string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is generated by the system.
21792
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21793
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
21225
21794
  #
21226
- # > The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the data center. Otherwise, a connection cannot be established between the data center and the VPN gateway.
21795
+ # > The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises data center. Otherwise, connections between the on-premises data center and the VPN gateway cannot be established.
21227
21796
  #
21228
- # * **IkeConfig.IkeVersion**: the IKE version. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21797
+ # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21229
21798
  #
21230
21799
  # * **IkeConfig.IkeMode**: the negotiation mode. Valid values: **main** and **aggressive**. Default value: **main**.
21231
21800
  #
@@ -21235,9 +21804,9 @@ class CreateVpnAttachmentRequest(TeaModel):
21235
21804
  #
21236
21805
  # * **IkeConfig.IkePfs**: the Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**. Default value: **group2**.
21237
21806
  #
21238
- # * **IkeConfig.IkeLifetime**: the SA lifetime determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
21807
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
21239
21808
  #
21240
- # * **IkeConfig.LocalId**: the identifier on the Alibaba Cloud side. The identifier cannot exceed 100 characters in length. This parameter is empty by default.
21809
+ # * **IkeConfig.LocalIdIPsec**: the identifier on the Alibaba Cloud side. The identifier cannot exceed 100 characters in length. This parameter is left empty by default.
21241
21810
  #
21242
21811
  # * **IkeConfig.RemoteId**: the identifier on the data center side. The identifier cannot exceed 100 characters in length. The default value is the IP address of the customer gateway.
21243
21812
  self.ike_config = ike_config
@@ -21301,12 +21870,17 @@ class CreateVpnAttachmentRequest(TeaModel):
21301
21870
  #
21302
21871
  # Each tag key corresponds to one tag value. You can specify up to 20 tag values in each call.
21303
21872
  self.tags = tags
21873
+ self.tunnel_options_specification = tunnel_options_specification
21304
21874
 
21305
21875
  def validate(self):
21306
21876
  if self.tags:
21307
21877
  for k in self.tags:
21308
21878
  if k:
21309
21879
  k.validate()
21880
+ if self.tunnel_options_specification:
21881
+ for k in self.tunnel_options_specification:
21882
+ if k:
21883
+ k.validate()
21310
21884
 
21311
21885
  def to_map(self):
21312
21886
  _map = super().to_map()
@@ -21328,6 +21902,8 @@ class CreateVpnAttachmentRequest(TeaModel):
21328
21902
  result['EnableDpd'] = self.enable_dpd
21329
21903
  if self.enable_nat_traversal is not None:
21330
21904
  result['EnableNatTraversal'] = self.enable_nat_traversal
21905
+ if self.enable_tunnels_bgp is not None:
21906
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
21331
21907
  if self.health_check_config is not None:
21332
21908
  result['HealthCheckConfig'] = self.health_check_config
21333
21909
  if self.ike_config is not None:
@@ -21358,6 +21934,10 @@ class CreateVpnAttachmentRequest(TeaModel):
21358
21934
  if self.tags is not None:
21359
21935
  for k in self.tags:
21360
21936
  result['Tags'].append(k.to_map() if k else None)
21937
+ result['TunnelOptionsSpecification'] = []
21938
+ if self.tunnel_options_specification is not None:
21939
+ for k in self.tunnel_options_specification:
21940
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
21361
21941
  return result
21362
21942
 
21363
21943
  def from_map(self, m: dict = None):
@@ -21376,6 +21956,8 @@ class CreateVpnAttachmentRequest(TeaModel):
21376
21956
  self.enable_dpd = m.get('EnableDpd')
21377
21957
  if m.get('EnableNatTraversal') is not None:
21378
21958
  self.enable_nat_traversal = m.get('EnableNatTraversal')
21959
+ if m.get('EnableTunnelsBgp') is not None:
21960
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
21379
21961
  if m.get('HealthCheckConfig') is not None:
21380
21962
  self.health_check_config = m.get('HealthCheckConfig')
21381
21963
  if m.get('IkeConfig') is not None:
@@ -21407,6 +21989,11 @@ class CreateVpnAttachmentRequest(TeaModel):
21407
21989
  for k in m.get('Tags'):
21408
21990
  temp_model = CreateVpnAttachmentRequestTags()
21409
21991
  self.tags.append(temp_model.from_map(k))
21992
+ self.tunnel_options_specification = []
21993
+ if m.get('TunnelOptionsSpecification') is not None:
21994
+ for k in m.get('TunnelOptionsSpecification'):
21995
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecification()
21996
+ self.tunnel_options_specification.append(temp_model.from_map(k))
21410
21997
  return self
21411
21998
 
21412
21999
 
@@ -21576,17 +22163,19 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaMod
21576
22163
  local_bgp_ip: str = None,
21577
22164
  tunnel_cidr: str = None,
21578
22165
  ):
21579
- # The ASN on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
22166
+ # The autonomous system number (ASN) of the tunnel on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
21580
22167
  #
21581
- # > * If you set **EnableTunnelsBgp** to **true**, this parameter is required.
21582
- # >* Before you configure BGP, we recommend that you learn about how BGP works and its limits. For more information, see [VPN Gateway supports BGP dynamic routing](https://help.aliyun.com/document_detail/170235.html).
21583
- # >* We recommend that you use a private ASN to establish a connection with Alibaba Cloud over BGP. For information about the range of private ASNs, see the relevant documentation.
22168
+ #
22169
+ #
22170
+ # > - If you set **EnableTunnelsBgp** to **true**, you must set this parameter.
22171
+ # > - Before you add BGP configurations, we recommend that you learn about how BGP dynamic routing works and the limits. For more information, see [VPN Gateway supports BGP dynamic routing](https://help.aliyun.com/document_detail/170235.html).
22172
+ # > - We recommend that you use a private ASN to establish BGP connections to Alibaba Cloud. For information about the range of private ASNs, see the relevant documentation.
21584
22173
  self.local_asn = local_asn
21585
- # The BGP address on the Alibaba Cloud side. The address is an IP address that falls within the BGP CIDR block range.
22174
+ # The BGP IP address of the tunnel on the Alibaba Cloud side. The address is an IP address that falls within the BGP CIDR block.
21586
22175
  self.local_bgp_ip = local_bgp_ip
21587
- # The BGP CIDR block of the tunnel. The CIDR block must belong to 169.254.0.0/16. The subnet mask of the CIDR block must be 30 bits in length.
22176
+ # The BGP CIDR block of the tunnel. The CIDR block must fall within the 169.254.0.0/16 range. The subnet mask of the CIDR block must be 30 bits in length.
21588
22177
  #
21589
- # > The BGP CIDR block of a tunnel associated with a VPN gateway must be unique.
22178
+ # > The BGP CIDR block of each tunnel must be unique on a VPN gateway.
21590
22179
  self.tunnel_cidr = tunnel_cidr
21591
22180
 
21592
22181
  def validate(self):
@@ -21638,36 +22227,36 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaMod
21638
22227
  #
21639
22228
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**. Default value: **aes**.
21640
22229
  self.ike_enc_alg = ike_enc_alg
21641
- # The SA lifetime that is determined by Phase 1 negotiations. Unit: seconds.
22230
+ # The SA lifetime as a result of Phase 1 negotiations. Unit: seconds.
21642
22231
  #
21643
22232
  # Valid values: **0** to **86400**. Default value: **86400**.
21644
22233
  self.ike_lifetime = ike_lifetime
21645
22234
  # The negotiation mode of IKE. Valid values: **main** and **aggressive**. Default value: **main**.
21646
22235
  #
21647
- # * **main**: This mode offers higher security during negotiations.
21648
- # * **aggressive**: This mode is faster and has a higher success rate.
22236
+ # * **main:** This mode offers higher security during negotiations.
22237
+ # * **aggressive**: This mode supports faster negotiations and a higher success rate.
21649
22238
  self.ike_mode = ike_mode
21650
- # The DH key exchange algorithm that is used in Phase 1 negotiations. Default value: **group2**.\\
22239
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Default value: **group2**.\\
21651
22240
  # Valid values: **group1**, **group2**, **group5**, and **group14**.
21652
22241
  self.ike_pfs = ike_pfs
21653
22242
  # The version of the IKE protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21654
22243
  #
21655
- # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
22244
+ # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and provides better support for scenarios with multiple CIDR blocks.
21656
22245
  self.ike_version = ike_version
21657
- # The identifier on the Alibaba Cloud side, which is used in Phase 1 negotiations. The value can be up to 100 characters in length. The default identifier is the IP address of the tunnel.
22246
+ # The identifier of the tunnel on the Alibaba Cloud side, which is used in Phase 1 negotiations. It can contain at most 100 characters. The default value is the IP address of the tunnel.
21658
22247
  #
21659
- # You can set **LocalId** to a fully qualified domain name (FQDN). In this case, we recommend that you set IkeMode to **aggressive**.
22248
+ # **LocalId** supports fully qualified domain names (FQDNs). If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
21660
22249
  self.local_id = local_id
21661
- # The pre-shared key, which is used for identity authentication between the tunnel and the tunnel peer.
22250
+ # The pre-shared key that is used for identity authentication between the tunnel and the tunnel peer.
21662
22251
  #
21663
- # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21664
- # * If you do not specify a pre-shared key, the system generates a random 16-character string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is generated by the system.
22252
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22253
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
21665
22254
  #
21666
22255
  # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be established.
21667
22256
  self.psk = psk
21668
- # The identifier of the tunnel peer, which is used in Phase 1 negotiations. The value can be up to 100 characters in length. The default identifier is the IP address of the customer gateway associated with the tunnel.
22257
+ # The identifier of the tunnel peer, which is used in Phase 1 negotiations. It can contain at most 100 characters. The default value is the IP address of the customer gateway that is associated with the tunnel.
21669
22258
  #
21670
- # You can set **RemoteId** to an FQDN. In this case, we recommend that you set IkeMode to **aggressive**.
22259
+ # **RemoteId** supports FQDNs. If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
21671
22260
  self.remote_id = remote_id
21672
22261
 
21673
22262
  def validate(self):
@@ -21738,11 +22327,11 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaM
21738
22327
  #
21739
22328
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**. Default value: **aes**.
21740
22329
  self.ipsec_enc_alg = ipsec_enc_alg
21741
- # The SA lifetime that is determined by Phase 2 negotiations. Unit: seconds.
22330
+ # The SA lifetime as a result of Phase 2 negotiations. Unit: seconds.
21742
22331
  #
21743
22332
  # Valid values: **0** to **86400**. Default value: **86400**.
21744
22333
  self.ipsec_lifetime = ipsec_lifetime
21745
- # The DH key exchange algorithm that is used in Phase 2 negotiations. Default value: **group2**.
22334
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 2 negotiations. Default value: **group2**.
21746
22335
  #
21747
22336
  # Valid values: **disabled**, **group1**, **group2**, **group5**, and **group14**.
21748
22337
  self.ipsec_pfs = ipsec_pfs
@@ -21791,33 +22380,33 @@ class CreateVpnConnectionRequestTunnelOptionsSpecification(TeaModel):
21791
22380
  tunnel_ike_config: CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
21792
22381
  tunnel_ipsec_config: CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
21793
22382
  ):
21794
- # The ID of the customer gateway associated with the tunnel.
22383
+ # The ID of the customer gateway that is associated with the tunnel.
21795
22384
  #
21796
- # > * This parameter is required if the VPN gateway supports the dual-tunnel mode.
21797
- # >* You can specify the parameters in the **TunnelOptionsSpecification** array if you create an IPsec-VPN connection in dual-tunnel mode.
21798
- # >* If you create an IPsec-VPN connection in dual-tunnel mode, you need to configure an active tunnel and a standby tunnel. Each IPsec-VPN connection supports only one active tunnel and one standby tunnel.
22385
+ # > - This parameter is required when you create an IPsec-VPN connection in dual-tunnel mode.
22386
+ # > - You can specify parameters in the **TunnelOptionsSpecification** array when you create an IPsec-VPN connection in dual tunnel mode.
22387
+ # > - When you create an IPsec-VPN connection in dual tunnel mode, you must add configurations of the active and standby tunnels for the IPsec-VPN connection. Each IPsec-VPN connection supports only one active tunnel and one standby tunnel.
21799
22388
  self.customer_gateway_id = customer_gateway_id
21800
- # Specifies whether to enable DPD for the tunnel. Valid values:
22389
+ # Specifies whether to enable the Dead Peer Detection (DPD) feature for the tunnel. Valid values:
21801
22390
  #
21802
- # * **true** (default) The initiator of the IPsec-VPN connection sends DPD packets to verify the existence and availability of the peer. If no feedback is received from the peer within a specified period of time, the connection fails. ISAKMP SAs and IPsec SAs are deleted. The IPsec tunnel is also deleted.
21803
- # * **false**\
22391
+ # * **true** (default): enables DPD. The initiator of the IPsec-VPN connection sends DPD packets to check the existence and availability of the peer. If no feedback is received from the peer within the specified period of time, the connection fails. In this case, ISAKMP SA and IPsec SA are deleted. The security tunnel is also deleted.
22392
+ # * **false**: disables DPD. The initiator of the IPsec-VPN connection does not send DPD packets.
21804
22393
  self.enable_dpd = enable_dpd
21805
22394
  # Specifies whether to enable NAT traversal for the tunnel. Valid values:
21806
22395
  #
21807
- # * **true** (default) After NAT traversal is enabled, the verification process for the peer UDP port is deleted from IKE negotiations. In addition, the NAT gateway in the tunnel can be found.
21808
- # * **false**\
22396
+ # * **true** (default): enables NAT traversal. After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the IPsec-VPN tunnel.
22397
+ # * **false**: disables NAT traversal.
21809
22398
  self.enable_nat_traversal = enable_nat_traversal
21810
- # The CA certificate. If the VPN gateway is of the SM type, you must configure a CA certificate for the peer gateway device.
22399
+ # If the VPN gateway uses an SM certificate, you need to configure the CA certificate used by the IPsec peer.
21811
22400
  #
21812
- # * If an SM VPN gateway is used to create the IPsec-VPN connection, this parameter is required.
21813
- # * If a standard VPN gateway is used to create the IPsec-VPN connection, leave this parameter empty.
22401
+ # * If the VPN gateway uses an SM certificate, this parameter is required.
22402
+ # * If the VPN gateway does not use an SM certificate, leave this parameter empty.
21814
22403
  self.remote_ca_certificate = remote_ca_certificate
21815
- # The role of the tunnel. Valid values:
22404
+ # The role of the tunnel. Valid values: Valid values:
21816
22405
  #
21817
- # * **master**: The tunnel is the active tunnel.
21818
- # * **slave**: The tunnel is the standby tunnel.
22406
+ # * **master**: The tunnel is an active tunnel.
22407
+ # * **slave**: The tunnel is a standby tunnel.
21819
22408
  self.role = role
21820
- # The BGP configurations for the tunnel.
22409
+ # The Border Gateway Protocol (BGP) configurations of the tunnel.
21821
22410
  self.tunnel_bgp_config = tunnel_bgp_config
21822
22411
  # The configurations of Phase 1 negotiations.
21823
22412
  self.tunnel_ike_config = tunnel_ike_config
@@ -21976,26 +22565,28 @@ class CreateVpnConnectionRequest(TeaModel):
21976
22565
  # * **HealthCheckConfig.interval**: the time interval of health check retries. Unit: seconds. Default value: **3**.
21977
22566
  # * **HealthCheckConfig.retry**: the maximum number of health check retries. Default value: **3**.
21978
22567
  self.health_check_config = health_check_config
21979
- # This parameter is available if you create an IPsec-VPN connection in single-tunnel mode.
22568
+ # This parameter is supported if you create an IPsec-VPN connection in single-tunnel mode.
21980
22569
  #
21981
22570
  # The configurations of Phase 1 negotiations:
21982
22571
  #
21983
- # * **IkeConfig.Psk**: The pre-shared key that is used for authentication between the VPN gateway and the on-premises database.
22572
+ # * **IkeConfig.Psk**: the pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
21984
22573
  #
21985
- # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22574
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21986
22575
  #
21987
- # * If you do not specify a pre-shared key, the system generates a random 16-character string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is generated by the system.
22576
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
21988
22577
  #
21989
- # >The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises database. Otherwise, the on-premises database and the VPN gateway cannot establish a connection.
22578
+ # **\
22579
+ #
22580
+ # **Note** The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises data center. Otherwise, connections between the on-premises data center and the VPN gateway cannot be established.
21990
22581
  #
21991
22582
  # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21992
22583
  #
21993
- # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
22584
+ # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and provides better support for scenarios with multiple CIDR blocks.
21994
22585
  #
21995
22586
  # * **IkeConfig.IkeMode**: the negotiation mode of IKE. Valid values: **main** and **aggressive**. Default value: **main**.
21996
22587
  #
21997
22588
  # * **main:** This mode offers higher security during negotiations.
21998
- # * **aggressive:** This mode is faster and has a higher success rate.
22589
+ # * **aggressive**: This mode supports faster negotiations and a higher success rate.
21999
22590
  #
22000
22591
  # * **IkeConfig.IkeEncAlg**: the encryption algorithm that is used in Phase 1 negotiations.
22001
22592
  #
@@ -22005,13 +22596,13 @@ class CreateVpnConnectionRequest(TeaModel):
22005
22596
  #
22006
22597
  # Valid values: **md5**, **sha1**, **sha256**, **sha384**, and **sha512**. Default value: **md5**.
22007
22598
  #
22008
- # * **IkeConfig.IkePfs**: the Diffie-Hellman (DH) key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**. Default value: **group2**.
22599
+ # * **IkeConfig.IkePfs**: the Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**. Default value: **group2**.
22009
22600
  #
22010
- # * **IkeConfig.IkeLifetime**: the SA lifetime determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
22601
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
22011
22602
  #
22012
- # * **IkeConfig.LocalId**: the identifier of the VPN gateway. The value can be up to 100 characters in length. The default value is the IP address of the VPN gateway.
22603
+ # * **IkeConfig.LocalId**: the identifier of the VPN gateway. It can contain at most 100 characters. The default value is the IP address of the VPN gateway.
22013
22604
  #
22014
- # * **IkeConfig.RemoteId**: the identifier of the customer gateway. The value can be up to 100 characters in length. The default value is the IP address of the customer gateway.
22605
+ # * **IkeConfig.RemoteId**: the identifier of the customer gateway. It can contain at most 100 characters. The default value is the IP address of the customer gateway.
22015
22606
  self.ike_config = ike_config
22016
22607
  # This parameter is available if you create an IPsec-VPN connection in single-tunnel mode.
22017
22608
  #
@@ -22078,8 +22669,8 @@ class CreateVpnConnectionRequest(TeaModel):
22078
22669
  self.tags = tags
22079
22670
  # The tunnel configurations.
22080
22671
  #
22081
- # * You can specify the parameters in the **TunnelOptionsSpecification** array if you create an IPsec-VPN connection in dual-tunnel mode.
22082
- # * If you create an IPsec-VPN connection in dual-tunnel mode, you need to configure an active tunnel and a standby tunnel. Each IPsec-VPN connection supports only one active tunnel and one standby tunnel.
22672
+ # * You can specify parameters in the **TunnelOptionsSpecification** array when you create an IPsec-VPN connection in dual tunnel mode.
22673
+ # * When you create an IPsec-VPN connection in dual tunnel mode, you must add configurations of the active and standby tunnels for the IPsec-VPN connection. Each IPsec-VPN connection supports only one active tunnel and one standby tunnel.
22083
22674
  self.tunnel_options_specification = tunnel_options_specification
22084
22675
  # The ID of the VPN gateway.
22085
22676
  #
@@ -39057,6 +39648,7 @@ class DescribeFlowLogsResponseBodyFlowLogsFlowLog(TeaModel):
39057
39648
  flow_log_deliver_status: str = None,
39058
39649
  flow_log_id: str = None,
39059
39650
  flow_log_name: str = None,
39651
+ ip_version: str = None,
39060
39652
  log_store_name: str = None,
39061
39653
  project_name: str = None,
39062
39654
  region_id: str = None,
@@ -39094,6 +39686,7 @@ class DescribeFlowLogsResponseBodyFlowLogsFlowLog(TeaModel):
39094
39686
  self.flow_log_id = flow_log_id
39095
39687
  # The name of the flow log.
39096
39688
  self.flow_log_name = flow_log_name
39689
+ self.ip_version = ip_version
39097
39690
  # The Logstore that stores the captured traffic data.
39098
39691
  self.log_store_name = log_store_name
39099
39692
  # The project that manages the captured traffic data.
@@ -39167,6 +39760,8 @@ class DescribeFlowLogsResponseBodyFlowLogsFlowLog(TeaModel):
39167
39760
  result['FlowLogId'] = self.flow_log_id
39168
39761
  if self.flow_log_name is not None:
39169
39762
  result['FlowLogName'] = self.flow_log_name
39763
+ if self.ip_version is not None:
39764
+ result['IpVersion'] = self.ip_version
39170
39765
  if self.log_store_name is not None:
39171
39766
  result['LogStoreName'] = self.log_store_name
39172
39767
  if self.project_name is not None:
@@ -39209,6 +39804,8 @@ class DescribeFlowLogsResponseBodyFlowLogsFlowLog(TeaModel):
39209
39804
  self.flow_log_id = m.get('FlowLogId')
39210
39805
  if m.get('FlowLogName') is not None:
39211
39806
  self.flow_log_name = m.get('FlowLogName')
39807
+ if m.get('IpVersion') is not None:
39808
+ self.ip_version = m.get('IpVersion')
39212
39809
  if m.get('LogStoreName') is not None:
39213
39810
  self.log_store_name = m.get('LogStoreName')
39214
39811
  if m.get('ProjectName') is not None:
@@ -44847,12 +45444,14 @@ class DescribeNatGatewayAssociateNetworkInterfacesResponseBodyAssociateNetworkIn
44847
45444
  resource_id: str = None,
44848
45445
  resource_owner_id: str = None,
44849
45446
  resource_type: str = None,
45447
+ tunnel_index: str = None,
44850
45448
  ):
44851
45449
  self.ipv_4sets = ipv_4sets
44852
45450
  self.network_interface_id = network_interface_id
44853
45451
  self.resource_id = resource_id
44854
45452
  self.resource_owner_id = resource_owner_id
44855
45453
  self.resource_type = resource_type
45454
+ self.tunnel_index = tunnel_index
44856
45455
 
44857
45456
  def validate(self):
44858
45457
  if self.ipv_4sets:
@@ -44874,6 +45473,8 @@ class DescribeNatGatewayAssociateNetworkInterfacesResponseBodyAssociateNetworkIn
44874
45473
  result['ResourceOwnerId'] = self.resource_owner_id
44875
45474
  if self.resource_type is not None:
44876
45475
  result['ResourceType'] = self.resource_type
45476
+ if self.tunnel_index is not None:
45477
+ result['TunnelIndex'] = self.tunnel_index
44877
45478
  return result
44878
45479
 
44879
45480
  def from_map(self, m: dict = None):
@@ -44889,6 +45490,8 @@ class DescribeNatGatewayAssociateNetworkInterfacesResponseBodyAssociateNetworkIn
44889
45490
  self.resource_owner_id = m.get('ResourceOwnerId')
44890
45491
  if m.get('ResourceType') is not None:
44891
45492
  self.resource_type = m.get('ResourceType')
45493
+ if m.get('TunnelIndex') is not None:
45494
+ self.tunnel_index = m.get('TunnelIndex')
44892
45495
  return self
44893
45496
 
44894
45497
 
@@ -45244,6 +45847,39 @@ class DescribeNatGatewaysRequest(TeaModel):
45244
45847
  return self
45245
45848
 
45246
45849
 
45850
+ class DescribeNatGatewaysResponseBodyNatGatewaysNatGatewayAccessMode(TeaModel):
45851
+ def __init__(
45852
+ self,
45853
+ mode_value: str = None,
45854
+ tunnel_type: str = None,
45855
+ ):
45856
+ self.mode_value = mode_value
45857
+ self.tunnel_type = tunnel_type
45858
+
45859
+ def validate(self):
45860
+ pass
45861
+
45862
+ def to_map(self):
45863
+ _map = super().to_map()
45864
+ if _map is not None:
45865
+ return _map
45866
+
45867
+ result = dict()
45868
+ if self.mode_value is not None:
45869
+ result['ModeValue'] = self.mode_value
45870
+ if self.tunnel_type is not None:
45871
+ result['TunnelType'] = self.tunnel_type
45872
+ return result
45873
+
45874
+ def from_map(self, m: dict = None):
45875
+ m = m or dict()
45876
+ if m.get('ModeValue') is not None:
45877
+ self.mode_value = m.get('ModeValue')
45878
+ if m.get('TunnelType') is not None:
45879
+ self.tunnel_type = m.get('TunnelType')
45880
+ return self
45881
+
45882
+
45247
45883
  class DescribeNatGatewaysResponseBodyNatGatewaysNatGatewayForwardTableIds(TeaModel):
45248
45884
  def __init__(
45249
45885
  self,
@@ -45577,6 +46213,7 @@ class DescribeNatGatewaysResponseBodyNatGatewaysNatGatewayTags(TeaModel):
45577
46213
  class DescribeNatGatewaysResponseBodyNatGatewaysNatGateway(TeaModel):
45578
46214
  def __init__(
45579
46215
  self,
46216
+ access_mode: DescribeNatGatewaysResponseBodyNatGatewaysNatGatewayAccessMode = None,
45580
46217
  auto_pay: bool = None,
45581
46218
  business_status: str = None,
45582
46219
  creation_time: str = None,
@@ -45608,6 +46245,7 @@ class DescribeNatGatewaysResponseBodyNatGatewaysNatGateway(TeaModel):
45608
46245
  tags: DescribeNatGatewaysResponseBodyNatGatewaysNatGatewayTags = None,
45609
46246
  vpc_id: str = None,
45610
46247
  ):
46248
+ self.access_mode = access_mode
45611
46249
  # Indicates whether automatic payment is enabled. Valid values:
45612
46250
  #
45613
46251
  # * **false**: no
@@ -45714,6 +46352,8 @@ class DescribeNatGatewaysResponseBodyNatGatewaysNatGateway(TeaModel):
45714
46352
  self.vpc_id = vpc_id
45715
46353
 
45716
46354
  def validate(self):
46355
+ if self.access_mode:
46356
+ self.access_mode.validate()
45717
46357
  if self.forward_table_ids:
45718
46358
  self.forward_table_ids.validate()
45719
46359
  if self.full_nat_table_ids:
@@ -45733,6 +46373,8 @@ class DescribeNatGatewaysResponseBodyNatGatewaysNatGateway(TeaModel):
45733
46373
  return _map
45734
46374
 
45735
46375
  result = dict()
46376
+ if self.access_mode is not None:
46377
+ result['AccessMode'] = self.access_mode.to_map()
45736
46378
  if self.auto_pay is not None:
45737
46379
  result['AutoPay'] = self.auto_pay
45738
46380
  if self.business_status is not None:
@@ -45797,6 +46439,9 @@ class DescribeNatGatewaysResponseBodyNatGatewaysNatGateway(TeaModel):
45797
46439
 
45798
46440
  def from_map(self, m: dict = None):
45799
46441
  m = m or dict()
46442
+ if m.get('AccessMode') is not None:
46443
+ temp_model = DescribeNatGatewaysResponseBodyNatGatewaysNatGatewayAccessMode()
46444
+ self.access_mode = temp_model.from_map(m['AccessMode'])
45800
46445
  if m.get('AutoPay') is not None:
45801
46446
  self.auto_pay = m.get('AutoPay')
45802
46447
  if m.get('BusinessStatus') is not None:
@@ -56616,6 +57261,7 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
56616
57261
  community: str = None,
56617
57262
  create_time: int = None,
56618
57263
  next_hop: str = None,
57264
+ next_hop_tunnel_id_list: List[str] = None,
56619
57265
  route_dest: str = None,
56620
57266
  route_entry_type: str = None,
56621
57267
  source: str = None,
@@ -56633,6 +57279,7 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
56633
57279
  self.create_time = create_time
56634
57280
  # The next hop of the route.
56635
57281
  self.next_hop = next_hop
57282
+ self.next_hop_tunnel_id_list = next_hop_tunnel_id_list
56636
57283
  # The destination CIDR block of the route.
56637
57284
  self.route_dest = route_dest
56638
57285
  # The route type. Valid values:
@@ -56675,6 +57322,8 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
56675
57322
  result['CreateTime'] = self.create_time
56676
57323
  if self.next_hop is not None:
56677
57324
  result['NextHop'] = self.next_hop
57325
+ if self.next_hop_tunnel_id_list is not None:
57326
+ result['NextHopTunnelIdList'] = self.next_hop_tunnel_id_list
56678
57327
  if self.route_dest is not None:
56679
57328
  result['RouteDest'] = self.route_dest
56680
57329
  if self.route_entry_type is not None:
@@ -56699,6 +57348,8 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
56699
57348
  self.create_time = m.get('CreateTime')
56700
57349
  if m.get('NextHop') is not None:
56701
57350
  self.next_hop = m.get('NextHop')
57351
+ if m.get('NextHopTunnelIdList') is not None:
57352
+ self.next_hop_tunnel_id_list = m.get('NextHopTunnelIdList')
56702
57353
  if m.get('RouteDest') is not None:
56703
57354
  self.route_dest = m.get('RouteDest')
56704
57355
  if m.get('RouteEntryType') is not None:
@@ -56714,6 +57365,45 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
56714
57365
  return self
56715
57366
 
56716
57367
 
57368
+ class DescribeVcoRouteEntriesResponseBodyVpnRouteCounts(TeaModel):
57369
+ def __init__(
57370
+ self,
57371
+ route_count: int = None,
57372
+ route_entry_type: str = None,
57373
+ source: str = None,
57374
+ ):
57375
+ self.route_count = route_count
57376
+ self.route_entry_type = route_entry_type
57377
+ self.source = source
57378
+
57379
+ def validate(self):
57380
+ pass
57381
+
57382
+ def to_map(self):
57383
+ _map = super().to_map()
57384
+ if _map is not None:
57385
+ return _map
57386
+
57387
+ result = dict()
57388
+ if self.route_count is not None:
57389
+ result['RouteCount'] = self.route_count
57390
+ if self.route_entry_type is not None:
57391
+ result['RouteEntryType'] = self.route_entry_type
57392
+ if self.source is not None:
57393
+ result['Source'] = self.source
57394
+ return result
57395
+
57396
+ def from_map(self, m: dict = None):
57397
+ m = m or dict()
57398
+ if m.get('RouteCount') is not None:
57399
+ self.route_count = m.get('RouteCount')
57400
+ if m.get('RouteEntryType') is not None:
57401
+ self.route_entry_type = m.get('RouteEntryType')
57402
+ if m.get('Source') is not None:
57403
+ self.source = m.get('Source')
57404
+ return self
57405
+
57406
+
56717
57407
  class DescribeVcoRouteEntriesResponseBody(TeaModel):
56718
57408
  def __init__(
56719
57409
  self,
@@ -56722,6 +57412,7 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
56722
57412
  request_id: str = None,
56723
57413
  total_count: int = None,
56724
57414
  vco_route_entries: List[DescribeVcoRouteEntriesResponseBodyVcoRouteEntries] = None,
57415
+ vpn_route_counts: List[DescribeVcoRouteEntriesResponseBodyVpnRouteCounts] = None,
56725
57416
  ):
56726
57417
  # The number of the returned page.
56727
57418
  self.page_number = page_number
@@ -56733,12 +57424,17 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
56733
57424
  self.total_count = total_count
56734
57425
  # The list of routes.
56735
57426
  self.vco_route_entries = vco_route_entries
57427
+ self.vpn_route_counts = vpn_route_counts
56736
57428
 
56737
57429
  def validate(self):
56738
57430
  if self.vco_route_entries:
56739
57431
  for k in self.vco_route_entries:
56740
57432
  if k:
56741
57433
  k.validate()
57434
+ if self.vpn_route_counts:
57435
+ for k in self.vpn_route_counts:
57436
+ if k:
57437
+ k.validate()
56742
57438
 
56743
57439
  def to_map(self):
56744
57440
  _map = super().to_map()
@@ -56758,6 +57454,10 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
56758
57454
  if self.vco_route_entries is not None:
56759
57455
  for k in self.vco_route_entries:
56760
57456
  result['VcoRouteEntries'].append(k.to_map() if k else None)
57457
+ result['VpnRouteCounts'] = []
57458
+ if self.vpn_route_counts is not None:
57459
+ for k in self.vpn_route_counts:
57460
+ result['VpnRouteCounts'].append(k.to_map() if k else None)
56761
57461
  return result
56762
57462
 
56763
57463
  def from_map(self, m: dict = None):
@@ -56775,6 +57475,11 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
56775
57475
  for k in m.get('VcoRouteEntries'):
56776
57476
  temp_model = DescribeVcoRouteEntriesResponseBodyVcoRouteEntries()
56777
57477
  self.vco_route_entries.append(temp_model.from_map(k))
57478
+ self.vpn_route_counts = []
57479
+ if m.get('VpnRouteCounts') is not None:
57480
+ for k in m.get('VpnRouteCounts'):
57481
+ temp_model = DescribeVcoRouteEntriesResponseBodyVpnRouteCounts()
57482
+ self.vpn_route_counts.append(temp_model.from_map(k))
56778
57483
  return self
56779
57484
 
56780
57485
 
@@ -60098,6 +60803,39 @@ class DescribeVpnAttachmentsRequest(TeaModel):
60098
60803
  return self
60099
60804
 
60100
60805
 
60806
+ class DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags(TeaModel):
60807
+ def __init__(
60808
+ self,
60809
+ key: str = None,
60810
+ value: str = None,
60811
+ ):
60812
+ self.key = key
60813
+ self.value = value
60814
+
60815
+ def validate(self):
60816
+ pass
60817
+
60818
+ def to_map(self):
60819
+ _map = super().to_map()
60820
+ if _map is not None:
60821
+ return _map
60822
+
60823
+ result = dict()
60824
+ if self.key is not None:
60825
+ result['Key'] = self.key
60826
+ if self.value is not None:
60827
+ result['Value'] = self.value
60828
+ return result
60829
+
60830
+ def from_map(self, m: dict = None):
60831
+ m = m or dict()
60832
+ if m.get('Key') is not None:
60833
+ self.key = m.get('Key')
60834
+ if m.get('Value') is not None:
60835
+ self.value = m.get('Value')
60836
+ return self
60837
+
60838
+
60101
60839
  class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60102
60840
  def __init__(
60103
60841
  self,
@@ -60106,6 +60844,8 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60106
60844
  description: str = None,
60107
60845
  instance_id: str = None,
60108
60846
  name: str = None,
60847
+ tag: str = None,
60848
+ tags: List[DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags] = None,
60109
60849
  transit_router_id: str = None,
60110
60850
  transit_router_name: str = None,
60111
60851
  ):
@@ -60122,13 +60862,18 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60122
60862
  self.instance_id = instance_id
60123
60863
  # The name of the IPsec-VPN connection.
60124
60864
  self.name = name
60865
+ self.tag = tag
60866
+ self.tags = tags
60125
60867
  # The ID of the transit router with which the IPsec-VPN connection is associated.
60126
60868
  self.transit_router_id = transit_router_id
60127
60869
  # The name of the transit router.
60128
60870
  self.transit_router_name = transit_router_name
60129
60871
 
60130
60872
  def validate(self):
60131
- pass
60873
+ if self.tags:
60874
+ for k in self.tags:
60875
+ if k:
60876
+ k.validate()
60132
60877
 
60133
60878
  def to_map(self):
60134
60879
  _map = super().to_map()
@@ -60146,6 +60891,12 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60146
60891
  result['InstanceId'] = self.instance_id
60147
60892
  if self.name is not None:
60148
60893
  result['Name'] = self.name
60894
+ if self.tag is not None:
60895
+ result['Tag'] = self.tag
60896
+ result['Tags'] = []
60897
+ if self.tags is not None:
60898
+ for k in self.tags:
60899
+ result['Tags'].append(k.to_map() if k else None)
60149
60900
  if self.transit_router_id is not None:
60150
60901
  result['TransitRouterId'] = self.transit_router_id
60151
60902
  if self.transit_router_name is not None:
@@ -60164,6 +60915,13 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60164
60915
  self.instance_id = m.get('InstanceId')
60165
60916
  if m.get('Name') is not None:
60166
60917
  self.name = m.get('Name')
60918
+ if m.get('Tag') is not None:
60919
+ self.tag = m.get('Tag')
60920
+ self.tags = []
60921
+ if m.get('Tags') is not None:
60922
+ for k in m.get('Tags'):
60923
+ temp_model = DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags()
60924
+ self.tags.append(temp_model.from_map(k))
60167
60925
  if m.get('TransitRouterId') is not None:
60168
60926
  self.transit_router_id = m.get('TransitRouterId')
60169
60927
  if m.get('TransitRouterName') is not None:
@@ -60768,6 +61526,7 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
60768
61526
  tunnel_bgp_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelBgpConfig = None,
60769
61527
  tunnel_id: str = None,
60770
61528
  tunnel_ike_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig = None,
61529
+ tunnel_index: int = None,
60771
61530
  tunnel_ipsec_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig = None,
60772
61531
  zone_no: str = None,
60773
61532
  ):
@@ -60813,6 +61572,7 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
60813
61572
  self.tunnel_id = tunnel_id
60814
61573
  # The configuration of Phase 1 negotiations.
60815
61574
  self.tunnel_ike_config = tunnel_ike_config
61575
+ self.tunnel_index = tunnel_index
60816
61576
  # The configurations of Phase 2 negotiations.
60817
61577
  self.tunnel_ipsec_config = tunnel_ipsec_config
60818
61578
  # The zone where the tunnel is deployed.
@@ -60856,6 +61616,8 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
60856
61616
  result['TunnelId'] = self.tunnel_id
60857
61617
  if self.tunnel_ike_config is not None:
60858
61618
  result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
61619
+ if self.tunnel_index is not None:
61620
+ result['TunnelIndex'] = self.tunnel_index
60859
61621
  if self.tunnel_ipsec_config is not None:
60860
61622
  result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
60861
61623
  if self.zone_no is not None:
@@ -60888,6 +61650,8 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
60888
61650
  if m.get('TunnelIkeConfig') is not None:
60889
61651
  temp_model = DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig()
60890
61652
  self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
61653
+ if m.get('TunnelIndex') is not None:
61654
+ self.tunnel_index = m.get('TunnelIndex')
60891
61655
  if m.get('TunnelIpsecConfig') is not None:
60892
61656
  temp_model = DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig()
60893
61657
  self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
@@ -62283,6 +63047,7 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62283
63047
  tunnel_bgp_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelBgpConfig = None,
62284
63048
  tunnel_id: str = None,
62285
63049
  tunnel_ike_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig = None,
63050
+ tunnel_index: int = None,
62286
63051
  tunnel_ipsec_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig = None,
62287
63052
  zone_no: str = None,
62288
63053
  ):
@@ -62328,6 +63093,7 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62328
63093
  self.tunnel_id = tunnel_id
62329
63094
  # The configuration of Phase 1 negotiations.
62330
63095
  self.tunnel_ike_config = tunnel_ike_config
63096
+ self.tunnel_index = tunnel_index
62331
63097
  # The configurations of Phase 2 negotiations.
62332
63098
  self.tunnel_ipsec_config = tunnel_ipsec_config
62333
63099
  # The zone of the tunnel.
@@ -62369,6 +63135,8 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62369
63135
  result['TunnelId'] = self.tunnel_id
62370
63136
  if self.tunnel_ike_config is not None:
62371
63137
  result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
63138
+ if self.tunnel_index is not None:
63139
+ result['TunnelIndex'] = self.tunnel_index
62372
63140
  if self.tunnel_ipsec_config is not None:
62373
63141
  result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
62374
63142
  if self.zone_no is not None:
@@ -62401,6 +63169,8 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62401
63169
  if m.get('TunnelIkeConfig') is not None:
62402
63170
  temp_model = DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig()
62403
63171
  self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
63172
+ if m.get('TunnelIndex') is not None:
63173
+ self.tunnel_index = m.get('TunnelIndex')
62404
63174
  if m.get('TunnelIpsecConfig') is not None:
62405
63175
  temp_model = DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig()
62406
63176
  self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
@@ -63660,33 +64430,38 @@ class DescribeVpnGatewayResponseBody(TeaModel):
63660
64430
  # * **updating**\
63661
64431
  # * **deleting**\
63662
64432
  self.status = status
63663
- # The automatically generated tag of the VPN gateway.
64433
+ # The tag that is automatically generated for the VPN gateway. The tag consists of the following parameters:
63664
64434
  #
63665
64435
  # * **VpnEnableBgp**: indicates whether the VPN gateway supports BGP. Valid values:
63666
64436
  #
63667
64437
  # * **true**\
63668
64438
  # * **false**\
63669
64439
  #
63670
- # * **VisuallySsl**: indicates whether the VPN gateway allows you to view information about connected SSL clients.
64440
+ # * **VisuallySsl**: indicates whether the VPN gateway allows you to view the connection information of SSL clients. Valid values:
63671
64441
  #
63672
64442
  # * **true**\
63673
64443
  # * **false**\
63674
64444
  #
63675
- # * **PbrPriority**: indicates whether the VPN gateway allows you to configure priorities for policy-based routes.
64445
+ # * **PbrPriority**: indicates whether the VPN gateway allows you to configure priorities for policy-based routes. Valid values:
63676
64446
  #
63677
64447
  # * **true**\
63678
64448
  # * **false**\
63679
64449
  #
63680
- # * **VpnNewImage**: indicates whether the VPN gateway is upgraded.
64450
+ # * **VpnNewImage**: indicates whether the VPN gateway is upgraded. Valid values:
63681
64451
  #
63682
64452
  # * **true**\
63683
64453
  # * **false**\
63684
64454
  #
63685
- # * **description**\
64455
+ # * **description**: the description of the VPN gateway. This parameter is only for internal use.
64456
+ #
64457
+ # * **VpnVersion**: the version of the VPN gateway.
64458
+ #
64459
+ # * **IDaaSNewVersion**: indicates whether the VPN gateway can be associated with an EIAM 2.0 instance.
63686
64460
  #
63687
- # * **VpnVersion**\
64461
+ # * **true**\
64462
+ # * **false**\
63688
64463
  self.tag = tag
63689
- # The tag value.
64464
+ # The tags that are added to the VPN gateway.
63690
64465
  self.tags = tags
63691
64466
  # The ID of the vSwitch to which the VPN gateway belongs.
63692
64467
  self.v_switch_id = v_switch_id
@@ -63694,9 +64469,7 @@ class DescribeVpnGatewayResponseBody(TeaModel):
63694
64469
  self.vpc_id = vpc_id
63695
64470
  # The ID of the VPN gateway.
63696
64471
  self.vpn_gateway_id = vpn_gateway_id
63697
- # The type of the VPN gateway.
63698
- #
63699
- # Only **Normal** may be returned, which indicates a standard VPN gateway.
64472
+ # The type of VPN gateway. Only **Normal** may be returned, which indicates a standard VPN gateway.
63700
64473
  self.vpn_type = vpn_type
63701
64474
 
63702
64475
  def validate(self):
@@ -64068,17 +64841,13 @@ class DescribeVpnGatewaysRequestTag(TeaModel):
64068
64841
  key: str = None,
64069
64842
  value: str = None,
64070
64843
  ):
64071
- # The tag key. The tag key cannot be an empty string.
64072
- #
64073
- # It can be at most 64 characters in length, and cannot contain `http://` or `https://`. It cannot start with `aliyun` or `acs:`.
64844
+ # The tag key.
64074
64845
  #
64075
- # You can specify at most 20 tag keys in each call.
64846
+ # You can specify at most 20 tag keys at a time.
64076
64847
  self.key = key
64077
64848
  # The tag value.
64078
64849
  #
64079
- # The tag value can be an empty string and cannot exceed 128 characters in length. It cannot start with `aliyun` or `acs:`, and cannot contain `http://` or `https://`.
64080
- #
64081
- # Each tag key corresponds to one tag value. You can specify at most 20 tag values in each call.
64850
+ # Each tag key corresponds to one tag value. You can specify at most 20 tag values at a time.
64082
64851
  self.value = value
64083
64852
 
64084
64853
  def validate(self):
@@ -64159,11 +64928,7 @@ class DescribeVpnGatewaysRequest(TeaModel):
64159
64928
  # * **updating**\
64160
64929
  # * **deleting**\
64161
64930
  self.status = status
64162
- # The value of tag N to add to the resource.
64163
- #
64164
- # The value of this parameter can be an empty string and cannot exceed 128 characters in length. It cannot start with `aliyun` or `acs:`, and cannot contain `http://` or `https://`.
64165
- #
64166
- # Each tag key corresponds to one tag value. You can specify at most 20 tag values in each call.
64931
+ # The tags that are added to the VPN gateway.
64167
64932
  self.tag = tag
64168
64933
  # The ID of the virtual private cloud (VPC) to which the VPN gateway belongs.
64169
64934
  self.vpc_id = vpc_id
@@ -64549,7 +65314,7 @@ class DescribeVpnGatewaysResponseBodyVpnGatewaysVpnGateway(TeaModel):
64549
65314
  # * **updating**\
64550
65315
  # * **deleting**\
64551
65316
  self.status = status
64552
- # The tag that is automatically generated for the VPN gateway. The tag consists of the following parameters:
65317
+ # The tag that is automatically generated for the VPN gateway.
64553
65318
  #
64554
65319
  # * **VpnEnableBgp**: indicates whether the VPN gateway supports BGP. Valid values:
64555
65320
  #
@@ -64568,12 +65333,17 @@ class DescribeVpnGatewaysResponseBodyVpnGatewaysVpnGateway(TeaModel):
64568
65333
  #
64569
65334
  # * **VpnNewImage**: indicates whether the VPN gateway is upgraded. Valid values:
64570
65335
  #
64571
- # * **true**\
65336
+ # * **true**: queries only SQL templates that need to be optimized.
64572
65337
  # * **false**: does not query only SQL statements that need to be optimized.
64573
65338
  #
64574
65339
  # * **description**: the description of the VPN gateway. This parameter is only for internal use.
64575
65340
  #
64576
65341
  # * **VpnVersion**: the version of the VPN gateway.
65342
+ #
65343
+ # * **IDaaSNewVersion**: indicates whether the VPN gateway can be associated with an EIAM 2.0 instance.
65344
+ #
65345
+ # * **true**\
65346
+ # * **false**\
64577
65347
  self.tag = tag
64578
65348
  # The tags that are added to the VPN gateway.
64579
65349
  self.tags = tags
@@ -64772,7 +65542,7 @@ class DescribeVpnGatewaysResponseBody(TeaModel):
64772
65542
  self.request_id = request_id
64773
65543
  # The number of entries returned.
64774
65544
  self.total_count = total_count
64775
- # The VPN gateways.
65545
+ # The information about the VPN gateways.
64776
65546
  self.vpn_gateways = vpn_gateways
64777
65547
 
64778
65548
  def validate(self):
@@ -65256,6 +66026,80 @@ class DescribeVpnRouteEntriesRequest(TeaModel):
65256
66026
  return self
65257
66027
 
65258
66028
 
66029
+ class DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount(TeaModel):
66030
+ def __init__(
66031
+ self,
66032
+ route_count: int = None,
66033
+ route_entry_type: str = None,
66034
+ source: str = None,
66035
+ ):
66036
+ self.route_count = route_count
66037
+ self.route_entry_type = route_entry_type
66038
+ self.source = source
66039
+
66040
+ def validate(self):
66041
+ pass
66042
+
66043
+ def to_map(self):
66044
+ _map = super().to_map()
66045
+ if _map is not None:
66046
+ return _map
66047
+
66048
+ result = dict()
66049
+ if self.route_count is not None:
66050
+ result['RouteCount'] = self.route_count
66051
+ if self.route_entry_type is not None:
66052
+ result['RouteEntryType'] = self.route_entry_type
66053
+ if self.source is not None:
66054
+ result['Source'] = self.source
66055
+ return result
66056
+
66057
+ def from_map(self, m: dict = None):
66058
+ m = m or dict()
66059
+ if m.get('RouteCount') is not None:
66060
+ self.route_count = m.get('RouteCount')
66061
+ if m.get('RouteEntryType') is not None:
66062
+ self.route_entry_type = m.get('RouteEntryType')
66063
+ if m.get('Source') is not None:
66064
+ self.source = m.get('Source')
66065
+ return self
66066
+
66067
+
66068
+ class DescribeVpnRouteEntriesResponseBodyVpnRouteCounts(TeaModel):
66069
+ def __init__(
66070
+ self,
66071
+ vpn_route_count: List[DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount] = None,
66072
+ ):
66073
+ self.vpn_route_count = vpn_route_count
66074
+
66075
+ def validate(self):
66076
+ if self.vpn_route_count:
66077
+ for k in self.vpn_route_count:
66078
+ if k:
66079
+ k.validate()
66080
+
66081
+ def to_map(self):
66082
+ _map = super().to_map()
66083
+ if _map is not None:
66084
+ return _map
66085
+
66086
+ result = dict()
66087
+ result['VpnRouteCount'] = []
66088
+ if self.vpn_route_count is not None:
66089
+ for k in self.vpn_route_count:
66090
+ result['VpnRouteCount'].append(k.to_map() if k else None)
66091
+ return result
66092
+
66093
+ def from_map(self, m: dict = None):
66094
+ m = m or dict()
66095
+ self.vpn_route_count = []
66096
+ if m.get('VpnRouteCount') is not None:
66097
+ for k in m.get('VpnRouteCount'):
66098
+ temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount()
66099
+ self.vpn_route_count.append(temp_model.from_map(k))
66100
+ return self
66101
+
66102
+
65259
66103
  class DescribeVpnRouteEntriesResponseBodyVpnRouteEntriesVpnRouteEntry(TeaModel):
65260
66104
  def __init__(
65261
66105
  self,
@@ -65408,6 +66252,7 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65408
66252
  page_size: int = None,
65409
66253
  request_id: str = None,
65410
66254
  total_count: int = None,
66255
+ vpn_route_counts: DescribeVpnRouteEntriesResponseBodyVpnRouteCounts = None,
65411
66256
  vpn_route_entries: DescribeVpnRouteEntriesResponseBodyVpnRouteEntries = None,
65412
66257
  ):
65413
66258
  # The page number of the returned page.
@@ -65418,10 +66263,13 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65418
66263
  self.request_id = request_id
65419
66264
  # The total number of entries returned.
65420
66265
  self.total_count = total_count
66266
+ self.vpn_route_counts = vpn_route_counts
65421
66267
  # The list of route entries.
65422
66268
  self.vpn_route_entries = vpn_route_entries
65423
66269
 
65424
66270
  def validate(self):
66271
+ if self.vpn_route_counts:
66272
+ self.vpn_route_counts.validate()
65425
66273
  if self.vpn_route_entries:
65426
66274
  self.vpn_route_entries.validate()
65427
66275
 
@@ -65439,6 +66287,8 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65439
66287
  result['RequestId'] = self.request_id
65440
66288
  if self.total_count is not None:
65441
66289
  result['TotalCount'] = self.total_count
66290
+ if self.vpn_route_counts is not None:
66291
+ result['VpnRouteCounts'] = self.vpn_route_counts.to_map()
65442
66292
  if self.vpn_route_entries is not None:
65443
66293
  result['VpnRouteEntries'] = self.vpn_route_entries.to_map()
65444
66294
  return result
@@ -65453,6 +66303,9 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65453
66303
  self.request_id = m.get('RequestId')
65454
66304
  if m.get('TotalCount') is not None:
65455
66305
  self.total_count = m.get('TotalCount')
66306
+ if m.get('VpnRouteCounts') is not None:
66307
+ temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteCounts()
66308
+ self.vpn_route_counts = temp_model.from_map(m['VpnRouteCounts'])
65456
66309
  if m.get('VpnRouteEntries') is not None:
65457
66310
  temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteEntries()
65458
66311
  self.vpn_route_entries = temp_model.from_map(m['VpnRouteEntries'])
@@ -67174,7 +68027,7 @@ class DissociateVpnGatewayWithCertificateRequest(TeaModel):
67174
68027
  ):
67175
68028
  # The certificate ID.
67176
68029
  #
67177
- # > The certificate ID refers to the ID generated after the SSL certificate is associated with a VPN gateway. It is not the ID of the certificate itself. You can call [ListVpnCertificateAssociations](https://help.aliyun.com/document_detail/448813.html) to query certificate IDs.
68030
+ # > The certificate ID refers to the ID generated after the SSL certificate is associated with the VPN gateway. It is not the ID of the SSL certificate. You can call the [ListVpnCertificateAssociations](https://help.aliyun.com/document_detail/2521961.html) operation to query certificate IDs.
67178
68031
  #
67179
68032
  # This parameter is required.
67180
68033
  self.certificate_id = certificate_id
@@ -69306,6 +70159,39 @@ class GetNatGatewayAttributeRequest(TeaModel):
69306
70159
  return self
69307
70160
 
69308
70161
 
70162
+ class GetNatGatewayAttributeResponseBodyAccessMode(TeaModel):
70163
+ def __init__(
70164
+ self,
70165
+ mode_value: str = None,
70166
+ tunnel_type: str = None,
70167
+ ):
70168
+ self.mode_value = mode_value
70169
+ self.tunnel_type = tunnel_type
70170
+
70171
+ def validate(self):
70172
+ pass
70173
+
70174
+ def to_map(self):
70175
+ _map = super().to_map()
70176
+ if _map is not None:
70177
+ return _map
70178
+
70179
+ result = dict()
70180
+ if self.mode_value is not None:
70181
+ result['ModeValue'] = self.mode_value
70182
+ if self.tunnel_type is not None:
70183
+ result['TunnelType'] = self.tunnel_type
70184
+ return result
70185
+
70186
+ def from_map(self, m: dict = None):
70187
+ m = m or dict()
70188
+ if m.get('ModeValue') is not None:
70189
+ self.mode_value = m.get('ModeValue')
70190
+ if m.get('TunnelType') is not None:
70191
+ self.tunnel_type = m.get('TunnelType')
70192
+ return self
70193
+
70194
+
69309
70195
  class GetNatGatewayAttributeResponseBodyBillingConfig(TeaModel):
69310
70196
  def __init__(
69311
70197
  self,
@@ -69657,6 +70543,7 @@ class GetNatGatewayAttributeResponseBodySnatTable(TeaModel):
69657
70543
  class GetNatGatewayAttributeResponseBody(TeaModel):
69658
70544
  def __init__(
69659
70545
  self,
70546
+ access_mode: GetNatGatewayAttributeResponseBodyAccessMode = None,
69660
70547
  billing_config: GetNatGatewayAttributeResponseBodyBillingConfig = None,
69661
70548
  business_status: str = None,
69662
70549
  creation_time: str = None,
@@ -69683,6 +70570,7 @@ class GetNatGatewayAttributeResponseBody(TeaModel):
69683
70570
  status: str = None,
69684
70571
  vpc_id: str = None,
69685
70572
  ):
70573
+ self.access_mode = access_mode
69686
70574
  # The billing information.
69687
70575
  self.billing_config = billing_config
69688
70576
  # The service status of the NAT gateway. Valid values:
@@ -69754,6 +70642,8 @@ class GetNatGatewayAttributeResponseBody(TeaModel):
69754
70642
  self.vpc_id = vpc_id
69755
70643
 
69756
70644
  def validate(self):
70645
+ if self.access_mode:
70646
+ self.access_mode.validate()
69757
70647
  if self.billing_config:
69758
70648
  self.billing_config.validate()
69759
70649
  if self.deletion_protection_info:
@@ -69779,6 +70669,8 @@ class GetNatGatewayAttributeResponseBody(TeaModel):
69779
70669
  return _map
69780
70670
 
69781
70671
  result = dict()
70672
+ if self.access_mode is not None:
70673
+ result['AccessMode'] = self.access_mode.to_map()
69782
70674
  if self.billing_config is not None:
69783
70675
  result['BillingConfig'] = self.billing_config.to_map()
69784
70676
  if self.business_status is not None:
@@ -69835,6 +70727,9 @@ class GetNatGatewayAttributeResponseBody(TeaModel):
69835
70727
 
69836
70728
  def from_map(self, m: dict = None):
69837
70729
  m = m or dict()
70730
+ if m.get('AccessMode') is not None:
70731
+ temp_model = GetNatGatewayAttributeResponseBodyAccessMode()
70732
+ self.access_mode = temp_model.from_map(m['AccessMode'])
69838
70733
  if m.get('BillingConfig') is not None:
69839
70734
  temp_model = GetNatGatewayAttributeResponseBodyBillingConfig()
69840
70735
  self.billing_config = temp_model.from_map(m['BillingConfig'])
@@ -83303,6 +84198,7 @@ class ModifyFlowLogAttributeRequest(TeaModel):
83303
84198
  description: str = None,
83304
84199
  flow_log_id: str = None,
83305
84200
  flow_log_name: str = None,
84201
+ ip_version: str = None,
83306
84202
  owner_account: str = None,
83307
84203
  owner_id: int = None,
83308
84204
  region_id: str = None,
@@ -83323,6 +84219,7 @@ class ModifyFlowLogAttributeRequest(TeaModel):
83323
84219
  #
83324
84220
  # The name must be 1 to 128 characters in length and cannot start with `http://` or `https://`.
83325
84221
  self.flow_log_name = flow_log_name
84222
+ self.ip_version = ip_version
83326
84223
  self.owner_account = owner_account
83327
84224
  self.owner_id = owner_id
83328
84225
  # The ID of the region where the flow log is created.
@@ -83351,6 +84248,8 @@ class ModifyFlowLogAttributeRequest(TeaModel):
83351
84248
  result['FlowLogId'] = self.flow_log_id
83352
84249
  if self.flow_log_name is not None:
83353
84250
  result['FlowLogName'] = self.flow_log_name
84251
+ if self.ip_version is not None:
84252
+ result['IpVersion'] = self.ip_version
83354
84253
  if self.owner_account is not None:
83355
84254
  result['OwnerAccount'] = self.owner_account
83356
84255
  if self.owner_id is not None:
@@ -83373,6 +84272,8 @@ class ModifyFlowLogAttributeRequest(TeaModel):
83373
84272
  self.flow_log_id = m.get('FlowLogId')
83374
84273
  if m.get('FlowLogName') is not None:
83375
84274
  self.flow_log_name = m.get('FlowLogName')
84275
+ if m.get('IpVersion') is not None:
84276
+ self.ip_version = m.get('IpVersion')
83376
84277
  if m.get('OwnerAccount') is not None:
83377
84278
  self.owner_account = m.get('OwnerAccount')
83378
84279
  if m.get('OwnerId') is not None:
@@ -86983,6 +87884,7 @@ class ModifyRouteEntryRequest(TeaModel):
86983
87884
  #
86984
87885
  # The description must be 1 to 256 characters in length, and cannot start with `http://` or `https://`.
86985
87886
  self.description = description
87887
+ # The destination CIDR block of the route entry. Only IPv4 CIDR blocks, IPv6 CIDR blocks, and prefix lists are supported.
86986
87888
  self.destination_cidr_block = destination_cidr_block
86987
87889
  # The ID of the new next hop instance.
86988
87890
  self.new_next_hop_id = new_next_hop_id
@@ -87004,6 +87906,7 @@ class ModifyRouteEntryRequest(TeaModel):
87004
87906
  #
87005
87907
  # The name must be 1 to 128 characters in length, and cannot start with `http://` or `https://`.
87006
87908
  self.route_entry_name = route_entry_name
87909
+ # The ID of the route table to which the route entry belongs.
87007
87910
  self.route_table_id = route_table_id
87008
87911
 
87009
87912
  def validate(self):
@@ -88639,6 +89542,7 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig(Te
88639
89542
  class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
88640
89543
  def __init__(
88641
89544
  self,
89545
+ customer_gateway_id: str = None,
88642
89546
  enable_dpd: bool = None,
88643
89547
  enable_nat_traversal: bool = None,
88644
89548
  remote_ca_certificate: str = None,
@@ -88646,6 +89550,7 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
88646
89550
  tunnel_ike_config: ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
88647
89551
  tunnel_ipsec_config: ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
88648
89552
  ):
89553
+ self.customer_gateway_id = customer_gateway_id
88649
89554
  # Specifies whether to enable the dead peer detection (DPD) feature. Valid values:
88650
89555
  #
88651
89556
  # * **true**: DPD is enabled. The IPsec initiator sends DPD packets to verify the existence and availability of the IPsec peer. If no response is received from the peer within a specified period of time, the IPsec peer is considered disconnected. Then, the ISAKMP SA, IPsec SA, and IPsec tunnel are deleted.
@@ -88681,6 +89586,8 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
88681
89586
  return _map
88682
89587
 
88683
89588
  result = dict()
89589
+ if self.customer_gateway_id is not None:
89590
+ result['CustomerGatewayId'] = self.customer_gateway_id
88684
89591
  if self.enable_dpd is not None:
88685
89592
  result['EnableDpd'] = self.enable_dpd
88686
89593
  if self.enable_nat_traversal is not None:
@@ -88697,6 +89604,8 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
88697
89604
 
88698
89605
  def from_map(self, m: dict = None):
88699
89606
  m = m or dict()
89607
+ if m.get('CustomerGatewayId') is not None:
89608
+ self.customer_gateway_id = m.get('CustomerGatewayId')
88700
89609
  if m.get('EnableDpd') is not None:
88701
89610
  self.enable_dpd = m.get('EnableDpd')
88702
89611
  if m.get('EnableNatTraversal') is not None:
@@ -90647,6 +91556,242 @@ class ModifyVpcPrefixListResponse(TeaModel):
90647
91556
  return self
90648
91557
 
90649
91558
 
91559
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
91560
+ def __init__(
91561
+ self,
91562
+ local_asn: int = None,
91563
+ local_bgp_ip: str = None,
91564
+ tunnel_cidr: str = None,
91565
+ ):
91566
+ self.local_asn = local_asn
91567
+ self.local_bgp_ip = local_bgp_ip
91568
+ self.tunnel_cidr = tunnel_cidr
91569
+
91570
+ def validate(self):
91571
+ pass
91572
+
91573
+ def to_map(self):
91574
+ _map = super().to_map()
91575
+ if _map is not None:
91576
+ return _map
91577
+
91578
+ result = dict()
91579
+ if self.local_asn is not None:
91580
+ result['LocalAsn'] = self.local_asn
91581
+ if self.local_bgp_ip is not None:
91582
+ result['LocalBgpIp'] = self.local_bgp_ip
91583
+ if self.tunnel_cidr is not None:
91584
+ result['TunnelCidr'] = self.tunnel_cidr
91585
+ return result
91586
+
91587
+ def from_map(self, m: dict = None):
91588
+ m = m or dict()
91589
+ if m.get('LocalAsn') is not None:
91590
+ self.local_asn = m.get('LocalAsn')
91591
+ if m.get('LocalBgpIp') is not None:
91592
+ self.local_bgp_ip = m.get('LocalBgpIp')
91593
+ if m.get('TunnelCidr') is not None:
91594
+ self.tunnel_cidr = m.get('TunnelCidr')
91595
+ return self
91596
+
91597
+
91598
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
91599
+ def __init__(
91600
+ self,
91601
+ ike_auth_alg: str = None,
91602
+ ike_enc_alg: str = None,
91603
+ ike_lifetime: int = None,
91604
+ ike_mode: str = None,
91605
+ ike_pfs: str = None,
91606
+ ike_version: str = None,
91607
+ local_id: str = None,
91608
+ psk: str = None,
91609
+ remote_id: str = None,
91610
+ ):
91611
+ self.ike_auth_alg = ike_auth_alg
91612
+ self.ike_enc_alg = ike_enc_alg
91613
+ self.ike_lifetime = ike_lifetime
91614
+ self.ike_mode = ike_mode
91615
+ self.ike_pfs = ike_pfs
91616
+ self.ike_version = ike_version
91617
+ self.local_id = local_id
91618
+ self.psk = psk
91619
+ self.remote_id = remote_id
91620
+
91621
+ def validate(self):
91622
+ pass
91623
+
91624
+ def to_map(self):
91625
+ _map = super().to_map()
91626
+ if _map is not None:
91627
+ return _map
91628
+
91629
+ result = dict()
91630
+ if self.ike_auth_alg is not None:
91631
+ result['IkeAuthAlg'] = self.ike_auth_alg
91632
+ if self.ike_enc_alg is not None:
91633
+ result['IkeEncAlg'] = self.ike_enc_alg
91634
+ if self.ike_lifetime is not None:
91635
+ result['IkeLifetime'] = self.ike_lifetime
91636
+ if self.ike_mode is not None:
91637
+ result['IkeMode'] = self.ike_mode
91638
+ if self.ike_pfs is not None:
91639
+ result['IkePfs'] = self.ike_pfs
91640
+ if self.ike_version is not None:
91641
+ result['IkeVersion'] = self.ike_version
91642
+ if self.local_id is not None:
91643
+ result['LocalId'] = self.local_id
91644
+ if self.psk is not None:
91645
+ result['Psk'] = self.psk
91646
+ if self.remote_id is not None:
91647
+ result['RemoteId'] = self.remote_id
91648
+ return result
91649
+
91650
+ def from_map(self, m: dict = None):
91651
+ m = m or dict()
91652
+ if m.get('IkeAuthAlg') is not None:
91653
+ self.ike_auth_alg = m.get('IkeAuthAlg')
91654
+ if m.get('IkeEncAlg') is not None:
91655
+ self.ike_enc_alg = m.get('IkeEncAlg')
91656
+ if m.get('IkeLifetime') is not None:
91657
+ self.ike_lifetime = m.get('IkeLifetime')
91658
+ if m.get('IkeMode') is not None:
91659
+ self.ike_mode = m.get('IkeMode')
91660
+ if m.get('IkePfs') is not None:
91661
+ self.ike_pfs = m.get('IkePfs')
91662
+ if m.get('IkeVersion') is not None:
91663
+ self.ike_version = m.get('IkeVersion')
91664
+ if m.get('LocalId') is not None:
91665
+ self.local_id = m.get('LocalId')
91666
+ if m.get('Psk') is not None:
91667
+ self.psk = m.get('Psk')
91668
+ if m.get('RemoteId') is not None:
91669
+ self.remote_id = m.get('RemoteId')
91670
+ return self
91671
+
91672
+
91673
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
91674
+ def __init__(
91675
+ self,
91676
+ ipsec_auth_alg: str = None,
91677
+ ipsec_enc_alg: str = None,
91678
+ ipsec_lifetime: int = None,
91679
+ ipsec_pfs: str = None,
91680
+ ):
91681
+ self.ipsec_auth_alg = ipsec_auth_alg
91682
+ self.ipsec_enc_alg = ipsec_enc_alg
91683
+ self.ipsec_lifetime = ipsec_lifetime
91684
+ self.ipsec_pfs = ipsec_pfs
91685
+
91686
+ def validate(self):
91687
+ pass
91688
+
91689
+ def to_map(self):
91690
+ _map = super().to_map()
91691
+ if _map is not None:
91692
+ return _map
91693
+
91694
+ result = dict()
91695
+ if self.ipsec_auth_alg is not None:
91696
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
91697
+ if self.ipsec_enc_alg is not None:
91698
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
91699
+ if self.ipsec_lifetime is not None:
91700
+ result['IpsecLifetime'] = self.ipsec_lifetime
91701
+ if self.ipsec_pfs is not None:
91702
+ result['IpsecPfs'] = self.ipsec_pfs
91703
+ return result
91704
+
91705
+ def from_map(self, m: dict = None):
91706
+ m = m or dict()
91707
+ if m.get('IpsecAuthAlg') is not None:
91708
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
91709
+ if m.get('IpsecEncAlg') is not None:
91710
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
91711
+ if m.get('IpsecLifetime') is not None:
91712
+ self.ipsec_lifetime = m.get('IpsecLifetime')
91713
+ if m.get('IpsecPfs') is not None:
91714
+ self.ipsec_pfs = m.get('IpsecPfs')
91715
+ return self
91716
+
91717
+
91718
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification(TeaModel):
91719
+ def __init__(
91720
+ self,
91721
+ customer_gateway_id: str = None,
91722
+ enable_dpd: bool = None,
91723
+ enable_nat_traversal: bool = None,
91724
+ tunnel_bgp_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig = None,
91725
+ tunnel_id: str = None,
91726
+ tunnel_ike_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
91727
+ tunnel_index: int = None,
91728
+ tunnel_ipsec_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
91729
+ ):
91730
+ self.customer_gateway_id = customer_gateway_id
91731
+ self.enable_dpd = enable_dpd
91732
+ self.enable_nat_traversal = enable_nat_traversal
91733
+ self.tunnel_bgp_config = tunnel_bgp_config
91734
+ self.tunnel_id = tunnel_id
91735
+ self.tunnel_ike_config = tunnel_ike_config
91736
+ self.tunnel_index = tunnel_index
91737
+ self.tunnel_ipsec_config = tunnel_ipsec_config
91738
+
91739
+ def validate(self):
91740
+ if self.tunnel_bgp_config:
91741
+ self.tunnel_bgp_config.validate()
91742
+ if self.tunnel_ike_config:
91743
+ self.tunnel_ike_config.validate()
91744
+ if self.tunnel_ipsec_config:
91745
+ self.tunnel_ipsec_config.validate()
91746
+
91747
+ def to_map(self):
91748
+ _map = super().to_map()
91749
+ if _map is not None:
91750
+ return _map
91751
+
91752
+ result = dict()
91753
+ if self.customer_gateway_id is not None:
91754
+ result['CustomerGatewayId'] = self.customer_gateway_id
91755
+ if self.enable_dpd is not None:
91756
+ result['EnableDpd'] = self.enable_dpd
91757
+ if self.enable_nat_traversal is not None:
91758
+ result['EnableNatTraversal'] = self.enable_nat_traversal
91759
+ if self.tunnel_bgp_config is not None:
91760
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
91761
+ if self.tunnel_id is not None:
91762
+ result['TunnelId'] = self.tunnel_id
91763
+ if self.tunnel_ike_config is not None:
91764
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
91765
+ if self.tunnel_index is not None:
91766
+ result['TunnelIndex'] = self.tunnel_index
91767
+ if self.tunnel_ipsec_config is not None:
91768
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
91769
+ return result
91770
+
91771
+ def from_map(self, m: dict = None):
91772
+ m = m or dict()
91773
+ if m.get('CustomerGatewayId') is not None:
91774
+ self.customer_gateway_id = m.get('CustomerGatewayId')
91775
+ if m.get('EnableDpd') is not None:
91776
+ self.enable_dpd = m.get('EnableDpd')
91777
+ if m.get('EnableNatTraversal') is not None:
91778
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
91779
+ if m.get('TunnelBgpConfig') is not None:
91780
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig()
91781
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
91782
+ if m.get('TunnelId') is not None:
91783
+ self.tunnel_id = m.get('TunnelId')
91784
+ if m.get('TunnelIkeConfig') is not None:
91785
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig()
91786
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
91787
+ if m.get('TunnelIndex') is not None:
91788
+ self.tunnel_index = m.get('TunnelIndex')
91789
+ if m.get('TunnelIpsecConfig') is not None:
91790
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig()
91791
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
91792
+ return self
91793
+
91794
+
90650
91795
  class ModifyVpnAttachmentAttributeRequest(TeaModel):
90651
91796
  def __init__(
90652
91797
  self,
@@ -90657,6 +91802,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90657
91802
  effect_immediately: bool = None,
90658
91803
  enable_dpd: bool = None,
90659
91804
  enable_nat_traversal: bool = None,
91805
+ enable_tunnels_bgp: bool = None,
90660
91806
  health_check_config: str = None,
90661
91807
  ike_config: str = None,
90662
91808
  ipsec_config: str = None,
@@ -90669,6 +91815,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90669
91815
  remote_subnet: str = None,
90670
91816
  resource_owner_account: str = None,
90671
91817
  resource_owner_id: int = None,
91818
+ tunnel_options_specification: List[ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification] = None,
90672
91819
  vpn_connection_id: str = None,
90673
91820
  ):
90674
91821
  # Specifies whether to automatically configure routes. Valid values:
@@ -90719,6 +91866,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90719
91866
  # * **true** After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the IPsec tunnel.
90720
91867
  # * **false**\
90721
91868
  self.enable_nat_traversal = enable_nat_traversal
91869
+ self.enable_tunnels_bgp = enable_tunnels_bgp
90722
91870
  # The health check configurations:
90723
91871
  #
90724
91872
  # * **HealthCheckConfig.enable**: specifies whether to enable the health check feature. Valid values:
@@ -90809,13 +91957,17 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90809
91957
  self.remote_subnet = remote_subnet
90810
91958
  self.resource_owner_account = resource_owner_account
90811
91959
  self.resource_owner_id = resource_owner_id
91960
+ self.tunnel_options_specification = tunnel_options_specification
90812
91961
  # The ID of the IPsec-VPN connection.
90813
91962
  #
90814
91963
  # This parameter is required.
90815
91964
  self.vpn_connection_id = vpn_connection_id
90816
91965
 
90817
91966
  def validate(self):
90818
- pass
91967
+ if self.tunnel_options_specification:
91968
+ for k in self.tunnel_options_specification:
91969
+ if k:
91970
+ k.validate()
90819
91971
 
90820
91972
  def to_map(self):
90821
91973
  _map = super().to_map()
@@ -90837,6 +91989,8 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90837
91989
  result['EnableDpd'] = self.enable_dpd
90838
91990
  if self.enable_nat_traversal is not None:
90839
91991
  result['EnableNatTraversal'] = self.enable_nat_traversal
91992
+ if self.enable_tunnels_bgp is not None:
91993
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
90840
91994
  if self.health_check_config is not None:
90841
91995
  result['HealthCheckConfig'] = self.health_check_config
90842
91996
  if self.ike_config is not None:
@@ -90861,6 +92015,10 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90861
92015
  result['ResourceOwnerAccount'] = self.resource_owner_account
90862
92016
  if self.resource_owner_id is not None:
90863
92017
  result['ResourceOwnerId'] = self.resource_owner_id
92018
+ result['TunnelOptionsSpecification'] = []
92019
+ if self.tunnel_options_specification is not None:
92020
+ for k in self.tunnel_options_specification:
92021
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
90864
92022
  if self.vpn_connection_id is not None:
90865
92023
  result['VpnConnectionId'] = self.vpn_connection_id
90866
92024
  return result
@@ -90881,6 +92039,8 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90881
92039
  self.enable_dpd = m.get('EnableDpd')
90882
92040
  if m.get('EnableNatTraversal') is not None:
90883
92041
  self.enable_nat_traversal = m.get('EnableNatTraversal')
92042
+ if m.get('EnableTunnelsBgp') is not None:
92043
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
90884
92044
  if m.get('HealthCheckConfig') is not None:
90885
92045
  self.health_check_config = m.get('HealthCheckConfig')
90886
92046
  if m.get('IkeConfig') is not None:
@@ -90905,6 +92065,11 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
90905
92065
  self.resource_owner_account = m.get('ResourceOwnerAccount')
90906
92066
  if m.get('ResourceOwnerId') is not None:
90907
92067
  self.resource_owner_id = m.get('ResourceOwnerId')
92068
+ self.tunnel_options_specification = []
92069
+ if m.get('TunnelOptionsSpecification') is not None:
92070
+ for k in m.get('TunnelOptionsSpecification'):
92071
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification()
92072
+ self.tunnel_options_specification.append(temp_model.from_map(k))
90908
92073
  if m.get('VpnConnectionId') is not None:
90909
92074
  self.vpn_connection_id = m.get('VpnConnectionId')
90910
92075
  return self
@@ -91045,6 +92210,272 @@ class ModifyVpnAttachmentAttributeResponseBodyIpsecConfig(TeaModel):
91045
92210
  return self
91046
92211
 
91047
92212
 
92213
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
92214
+ def __init__(
92215
+ self,
92216
+ local_asn: int = None,
92217
+ local_bgp_ip: str = None,
92218
+ peer_asn: int = None,
92219
+ peer_bgp_ip: str = None,
92220
+ tunnel_cidr: str = None,
92221
+ ):
92222
+ self.local_asn = local_asn
92223
+ self.local_bgp_ip = local_bgp_ip
92224
+ self.peer_asn = peer_asn
92225
+ self.peer_bgp_ip = peer_bgp_ip
92226
+ self.tunnel_cidr = tunnel_cidr
92227
+
92228
+ def validate(self):
92229
+ pass
92230
+
92231
+ def to_map(self):
92232
+ _map = super().to_map()
92233
+ if _map is not None:
92234
+ return _map
92235
+
92236
+ result = dict()
92237
+ if self.local_asn is not None:
92238
+ result['LocalAsn'] = self.local_asn
92239
+ if self.local_bgp_ip is not None:
92240
+ result['LocalBgpIp'] = self.local_bgp_ip
92241
+ if self.peer_asn is not None:
92242
+ result['PeerAsn'] = self.peer_asn
92243
+ if self.peer_bgp_ip is not None:
92244
+ result['PeerBgpIp'] = self.peer_bgp_ip
92245
+ if self.tunnel_cidr is not None:
92246
+ result['TunnelCidr'] = self.tunnel_cidr
92247
+ return result
92248
+
92249
+ def from_map(self, m: dict = None):
92250
+ m = m or dict()
92251
+ if m.get('LocalAsn') is not None:
92252
+ self.local_asn = m.get('LocalAsn')
92253
+ if m.get('LocalBgpIp') is not None:
92254
+ self.local_bgp_ip = m.get('LocalBgpIp')
92255
+ if m.get('PeerAsn') is not None:
92256
+ self.peer_asn = m.get('PeerAsn')
92257
+ if m.get('PeerBgpIp') is not None:
92258
+ self.peer_bgp_ip = m.get('PeerBgpIp')
92259
+ if m.get('TunnelCidr') is not None:
92260
+ self.tunnel_cidr = m.get('TunnelCidr')
92261
+ return self
92262
+
92263
+
92264
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
92265
+ def __init__(
92266
+ self,
92267
+ ike_auth_alg: str = None,
92268
+ ike_enc_alg: str = None,
92269
+ ike_lifetime: int = None,
92270
+ ike_mode: str = None,
92271
+ ike_pfs: str = None,
92272
+ ike_version: str = None,
92273
+ local_id: str = None,
92274
+ psk: str = None,
92275
+ remote_id: str = None,
92276
+ ):
92277
+ self.ike_auth_alg = ike_auth_alg
92278
+ self.ike_enc_alg = ike_enc_alg
92279
+ self.ike_lifetime = ike_lifetime
92280
+ self.ike_mode = ike_mode
92281
+ self.ike_pfs = ike_pfs
92282
+ self.ike_version = ike_version
92283
+ self.local_id = local_id
92284
+ self.psk = psk
92285
+ self.remote_id = remote_id
92286
+
92287
+ def validate(self):
92288
+ pass
92289
+
92290
+ def to_map(self):
92291
+ _map = super().to_map()
92292
+ if _map is not None:
92293
+ return _map
92294
+
92295
+ result = dict()
92296
+ if self.ike_auth_alg is not None:
92297
+ result['IkeAuthAlg'] = self.ike_auth_alg
92298
+ if self.ike_enc_alg is not None:
92299
+ result['IkeEncAlg'] = self.ike_enc_alg
92300
+ if self.ike_lifetime is not None:
92301
+ result['IkeLifetime'] = self.ike_lifetime
92302
+ if self.ike_mode is not None:
92303
+ result['IkeMode'] = self.ike_mode
92304
+ if self.ike_pfs is not None:
92305
+ result['IkePfs'] = self.ike_pfs
92306
+ if self.ike_version is not None:
92307
+ result['IkeVersion'] = self.ike_version
92308
+ if self.local_id is not None:
92309
+ result['LocalId'] = self.local_id
92310
+ if self.psk is not None:
92311
+ result['Psk'] = self.psk
92312
+ if self.remote_id is not None:
92313
+ result['RemoteId'] = self.remote_id
92314
+ return result
92315
+
92316
+ def from_map(self, m: dict = None):
92317
+ m = m or dict()
92318
+ if m.get('IkeAuthAlg') is not None:
92319
+ self.ike_auth_alg = m.get('IkeAuthAlg')
92320
+ if m.get('IkeEncAlg') is not None:
92321
+ self.ike_enc_alg = m.get('IkeEncAlg')
92322
+ if m.get('IkeLifetime') is not None:
92323
+ self.ike_lifetime = m.get('IkeLifetime')
92324
+ if m.get('IkeMode') is not None:
92325
+ self.ike_mode = m.get('IkeMode')
92326
+ if m.get('IkePfs') is not None:
92327
+ self.ike_pfs = m.get('IkePfs')
92328
+ if m.get('IkeVersion') is not None:
92329
+ self.ike_version = m.get('IkeVersion')
92330
+ if m.get('LocalId') is not None:
92331
+ self.local_id = m.get('LocalId')
92332
+ if m.get('Psk') is not None:
92333
+ self.psk = m.get('Psk')
92334
+ if m.get('RemoteId') is not None:
92335
+ self.remote_id = m.get('RemoteId')
92336
+ return self
92337
+
92338
+
92339
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
92340
+ def __init__(
92341
+ self,
92342
+ ipsec_auth_alg: str = None,
92343
+ ipsec_enc_alg: str = None,
92344
+ ipsec_lifetime: int = None,
92345
+ ipsec_pfs: str = None,
92346
+ ):
92347
+ self.ipsec_auth_alg = ipsec_auth_alg
92348
+ self.ipsec_enc_alg = ipsec_enc_alg
92349
+ self.ipsec_lifetime = ipsec_lifetime
92350
+ self.ipsec_pfs = ipsec_pfs
92351
+
92352
+ def validate(self):
92353
+ pass
92354
+
92355
+ def to_map(self):
92356
+ _map = super().to_map()
92357
+ if _map is not None:
92358
+ return _map
92359
+
92360
+ result = dict()
92361
+ if self.ipsec_auth_alg is not None:
92362
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
92363
+ if self.ipsec_enc_alg is not None:
92364
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
92365
+ if self.ipsec_lifetime is not None:
92366
+ result['IpsecLifetime'] = self.ipsec_lifetime
92367
+ if self.ipsec_pfs is not None:
92368
+ result['IpsecPfs'] = self.ipsec_pfs
92369
+ return result
92370
+
92371
+ def from_map(self, m: dict = None):
92372
+ m = m or dict()
92373
+ if m.get('IpsecAuthAlg') is not None:
92374
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
92375
+ if m.get('IpsecEncAlg') is not None:
92376
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
92377
+ if m.get('IpsecLifetime') is not None:
92378
+ self.ipsec_lifetime = m.get('IpsecLifetime')
92379
+ if m.get('IpsecPfs') is not None:
92380
+ self.ipsec_pfs = m.get('IpsecPfs')
92381
+ return self
92382
+
92383
+
92384
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification(TeaModel):
92385
+ def __init__(
92386
+ self,
92387
+ customer_gateway_id: str = None,
92388
+ enable_dpd: bool = None,
92389
+ enable_nat_traversal: bool = None,
92390
+ internet_ip: str = None,
92391
+ role: str = None,
92392
+ state: str = None,
92393
+ tunnel_bgp_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig = None,
92394
+ tunnel_id: str = None,
92395
+ tunnel_ike_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig = None,
92396
+ tunnel_index: int = None,
92397
+ tunnel_ipsec_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig = None,
92398
+ ):
92399
+ self.customer_gateway_id = customer_gateway_id
92400
+ self.enable_dpd = enable_dpd
92401
+ self.enable_nat_traversal = enable_nat_traversal
92402
+ self.internet_ip = internet_ip
92403
+ self.role = role
92404
+ self.state = state
92405
+ self.tunnel_bgp_config = tunnel_bgp_config
92406
+ self.tunnel_id = tunnel_id
92407
+ self.tunnel_ike_config = tunnel_ike_config
92408
+ self.tunnel_index = tunnel_index
92409
+ self.tunnel_ipsec_config = tunnel_ipsec_config
92410
+
92411
+ def validate(self):
92412
+ if self.tunnel_bgp_config:
92413
+ self.tunnel_bgp_config.validate()
92414
+ if self.tunnel_ike_config:
92415
+ self.tunnel_ike_config.validate()
92416
+ if self.tunnel_ipsec_config:
92417
+ self.tunnel_ipsec_config.validate()
92418
+
92419
+ def to_map(self):
92420
+ _map = super().to_map()
92421
+ if _map is not None:
92422
+ return _map
92423
+
92424
+ result = dict()
92425
+ if self.customer_gateway_id is not None:
92426
+ result['CustomerGatewayId'] = self.customer_gateway_id
92427
+ if self.enable_dpd is not None:
92428
+ result['EnableDpd'] = self.enable_dpd
92429
+ if self.enable_nat_traversal is not None:
92430
+ result['EnableNatTraversal'] = self.enable_nat_traversal
92431
+ if self.internet_ip is not None:
92432
+ result['InternetIp'] = self.internet_ip
92433
+ if self.role is not None:
92434
+ result['Role'] = self.role
92435
+ if self.state is not None:
92436
+ result['State'] = self.state
92437
+ if self.tunnel_bgp_config is not None:
92438
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
92439
+ if self.tunnel_id is not None:
92440
+ result['TunnelId'] = self.tunnel_id
92441
+ if self.tunnel_ike_config is not None:
92442
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
92443
+ if self.tunnel_index is not None:
92444
+ result['TunnelIndex'] = self.tunnel_index
92445
+ if self.tunnel_ipsec_config is not None:
92446
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
92447
+ return result
92448
+
92449
+ def from_map(self, m: dict = None):
92450
+ m = m or dict()
92451
+ if m.get('CustomerGatewayId') is not None:
92452
+ self.customer_gateway_id = m.get('CustomerGatewayId')
92453
+ if m.get('EnableDpd') is not None:
92454
+ self.enable_dpd = m.get('EnableDpd')
92455
+ if m.get('EnableNatTraversal') is not None:
92456
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
92457
+ if m.get('InternetIp') is not None:
92458
+ self.internet_ip = m.get('InternetIp')
92459
+ if m.get('Role') is not None:
92460
+ self.role = m.get('Role')
92461
+ if m.get('State') is not None:
92462
+ self.state = m.get('State')
92463
+ if m.get('TunnelBgpConfig') is not None:
92464
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig()
92465
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
92466
+ if m.get('TunnelId') is not None:
92467
+ self.tunnel_id = m.get('TunnelId')
92468
+ if m.get('TunnelIkeConfig') is not None:
92469
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig()
92470
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
92471
+ if m.get('TunnelIndex') is not None:
92472
+ self.tunnel_index = m.get('TunnelIndex')
92473
+ if m.get('TunnelIpsecConfig') is not None:
92474
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig()
92475
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
92476
+ return self
92477
+
92478
+
91048
92479
  class ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck(TeaModel):
91049
92480
  def __init__(
91050
92481
  self,
@@ -91201,6 +92632,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91201
92632
  effect_immediately: bool = None,
91202
92633
  enable_dpd: bool = None,
91203
92634
  enable_nat_traversal: bool = None,
92635
+ enable_tunnels_bgp: bool = None,
91204
92636
  ike_config: ModifyVpnAttachmentAttributeResponseBodyIkeConfig = None,
91205
92637
  ipsec_config: ModifyVpnAttachmentAttributeResponseBodyIpsecConfig = None,
91206
92638
  local_subnet: str = None,
@@ -91211,6 +92643,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91211
92643
  resource_group_id: str = None,
91212
92644
  spec: str = None,
91213
92645
  status: str = None,
92646
+ tunnel_options_specification: List[ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification] = None,
91214
92647
  vco_health_check: ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck = None,
91215
92648
  vpn_bgp_config: ModifyVpnAttachmentAttributeResponseBodyVpnBgpConfig = None,
91216
92649
  vpn_connection_id: str = None,
@@ -91247,6 +92680,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91247
92680
  # * **true**\
91248
92681
  # * **false**\
91249
92682
  self.enable_nat_traversal = enable_nat_traversal
92683
+ self.enable_tunnels_bgp = enable_tunnels_bgp
91250
92684
  # The configuration of Phase 1 negotiations.
91251
92685
  self.ike_config = ike_config
91252
92686
  # The configuration of Phase 2 negotiations.
@@ -91279,6 +92713,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91279
92713
  # * **ipsec_sa_not_established**: Phase 2 negotiations failed.
91280
92714
  # * **ipsec_sa_established**: Phase 2 negotiations succeeded.
91281
92715
  self.status = status
92716
+ self.tunnel_options_specification = tunnel_options_specification
91282
92717
  # The health check configuration of the IPsec-VPN connection.
91283
92718
  self.vco_health_check = vco_health_check
91284
92719
  # The BGP configuration of the IPsec-VPN connection.
@@ -91293,6 +92728,10 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91293
92728
  self.ike_config.validate()
91294
92729
  if self.ipsec_config:
91295
92730
  self.ipsec_config.validate()
92731
+ if self.tunnel_options_specification:
92732
+ for k in self.tunnel_options_specification:
92733
+ if k:
92734
+ k.validate()
91296
92735
  if self.vco_health_check:
91297
92736
  self.vco_health_check.validate()
91298
92737
  if self.vpn_bgp_config:
@@ -91320,6 +92759,8 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91320
92759
  result['EnableDpd'] = self.enable_dpd
91321
92760
  if self.enable_nat_traversal is not None:
91322
92761
  result['EnableNatTraversal'] = self.enable_nat_traversal
92762
+ if self.enable_tunnels_bgp is not None:
92763
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
91323
92764
  if self.ike_config is not None:
91324
92765
  result['IkeConfig'] = self.ike_config.to_map()
91325
92766
  if self.ipsec_config is not None:
@@ -91340,6 +92781,10 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91340
92781
  result['Spec'] = self.spec
91341
92782
  if self.status is not None:
91342
92783
  result['Status'] = self.status
92784
+ result['TunnelOptionsSpecification'] = []
92785
+ if self.tunnel_options_specification is not None:
92786
+ for k in self.tunnel_options_specification:
92787
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
91343
92788
  if self.vco_health_check is not None:
91344
92789
  result['VcoHealthCheck'] = self.vco_health_check.to_map()
91345
92790
  if self.vpn_bgp_config is not None:
@@ -91368,6 +92813,8 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91368
92813
  self.enable_dpd = m.get('EnableDpd')
91369
92814
  if m.get('EnableNatTraversal') is not None:
91370
92815
  self.enable_nat_traversal = m.get('EnableNatTraversal')
92816
+ if m.get('EnableTunnelsBgp') is not None:
92817
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
91371
92818
  if m.get('IkeConfig') is not None:
91372
92819
  temp_model = ModifyVpnAttachmentAttributeResponseBodyIkeConfig()
91373
92820
  self.ike_config = temp_model.from_map(m['IkeConfig'])
@@ -91390,6 +92837,11 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91390
92837
  self.spec = m.get('Spec')
91391
92838
  if m.get('Status') is not None:
91392
92839
  self.status = m.get('Status')
92840
+ self.tunnel_options_specification = []
92841
+ if m.get('TunnelOptionsSpecification') is not None:
92842
+ for k in m.get('TunnelOptionsSpecification'):
92843
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification()
92844
+ self.tunnel_options_specification.append(temp_model.from_map(k))
91393
92845
  if m.get('VcoHealthCheck') is not None:
91394
92846
  temp_model = ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck()
91395
92847
  self.vco_health_check = temp_model.from_map(m['VcoHealthCheck'])
@@ -91453,15 +92905,19 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelBgpConf
91453
92905
  ):
91454
92906
  # The ASN of the tunnel on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
91455
92907
  #
91456
- # > - You can specify or modify this parameter if BGP is enabled for the IPsec-VPN connection (**EnableTunnelsBgp** is set to **true**).
91457
- # > - Before you configure BGP, we recommend that you learn about how BGP works and its limits. For more information, see [VPN Gateway supports BGP dynamic routing](https://help.aliyun.com/document_detail/170235.html).
91458
- # > - We recommend that you use a private ASN to establish a connection with Alibaba Cloud over BGP. For information about the range of private ASNs, see the relevant documentation.
92908
+ # > You can specify this parameter only if **EnableTunnelsBgp** is set to **true**.
92909
+ #
92910
+ # * Before you add BGP configurations, we recommend that you learn about how BGP dynamic routing works and the limits. For more information, see [Configure BGP dynamic routing](https://help.aliyun.com/document_detail/2638220.html).
92911
+ #
92912
+ # * We recommend that you use a private ASN to establish BGP connections to Alibaba Cloud. For information about the range of private ASNs, see the relevant documentation.
91459
92913
  self.local_asn = local_asn
91460
- # The BGP IP address of the tunnel on the Alibaba Cloud side. The address is an IP address that falls within the BGP CIDR block range.
92914
+ # The BGP IP address of the tunnel on the Alibaba Cloud side. The address is an IP address that falls within the BGP CIDR block.
91461
92915
  self.local_bgp_ip = local_bgp_ip
91462
- # The BGP CIDR block of the tunnel. The CIDR block must belong to 169.254.0.0/16. The subnet mask of the CIDR block must be 30 bits in length.
92916
+ # The BGP CIDR block of the tunnel.
91463
92917
  #
91464
- # > The BGP CIDR block of a tunnel associated with a VPN gateway must be unique.
92918
+ # The CIDR block must fall within 169.254.0.0/16 and the mask of the CIDR block must be 30 bits in length. The CIDR block cannot be 169.254.0.0/30, 169.254.1.0/30, 169.254.2.0/30, 169.254.3.0/30, 169.254.4.0/30, 169.254.5.0/30, 169.254.6.0/30, or 169.254.169.252/30.
92919
+ #
92920
+ # > The BGP CIDR block of each tunnel must be unique on a VPN gateway.
91465
92921
  self.tunnel_cidr = tunnel_cidr
91466
92922
 
91467
92923
  def validate(self):
@@ -91513,33 +92969,33 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIkeConf
91513
92969
  #
91514
92970
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**.
91515
92971
  self.ike_enc_alg = ike_enc_alg
91516
- # The SA lifetime that is determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**.
92972
+ # The SA lifetime as a result of Phase 1 negotiations. Unit: seconds Valid values: **0** to **86400**.
91517
92973
  self.ike_lifetime = ike_lifetime
91518
- # The IKE negotiation mode. Valid values:
92974
+ # The negotiation mode of IKE. Valid values:
91519
92975
  #
91520
- # * **main**: This mode offers higher security during negotiations.
91521
- # * **aggressive**: This mode is faster and has a higher success rate.
92976
+ # * **main:** This mode offers higher security during negotiations.
92977
+ # * **aggressive:** This mode supports faster negotiations and a higher success rate.
91522
92978
  self.ike_mode = ike_mode
91523
- # The DH key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
92979
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
91524
92980
  self.ike_pfs = ike_pfs
91525
92981
  # The version of the IKE protocol. Valid values: **ikev1** and **ikev2**.
91526
92982
  #
91527
- # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
92983
+ # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and provides better support for scenarios with multiple CIDR blocks.
91528
92984
  self.ike_version = ike_version
91529
- # The identifier on the Alibaba Cloud side, which is used in Phase 1 negotiations. The identifier cannot exceed 100 characters in length. The default identifier is the IP address of the tunnel.
92985
+ # The identifier on the Alibaba Cloud side, which is used in Phase 1 negotiations. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the tunnel.
91530
92986
  #
91531
- # You can set **LocalId** to a fully qualified domain name (FQDN). In this case, we recommend that you set IkeMode to **aggressive**.
92987
+ # **LocalId** supports fully qualified domain names (FQDNs). If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
91532
92988
  self.local_id = local_id
91533
92989
  # The pre-shared key, which is used for identity authentication between the tunnel and the tunnel peer.
91534
92990
  #
91535
- # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
91536
- # * If you do not specify a pre-shared key, the system generates a random 16-character string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is generated by the system.
92991
+ # * The key cannot contain space characters. The key must be 1 to 100 characters in length, and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
92992
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
91537
92993
  #
91538
- # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be established.
92994
+ # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be built.
91539
92995
  self.psk = psk
91540
- # The identifier of the tunnel peer, which is used in Phase 1 negotiations. The identifier cannot exceed 100 characters in length. The default identifier is the IP address of the customer gateway associated with the tunnel.
92996
+ # The identifier of the tunnel peer, which is used in Phase 1 negotiations. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the customer gateway that is associated with the tunnel.
91541
92997
  #
91542
- # You can set **RemoteId** to an FQDN. In this case, we recommend that you set IkeMode to **aggressive**.
92998
+ # **RemoteId** supports FQDNs. If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
91543
92999
  self.remote_id = remote_id
91544
93000
 
91545
93001
  def validate(self):
@@ -91610,9 +93066,9 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecCo
91610
93066
  #
91611
93067
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**.
91612
93068
  self.ipsec_enc_alg = ipsec_enc_alg
91613
- # The SA lifetime that is determined by Phase 2 negotiations. Unit: seconds. Valid values: **0** to **86400**.
93069
+ # The SA lifetime as a result of Phase 2 negotiations. Unit: seconds Valid values: **0** to **86400**.
91614
93070
  self.ipsec_lifetime = ipsec_lifetime
91615
- # The DH key exchange algorithm that is used in Phase 2 negotiations.
93071
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 2 negotiations.
91616
93072
  #
91617
93073
  # Valid values: **disabled**, **group1**, **group2**, **group5**, and **group14**.
91618
93074
  self.ipsec_pfs = ipsec_pfs
@@ -91652,6 +93108,7 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecCo
91652
93108
  class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
91653
93109
  def __init__(
91654
93110
  self,
93111
+ customer_gateway_id: str = None,
91655
93112
  enable_dpd: bool = None,
91656
93113
  enable_nat_traversal: bool = None,
91657
93114
  remote_ca_certificate: str = None,
@@ -91661,15 +93118,17 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
91661
93118
  tunnel_ike_config: ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
91662
93119
  tunnel_ipsec_config: ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
91663
93120
  ):
93121
+ # The ID of the customer gateway associated with the tunnel.
93122
+ self.customer_gateway_id = customer_gateway_id
91664
93123
  # Specifies whether to enable the Dead Peer Detection (DPD) feature for the tunnel. Valid values:
91665
93124
  #
91666
- # * **true** The initiator of the IPsec-VPN connection sends DPD packets to check the existence and availability of the peer. If no feedback is received from the peer within a specified period of time, the connection fails. ISAKMP SA and IPsec SA are deleted. The security tunnel is also deleted.
91667
- # * **false**\
93125
+ # * **true**: enables DPD. The initiator of the IPsec-VPN connection sends DPD packets to check the existence and availability of the peer. If no feedback is received from the peer within the specified period of time, the connection fails. In this case, ISAKMP SA and IPsec SA are deleted. The security tunnel is also deleted.
93126
+ # * **false**: disables DPD. The initiator of the IPsec-VPN connection does not send DPD packets.
91668
93127
  self.enable_dpd = enable_dpd
91669
93128
  # Specifies whether to enable NAT traversal for the tunnel. Valid values:
91670
93129
  #
91671
- # * **true** After NAT traversal is enabled, the initiator does not check the UDP ports during Internet Key Exchange (IKE) negotiations and can automatically discover NAT gateway devices along the IPsec-VPN tunnel.
91672
- # * **false**\
93130
+ # * **true**: enables NAT traversal. After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the IPsec-VPN tunnel.
93131
+ # * **false**: disables NAT traversal.
91673
93132
  self.enable_nat_traversal = enable_nat_traversal
91674
93133
  # If the VPN gateway uses an SM certificate, you can modify the CA certificate used by the IPsec peer.
91675
93134
  #
@@ -91682,8 +93141,6 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
91682
93141
  self.role = role
91683
93142
  # The Border Gateway Protocol (BGP) configurations of the tunnel.
91684
93143
  self.tunnel_bgp_config = tunnel_bgp_config
91685
- # **TunnelOptionsSpecification** parameters are supported by dual-tunnel IPsec-VPN gateways. You can modify both the active and standby tunnels of the IPsec-VPN connection.
91686
- #
91687
93144
  # The tunnel ID.
91688
93145
  self.tunnel_id = tunnel_id
91689
93146
  # The configurations of Phase 1 negotiations.
@@ -91705,6 +93162,8 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
91705
93162
  return _map
91706
93163
 
91707
93164
  result = dict()
93165
+ if self.customer_gateway_id is not None:
93166
+ result['CustomerGatewayId'] = self.customer_gateway_id
91708
93167
  if self.enable_dpd is not None:
91709
93168
  result['EnableDpd'] = self.enable_dpd
91710
93169
  if self.enable_nat_traversal is not None:
@@ -91725,6 +93184,8 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
91725
93184
 
91726
93185
  def from_map(self, m: dict = None):
91727
93186
  m = m or dict()
93187
+ if m.get('CustomerGatewayId') is not None:
93188
+ self.customer_gateway_id = m.get('CustomerGatewayId')
91728
93189
  if m.get('EnableDpd') is not None:
91729
93190
  self.enable_dpd = m.get('EnableDpd')
91730
93191
  if m.get('EnableNatTraversal') is not None:
@@ -91777,27 +93238,27 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
91777
93238
  # * **true**\
91778
93239
  # * **false**\
91779
93240
  self.auto_config_route = auto_config_route
91780
- # This parameter is supported by single-tunnel IPsec-VPN connections.
93241
+ # This parameter is supported if you modify the configurations of an IPsec-VPN connection in single-tunnel mode.
91781
93242
  #
91782
- # The Border Gateway Protocol (BGP) configurations:
93243
+ # BGP configuration:
91783
93244
  #
91784
- # * **BgpConfig.EnableBgp:** specifies whether to enable BGP. Valid values: **true** and **false**.
93245
+ # * **BgpConfig.EnableBgp**: specifies whether to enable BGP. Valid values: **true** and **false**.
91785
93246
  #
91786
93247
  # * **BgpConfig.LocalAsn:** the autonomous system number (ASN) on the Alibaba Cloud side. Valid values: **1** to **4294967295**.
91787
93248
  #
91788
- # You can enter the ASN in two segments. Separate the first 16 bits of the ASN from the remaining 16 bits with a period (.). Enter the number in each segment in decimal format.
93249
+ # You can enter a value in two segments separated by a period (.). Each segment is 16 bits in length. Enter the number in each segment in decimal format.
91789
93250
  #
91790
- # For example, if you enter 123.456, the ASN is: 123 × 65536 + 456 = 8061384.
93251
+ # For example, if you enter 123.456, the ASN is 8061384. The ASN is calculated by using the following formula: 123 × 65536 + 456 = 8061384.
91791
93252
  #
91792
- # * **BgpConfig.TunnelCidr**: the CIDR block of the IPsec tunnel. The CIDR block must belong to 169.254.0.0/16. The subnet mask of the CIDR block must be 30 bits in length.
93253
+ # * **BgpConfig.TunnelCidr**: The CIDR block of the IPsec tunnel. The CIDR block must fall within 169.254.0.0/16 and the mask of the CIDR block must be 30 bits in length. The CIDR block cannot be 169.254.0.0/30, 169.254.1.0/30, 169.254.2.0/30, 169.254.3.0/30, 169.254.4.0/30, 169.254.5.0/30, 169.254.6.0/30, or 169.254.169.252/30.
91793
93254
  #
91794
- # > The CIDR block of the IPsec tunnel of each IPsec-VPN connection must be unique on a VPN gateway.
93255
+ # > The CIDR block of the IPsec tunnel for each IPsec-VPN connection on a VPN gateway must be unique.
91795
93256
  #
91796
- # * **LocalBgpIp**: the BGP IP address on the Alibaba Cloud side. This IP address must fall within the CIDR block range of the IPsec tunnel.
93257
+ # * **LocalBgpIp**: the BGP address on the Alibaba Cloud side. It must be an IP address that falls within the CIDR block of the IPsec tunnel.
91797
93258
  #
91798
93259
  # > - This parameter is required when the VPN gateway has dynamic BGP enabled.
91799
- # > - Before you configure BGP, we recommend that you learn about how BGP works and its limits. For more information, see [BGP dynamic routing ](https://help.aliyun.com/document_detail/170235.html).
91800
- # > - We recommend that you use a private ASN to establish a connection with Alibaba Cloud over BGP. For information about the range of private ASNs, see the relevant documentation.
93260
+ # > - Before you add BGP configurations, we recommend that you learn about how BGP dynamic routing works and the limits. For more information, see [Configure BGP dynamic routing](https://help.aliyun.com/document_detail/2638220.html).
93261
+ # > - We recommend that you use a private ASN to establish BGP connections to Alibaba Cloud. For information about the range of private ASNs, see the relevant documentation.
91801
93262
  self.bgp_config = bgp_config
91802
93263
  # The client token that is used to ensure the idempotence of the request.
91803
93264
  #
@@ -91838,25 +93299,27 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
91838
93299
  # * **HealthCheckConfig.interval**: the interval between two consecutive health checks. Unit: seconds.
91839
93300
  # * **HealthCheckConfig.retry**: the maximum number of health check retries.
91840
93301
  self.health_check_config = health_check_config
91841
- # This parameter is supported by single-tunnel IPsec-VPN connections.
93302
+ # This parameter is supported if you modify the configurations of an IPsec-VPN connection in single-tunnel mode.
91842
93303
  #
91843
93304
  # The configurations of Phase 1 negotiations:
91844
93305
  #
91845
- # * **IkeConfig.Psk**: the pre-shared key that is used for authentication between the VPN gateway and the data center.
93306
+ # * **IkeConfig.Psk**: The pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
91846
93307
  #
91847
- # * It must be 1 to 100 characters in length, and can contain letters, digits, and the following characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
91848
- # * If you do not specify a pre-shared key, the system generates a random 16-character string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is generated by the system.
93308
+ # * The key cannot contain space characters. The key must be 1 to 100 characters in length, and can contain digits, letters, and the following special characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
93309
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
91849
93310
  #
91850
- # > The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises database. Otherwise, the on-premises database and the VPN gateway cannot establish a connection.
93311
+ # **\
93312
+ #
93313
+ # **Description** The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises data center. Otherwise, connections between the on-premises data center and the VPN gateway cannot be established.
91851
93314
  #
91852
93315
  # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**.
91853
93316
  #
91854
- # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
93317
+ # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and provides better support for scenarios with multiple CIDR blocks.
91855
93318
  #
91856
93319
  # * **IkeConfig.IkeMode**: the negotiation mode of IKE. Valid values: **main** and **aggressive**.
91857
93320
  #
91858
- # * **main**: This mode offers higher security during negotiations.
91859
- # * **aggressive**: This mode is faster and has a higher success rate.
93321
+ # * **main:** This mode offers higher security during negotiations.
93322
+ # * **aggressive:** This mode supports faster negotiations and a higher success rate.
91860
93323
  #
91861
93324
  # * **IkeConfig.IkeEncAlg**: the encryption algorithm that is used in Phase 1 negotiations.
91862
93325
  #
@@ -91866,13 +93329,13 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
91866
93329
  #
91867
93330
  # Valid values: **md5**, **sha1**, **sha256**, **sha384**, and **sha512**.
91868
93331
  #
91869
- # * **IkeConfig.IkePfs**: the Diffie-Hellman (DH) key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
93332
+ # * **IkeConfig.IkePfs**: the Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
91870
93333
  #
91871
- # * **IkeConfig.IkeLifetime**: the security association (SA) lifetime that is determined by Phase 1 negotiations. Unit: seconds. Valid values: **0 to 86400**.
93334
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds Valid values: **0 to 86400**.
91872
93335
  #
91873
- # * **IkeConfig.LocalId**: the identifier of the VPN gateway. The identifier cannot exceed 100 characters in length. The default value is the IP address of the VPN gateway.
93336
+ # * **IkeConfig.LocalId**: the identifier of the VPN gateway. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the VPN gateway.
91874
93337
  #
91875
- # * **IkeConfig.RemoteId**: the identifier of the customer gateway. The identifier cannot exceed 100 characters in length. The default value is the IP address of the customer gateway.
93338
+ # * **IkeConfig.RemoteId**: the identifier of the customer gateway. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the customer gateway.
91876
93339
  self.ike_config = ike_config
91877
93340
  # You can specify this parameter if you modify the configuration of a single-tunnel IPsec-VPN connection.
91878
93341
  #
@@ -91930,7 +93393,7 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
91930
93393
  self.resource_owner_id = resource_owner_id
91931
93394
  # The tunnel configurations.
91932
93395
  #
91933
- # You can specify the parameters in **TunnelOptionsSpecification** if you modify the configuration of a dual-tunnel IPsec-VPN connection. You can modify both the active and standby tunnels of the IPsec-VPN connection.
93396
+ # You can specify parameters in the **TunnelOptionsSpecification** array when you modify the configurations of an IPsec-VPN connection in dual-tunnel mode. You can modify the configurations of both the active and standby tunnels of the IPsec-VPN connection.
91934
93397
  self.tunnel_options_specification = tunnel_options_specification
91935
93398
  # The ID of the IPsec-VPN connection.
91936
93399
  #