alibabacloud-vpc20160428 6.9.4__py3-none-any.whl → 6.9.6__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.
@@ -8642,6 +8642,39 @@ class CreateExpressCloudConnectionResponse(TeaModel):
8642
8642
  return self
8643
8643
 
8644
8644
 
8645
+ class CreateExpressConnectTrafficQosRequestTags(TeaModel):
8646
+ def __init__(
8647
+ self,
8648
+ key: str = None,
8649
+ value: str = None,
8650
+ ):
8651
+ self.key = key
8652
+ self.value = value
8653
+
8654
+ def validate(self):
8655
+ pass
8656
+
8657
+ def to_map(self):
8658
+ _map = super().to_map()
8659
+ if _map is not None:
8660
+ return _map
8661
+
8662
+ result = dict()
8663
+ if self.key is not None:
8664
+ result['Key'] = self.key
8665
+ if self.value is not None:
8666
+ result['Value'] = self.value
8667
+ return result
8668
+
8669
+ def from_map(self, m: dict = None):
8670
+ m = m or dict()
8671
+ if m.get('Key') is not None:
8672
+ self.key = m.get('Key')
8673
+ if m.get('Value') is not None:
8674
+ self.value = m.get('Value')
8675
+ return self
8676
+
8677
+
8645
8678
  class CreateExpressConnectTrafficQosRequest(TeaModel):
8646
8679
  def __init__(
8647
8680
  self,
@@ -8651,7 +8684,9 @@ class CreateExpressConnectTrafficQosRequest(TeaModel):
8651
8684
  qos_description: str = None,
8652
8685
  qos_name: str = None,
8653
8686
  region_id: str = None,
8687
+ resource_group_id: str = None,
8654
8688
  resource_owner_account: str = None,
8689
+ tags: List[CreateExpressConnectTrafficQosRequestTags] = None,
8655
8690
  ):
8656
8691
  # The client token that is used to ensure the idempotence of the request.
8657
8692
  #
@@ -8675,10 +8710,15 @@ class CreateExpressConnectTrafficQosRequest(TeaModel):
8675
8710
  #
8676
8711
  # This parameter is required.
8677
8712
  self.region_id = region_id
8713
+ self.resource_group_id = resource_group_id
8678
8714
  self.resource_owner_account = resource_owner_account
8715
+ self.tags = tags
8679
8716
 
8680
8717
  def validate(self):
8681
- pass
8718
+ if self.tags:
8719
+ for k in self.tags:
8720
+ if k:
8721
+ k.validate()
8682
8722
 
8683
8723
  def to_map(self):
8684
8724
  _map = super().to_map()
@@ -8698,8 +8738,14 @@ class CreateExpressConnectTrafficQosRequest(TeaModel):
8698
8738
  result['QosName'] = self.qos_name
8699
8739
  if self.region_id is not None:
8700
8740
  result['RegionId'] = self.region_id
8741
+ if self.resource_group_id is not None:
8742
+ result['ResourceGroupId'] = self.resource_group_id
8701
8743
  if self.resource_owner_account is not None:
8702
8744
  result['ResourceOwnerAccount'] = self.resource_owner_account
8745
+ result['Tags'] = []
8746
+ if self.tags is not None:
8747
+ for k in self.tags:
8748
+ result['Tags'].append(k.to_map() if k else None)
8703
8749
  return result
8704
8750
 
8705
8751
  def from_map(self, m: dict = None):
@@ -8716,8 +8762,15 @@ class CreateExpressConnectTrafficQosRequest(TeaModel):
8716
8762
  self.qos_name = m.get('QosName')
8717
8763
  if m.get('RegionId') is not None:
8718
8764
  self.region_id = m.get('RegionId')
8765
+ if m.get('ResourceGroupId') is not None:
8766
+ self.resource_group_id = m.get('ResourceGroupId')
8719
8767
  if m.get('ResourceOwnerAccount') is not None:
8720
8768
  self.resource_owner_account = m.get('ResourceOwnerAccount')
8769
+ self.tags = []
8770
+ if m.get('Tags') is not None:
8771
+ for k in m.get('Tags'):
8772
+ temp_model = CreateExpressConnectTrafficQosRequestTags()
8773
+ self.tags.append(temp_model.from_map(k))
8721
8774
  return self
8722
8775
 
8723
8776
 
@@ -9809,6 +9862,7 @@ class CreateForwardEntryRequest(TeaModel):
9809
9862
  def __init__(
9810
9863
  self,
9811
9864
  client_token: str = None,
9865
+ dry_run: bool = None,
9812
9866
  external_ip: str = None,
9813
9867
  external_port: str = None,
9814
9868
  forward_entry_name: str = None,
@@ -9829,6 +9883,7 @@ class CreateForwardEntryRequest(TeaModel):
9829
9883
  #
9830
9884
  # > 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.
9831
9885
  self.client_token = client_token
9886
+ self.dry_run = dry_run
9832
9887
  # * The EIP that can be accessed over the Internet when you configure a DNAT entry for an Internet NAT gateway.
9833
9888
  # * The NAT IP address that can be accessed by external networks when you configure a DNAT entry for a VPC NAT gateway.
9834
9889
  #
@@ -9903,6 +9958,8 @@ class CreateForwardEntryRequest(TeaModel):
9903
9958
  result = dict()
9904
9959
  if self.client_token is not None:
9905
9960
  result['ClientToken'] = self.client_token
9961
+ if self.dry_run is not None:
9962
+ result['DryRun'] = self.dry_run
9906
9963
  if self.external_ip is not None:
9907
9964
  result['ExternalIp'] = self.external_ip
9908
9965
  if self.external_port is not None:
@@ -9935,6 +9992,8 @@ class CreateForwardEntryRequest(TeaModel):
9935
9992
  m = m or dict()
9936
9993
  if m.get('ClientToken') is not None:
9937
9994
  self.client_token = m.get('ClientToken')
9995
+ if m.get('DryRun') is not None:
9996
+ self.dry_run = m.get('DryRun')
9938
9997
  if m.get('ExternalIp') is not None:
9939
9998
  self.external_ip = m.get('ExternalIp')
9940
9999
  if m.get('ExternalPort') is not None:
@@ -12719,7 +12778,19 @@ class CreateNatGatewayRequestAccessMode(TeaModel):
12719
12778
  mode_value: str = None,
12720
12779
  tunnel_type: str = None,
12721
12780
  ):
12781
+ # Access mode. Valid values:
12782
+ #
12783
+ # - **route**: route mode
12784
+ #
12785
+ # - **tunnel**: tunnel mode
12786
+ #
12787
+ # > If this parameter is specified, you must set **PrivateLinkEnabled** to **true**.
12722
12788
  self.mode_value = mode_value
12789
+ # Tunnel mode type:
12790
+ #
12791
+ # - **geneve**: Geneve type
12792
+ #
12793
+ # > This value takes effect if the access mode is the tunnel mode.
12723
12794
  self.tunnel_type = tunnel_type
12724
12795
 
12725
12796
  def validate(self):
@@ -12752,9 +12823,9 @@ class CreateNatGatewayRequestTag(TeaModel):
12752
12823
  key: str = None,
12753
12824
  value: str = None,
12754
12825
  ):
12755
- # 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://.
12826
+ # 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.
12756
12827
  self.key = key
12757
- # 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://.
12828
+ # 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.
12758
12829
  self.value = value
12759
12830
 
12760
12831
  def validate(self):
@@ -12809,6 +12880,7 @@ class CreateNatGatewayRequest(TeaModel):
12809
12880
  v_switch_id: str = None,
12810
12881
  vpc_id: str = None,
12811
12882
  ):
12883
+ # The access mode for reverse access to the VPC NAT gateway.
12812
12884
  self.access_mode = access_mode
12813
12885
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12814
12886
  self.auto_pay = auto_pay
@@ -12826,13 +12898,11 @@ class CreateNatGatewayRequest(TeaModel):
12826
12898
  self.duration = duration
12827
12899
  # The mode in which the EIP is associated with the NAT gateway. Valid values:
12828
12900
  #
12829
- # * **MULTI_BINDED** (default): Multi-EIP-to-ENI mode.
12830
- #
12831
- # * **NAT**: NAT mode. IPv4 gateways are supported in this mode.
12901
+ # - **MULTI_BINDED**(default): the multi-EIP-to-ENI mode.
12832
12902
  #
12833
- # **\
12903
+ # - **NAT**: NAT mode, which is compatible with IPv4 addresses.
12834
12904
  #
12835
- # **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.
12905
+ # > 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.
12836
12906
  self.eip_bind_mode = eip_bind_mode
12837
12907
  # Specifies whether to enable ICMP retrieval. Valid values:
12838
12908
  #
@@ -12849,7 +12919,7 @@ class CreateNatGatewayRequest(TeaModel):
12849
12919
  self.internet_charge_type = internet_charge_type
12850
12920
  # The name of the NAT gateway.
12851
12921
  #
12852
- # 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.
12922
+ # 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.
12853
12923
  #
12854
12924
  # If this parameter is not set, the system assigns a default name to the NAT gateway.
12855
12925
  self.name = name
@@ -12864,6 +12934,7 @@ class CreateNatGatewayRequest(TeaModel):
12864
12934
  self.owner_id = owner_id
12865
12935
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12866
12936
  self.pricing_cycle = pricing_cycle
12937
+ # PrivateLink is not supported by default. If you set the value to true, PrivateLink is supported.
12867
12938
  self.private_link_enabled = private_link_enabled
12868
12939
  # The region ID of the NAT gateway.
12869
12940
  #
@@ -13024,9 +13095,9 @@ class CreateNatGatewayShrinkRequestTag(TeaModel):
13024
13095
  key: str = None,
13025
13096
  value: str = None,
13026
13097
  ):
13027
- # 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://.
13098
+ # 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.
13028
13099
  self.key = key
13029
- # 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://.
13100
+ # 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.
13030
13101
  self.value = value
13031
13102
 
13032
13103
  def validate(self):
@@ -13081,6 +13152,7 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13081
13152
  v_switch_id: str = None,
13082
13153
  vpc_id: str = None,
13083
13154
  ):
13155
+ # The access mode for reverse access to the VPC NAT gateway.
13084
13156
  self.access_mode_shrink = access_mode_shrink
13085
13157
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
13086
13158
  self.auto_pay = auto_pay
@@ -13098,13 +13170,11 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13098
13170
  self.duration = duration
13099
13171
  # The mode in which the EIP is associated with the NAT gateway. Valid values:
13100
13172
  #
13101
- # * **MULTI_BINDED** (default): Multi-EIP-to-ENI mode.
13173
+ # - **MULTI_BINDED**(default): the multi-EIP-to-ENI mode.
13102
13174
  #
13103
- # * **NAT**: NAT mode. IPv4 gateways are supported in this mode.
13175
+ # - **NAT**: NAT mode, which is compatible with IPv4 addresses.
13104
13176
  #
13105
- # **\
13106
- #
13107
- # **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.
13177
+ # > 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.
13108
13178
  self.eip_bind_mode = eip_bind_mode
13109
13179
  # Specifies whether to enable ICMP retrieval. Valid values:
13110
13180
  #
@@ -13121,7 +13191,7 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13121
13191
  self.internet_charge_type = internet_charge_type
13122
13192
  # The name of the NAT gateway.
13123
13193
  #
13124
- # 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.
13194
+ # 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.
13125
13195
  #
13126
13196
  # If this parameter is not set, the system assigns a default name to the NAT gateway.
13127
13197
  self.name = name
@@ -13136,6 +13206,7 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13136
13206
  self.owner_id = owner_id
13137
13207
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
13138
13208
  self.pricing_cycle = pricing_cycle
13209
+ # PrivateLink is not supported by default. If you set the value to true, PrivateLink is supported.
13139
13210
  self.private_link_enabled = private_link_enabled
13140
13211
  # The region ID of the NAT gateway.
13141
13212
  #
@@ -16849,6 +16920,7 @@ class CreateSnatEntryRequest(TeaModel):
16849
16920
  def __init__(
16850
16921
  self,
16851
16922
  client_token: str = None,
16923
+ dry_run: bool = None,
16852
16924
  eip_affinity: int = None,
16853
16925
  network_interface_id: str = None,
16854
16926
  owner_account: str = None,
@@ -16870,6 +16942,7 @@ class CreateSnatEntryRequest(TeaModel):
16870
16942
  #
16871
16943
  # **Description** 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.
16872
16944
  self.client_token = client_token
16945
+ self.dry_run = dry_run
16873
16946
  # Specifies whether to enable EIP affinity. Valid values:
16874
16947
  #
16875
16948
  # * **0**: no
@@ -16952,6 +17025,8 @@ class CreateSnatEntryRequest(TeaModel):
16952
17025
  result = dict()
16953
17026
  if self.client_token is not None:
16954
17027
  result['ClientToken'] = self.client_token
17028
+ if self.dry_run is not None:
17029
+ result['DryRun'] = self.dry_run
16955
17030
  if self.eip_affinity is not None:
16956
17031
  result['EipAffinity'] = self.eip_affinity
16957
17032
  if self.network_interface_id is not None:
@@ -16982,6 +17057,8 @@ class CreateSnatEntryRequest(TeaModel):
16982
17057
  m = m or dict()
16983
17058
  if m.get('ClientToken') is not None:
16984
17059
  self.client_token = m.get('ClientToken')
17060
+ if m.get('DryRun') is not None:
17061
+ self.dry_run = m.get('DryRun')
16985
17062
  if m.get('EipAffinity') is not None:
16986
17063
  self.eip_affinity = m.get('EipAffinity')
16987
17064
  if m.get('NetworkInterfaceId') is not None:
@@ -17341,18 +17418,25 @@ class CreateSslVpnServerRequest(TeaModel):
17341
17418
  # * **true**\
17342
17419
  # * **false** (default)
17343
17420
  self.compress = compress
17344
- # Specifies whether to enable two-factor authentication. If you enable two-factor authentication, you must configure `IDaaSInstanceId` and `IDaaSRegionId`. Valid values:
17421
+ # Specifies whether to enable two-factor authentication. To enable two-factor authentication, you need to specify `IDaaSInstanceId`, `IDaaSRegionId`, and `IDaaSApplicationId`. Valid values:
17345
17422
  #
17346
- # * **true**: enables this feature.
17347
- # * **false** (default): disables this feature.
17423
+ # * **true**\
17424
+ # * **false** (default)
17425
+ #
17426
+ # >
17348
17427
  #
17349
- # > - 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.
17350
- # > - If two-factor authentication is already enabled for existing SSL servers, you can continue to use two-factor authentication.
17428
+ # * 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.
17429
+ #
17430
+ # * 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.
17351
17431
  self.enable_multi_factor_auth = enable_multi_factor_auth
17432
+ # The ID of the IDaaS application.
17433
+ #
17434
+ # * If an IDaaS EIAM 2.0 instance is associated, you need to specify an IDaaS application ID.
17435
+ # * If an IDaaS EIAM 1.0 instance is associated, you do not need to specify an IDaaS application ID.
17352
17436
  self.idaa_sapplication_id = idaa_sapplication_id
17353
- # The Identity as a Service (IDaaS) instance ID.
17437
+ # The ID of the IDaaS EIAM instance.
17354
17438
  self.idaa_sinstance_id = idaa_sinstance_id
17355
- # The ID of the region where the IDaaS instance is created.
17439
+ # The region ID of the IDaaS EIAM instance.
17356
17440
  self.idaa_sregion_id = idaa_sregion_id
17357
17441
  # The local CIDR block.
17358
17442
  #
@@ -21446,6 +21530,236 @@ class CreateVpnAttachmentRequestTags(TeaModel):
21446
21530
  return self
21447
21531
 
21448
21532
 
21533
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
21534
+ def __init__(
21535
+ self,
21536
+ local_asn: int = None,
21537
+ local_bgp_ip: str = None,
21538
+ tunnel_cidr: str = None,
21539
+ ):
21540
+ self.local_asn = local_asn
21541
+ self.local_bgp_ip = local_bgp_ip
21542
+ self.tunnel_cidr = tunnel_cidr
21543
+
21544
+ def validate(self):
21545
+ pass
21546
+
21547
+ def to_map(self):
21548
+ _map = super().to_map()
21549
+ if _map is not None:
21550
+ return _map
21551
+
21552
+ result = dict()
21553
+ if self.local_asn is not None:
21554
+ result['LocalAsn'] = self.local_asn
21555
+ if self.local_bgp_ip is not None:
21556
+ result['LocalBgpIp'] = self.local_bgp_ip
21557
+ if self.tunnel_cidr is not None:
21558
+ result['TunnelCidr'] = self.tunnel_cidr
21559
+ return result
21560
+
21561
+ def from_map(self, m: dict = None):
21562
+ m = m or dict()
21563
+ if m.get('LocalAsn') is not None:
21564
+ self.local_asn = m.get('LocalAsn')
21565
+ if m.get('LocalBgpIp') is not None:
21566
+ self.local_bgp_ip = m.get('LocalBgpIp')
21567
+ if m.get('TunnelCidr') is not None:
21568
+ self.tunnel_cidr = m.get('TunnelCidr')
21569
+ return self
21570
+
21571
+
21572
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
21573
+ def __init__(
21574
+ self,
21575
+ ike_auth_alg: str = None,
21576
+ ike_enc_alg: str = None,
21577
+ ike_lifetime: int = None,
21578
+ ike_mode: str = None,
21579
+ ike_pfs: str = None,
21580
+ ike_version: str = None,
21581
+ local_id: str = None,
21582
+ psk: str = None,
21583
+ remote_id: str = None,
21584
+ ):
21585
+ self.ike_auth_alg = ike_auth_alg
21586
+ self.ike_enc_alg = ike_enc_alg
21587
+ self.ike_lifetime = ike_lifetime
21588
+ self.ike_mode = ike_mode
21589
+ self.ike_pfs = ike_pfs
21590
+ self.ike_version = ike_version
21591
+ self.local_id = local_id
21592
+ self.psk = psk
21593
+ self.remote_id = remote_id
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.ike_auth_alg is not None:
21605
+ result['IkeAuthAlg'] = self.ike_auth_alg
21606
+ if self.ike_enc_alg is not None:
21607
+ result['IkeEncAlg'] = self.ike_enc_alg
21608
+ if self.ike_lifetime is not None:
21609
+ result['IkeLifetime'] = self.ike_lifetime
21610
+ if self.ike_mode is not None:
21611
+ result['IkeMode'] = self.ike_mode
21612
+ if self.ike_pfs is not None:
21613
+ result['IkePfs'] = self.ike_pfs
21614
+ if self.ike_version is not None:
21615
+ result['IkeVersion'] = self.ike_version
21616
+ if self.local_id is not None:
21617
+ result['LocalId'] = self.local_id
21618
+ if self.psk is not None:
21619
+ result['Psk'] = self.psk
21620
+ if self.remote_id is not None:
21621
+ result['RemoteId'] = self.remote_id
21622
+ return result
21623
+
21624
+ def from_map(self, m: dict = None):
21625
+ m = m or dict()
21626
+ if m.get('IkeAuthAlg') is not None:
21627
+ self.ike_auth_alg = m.get('IkeAuthAlg')
21628
+ if m.get('IkeEncAlg') is not None:
21629
+ self.ike_enc_alg = m.get('IkeEncAlg')
21630
+ if m.get('IkeLifetime') is not None:
21631
+ self.ike_lifetime = m.get('IkeLifetime')
21632
+ if m.get('IkeMode') is not None:
21633
+ self.ike_mode = m.get('IkeMode')
21634
+ if m.get('IkePfs') is not None:
21635
+ self.ike_pfs = m.get('IkePfs')
21636
+ if m.get('IkeVersion') is not None:
21637
+ self.ike_version = m.get('IkeVersion')
21638
+ if m.get('LocalId') is not None:
21639
+ self.local_id = m.get('LocalId')
21640
+ if m.get('Psk') is not None:
21641
+ self.psk = m.get('Psk')
21642
+ if m.get('RemoteId') is not None:
21643
+ self.remote_id = m.get('RemoteId')
21644
+ return self
21645
+
21646
+
21647
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
21648
+ def __init__(
21649
+ self,
21650
+ ipsec_auth_alg: str = None,
21651
+ ipsec_enc_alg: str = None,
21652
+ ipsec_lifetime: int = None,
21653
+ ipsec_pfs: str = None,
21654
+ ):
21655
+ self.ipsec_auth_alg = ipsec_auth_alg
21656
+ self.ipsec_enc_alg = ipsec_enc_alg
21657
+ self.ipsec_lifetime = ipsec_lifetime
21658
+ self.ipsec_pfs = ipsec_pfs
21659
+
21660
+ def validate(self):
21661
+ pass
21662
+
21663
+ def to_map(self):
21664
+ _map = super().to_map()
21665
+ if _map is not None:
21666
+ return _map
21667
+
21668
+ result = dict()
21669
+ if self.ipsec_auth_alg is not None:
21670
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
21671
+ if self.ipsec_enc_alg is not None:
21672
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
21673
+ if self.ipsec_lifetime is not None:
21674
+ result['IpsecLifetime'] = self.ipsec_lifetime
21675
+ if self.ipsec_pfs is not None:
21676
+ result['IpsecPfs'] = self.ipsec_pfs
21677
+ return result
21678
+
21679
+ def from_map(self, m: dict = None):
21680
+ m = m or dict()
21681
+ if m.get('IpsecAuthAlg') is not None:
21682
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
21683
+ if m.get('IpsecEncAlg') is not None:
21684
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
21685
+ if m.get('IpsecLifetime') is not None:
21686
+ self.ipsec_lifetime = m.get('IpsecLifetime')
21687
+ if m.get('IpsecPfs') is not None:
21688
+ self.ipsec_pfs = m.get('IpsecPfs')
21689
+ return self
21690
+
21691
+
21692
+ class CreateVpnAttachmentRequestTunnelOptionsSpecification(TeaModel):
21693
+ def __init__(
21694
+ self,
21695
+ customer_gateway_id: str = None,
21696
+ enable_dpd: bool = None,
21697
+ enable_nat_traversal: bool = None,
21698
+ tunnel_bgp_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig = None,
21699
+ tunnel_ike_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
21700
+ tunnel_index: int = None,
21701
+ tunnel_ipsec_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
21702
+ ):
21703
+ self.customer_gateway_id = customer_gateway_id
21704
+ self.enable_dpd = enable_dpd
21705
+ self.enable_nat_traversal = enable_nat_traversal
21706
+ self.tunnel_bgp_config = tunnel_bgp_config
21707
+ self.tunnel_ike_config = tunnel_ike_config
21708
+ self.tunnel_index = tunnel_index
21709
+ self.tunnel_ipsec_config = tunnel_ipsec_config
21710
+
21711
+ def validate(self):
21712
+ if self.tunnel_bgp_config:
21713
+ self.tunnel_bgp_config.validate()
21714
+ if self.tunnel_ike_config:
21715
+ self.tunnel_ike_config.validate()
21716
+ if self.tunnel_ipsec_config:
21717
+ self.tunnel_ipsec_config.validate()
21718
+
21719
+ def to_map(self):
21720
+ _map = super().to_map()
21721
+ if _map is not None:
21722
+ return _map
21723
+
21724
+ result = dict()
21725
+ if self.customer_gateway_id is not None:
21726
+ result['CustomerGatewayId'] = self.customer_gateway_id
21727
+ if self.enable_dpd is not None:
21728
+ result['EnableDpd'] = self.enable_dpd
21729
+ if self.enable_nat_traversal is not None:
21730
+ result['EnableNatTraversal'] = self.enable_nat_traversal
21731
+ if self.tunnel_bgp_config is not None:
21732
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
21733
+ if self.tunnel_ike_config is not None:
21734
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
21735
+ if self.tunnel_index is not None:
21736
+ result['TunnelIndex'] = self.tunnel_index
21737
+ if self.tunnel_ipsec_config is not None:
21738
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
21739
+ return result
21740
+
21741
+ def from_map(self, m: dict = None):
21742
+ m = m or dict()
21743
+ if m.get('CustomerGatewayId') is not None:
21744
+ self.customer_gateway_id = m.get('CustomerGatewayId')
21745
+ if m.get('EnableDpd') is not None:
21746
+ self.enable_dpd = m.get('EnableDpd')
21747
+ if m.get('EnableNatTraversal') is not None:
21748
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
21749
+ if m.get('TunnelBgpConfig') is not None:
21750
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig()
21751
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
21752
+ if m.get('TunnelIkeConfig') is not None:
21753
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig()
21754
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
21755
+ if m.get('TunnelIndex') is not None:
21756
+ self.tunnel_index = m.get('TunnelIndex')
21757
+ if m.get('TunnelIpsecConfig') is not None:
21758
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig()
21759
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
21760
+ return self
21761
+
21762
+
21449
21763
  class CreateVpnAttachmentRequest(TeaModel):
21450
21764
  def __init__(
21451
21765
  self,
@@ -21456,6 +21770,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21456
21770
  effect_immediately: bool = None,
21457
21771
  enable_dpd: bool = None,
21458
21772
  enable_nat_traversal: bool = None,
21773
+ enable_tunnels_bgp: bool = None,
21459
21774
  health_check_config: str = None,
21460
21775
  ike_config: str = None,
21461
21776
  ipsec_config: str = None,
@@ -21470,6 +21785,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21470
21785
  resource_owner_account: str = None,
21471
21786
  resource_owner_id: int = None,
21472
21787
  tags: List[CreateVpnAttachmentRequestTags] = None,
21788
+ tunnel_options_specification: List[CreateVpnAttachmentRequestTunnelOptionsSpecification] = None,
21473
21789
  ):
21474
21790
  # Specifies whether to automatically configure routes. Valid values:
21475
21791
  #
@@ -21499,9 +21815,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21499
21815
  #
21500
21816
  # > 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.
21501
21817
  self.client_token = client_token
21502
- # The ID of the customer gateway.
21503
- #
21504
- # This parameter is required.
21818
+ # The customer gateway ID.
21505
21819
  self.customer_gateway_id = customer_gateway_id
21506
21820
  # Specifies whether to immediately start IPsec negotiations after the configuration takes effect. Valid values:
21507
21821
  #
@@ -21518,6 +21832,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21518
21832
  # * **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.
21519
21833
  # * **false**\
21520
21834
  self.enable_nat_traversal = enable_nat_traversal
21835
+ self.enable_tunnels_bgp = enable_tunnels_bgp
21521
21836
  # The health check configuration:
21522
21837
  #
21523
21838
  # * **HealthCheckConfig.enable**: specifies whether to enable health checks. Valid values: **true** and **false**. Default value: false.
@@ -21537,14 +21852,14 @@ class CreateVpnAttachmentRequest(TeaModel):
21537
21852
  self.health_check_config = health_check_config
21538
21853
  # The configurations of Phase 1 negotiations:
21539
21854
  #
21540
- # * **IkeConfig.Psk**: The pre-shared key that is used for authentication between the VPN gateway and the data center.
21855
+ # * **IkeConfig.Psk**: the pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
21541
21856
  #
21542
- # * It must be 1 to 100 characters in length, and can contain letters, digits, and the following characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21543
- # * 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.
21857
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21858
+ # * 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.
21544
21859
  #
21545
- # > 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.
21860
+ # > 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.
21546
21861
  #
21547
- # * **IkeConfig.IkeVersion**: the IKE version. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21862
+ # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21548
21863
  #
21549
21864
  # * **IkeConfig.IkeMode**: the negotiation mode. Valid values: **main** and **aggressive**. Default value: **main**.
21550
21865
  #
@@ -21554,9 +21869,9 @@ class CreateVpnAttachmentRequest(TeaModel):
21554
21869
  #
21555
21870
  # * **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**.
21556
21871
  #
21557
- # * **IkeConfig.IkeLifetime**: the SA lifetime determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
21872
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
21558
21873
  #
21559
- # * **IkeConfig.LocalId**: the identifier on the Alibaba Cloud side. The identifier cannot exceed 100 characters in length. This parameter is empty by default.
21874
+ # * **IkeConfig.LocalIdIPsec**: the identifier on the Alibaba Cloud side. The identifier cannot exceed 100 characters in length. This parameter is left empty by default.
21560
21875
  #
21561
21876
  # * **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.
21562
21877
  self.ike_config = ike_config
@@ -21620,12 +21935,17 @@ class CreateVpnAttachmentRequest(TeaModel):
21620
21935
  #
21621
21936
  # Each tag key corresponds to one tag value. You can specify up to 20 tag values in each call.
21622
21937
  self.tags = tags
21938
+ self.tunnel_options_specification = tunnel_options_specification
21623
21939
 
21624
21940
  def validate(self):
21625
21941
  if self.tags:
21626
21942
  for k in self.tags:
21627
21943
  if k:
21628
21944
  k.validate()
21945
+ if self.tunnel_options_specification:
21946
+ for k in self.tunnel_options_specification:
21947
+ if k:
21948
+ k.validate()
21629
21949
 
21630
21950
  def to_map(self):
21631
21951
  _map = super().to_map()
@@ -21647,6 +21967,8 @@ class CreateVpnAttachmentRequest(TeaModel):
21647
21967
  result['EnableDpd'] = self.enable_dpd
21648
21968
  if self.enable_nat_traversal is not None:
21649
21969
  result['EnableNatTraversal'] = self.enable_nat_traversal
21970
+ if self.enable_tunnels_bgp is not None:
21971
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
21650
21972
  if self.health_check_config is not None:
21651
21973
  result['HealthCheckConfig'] = self.health_check_config
21652
21974
  if self.ike_config is not None:
@@ -21677,6 +21999,10 @@ class CreateVpnAttachmentRequest(TeaModel):
21677
21999
  if self.tags is not None:
21678
22000
  for k in self.tags:
21679
22001
  result['Tags'].append(k.to_map() if k else None)
22002
+ result['TunnelOptionsSpecification'] = []
22003
+ if self.tunnel_options_specification is not None:
22004
+ for k in self.tunnel_options_specification:
22005
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
21680
22006
  return result
21681
22007
 
21682
22008
  def from_map(self, m: dict = None):
@@ -21695,6 +22021,8 @@ class CreateVpnAttachmentRequest(TeaModel):
21695
22021
  self.enable_dpd = m.get('EnableDpd')
21696
22022
  if m.get('EnableNatTraversal') is not None:
21697
22023
  self.enable_nat_traversal = m.get('EnableNatTraversal')
22024
+ if m.get('EnableTunnelsBgp') is not None:
22025
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
21698
22026
  if m.get('HealthCheckConfig') is not None:
21699
22027
  self.health_check_config = m.get('HealthCheckConfig')
21700
22028
  if m.get('IkeConfig') is not None:
@@ -21726,6 +22054,11 @@ class CreateVpnAttachmentRequest(TeaModel):
21726
22054
  for k in m.get('Tags'):
21727
22055
  temp_model = CreateVpnAttachmentRequestTags()
21728
22056
  self.tags.append(temp_model.from_map(k))
22057
+ self.tunnel_options_specification = []
22058
+ if m.get('TunnelOptionsSpecification') is not None:
22059
+ for k in m.get('TunnelOptionsSpecification'):
22060
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecification()
22061
+ self.tunnel_options_specification.append(temp_model.from_map(k))
21729
22062
  return self
21730
22063
 
21731
22064
 
@@ -21895,17 +22228,19 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaMod
21895
22228
  local_bgp_ip: str = None,
21896
22229
  tunnel_cidr: str = None,
21897
22230
  ):
21898
- # The ASN on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
22231
+ # The autonomous system number (ASN) of the tunnel on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
22232
+ #
22233
+ #
21899
22234
  #
21900
- # > * If you set **EnableTunnelsBgp** to **true**, this parameter is required.
21901
- # >* 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).
21902
- # >* 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.
22235
+ # > - If you set **EnableTunnelsBgp** to **true**, you must set this parameter.
22236
+ # > - 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).
22237
+ # > - 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.
21903
22238
  self.local_asn = local_asn
21904
- # The BGP address on the Alibaba Cloud side. The address is an IP address that falls within the BGP CIDR block range.
22239
+ # 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.
21905
22240
  self.local_bgp_ip = local_bgp_ip
21906
- # 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.
22241
+ # 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.
21907
22242
  #
21908
- # > The BGP CIDR block of a tunnel associated with a VPN gateway must be unique.
22243
+ # > The BGP CIDR block of each tunnel must be unique on a VPN gateway.
21909
22244
  self.tunnel_cidr = tunnel_cidr
21910
22245
 
21911
22246
  def validate(self):
@@ -21957,36 +22292,36 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaMod
21957
22292
  #
21958
22293
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**. Default value: **aes**.
21959
22294
  self.ike_enc_alg = ike_enc_alg
21960
- # The SA lifetime that is determined by Phase 1 negotiations. Unit: seconds.
22295
+ # The SA lifetime as a result of Phase 1 negotiations. Unit: seconds.
21961
22296
  #
21962
22297
  # Valid values: **0** to **86400**. Default value: **86400**.
21963
22298
  self.ike_lifetime = ike_lifetime
21964
22299
  # The negotiation mode of IKE. Valid values: **main** and **aggressive**. Default value: **main**.
21965
22300
  #
21966
- # * **main**: This mode offers higher security during negotiations.
21967
- # * **aggressive**: This mode is faster and has a higher success rate.
22301
+ # * **main:** This mode offers higher security during negotiations.
22302
+ # * **aggressive**: This mode supports faster negotiations and a higher success rate.
21968
22303
  self.ike_mode = ike_mode
21969
- # The DH key exchange algorithm that is used in Phase 1 negotiations. Default value: **group2**.\\
22304
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Default value: **group2**.\\
21970
22305
  # Valid values: **group1**, **group2**, **group5**, and **group14**.
21971
22306
  self.ike_pfs = ike_pfs
21972
22307
  # The version of the IKE protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21973
22308
  #
21974
- # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
22309
+ # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and provides better support for scenarios with multiple CIDR blocks.
21975
22310
  self.ike_version = ike_version
21976
- # 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.
22311
+ # 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.
21977
22312
  #
21978
- # You can set **LocalId** to a fully qualified domain name (FQDN). In this case, we recommend that you set IkeMode to **aggressive**.
22313
+ # **LocalId** supports fully qualified domain names (FQDNs). If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
21979
22314
  self.local_id = local_id
21980
- # The pre-shared key, which is used for identity authentication between the tunnel and the tunnel peer.
22315
+ # The pre-shared key that is used for identity authentication between the tunnel and the tunnel peer.
21981
22316
  #
21982
- # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21983
- # * 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.
22317
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22318
+ # * 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.
21984
22319
  #
21985
22320
  # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be established.
21986
22321
  self.psk = psk
21987
- # 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.
22322
+ # 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.
21988
22323
  #
21989
- # You can set **RemoteId** to an FQDN. In this case, we recommend that you set IkeMode to **aggressive**.
22324
+ # **RemoteId** supports FQDNs. If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
21990
22325
  self.remote_id = remote_id
21991
22326
 
21992
22327
  def validate(self):
@@ -22057,11 +22392,11 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaM
22057
22392
  #
22058
22393
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**. Default value: **aes**.
22059
22394
  self.ipsec_enc_alg = ipsec_enc_alg
22060
- # The SA lifetime that is determined by Phase 2 negotiations. Unit: seconds.
22395
+ # The SA lifetime as a result of Phase 2 negotiations. Unit: seconds.
22061
22396
  #
22062
22397
  # Valid values: **0** to **86400**. Default value: **86400**.
22063
22398
  self.ipsec_lifetime = ipsec_lifetime
22064
- # The DH key exchange algorithm that is used in Phase 2 negotiations. Default value: **group2**.
22399
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 2 negotiations. Default value: **group2**.
22065
22400
  #
22066
22401
  # Valid values: **disabled**, **group1**, **group2**, **group5**, and **group14**.
22067
22402
  self.ipsec_pfs = ipsec_pfs
@@ -22110,33 +22445,33 @@ class CreateVpnConnectionRequestTunnelOptionsSpecification(TeaModel):
22110
22445
  tunnel_ike_config: CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
22111
22446
  tunnel_ipsec_config: CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
22112
22447
  ):
22113
- # The ID of the customer gateway associated with the tunnel.
22448
+ # The ID of the customer gateway that is associated with the tunnel.
22114
22449
  #
22115
- # > * This parameter is required if the VPN gateway supports the dual-tunnel mode.
22116
- # >* You can specify the parameters in the **TunnelOptionsSpecification** array if you create an IPsec-VPN connection in dual-tunnel mode.
22117
- # >* 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.
22450
+ # > - This parameter is required when you create an IPsec-VPN connection in dual-tunnel mode.
22451
+ # > - You can specify parameters in the **TunnelOptionsSpecification** array when you create an IPsec-VPN connection in dual tunnel mode.
22452
+ # > - 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.
22118
22453
  self.customer_gateway_id = customer_gateway_id
22119
- # Specifies whether to enable DPD for the tunnel. Valid values:
22454
+ # Specifies whether to enable the Dead Peer Detection (DPD) feature for the tunnel. Valid values:
22120
22455
  #
22121
- # * **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.
22122
- # * **false**\
22456
+ # * **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.
22457
+ # * **false**: disables DPD. The initiator of the IPsec-VPN connection does not send DPD packets.
22123
22458
  self.enable_dpd = enable_dpd
22124
22459
  # Specifies whether to enable NAT traversal for the tunnel. Valid values:
22125
22460
  #
22126
- # * **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.
22127
- # * **false**\
22461
+ # * **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.
22462
+ # * **false**: disables NAT traversal.
22128
22463
  self.enable_nat_traversal = enable_nat_traversal
22129
- # The CA certificate. If the VPN gateway is of the SM type, you must configure a CA certificate for the peer gateway device.
22464
+ # If the VPN gateway uses an SM certificate, you need to configure the CA certificate used by the IPsec peer.
22130
22465
  #
22131
- # * If an SM VPN gateway is used to create the IPsec-VPN connection, this parameter is required.
22132
- # * If a standard VPN gateway is used to create the IPsec-VPN connection, leave this parameter empty.
22466
+ # * If the VPN gateway uses an SM certificate, this parameter is required.
22467
+ # * If the VPN gateway does not use an SM certificate, leave this parameter empty.
22133
22468
  self.remote_ca_certificate = remote_ca_certificate
22134
- # The role of the tunnel. Valid values:
22469
+ # The role of the tunnel. Valid values: Valid values:
22135
22470
  #
22136
- # * **master**: The tunnel is the active tunnel.
22137
- # * **slave**: The tunnel is the standby tunnel.
22471
+ # * **master**: The tunnel is an active tunnel.
22472
+ # * **slave**: The tunnel is a standby tunnel.
22138
22473
  self.role = role
22139
- # The BGP configurations for the tunnel.
22474
+ # The Border Gateway Protocol (BGP) configurations of the tunnel.
22140
22475
  self.tunnel_bgp_config = tunnel_bgp_config
22141
22476
  # The configurations of Phase 1 negotiations.
22142
22477
  self.tunnel_ike_config = tunnel_ike_config
@@ -22295,26 +22630,28 @@ class CreateVpnConnectionRequest(TeaModel):
22295
22630
  # * **HealthCheckConfig.interval**: the time interval of health check retries. Unit: seconds. Default value: **3**.
22296
22631
  # * **HealthCheckConfig.retry**: the maximum number of health check retries. Default value: **3**.
22297
22632
  self.health_check_config = health_check_config
22298
- # This parameter is available if you create an IPsec-VPN connection in single-tunnel mode.
22633
+ # This parameter is supported if you create an IPsec-VPN connection in single-tunnel mode.
22299
22634
  #
22300
22635
  # The configurations of Phase 1 negotiations:
22301
22636
  #
22302
- # * **IkeConfig.Psk**: The pre-shared key that is used for authentication between the VPN gateway and the on-premises database.
22637
+ # * **IkeConfig.Psk**: the pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
22638
+ #
22639
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22303
22640
  #
22304
- # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22641
+ # * 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.
22305
22642
  #
22306
- # * 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.
22643
+ # **\
22307
22644
  #
22308
- # >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.
22645
+ # **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.
22309
22646
  #
22310
22647
  # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
22311
22648
  #
22312
- # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
22649
+ # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and provides better support for scenarios with multiple CIDR blocks.
22313
22650
  #
22314
22651
  # * **IkeConfig.IkeMode**: the negotiation mode of IKE. Valid values: **main** and **aggressive**. Default value: **main**.
22315
22652
  #
22316
22653
  # * **main:** This mode offers higher security during negotiations.
22317
- # * **aggressive:** This mode is faster and has a higher success rate.
22654
+ # * **aggressive**: This mode supports faster negotiations and a higher success rate.
22318
22655
  #
22319
22656
  # * **IkeConfig.IkeEncAlg**: the encryption algorithm that is used in Phase 1 negotiations.
22320
22657
  #
@@ -22324,13 +22661,13 @@ class CreateVpnConnectionRequest(TeaModel):
22324
22661
  #
22325
22662
  # Valid values: **md5**, **sha1**, **sha256**, **sha384**, and **sha512**. Default value: **md5**.
22326
22663
  #
22327
- # * **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**.
22664
+ # * **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**.
22328
22665
  #
22329
- # * **IkeConfig.IkeLifetime**: the SA lifetime determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
22666
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
22330
22667
  #
22331
- # * **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.
22668
+ # * **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.
22332
22669
  #
22333
- # * **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.
22670
+ # * **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.
22334
22671
  self.ike_config = ike_config
22335
22672
  # This parameter is available if you create an IPsec-VPN connection in single-tunnel mode.
22336
22673
  #
@@ -22397,8 +22734,8 @@ class CreateVpnConnectionRequest(TeaModel):
22397
22734
  self.tags = tags
22398
22735
  # The tunnel configurations.
22399
22736
  #
22400
- # * You can specify the parameters in the **TunnelOptionsSpecification** array if you create an IPsec-VPN connection in dual-tunnel mode.
22401
- # * 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.
22737
+ # * You can specify parameters in the **TunnelOptionsSpecification** array when you create an IPsec-VPN connection in dual tunnel mode.
22738
+ # * 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.
22402
22739
  self.tunnel_options_specification = tunnel_options_specification
22403
22740
  # The ID of the VPN gateway.
22404
22741
  #
@@ -37386,6 +37723,39 @@ class DescribeEipSegmentResponse(TeaModel):
37386
37723
  return self
37387
37724
 
37388
37725
 
37726
+ class DescribeExpressConnectTrafficQosRequestTags(TeaModel):
37727
+ def __init__(
37728
+ self,
37729
+ key: str = None,
37730
+ value: str = None,
37731
+ ):
37732
+ self.key = key
37733
+ self.value = value
37734
+
37735
+ def validate(self):
37736
+ pass
37737
+
37738
+ def to_map(self):
37739
+ _map = super().to_map()
37740
+ if _map is not None:
37741
+ return _map
37742
+
37743
+ result = dict()
37744
+ if self.key is not None:
37745
+ result['Key'] = self.key
37746
+ if self.value is not None:
37747
+ result['Value'] = self.value
37748
+ return result
37749
+
37750
+ def from_map(self, m: dict = None):
37751
+ m = m or dict()
37752
+ if m.get('Key') is not None:
37753
+ self.key = m.get('Key')
37754
+ if m.get('Value') is not None:
37755
+ self.value = m.get('Value')
37756
+ return self
37757
+
37758
+
37389
37759
  class DescribeExpressConnectTrafficQosRequest(TeaModel):
37390
37760
  def __init__(
37391
37761
  self,
@@ -37397,7 +37767,9 @@ class DescribeExpressConnectTrafficQosRequest(TeaModel):
37397
37767
  qos_id_list: List[str] = None,
37398
37768
  qos_name_list: List[str] = None,
37399
37769
  region_id: str = None,
37770
+ resource_group_id: str = None,
37400
37771
  resource_owner_account: str = None,
37772
+ tags: List[DescribeExpressConnectTrafficQosRequestTags] = None,
37401
37773
  ):
37402
37774
  self.client_token = client_token
37403
37775
  self.max_results = max_results
@@ -37408,10 +37780,15 @@ class DescribeExpressConnectTrafficQosRequest(TeaModel):
37408
37780
  self.qos_name_list = qos_name_list
37409
37781
  # This parameter is required.
37410
37782
  self.region_id = region_id
37783
+ self.resource_group_id = resource_group_id
37411
37784
  self.resource_owner_account = resource_owner_account
37785
+ self.tags = tags
37412
37786
 
37413
37787
  def validate(self):
37414
- pass
37788
+ if self.tags:
37789
+ for k in self.tags:
37790
+ if k:
37791
+ k.validate()
37415
37792
 
37416
37793
  def to_map(self):
37417
37794
  _map = super().to_map()
@@ -37435,8 +37812,14 @@ class DescribeExpressConnectTrafficQosRequest(TeaModel):
37435
37812
  result['QosNameList'] = self.qos_name_list
37436
37813
  if self.region_id is not None:
37437
37814
  result['RegionId'] = self.region_id
37815
+ if self.resource_group_id is not None:
37816
+ result['ResourceGroupId'] = self.resource_group_id
37438
37817
  if self.resource_owner_account is not None:
37439
37818
  result['ResourceOwnerAccount'] = self.resource_owner_account
37819
+ result['Tags'] = []
37820
+ if self.tags is not None:
37821
+ for k in self.tags:
37822
+ result['Tags'].append(k.to_map() if k else None)
37440
37823
  return result
37441
37824
 
37442
37825
  def from_map(self, m: dict = None):
@@ -37457,8 +37840,15 @@ class DescribeExpressConnectTrafficQosRequest(TeaModel):
37457
37840
  self.qos_name_list = m.get('QosNameList')
37458
37841
  if m.get('RegionId') is not None:
37459
37842
  self.region_id = m.get('RegionId')
37843
+ if m.get('ResourceGroupId') is not None:
37844
+ self.resource_group_id = m.get('ResourceGroupId')
37460
37845
  if m.get('ResourceOwnerAccount') is not None:
37461
37846
  self.resource_owner_account = m.get('ResourceOwnerAccount')
37847
+ self.tags = []
37848
+ if m.get('Tags') is not None:
37849
+ for k in m.get('Tags'):
37850
+ temp_model = DescribeExpressConnectTrafficQosRequestTags()
37851
+ self.tags.append(temp_model.from_map(k))
37462
37852
  return self
37463
37853
 
37464
37854
 
@@ -37570,6 +37960,39 @@ class DescribeExpressConnectTrafficQosResponseBodyQosListQueueList(TeaModel):
37570
37960
  return self
37571
37961
 
37572
37962
 
37963
+ class DescribeExpressConnectTrafficQosResponseBodyQosListTags(TeaModel):
37964
+ def __init__(
37965
+ self,
37966
+ key: str = None,
37967
+ value: str = None,
37968
+ ):
37969
+ self.key = key
37970
+ self.value = value
37971
+
37972
+ def validate(self):
37973
+ pass
37974
+
37975
+ def to_map(self):
37976
+ _map = super().to_map()
37977
+ if _map is not None:
37978
+ return _map
37979
+
37980
+ result = dict()
37981
+ if self.key is not None:
37982
+ result['Key'] = self.key
37983
+ if self.value is not None:
37984
+ result['Value'] = self.value
37985
+ return result
37986
+
37987
+ def from_map(self, m: dict = None):
37988
+ m = m or dict()
37989
+ if m.get('Key') is not None:
37990
+ self.key = m.get('Key')
37991
+ if m.get('Value') is not None:
37992
+ self.value = m.get('Value')
37993
+ return self
37994
+
37995
+
37573
37996
  class DescribeExpressConnectTrafficQosResponseBodyQosList(TeaModel):
37574
37997
  def __init__(
37575
37998
  self,
@@ -37579,7 +38002,9 @@ class DescribeExpressConnectTrafficQosResponseBodyQosList(TeaModel):
37579
38002
  qos_id: str = None,
37580
38003
  qos_name: str = None,
37581
38004
  queue_list: List[DescribeExpressConnectTrafficQosResponseBodyQosListQueueList] = None,
38005
+ resource_group_id: str = None,
37582
38006
  status: str = None,
38007
+ tags: List[DescribeExpressConnectTrafficQosResponseBodyQosListTags] = None,
37583
38008
  ):
37584
38009
  self.associated_instance_list = associated_instance_list
37585
38010
  self.progressing = progressing
@@ -37587,7 +38012,9 @@ class DescribeExpressConnectTrafficQosResponseBodyQosList(TeaModel):
37587
38012
  self.qos_id = qos_id
37588
38013
  self.qos_name = qos_name
37589
38014
  self.queue_list = queue_list
38015
+ self.resource_group_id = resource_group_id
37590
38016
  self.status = status
38017
+ self.tags = tags
37591
38018
 
37592
38019
  def validate(self):
37593
38020
  if self.associated_instance_list:
@@ -37598,6 +38025,10 @@ class DescribeExpressConnectTrafficQosResponseBodyQosList(TeaModel):
37598
38025
  for k in self.queue_list:
37599
38026
  if k:
37600
38027
  k.validate()
38028
+ if self.tags:
38029
+ for k in self.tags:
38030
+ if k:
38031
+ k.validate()
37601
38032
 
37602
38033
  def to_map(self):
37603
38034
  _map = super().to_map()
@@ -37621,8 +38052,14 @@ class DescribeExpressConnectTrafficQosResponseBodyQosList(TeaModel):
37621
38052
  if self.queue_list is not None:
37622
38053
  for k in self.queue_list:
37623
38054
  result['QueueList'].append(k.to_map() if k else None)
38055
+ if self.resource_group_id is not None:
38056
+ result['ResourceGroupId'] = self.resource_group_id
37624
38057
  if self.status is not None:
37625
38058
  result['Status'] = self.status
38059
+ result['Tags'] = []
38060
+ if self.tags is not None:
38061
+ for k in self.tags:
38062
+ result['Tags'].append(k.to_map() if k else None)
37626
38063
  return result
37627
38064
 
37628
38065
  def from_map(self, m: dict = None):
@@ -37645,8 +38082,15 @@ class DescribeExpressConnectTrafficQosResponseBodyQosList(TeaModel):
37645
38082
  for k in m.get('QueueList'):
37646
38083
  temp_model = DescribeExpressConnectTrafficQosResponseBodyQosListQueueList()
37647
38084
  self.queue_list.append(temp_model.from_map(k))
38085
+ if m.get('ResourceGroupId') is not None:
38086
+ self.resource_group_id = m.get('ResourceGroupId')
37648
38087
  if m.get('Status') is not None:
37649
38088
  self.status = m.get('Status')
38089
+ self.tags = []
38090
+ if m.get('Tags') is not None:
38091
+ for k in m.get('Tags'):
38092
+ temp_model = DescribeExpressConnectTrafficQosResponseBodyQosListTags()
38093
+ self.tags.append(temp_model.from_map(k))
37650
38094
  return self
37651
38095
 
37652
38096
 
@@ -56989,6 +57433,7 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
56989
57433
  community: str = None,
56990
57434
  create_time: int = None,
56991
57435
  next_hop: str = None,
57436
+ next_hop_tunnel_id_list: List[str] = None,
56992
57437
  route_dest: str = None,
56993
57438
  route_entry_type: str = None,
56994
57439
  source: str = None,
@@ -57006,6 +57451,7 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57006
57451
  self.create_time = create_time
57007
57452
  # The next hop of the route.
57008
57453
  self.next_hop = next_hop
57454
+ self.next_hop_tunnel_id_list = next_hop_tunnel_id_list
57009
57455
  # The destination CIDR block of the route.
57010
57456
  self.route_dest = route_dest
57011
57457
  # The route type. Valid values:
@@ -57048,6 +57494,8 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57048
57494
  result['CreateTime'] = self.create_time
57049
57495
  if self.next_hop is not None:
57050
57496
  result['NextHop'] = self.next_hop
57497
+ if self.next_hop_tunnel_id_list is not None:
57498
+ result['NextHopTunnelIdList'] = self.next_hop_tunnel_id_list
57051
57499
  if self.route_dest is not None:
57052
57500
  result['RouteDest'] = self.route_dest
57053
57501
  if self.route_entry_type is not None:
@@ -57072,6 +57520,8 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57072
57520
  self.create_time = m.get('CreateTime')
57073
57521
  if m.get('NextHop') is not None:
57074
57522
  self.next_hop = m.get('NextHop')
57523
+ if m.get('NextHopTunnelIdList') is not None:
57524
+ self.next_hop_tunnel_id_list = m.get('NextHopTunnelIdList')
57075
57525
  if m.get('RouteDest') is not None:
57076
57526
  self.route_dest = m.get('RouteDest')
57077
57527
  if m.get('RouteEntryType') is not None:
@@ -57087,6 +57537,45 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57087
57537
  return self
57088
57538
 
57089
57539
 
57540
+ class DescribeVcoRouteEntriesResponseBodyVpnRouteCounts(TeaModel):
57541
+ def __init__(
57542
+ self,
57543
+ route_count: int = None,
57544
+ route_entry_type: str = None,
57545
+ source: str = None,
57546
+ ):
57547
+ self.route_count = route_count
57548
+ self.route_entry_type = route_entry_type
57549
+ self.source = source
57550
+
57551
+ def validate(self):
57552
+ pass
57553
+
57554
+ def to_map(self):
57555
+ _map = super().to_map()
57556
+ if _map is not None:
57557
+ return _map
57558
+
57559
+ result = dict()
57560
+ if self.route_count is not None:
57561
+ result['RouteCount'] = self.route_count
57562
+ if self.route_entry_type is not None:
57563
+ result['RouteEntryType'] = self.route_entry_type
57564
+ if self.source is not None:
57565
+ result['Source'] = self.source
57566
+ return result
57567
+
57568
+ def from_map(self, m: dict = None):
57569
+ m = m or dict()
57570
+ if m.get('RouteCount') is not None:
57571
+ self.route_count = m.get('RouteCount')
57572
+ if m.get('RouteEntryType') is not None:
57573
+ self.route_entry_type = m.get('RouteEntryType')
57574
+ if m.get('Source') is not None:
57575
+ self.source = m.get('Source')
57576
+ return self
57577
+
57578
+
57090
57579
  class DescribeVcoRouteEntriesResponseBody(TeaModel):
57091
57580
  def __init__(
57092
57581
  self,
@@ -57095,6 +57584,7 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57095
57584
  request_id: str = None,
57096
57585
  total_count: int = None,
57097
57586
  vco_route_entries: List[DescribeVcoRouteEntriesResponseBodyVcoRouteEntries] = None,
57587
+ vpn_route_counts: List[DescribeVcoRouteEntriesResponseBodyVpnRouteCounts] = None,
57098
57588
  ):
57099
57589
  # The number of the returned page.
57100
57590
  self.page_number = page_number
@@ -57106,12 +57596,17 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57106
57596
  self.total_count = total_count
57107
57597
  # The list of routes.
57108
57598
  self.vco_route_entries = vco_route_entries
57599
+ self.vpn_route_counts = vpn_route_counts
57109
57600
 
57110
57601
  def validate(self):
57111
57602
  if self.vco_route_entries:
57112
57603
  for k in self.vco_route_entries:
57113
57604
  if k:
57114
57605
  k.validate()
57606
+ if self.vpn_route_counts:
57607
+ for k in self.vpn_route_counts:
57608
+ if k:
57609
+ k.validate()
57115
57610
 
57116
57611
  def to_map(self):
57117
57612
  _map = super().to_map()
@@ -57131,6 +57626,10 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57131
57626
  if self.vco_route_entries is not None:
57132
57627
  for k in self.vco_route_entries:
57133
57628
  result['VcoRouteEntries'].append(k.to_map() if k else None)
57629
+ result['VpnRouteCounts'] = []
57630
+ if self.vpn_route_counts is not None:
57631
+ for k in self.vpn_route_counts:
57632
+ result['VpnRouteCounts'].append(k.to_map() if k else None)
57134
57633
  return result
57135
57634
 
57136
57635
  def from_map(self, m: dict = None):
@@ -57148,6 +57647,11 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57148
57647
  for k in m.get('VcoRouteEntries'):
57149
57648
  temp_model = DescribeVcoRouteEntriesResponseBodyVcoRouteEntries()
57150
57649
  self.vco_route_entries.append(temp_model.from_map(k))
57650
+ self.vpn_route_counts = []
57651
+ if m.get('VpnRouteCounts') is not None:
57652
+ for k in m.get('VpnRouteCounts'):
57653
+ temp_model = DescribeVcoRouteEntriesResponseBodyVpnRouteCounts()
57654
+ self.vpn_route_counts.append(temp_model.from_map(k))
57151
57655
  return self
57152
57656
 
57153
57657
 
@@ -60471,6 +60975,39 @@ class DescribeVpnAttachmentsRequest(TeaModel):
60471
60975
  return self
60472
60976
 
60473
60977
 
60978
+ class DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags(TeaModel):
60979
+ def __init__(
60980
+ self,
60981
+ key: str = None,
60982
+ value: str = None,
60983
+ ):
60984
+ self.key = key
60985
+ self.value = value
60986
+
60987
+ def validate(self):
60988
+ pass
60989
+
60990
+ def to_map(self):
60991
+ _map = super().to_map()
60992
+ if _map is not None:
60993
+ return _map
60994
+
60995
+ result = dict()
60996
+ if self.key is not None:
60997
+ result['Key'] = self.key
60998
+ if self.value is not None:
60999
+ result['Value'] = self.value
61000
+ return result
61001
+
61002
+ def from_map(self, m: dict = None):
61003
+ m = m or dict()
61004
+ if m.get('Key') is not None:
61005
+ self.key = m.get('Key')
61006
+ if m.get('Value') is not None:
61007
+ self.value = m.get('Value')
61008
+ return self
61009
+
61010
+
60474
61011
  class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60475
61012
  def __init__(
60476
61013
  self,
@@ -60479,6 +61016,8 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60479
61016
  description: str = None,
60480
61017
  instance_id: str = None,
60481
61018
  name: str = None,
61019
+ tag: str = None,
61020
+ tags: List[DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags] = None,
60482
61021
  transit_router_id: str = None,
60483
61022
  transit_router_name: str = None,
60484
61023
  ):
@@ -60495,13 +61034,18 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60495
61034
  self.instance_id = instance_id
60496
61035
  # The name of the IPsec-VPN connection.
60497
61036
  self.name = name
61037
+ self.tag = tag
61038
+ self.tags = tags
60498
61039
  # The ID of the transit router with which the IPsec-VPN connection is associated.
60499
61040
  self.transit_router_id = transit_router_id
60500
61041
  # The name of the transit router.
60501
61042
  self.transit_router_name = transit_router_name
60502
61043
 
60503
61044
  def validate(self):
60504
- pass
61045
+ if self.tags:
61046
+ for k in self.tags:
61047
+ if k:
61048
+ k.validate()
60505
61049
 
60506
61050
  def to_map(self):
60507
61051
  _map = super().to_map()
@@ -60519,6 +61063,12 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60519
61063
  result['InstanceId'] = self.instance_id
60520
61064
  if self.name is not None:
60521
61065
  result['Name'] = self.name
61066
+ if self.tag is not None:
61067
+ result['Tag'] = self.tag
61068
+ result['Tags'] = []
61069
+ if self.tags is not None:
61070
+ for k in self.tags:
61071
+ result['Tags'].append(k.to_map() if k else None)
60522
61072
  if self.transit_router_id is not None:
60523
61073
  result['TransitRouterId'] = self.transit_router_id
60524
61074
  if self.transit_router_name is not None:
@@ -60537,6 +61087,13 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60537
61087
  self.instance_id = m.get('InstanceId')
60538
61088
  if m.get('Name') is not None:
60539
61089
  self.name = m.get('Name')
61090
+ if m.get('Tag') is not None:
61091
+ self.tag = m.get('Tag')
61092
+ self.tags = []
61093
+ if m.get('Tags') is not None:
61094
+ for k in m.get('Tags'):
61095
+ temp_model = DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags()
61096
+ self.tags.append(temp_model.from_map(k))
60540
61097
  if m.get('TransitRouterId') is not None:
60541
61098
  self.transit_router_id = m.get('TransitRouterId')
60542
61099
  if m.get('TransitRouterName') is not None:
@@ -61141,6 +61698,7 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61141
61698
  tunnel_bgp_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelBgpConfig = None,
61142
61699
  tunnel_id: str = None,
61143
61700
  tunnel_ike_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig = None,
61701
+ tunnel_index: int = None,
61144
61702
  tunnel_ipsec_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig = None,
61145
61703
  zone_no: str = None,
61146
61704
  ):
@@ -61186,6 +61744,7 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61186
61744
  self.tunnel_id = tunnel_id
61187
61745
  # The configuration of Phase 1 negotiations.
61188
61746
  self.tunnel_ike_config = tunnel_ike_config
61747
+ self.tunnel_index = tunnel_index
61189
61748
  # The configurations of Phase 2 negotiations.
61190
61749
  self.tunnel_ipsec_config = tunnel_ipsec_config
61191
61750
  # The zone where the tunnel is deployed.
@@ -61229,6 +61788,8 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61229
61788
  result['TunnelId'] = self.tunnel_id
61230
61789
  if self.tunnel_ike_config is not None:
61231
61790
  result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
61791
+ if self.tunnel_index is not None:
61792
+ result['TunnelIndex'] = self.tunnel_index
61232
61793
  if self.tunnel_ipsec_config is not None:
61233
61794
  result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
61234
61795
  if self.zone_no is not None:
@@ -61261,6 +61822,8 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61261
61822
  if m.get('TunnelIkeConfig') is not None:
61262
61823
  temp_model = DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig()
61263
61824
  self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
61825
+ if m.get('TunnelIndex') is not None:
61826
+ self.tunnel_index = m.get('TunnelIndex')
61264
61827
  if m.get('TunnelIpsecConfig') is not None:
61265
61828
  temp_model = DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig()
61266
61829
  self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
@@ -62656,6 +63219,7 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62656
63219
  tunnel_bgp_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelBgpConfig = None,
62657
63220
  tunnel_id: str = None,
62658
63221
  tunnel_ike_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig = None,
63222
+ tunnel_index: int = None,
62659
63223
  tunnel_ipsec_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig = None,
62660
63224
  zone_no: str = None,
62661
63225
  ):
@@ -62701,6 +63265,7 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62701
63265
  self.tunnel_id = tunnel_id
62702
63266
  # The configuration of Phase 1 negotiations.
62703
63267
  self.tunnel_ike_config = tunnel_ike_config
63268
+ self.tunnel_index = tunnel_index
62704
63269
  # The configurations of Phase 2 negotiations.
62705
63270
  self.tunnel_ipsec_config = tunnel_ipsec_config
62706
63271
  # The zone of the tunnel.
@@ -62742,6 +63307,8 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62742
63307
  result['TunnelId'] = self.tunnel_id
62743
63308
  if self.tunnel_ike_config is not None:
62744
63309
  result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
63310
+ if self.tunnel_index is not None:
63311
+ result['TunnelIndex'] = self.tunnel_index
62745
63312
  if self.tunnel_ipsec_config is not None:
62746
63313
  result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
62747
63314
  if self.zone_no is not None:
@@ -62774,6 +63341,8 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62774
63341
  if m.get('TunnelIkeConfig') is not None:
62775
63342
  temp_model = DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig()
62776
63343
  self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
63344
+ if m.get('TunnelIndex') is not None:
63345
+ self.tunnel_index = m.get('TunnelIndex')
62777
63346
  if m.get('TunnelIpsecConfig') is not None:
62778
63347
  temp_model = DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig()
62779
63348
  self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
@@ -64033,33 +64602,38 @@ class DescribeVpnGatewayResponseBody(TeaModel):
64033
64602
  # * **updating**\
64034
64603
  # * **deleting**\
64035
64604
  self.status = status
64036
- # The automatically generated tag of the VPN gateway.
64605
+ # The tag that is automatically generated for the VPN gateway. The tag consists of the following parameters:
64037
64606
  #
64038
64607
  # * **VpnEnableBgp**: indicates whether the VPN gateway supports BGP. Valid values:
64039
64608
  #
64040
64609
  # * **true**\
64041
64610
  # * **false**\
64042
64611
  #
64043
- # * **VisuallySsl**: indicates whether the VPN gateway allows you to view information about connected SSL clients.
64612
+ # * **VisuallySsl**: indicates whether the VPN gateway allows you to view the connection information of SSL clients. Valid values:
64044
64613
  #
64045
64614
  # * **true**\
64046
64615
  # * **false**\
64047
64616
  #
64048
- # * **PbrPriority**: indicates whether the VPN gateway allows you to configure priorities for policy-based routes.
64617
+ # * **PbrPriority**: indicates whether the VPN gateway allows you to configure priorities for policy-based routes. Valid values:
64049
64618
  #
64050
64619
  # * **true**\
64051
64620
  # * **false**\
64052
64621
  #
64053
- # * **VpnNewImage**: indicates whether the VPN gateway is upgraded.
64622
+ # * **VpnNewImage**: indicates whether the VPN gateway is upgraded. Valid values:
64054
64623
  #
64055
64624
  # * **true**\
64056
64625
  # * **false**\
64057
64626
  #
64058
- # * **description**\
64627
+ # * **description**: the description of the VPN gateway. This parameter is only for internal use.
64628
+ #
64629
+ # * **VpnVersion**: the version of the VPN gateway.
64630
+ #
64631
+ # * **IDaaSNewVersion**: indicates whether the VPN gateway can be associated with an EIAM 2.0 instance.
64059
64632
  #
64060
- # * **VpnVersion**\
64633
+ # * **true**\
64634
+ # * **false**\
64061
64635
  self.tag = tag
64062
- # The tag value.
64636
+ # The tags that are added to the VPN gateway.
64063
64637
  self.tags = tags
64064
64638
  # The ID of the vSwitch to which the VPN gateway belongs.
64065
64639
  self.v_switch_id = v_switch_id
@@ -64067,9 +64641,7 @@ class DescribeVpnGatewayResponseBody(TeaModel):
64067
64641
  self.vpc_id = vpc_id
64068
64642
  # The ID of the VPN gateway.
64069
64643
  self.vpn_gateway_id = vpn_gateway_id
64070
- # The type of the VPN gateway.
64071
- #
64072
- # Only **Normal** may be returned, which indicates a standard VPN gateway.
64644
+ # The type of VPN gateway. Only **Normal** may be returned, which indicates a standard VPN gateway.
64073
64645
  self.vpn_type = vpn_type
64074
64646
 
64075
64647
  def validate(self):
@@ -64441,17 +65013,13 @@ class DescribeVpnGatewaysRequestTag(TeaModel):
64441
65013
  key: str = None,
64442
65014
  value: str = None,
64443
65015
  ):
64444
- # The tag key. The tag key cannot be an empty string.
64445
- #
64446
- # It can be at most 64 characters in length, and cannot contain `http://` or `https://`. It cannot start with `aliyun` or `acs:`.
65016
+ # The tag key.
64447
65017
  #
64448
- # You can specify at most 20 tag keys in each call.
65018
+ # You can specify at most 20 tag keys at a time.
64449
65019
  self.key = key
64450
65020
  # The tag value.
64451
65021
  #
64452
- # 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://`.
64453
- #
64454
- # Each tag key corresponds to one tag value. You can specify at most 20 tag values in each call.
65022
+ # Each tag key corresponds to one tag value. You can specify at most 20 tag values at a time.
64455
65023
  self.value = value
64456
65024
 
64457
65025
  def validate(self):
@@ -64532,11 +65100,7 @@ class DescribeVpnGatewaysRequest(TeaModel):
64532
65100
  # * **updating**\
64533
65101
  # * **deleting**\
64534
65102
  self.status = status
64535
- # The value of tag N to add to the resource.
64536
- #
64537
- # 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://`.
64538
- #
64539
- # Each tag key corresponds to one tag value. You can specify at most 20 tag values in each call.
65103
+ # The tags that are added to the VPN gateway.
64540
65104
  self.tag = tag
64541
65105
  # The ID of the virtual private cloud (VPC) to which the VPN gateway belongs.
64542
65106
  self.vpc_id = vpc_id
@@ -64922,7 +65486,7 @@ class DescribeVpnGatewaysResponseBodyVpnGatewaysVpnGateway(TeaModel):
64922
65486
  # * **updating**\
64923
65487
  # * **deleting**\
64924
65488
  self.status = status
64925
- # The tag that is automatically generated for the VPN gateway. The tag consists of the following parameters:
65489
+ # The tag that is automatically generated for the VPN gateway.
64926
65490
  #
64927
65491
  # * **VpnEnableBgp**: indicates whether the VPN gateway supports BGP. Valid values:
64928
65492
  #
@@ -64941,12 +65505,17 @@ class DescribeVpnGatewaysResponseBodyVpnGatewaysVpnGateway(TeaModel):
64941
65505
  #
64942
65506
  # * **VpnNewImage**: indicates whether the VPN gateway is upgraded. Valid values:
64943
65507
  #
64944
- # * **true**\
65508
+ # * **true**: queries only SQL templates that need to be optimized.
64945
65509
  # * **false**: does not query only SQL statements that need to be optimized.
64946
65510
  #
64947
65511
  # * **description**: the description of the VPN gateway. This parameter is only for internal use.
64948
65512
  #
64949
65513
  # * **VpnVersion**: the version of the VPN gateway.
65514
+ #
65515
+ # * **IDaaSNewVersion**: indicates whether the VPN gateway can be associated with an EIAM 2.0 instance.
65516
+ #
65517
+ # * **true**\
65518
+ # * **false**\
64950
65519
  self.tag = tag
64951
65520
  # The tags that are added to the VPN gateway.
64952
65521
  self.tags = tags
@@ -65145,7 +65714,7 @@ class DescribeVpnGatewaysResponseBody(TeaModel):
65145
65714
  self.request_id = request_id
65146
65715
  # The number of entries returned.
65147
65716
  self.total_count = total_count
65148
- # The VPN gateways.
65717
+ # The information about the VPN gateways.
65149
65718
  self.vpn_gateways = vpn_gateways
65150
65719
 
65151
65720
  def validate(self):
@@ -65629,6 +66198,80 @@ class DescribeVpnRouteEntriesRequest(TeaModel):
65629
66198
  return self
65630
66199
 
65631
66200
 
66201
+ class DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount(TeaModel):
66202
+ def __init__(
66203
+ self,
66204
+ route_count: int = None,
66205
+ route_entry_type: str = None,
66206
+ source: str = None,
66207
+ ):
66208
+ self.route_count = route_count
66209
+ self.route_entry_type = route_entry_type
66210
+ self.source = source
66211
+
66212
+ def validate(self):
66213
+ pass
66214
+
66215
+ def to_map(self):
66216
+ _map = super().to_map()
66217
+ if _map is not None:
66218
+ return _map
66219
+
66220
+ result = dict()
66221
+ if self.route_count is not None:
66222
+ result['RouteCount'] = self.route_count
66223
+ if self.route_entry_type is not None:
66224
+ result['RouteEntryType'] = self.route_entry_type
66225
+ if self.source is not None:
66226
+ result['Source'] = self.source
66227
+ return result
66228
+
66229
+ def from_map(self, m: dict = None):
66230
+ m = m or dict()
66231
+ if m.get('RouteCount') is not None:
66232
+ self.route_count = m.get('RouteCount')
66233
+ if m.get('RouteEntryType') is not None:
66234
+ self.route_entry_type = m.get('RouteEntryType')
66235
+ if m.get('Source') is not None:
66236
+ self.source = m.get('Source')
66237
+ return self
66238
+
66239
+
66240
+ class DescribeVpnRouteEntriesResponseBodyVpnRouteCounts(TeaModel):
66241
+ def __init__(
66242
+ self,
66243
+ vpn_route_count: List[DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount] = None,
66244
+ ):
66245
+ self.vpn_route_count = vpn_route_count
66246
+
66247
+ def validate(self):
66248
+ if self.vpn_route_count:
66249
+ for k in self.vpn_route_count:
66250
+ if k:
66251
+ k.validate()
66252
+
66253
+ def to_map(self):
66254
+ _map = super().to_map()
66255
+ if _map is not None:
66256
+ return _map
66257
+
66258
+ result = dict()
66259
+ result['VpnRouteCount'] = []
66260
+ if self.vpn_route_count is not None:
66261
+ for k in self.vpn_route_count:
66262
+ result['VpnRouteCount'].append(k.to_map() if k else None)
66263
+ return result
66264
+
66265
+ def from_map(self, m: dict = None):
66266
+ m = m or dict()
66267
+ self.vpn_route_count = []
66268
+ if m.get('VpnRouteCount') is not None:
66269
+ for k in m.get('VpnRouteCount'):
66270
+ temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount()
66271
+ self.vpn_route_count.append(temp_model.from_map(k))
66272
+ return self
66273
+
66274
+
65632
66275
  class DescribeVpnRouteEntriesResponseBodyVpnRouteEntriesVpnRouteEntry(TeaModel):
65633
66276
  def __init__(
65634
66277
  self,
@@ -65781,6 +66424,7 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65781
66424
  page_size: int = None,
65782
66425
  request_id: str = None,
65783
66426
  total_count: int = None,
66427
+ vpn_route_counts: DescribeVpnRouteEntriesResponseBodyVpnRouteCounts = None,
65784
66428
  vpn_route_entries: DescribeVpnRouteEntriesResponseBodyVpnRouteEntries = None,
65785
66429
  ):
65786
66430
  # The page number of the returned page.
@@ -65791,10 +66435,13 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65791
66435
  self.request_id = request_id
65792
66436
  # The total number of entries returned.
65793
66437
  self.total_count = total_count
66438
+ self.vpn_route_counts = vpn_route_counts
65794
66439
  # The list of route entries.
65795
66440
  self.vpn_route_entries = vpn_route_entries
65796
66441
 
65797
66442
  def validate(self):
66443
+ if self.vpn_route_counts:
66444
+ self.vpn_route_counts.validate()
65798
66445
  if self.vpn_route_entries:
65799
66446
  self.vpn_route_entries.validate()
65800
66447
 
@@ -65812,6 +66459,8 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65812
66459
  result['RequestId'] = self.request_id
65813
66460
  if self.total_count is not None:
65814
66461
  result['TotalCount'] = self.total_count
66462
+ if self.vpn_route_counts is not None:
66463
+ result['VpnRouteCounts'] = self.vpn_route_counts.to_map()
65815
66464
  if self.vpn_route_entries is not None:
65816
66465
  result['VpnRouteEntries'] = self.vpn_route_entries.to_map()
65817
66466
  return result
@@ -65826,6 +66475,9 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65826
66475
  self.request_id = m.get('RequestId')
65827
66476
  if m.get('TotalCount') is not None:
65828
66477
  self.total_count = m.get('TotalCount')
66478
+ if m.get('VpnRouteCounts') is not None:
66479
+ temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteCounts()
66480
+ self.vpn_route_counts = temp_model.from_map(m['VpnRouteCounts'])
65829
66481
  if m.get('VpnRouteEntries') is not None:
65830
66482
  temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteEntries()
65831
66483
  self.vpn_route_entries = temp_model.from_map(m['VpnRouteEntries'])
@@ -67547,7 +68199,7 @@ class DissociateVpnGatewayWithCertificateRequest(TeaModel):
67547
68199
  ):
67548
68200
  # The certificate ID.
67549
68201
  #
67550
- # > 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.
68202
+ # > 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.
67551
68203
  #
67552
68204
  # This parameter is required.
67553
68205
  self.certificate_id = certificate_id
@@ -83890,6 +84542,7 @@ class ModifyForwardEntryRequest(TeaModel):
83890
84542
  def __init__(
83891
84543
  self,
83892
84544
  client_token: str = None,
84545
+ dry_run: bool = None,
83893
84546
  external_ip: str = None,
83894
84547
  external_port: str = None,
83895
84548
  forward_entry_id: str = None,
@@ -83911,6 +84564,7 @@ class ModifyForwardEntryRequest(TeaModel):
83911
84564
  #
83912
84565
  # > 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.
83913
84566
  self.client_token = client_token
84567
+ self.dry_run = dry_run
83914
84568
  # * When you modify DNAT entries of Internet NAT gateways, this parameter specifies the elastic IP addresses (EIPs) that are used to access the Internet.
83915
84569
  # * When you modify DNAT entries of Virtual Private Cloud (VPC) NAT gateways, this parameter specifies the NAT IP addresses that are accessed by external networks.
83916
84570
  self.external_ip = external_ip
@@ -83973,6 +84627,8 @@ class ModifyForwardEntryRequest(TeaModel):
83973
84627
  result = dict()
83974
84628
  if self.client_token is not None:
83975
84629
  result['ClientToken'] = self.client_token
84630
+ if self.dry_run is not None:
84631
+ result['DryRun'] = self.dry_run
83976
84632
  if self.external_ip is not None:
83977
84633
  result['ExternalIp'] = self.external_ip
83978
84634
  if self.external_port is not None:
@@ -84007,6 +84663,8 @@ class ModifyForwardEntryRequest(TeaModel):
84007
84663
  m = m or dict()
84008
84664
  if m.get('ClientToken') is not None:
84009
84665
  self.client_token = m.get('ClientToken')
84666
+ if m.get('DryRun') is not None:
84667
+ self.dry_run = m.get('DryRun')
84010
84668
  if m.get('ExternalIp') is not None:
84011
84669
  self.external_ip = m.get('ExternalIp')
84012
84670
  if m.get('ExternalPort') is not None:
@@ -88134,6 +88792,7 @@ class ModifySnatEntryRequest(TeaModel):
88134
88792
  def __init__(
88135
88793
  self,
88136
88794
  client_token: str = None,
88795
+ dry_run: bool = None,
88137
88796
  eip_affinity: int = None,
88138
88797
  network_interface_id: str = None,
88139
88798
  owner_account: str = None,
@@ -88152,6 +88811,7 @@ class ModifySnatEntryRequest(TeaModel):
88152
88811
  #
88153
88812
  # > 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.
88154
88813
  self.client_token = client_token
88814
+ self.dry_run = dry_run
88155
88815
  self.eip_affinity = eip_affinity
88156
88816
  self.network_interface_id = network_interface_id
88157
88817
  self.owner_account = owner_account
@@ -88194,6 +88854,8 @@ class ModifySnatEntryRequest(TeaModel):
88194
88854
  result = dict()
88195
88855
  if self.client_token is not None:
88196
88856
  result['ClientToken'] = self.client_token
88857
+ if self.dry_run is not None:
88858
+ result['DryRun'] = self.dry_run
88197
88859
  if self.eip_affinity is not None:
88198
88860
  result['EipAffinity'] = self.eip_affinity
88199
88861
  if self.network_interface_id is not None:
@@ -88222,6 +88884,8 @@ class ModifySnatEntryRequest(TeaModel):
88222
88884
  m = m or dict()
88223
88885
  if m.get('ClientToken') is not None:
88224
88886
  self.client_token = m.get('ClientToken')
88887
+ if m.get('DryRun') is not None:
88888
+ self.dry_run = m.get('DryRun')
88225
88889
  if m.get('EipAffinity') is not None:
88226
88890
  self.eip_affinity = m.get('EipAffinity')
88227
88891
  if m.get('NetworkInterfaceId') is not None:
@@ -89062,6 +89726,7 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig(Te
89062
89726
  class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89063
89727
  def __init__(
89064
89728
  self,
89729
+ customer_gateway_id: str = None,
89065
89730
  enable_dpd: bool = None,
89066
89731
  enable_nat_traversal: bool = None,
89067
89732
  remote_ca_certificate: str = None,
@@ -89069,6 +89734,7 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89069
89734
  tunnel_ike_config: ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
89070
89735
  tunnel_ipsec_config: ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
89071
89736
  ):
89737
+ self.customer_gateway_id = customer_gateway_id
89072
89738
  # Specifies whether to enable the dead peer detection (DPD) feature. Valid values:
89073
89739
  #
89074
89740
  # * **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.
@@ -89104,6 +89770,8 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89104
89770
  return _map
89105
89771
 
89106
89772
  result = dict()
89773
+ if self.customer_gateway_id is not None:
89774
+ result['CustomerGatewayId'] = self.customer_gateway_id
89107
89775
  if self.enable_dpd is not None:
89108
89776
  result['EnableDpd'] = self.enable_dpd
89109
89777
  if self.enable_nat_traversal is not None:
@@ -89120,6 +89788,8 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89120
89788
 
89121
89789
  def from_map(self, m: dict = None):
89122
89790
  m = m or dict()
89791
+ if m.get('CustomerGatewayId') is not None:
89792
+ self.customer_gateway_id = m.get('CustomerGatewayId')
89123
89793
  if m.get('EnableDpd') is not None:
89124
89794
  self.enable_dpd = m.get('EnableDpd')
89125
89795
  if m.get('EnableNatTraversal') is not None:
@@ -91070,6 +91740,242 @@ class ModifyVpcPrefixListResponse(TeaModel):
91070
91740
  return self
91071
91741
 
91072
91742
 
91743
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
91744
+ def __init__(
91745
+ self,
91746
+ local_asn: int = None,
91747
+ local_bgp_ip: str = None,
91748
+ tunnel_cidr: str = None,
91749
+ ):
91750
+ self.local_asn = local_asn
91751
+ self.local_bgp_ip = local_bgp_ip
91752
+ self.tunnel_cidr = tunnel_cidr
91753
+
91754
+ def validate(self):
91755
+ pass
91756
+
91757
+ def to_map(self):
91758
+ _map = super().to_map()
91759
+ if _map is not None:
91760
+ return _map
91761
+
91762
+ result = dict()
91763
+ if self.local_asn is not None:
91764
+ result['LocalAsn'] = self.local_asn
91765
+ if self.local_bgp_ip is not None:
91766
+ result['LocalBgpIp'] = self.local_bgp_ip
91767
+ if self.tunnel_cidr is not None:
91768
+ result['TunnelCidr'] = self.tunnel_cidr
91769
+ return result
91770
+
91771
+ def from_map(self, m: dict = None):
91772
+ m = m or dict()
91773
+ if m.get('LocalAsn') is not None:
91774
+ self.local_asn = m.get('LocalAsn')
91775
+ if m.get('LocalBgpIp') is not None:
91776
+ self.local_bgp_ip = m.get('LocalBgpIp')
91777
+ if m.get('TunnelCidr') is not None:
91778
+ self.tunnel_cidr = m.get('TunnelCidr')
91779
+ return self
91780
+
91781
+
91782
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
91783
+ def __init__(
91784
+ self,
91785
+ ike_auth_alg: str = None,
91786
+ ike_enc_alg: str = None,
91787
+ ike_lifetime: int = None,
91788
+ ike_mode: str = None,
91789
+ ike_pfs: str = None,
91790
+ ike_version: str = None,
91791
+ local_id: str = None,
91792
+ psk: str = None,
91793
+ remote_id: str = None,
91794
+ ):
91795
+ self.ike_auth_alg = ike_auth_alg
91796
+ self.ike_enc_alg = ike_enc_alg
91797
+ self.ike_lifetime = ike_lifetime
91798
+ self.ike_mode = ike_mode
91799
+ self.ike_pfs = ike_pfs
91800
+ self.ike_version = ike_version
91801
+ self.local_id = local_id
91802
+ self.psk = psk
91803
+ self.remote_id = remote_id
91804
+
91805
+ def validate(self):
91806
+ pass
91807
+
91808
+ def to_map(self):
91809
+ _map = super().to_map()
91810
+ if _map is not None:
91811
+ return _map
91812
+
91813
+ result = dict()
91814
+ if self.ike_auth_alg is not None:
91815
+ result['IkeAuthAlg'] = self.ike_auth_alg
91816
+ if self.ike_enc_alg is not None:
91817
+ result['IkeEncAlg'] = self.ike_enc_alg
91818
+ if self.ike_lifetime is not None:
91819
+ result['IkeLifetime'] = self.ike_lifetime
91820
+ if self.ike_mode is not None:
91821
+ result['IkeMode'] = self.ike_mode
91822
+ if self.ike_pfs is not None:
91823
+ result['IkePfs'] = self.ike_pfs
91824
+ if self.ike_version is not None:
91825
+ result['IkeVersion'] = self.ike_version
91826
+ if self.local_id is not None:
91827
+ result['LocalId'] = self.local_id
91828
+ if self.psk is not None:
91829
+ result['Psk'] = self.psk
91830
+ if self.remote_id is not None:
91831
+ result['RemoteId'] = self.remote_id
91832
+ return result
91833
+
91834
+ def from_map(self, m: dict = None):
91835
+ m = m or dict()
91836
+ if m.get('IkeAuthAlg') is not None:
91837
+ self.ike_auth_alg = m.get('IkeAuthAlg')
91838
+ if m.get('IkeEncAlg') is not None:
91839
+ self.ike_enc_alg = m.get('IkeEncAlg')
91840
+ if m.get('IkeLifetime') is not None:
91841
+ self.ike_lifetime = m.get('IkeLifetime')
91842
+ if m.get('IkeMode') is not None:
91843
+ self.ike_mode = m.get('IkeMode')
91844
+ if m.get('IkePfs') is not None:
91845
+ self.ike_pfs = m.get('IkePfs')
91846
+ if m.get('IkeVersion') is not None:
91847
+ self.ike_version = m.get('IkeVersion')
91848
+ if m.get('LocalId') is not None:
91849
+ self.local_id = m.get('LocalId')
91850
+ if m.get('Psk') is not None:
91851
+ self.psk = m.get('Psk')
91852
+ if m.get('RemoteId') is not None:
91853
+ self.remote_id = m.get('RemoteId')
91854
+ return self
91855
+
91856
+
91857
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
91858
+ def __init__(
91859
+ self,
91860
+ ipsec_auth_alg: str = None,
91861
+ ipsec_enc_alg: str = None,
91862
+ ipsec_lifetime: int = None,
91863
+ ipsec_pfs: str = None,
91864
+ ):
91865
+ self.ipsec_auth_alg = ipsec_auth_alg
91866
+ self.ipsec_enc_alg = ipsec_enc_alg
91867
+ self.ipsec_lifetime = ipsec_lifetime
91868
+ self.ipsec_pfs = ipsec_pfs
91869
+
91870
+ def validate(self):
91871
+ pass
91872
+
91873
+ def to_map(self):
91874
+ _map = super().to_map()
91875
+ if _map is not None:
91876
+ return _map
91877
+
91878
+ result = dict()
91879
+ if self.ipsec_auth_alg is not None:
91880
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
91881
+ if self.ipsec_enc_alg is not None:
91882
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
91883
+ if self.ipsec_lifetime is not None:
91884
+ result['IpsecLifetime'] = self.ipsec_lifetime
91885
+ if self.ipsec_pfs is not None:
91886
+ result['IpsecPfs'] = self.ipsec_pfs
91887
+ return result
91888
+
91889
+ def from_map(self, m: dict = None):
91890
+ m = m or dict()
91891
+ if m.get('IpsecAuthAlg') is not None:
91892
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
91893
+ if m.get('IpsecEncAlg') is not None:
91894
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
91895
+ if m.get('IpsecLifetime') is not None:
91896
+ self.ipsec_lifetime = m.get('IpsecLifetime')
91897
+ if m.get('IpsecPfs') is not None:
91898
+ self.ipsec_pfs = m.get('IpsecPfs')
91899
+ return self
91900
+
91901
+
91902
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification(TeaModel):
91903
+ def __init__(
91904
+ self,
91905
+ customer_gateway_id: str = None,
91906
+ enable_dpd: bool = None,
91907
+ enable_nat_traversal: bool = None,
91908
+ tunnel_bgp_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig = None,
91909
+ tunnel_id: str = None,
91910
+ tunnel_ike_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
91911
+ tunnel_index: int = None,
91912
+ tunnel_ipsec_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
91913
+ ):
91914
+ self.customer_gateway_id = customer_gateway_id
91915
+ self.enable_dpd = enable_dpd
91916
+ self.enable_nat_traversal = enable_nat_traversal
91917
+ self.tunnel_bgp_config = tunnel_bgp_config
91918
+ self.tunnel_id = tunnel_id
91919
+ self.tunnel_ike_config = tunnel_ike_config
91920
+ self.tunnel_index = tunnel_index
91921
+ self.tunnel_ipsec_config = tunnel_ipsec_config
91922
+
91923
+ def validate(self):
91924
+ if self.tunnel_bgp_config:
91925
+ self.tunnel_bgp_config.validate()
91926
+ if self.tunnel_ike_config:
91927
+ self.tunnel_ike_config.validate()
91928
+ if self.tunnel_ipsec_config:
91929
+ self.tunnel_ipsec_config.validate()
91930
+
91931
+ def to_map(self):
91932
+ _map = super().to_map()
91933
+ if _map is not None:
91934
+ return _map
91935
+
91936
+ result = dict()
91937
+ if self.customer_gateway_id is not None:
91938
+ result['CustomerGatewayId'] = self.customer_gateway_id
91939
+ if self.enable_dpd is not None:
91940
+ result['EnableDpd'] = self.enable_dpd
91941
+ if self.enable_nat_traversal is not None:
91942
+ result['EnableNatTraversal'] = self.enable_nat_traversal
91943
+ if self.tunnel_bgp_config is not None:
91944
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
91945
+ if self.tunnel_id is not None:
91946
+ result['TunnelId'] = self.tunnel_id
91947
+ if self.tunnel_ike_config is not None:
91948
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
91949
+ if self.tunnel_index is not None:
91950
+ result['TunnelIndex'] = self.tunnel_index
91951
+ if self.tunnel_ipsec_config is not None:
91952
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
91953
+ return result
91954
+
91955
+ def from_map(self, m: dict = None):
91956
+ m = m or dict()
91957
+ if m.get('CustomerGatewayId') is not None:
91958
+ self.customer_gateway_id = m.get('CustomerGatewayId')
91959
+ if m.get('EnableDpd') is not None:
91960
+ self.enable_dpd = m.get('EnableDpd')
91961
+ if m.get('EnableNatTraversal') is not None:
91962
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
91963
+ if m.get('TunnelBgpConfig') is not None:
91964
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig()
91965
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
91966
+ if m.get('TunnelId') is not None:
91967
+ self.tunnel_id = m.get('TunnelId')
91968
+ if m.get('TunnelIkeConfig') is not None:
91969
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig()
91970
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
91971
+ if m.get('TunnelIndex') is not None:
91972
+ self.tunnel_index = m.get('TunnelIndex')
91973
+ if m.get('TunnelIpsecConfig') is not None:
91974
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig()
91975
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
91976
+ return self
91977
+
91978
+
91073
91979
  class ModifyVpnAttachmentAttributeRequest(TeaModel):
91074
91980
  def __init__(
91075
91981
  self,
@@ -91080,6 +91986,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91080
91986
  effect_immediately: bool = None,
91081
91987
  enable_dpd: bool = None,
91082
91988
  enable_nat_traversal: bool = None,
91989
+ enable_tunnels_bgp: bool = None,
91083
91990
  health_check_config: str = None,
91084
91991
  ike_config: str = None,
91085
91992
  ipsec_config: str = None,
@@ -91092,6 +91999,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91092
91999
  remote_subnet: str = None,
91093
92000
  resource_owner_account: str = None,
91094
92001
  resource_owner_id: int = None,
92002
+ tunnel_options_specification: List[ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification] = None,
91095
92003
  vpn_connection_id: str = None,
91096
92004
  ):
91097
92005
  # Specifies whether to automatically configure routes. Valid values:
@@ -91142,6 +92050,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91142
92050
  # * **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.
91143
92051
  # * **false**\
91144
92052
  self.enable_nat_traversal = enable_nat_traversal
92053
+ self.enable_tunnels_bgp = enable_tunnels_bgp
91145
92054
  # The health check configurations:
91146
92055
  #
91147
92056
  # * **HealthCheckConfig.enable**: specifies whether to enable the health check feature. Valid values:
@@ -91232,13 +92141,17 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91232
92141
  self.remote_subnet = remote_subnet
91233
92142
  self.resource_owner_account = resource_owner_account
91234
92143
  self.resource_owner_id = resource_owner_id
92144
+ self.tunnel_options_specification = tunnel_options_specification
91235
92145
  # The ID of the IPsec-VPN connection.
91236
92146
  #
91237
92147
  # This parameter is required.
91238
92148
  self.vpn_connection_id = vpn_connection_id
91239
92149
 
91240
92150
  def validate(self):
91241
- pass
92151
+ if self.tunnel_options_specification:
92152
+ for k in self.tunnel_options_specification:
92153
+ if k:
92154
+ k.validate()
91242
92155
 
91243
92156
  def to_map(self):
91244
92157
  _map = super().to_map()
@@ -91260,6 +92173,8 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91260
92173
  result['EnableDpd'] = self.enable_dpd
91261
92174
  if self.enable_nat_traversal is not None:
91262
92175
  result['EnableNatTraversal'] = self.enable_nat_traversal
92176
+ if self.enable_tunnels_bgp is not None:
92177
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
91263
92178
  if self.health_check_config is not None:
91264
92179
  result['HealthCheckConfig'] = self.health_check_config
91265
92180
  if self.ike_config is not None:
@@ -91284,6 +92199,10 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91284
92199
  result['ResourceOwnerAccount'] = self.resource_owner_account
91285
92200
  if self.resource_owner_id is not None:
91286
92201
  result['ResourceOwnerId'] = self.resource_owner_id
92202
+ result['TunnelOptionsSpecification'] = []
92203
+ if self.tunnel_options_specification is not None:
92204
+ for k in self.tunnel_options_specification:
92205
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
91287
92206
  if self.vpn_connection_id is not None:
91288
92207
  result['VpnConnectionId'] = self.vpn_connection_id
91289
92208
  return result
@@ -91304,6 +92223,8 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91304
92223
  self.enable_dpd = m.get('EnableDpd')
91305
92224
  if m.get('EnableNatTraversal') is not None:
91306
92225
  self.enable_nat_traversal = m.get('EnableNatTraversal')
92226
+ if m.get('EnableTunnelsBgp') is not None:
92227
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
91307
92228
  if m.get('HealthCheckConfig') is not None:
91308
92229
  self.health_check_config = m.get('HealthCheckConfig')
91309
92230
  if m.get('IkeConfig') is not None:
@@ -91328,6 +92249,11 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91328
92249
  self.resource_owner_account = m.get('ResourceOwnerAccount')
91329
92250
  if m.get('ResourceOwnerId') is not None:
91330
92251
  self.resource_owner_id = m.get('ResourceOwnerId')
92252
+ self.tunnel_options_specification = []
92253
+ if m.get('TunnelOptionsSpecification') is not None:
92254
+ for k in m.get('TunnelOptionsSpecification'):
92255
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification()
92256
+ self.tunnel_options_specification.append(temp_model.from_map(k))
91331
92257
  if m.get('VpnConnectionId') is not None:
91332
92258
  self.vpn_connection_id = m.get('VpnConnectionId')
91333
92259
  return self
@@ -91468,6 +92394,272 @@ class ModifyVpnAttachmentAttributeResponseBodyIpsecConfig(TeaModel):
91468
92394
  return self
91469
92395
 
91470
92396
 
92397
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
92398
+ def __init__(
92399
+ self,
92400
+ local_asn: int = None,
92401
+ local_bgp_ip: str = None,
92402
+ peer_asn: int = None,
92403
+ peer_bgp_ip: str = None,
92404
+ tunnel_cidr: str = None,
92405
+ ):
92406
+ self.local_asn = local_asn
92407
+ self.local_bgp_ip = local_bgp_ip
92408
+ self.peer_asn = peer_asn
92409
+ self.peer_bgp_ip = peer_bgp_ip
92410
+ self.tunnel_cidr = tunnel_cidr
92411
+
92412
+ def validate(self):
92413
+ pass
92414
+
92415
+ def to_map(self):
92416
+ _map = super().to_map()
92417
+ if _map is not None:
92418
+ return _map
92419
+
92420
+ result = dict()
92421
+ if self.local_asn is not None:
92422
+ result['LocalAsn'] = self.local_asn
92423
+ if self.local_bgp_ip is not None:
92424
+ result['LocalBgpIp'] = self.local_bgp_ip
92425
+ if self.peer_asn is not None:
92426
+ result['PeerAsn'] = self.peer_asn
92427
+ if self.peer_bgp_ip is not None:
92428
+ result['PeerBgpIp'] = self.peer_bgp_ip
92429
+ if self.tunnel_cidr is not None:
92430
+ result['TunnelCidr'] = self.tunnel_cidr
92431
+ return result
92432
+
92433
+ def from_map(self, m: dict = None):
92434
+ m = m or dict()
92435
+ if m.get('LocalAsn') is not None:
92436
+ self.local_asn = m.get('LocalAsn')
92437
+ if m.get('LocalBgpIp') is not None:
92438
+ self.local_bgp_ip = m.get('LocalBgpIp')
92439
+ if m.get('PeerAsn') is not None:
92440
+ self.peer_asn = m.get('PeerAsn')
92441
+ if m.get('PeerBgpIp') is not None:
92442
+ self.peer_bgp_ip = m.get('PeerBgpIp')
92443
+ if m.get('TunnelCidr') is not None:
92444
+ self.tunnel_cidr = m.get('TunnelCidr')
92445
+ return self
92446
+
92447
+
92448
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
92449
+ def __init__(
92450
+ self,
92451
+ ike_auth_alg: str = None,
92452
+ ike_enc_alg: str = None,
92453
+ ike_lifetime: int = None,
92454
+ ike_mode: str = None,
92455
+ ike_pfs: str = None,
92456
+ ike_version: str = None,
92457
+ local_id: str = None,
92458
+ psk: str = None,
92459
+ remote_id: str = None,
92460
+ ):
92461
+ self.ike_auth_alg = ike_auth_alg
92462
+ self.ike_enc_alg = ike_enc_alg
92463
+ self.ike_lifetime = ike_lifetime
92464
+ self.ike_mode = ike_mode
92465
+ self.ike_pfs = ike_pfs
92466
+ self.ike_version = ike_version
92467
+ self.local_id = local_id
92468
+ self.psk = psk
92469
+ self.remote_id = remote_id
92470
+
92471
+ def validate(self):
92472
+ pass
92473
+
92474
+ def to_map(self):
92475
+ _map = super().to_map()
92476
+ if _map is not None:
92477
+ return _map
92478
+
92479
+ result = dict()
92480
+ if self.ike_auth_alg is not None:
92481
+ result['IkeAuthAlg'] = self.ike_auth_alg
92482
+ if self.ike_enc_alg is not None:
92483
+ result['IkeEncAlg'] = self.ike_enc_alg
92484
+ if self.ike_lifetime is not None:
92485
+ result['IkeLifetime'] = self.ike_lifetime
92486
+ if self.ike_mode is not None:
92487
+ result['IkeMode'] = self.ike_mode
92488
+ if self.ike_pfs is not None:
92489
+ result['IkePfs'] = self.ike_pfs
92490
+ if self.ike_version is not None:
92491
+ result['IkeVersion'] = self.ike_version
92492
+ if self.local_id is not None:
92493
+ result['LocalId'] = self.local_id
92494
+ if self.psk is not None:
92495
+ result['Psk'] = self.psk
92496
+ if self.remote_id is not None:
92497
+ result['RemoteId'] = self.remote_id
92498
+ return result
92499
+
92500
+ def from_map(self, m: dict = None):
92501
+ m = m or dict()
92502
+ if m.get('IkeAuthAlg') is not None:
92503
+ self.ike_auth_alg = m.get('IkeAuthAlg')
92504
+ if m.get('IkeEncAlg') is not None:
92505
+ self.ike_enc_alg = m.get('IkeEncAlg')
92506
+ if m.get('IkeLifetime') is not None:
92507
+ self.ike_lifetime = m.get('IkeLifetime')
92508
+ if m.get('IkeMode') is not None:
92509
+ self.ike_mode = m.get('IkeMode')
92510
+ if m.get('IkePfs') is not None:
92511
+ self.ike_pfs = m.get('IkePfs')
92512
+ if m.get('IkeVersion') is not None:
92513
+ self.ike_version = m.get('IkeVersion')
92514
+ if m.get('LocalId') is not None:
92515
+ self.local_id = m.get('LocalId')
92516
+ if m.get('Psk') is not None:
92517
+ self.psk = m.get('Psk')
92518
+ if m.get('RemoteId') is not None:
92519
+ self.remote_id = m.get('RemoteId')
92520
+ return self
92521
+
92522
+
92523
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
92524
+ def __init__(
92525
+ self,
92526
+ ipsec_auth_alg: str = None,
92527
+ ipsec_enc_alg: str = None,
92528
+ ipsec_lifetime: int = None,
92529
+ ipsec_pfs: str = None,
92530
+ ):
92531
+ self.ipsec_auth_alg = ipsec_auth_alg
92532
+ self.ipsec_enc_alg = ipsec_enc_alg
92533
+ self.ipsec_lifetime = ipsec_lifetime
92534
+ self.ipsec_pfs = ipsec_pfs
92535
+
92536
+ def validate(self):
92537
+ pass
92538
+
92539
+ def to_map(self):
92540
+ _map = super().to_map()
92541
+ if _map is not None:
92542
+ return _map
92543
+
92544
+ result = dict()
92545
+ if self.ipsec_auth_alg is not None:
92546
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
92547
+ if self.ipsec_enc_alg is not None:
92548
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
92549
+ if self.ipsec_lifetime is not None:
92550
+ result['IpsecLifetime'] = self.ipsec_lifetime
92551
+ if self.ipsec_pfs is not None:
92552
+ result['IpsecPfs'] = self.ipsec_pfs
92553
+ return result
92554
+
92555
+ def from_map(self, m: dict = None):
92556
+ m = m or dict()
92557
+ if m.get('IpsecAuthAlg') is not None:
92558
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
92559
+ if m.get('IpsecEncAlg') is not None:
92560
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
92561
+ if m.get('IpsecLifetime') is not None:
92562
+ self.ipsec_lifetime = m.get('IpsecLifetime')
92563
+ if m.get('IpsecPfs') is not None:
92564
+ self.ipsec_pfs = m.get('IpsecPfs')
92565
+ return self
92566
+
92567
+
92568
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification(TeaModel):
92569
+ def __init__(
92570
+ self,
92571
+ customer_gateway_id: str = None,
92572
+ enable_dpd: bool = None,
92573
+ enable_nat_traversal: bool = None,
92574
+ internet_ip: str = None,
92575
+ role: str = None,
92576
+ state: str = None,
92577
+ tunnel_bgp_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig = None,
92578
+ tunnel_id: str = None,
92579
+ tunnel_ike_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig = None,
92580
+ tunnel_index: int = None,
92581
+ tunnel_ipsec_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig = None,
92582
+ ):
92583
+ self.customer_gateway_id = customer_gateway_id
92584
+ self.enable_dpd = enable_dpd
92585
+ self.enable_nat_traversal = enable_nat_traversal
92586
+ self.internet_ip = internet_ip
92587
+ self.role = role
92588
+ self.state = state
92589
+ self.tunnel_bgp_config = tunnel_bgp_config
92590
+ self.tunnel_id = tunnel_id
92591
+ self.tunnel_ike_config = tunnel_ike_config
92592
+ self.tunnel_index = tunnel_index
92593
+ self.tunnel_ipsec_config = tunnel_ipsec_config
92594
+
92595
+ def validate(self):
92596
+ if self.tunnel_bgp_config:
92597
+ self.tunnel_bgp_config.validate()
92598
+ if self.tunnel_ike_config:
92599
+ self.tunnel_ike_config.validate()
92600
+ if self.tunnel_ipsec_config:
92601
+ self.tunnel_ipsec_config.validate()
92602
+
92603
+ def to_map(self):
92604
+ _map = super().to_map()
92605
+ if _map is not None:
92606
+ return _map
92607
+
92608
+ result = dict()
92609
+ if self.customer_gateway_id is not None:
92610
+ result['CustomerGatewayId'] = self.customer_gateway_id
92611
+ if self.enable_dpd is not None:
92612
+ result['EnableDpd'] = self.enable_dpd
92613
+ if self.enable_nat_traversal is not None:
92614
+ result['EnableNatTraversal'] = self.enable_nat_traversal
92615
+ if self.internet_ip is not None:
92616
+ result['InternetIp'] = self.internet_ip
92617
+ if self.role is not None:
92618
+ result['Role'] = self.role
92619
+ if self.state is not None:
92620
+ result['State'] = self.state
92621
+ if self.tunnel_bgp_config is not None:
92622
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
92623
+ if self.tunnel_id is not None:
92624
+ result['TunnelId'] = self.tunnel_id
92625
+ if self.tunnel_ike_config is not None:
92626
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
92627
+ if self.tunnel_index is not None:
92628
+ result['TunnelIndex'] = self.tunnel_index
92629
+ if self.tunnel_ipsec_config is not None:
92630
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
92631
+ return result
92632
+
92633
+ def from_map(self, m: dict = None):
92634
+ m = m or dict()
92635
+ if m.get('CustomerGatewayId') is not None:
92636
+ self.customer_gateway_id = m.get('CustomerGatewayId')
92637
+ if m.get('EnableDpd') is not None:
92638
+ self.enable_dpd = m.get('EnableDpd')
92639
+ if m.get('EnableNatTraversal') is not None:
92640
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
92641
+ if m.get('InternetIp') is not None:
92642
+ self.internet_ip = m.get('InternetIp')
92643
+ if m.get('Role') is not None:
92644
+ self.role = m.get('Role')
92645
+ if m.get('State') is not None:
92646
+ self.state = m.get('State')
92647
+ if m.get('TunnelBgpConfig') is not None:
92648
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig()
92649
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
92650
+ if m.get('TunnelId') is not None:
92651
+ self.tunnel_id = m.get('TunnelId')
92652
+ if m.get('TunnelIkeConfig') is not None:
92653
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig()
92654
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
92655
+ if m.get('TunnelIndex') is not None:
92656
+ self.tunnel_index = m.get('TunnelIndex')
92657
+ if m.get('TunnelIpsecConfig') is not None:
92658
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig()
92659
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
92660
+ return self
92661
+
92662
+
91471
92663
  class ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck(TeaModel):
91472
92664
  def __init__(
91473
92665
  self,
@@ -91624,6 +92816,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91624
92816
  effect_immediately: bool = None,
91625
92817
  enable_dpd: bool = None,
91626
92818
  enable_nat_traversal: bool = None,
92819
+ enable_tunnels_bgp: bool = None,
91627
92820
  ike_config: ModifyVpnAttachmentAttributeResponseBodyIkeConfig = None,
91628
92821
  ipsec_config: ModifyVpnAttachmentAttributeResponseBodyIpsecConfig = None,
91629
92822
  local_subnet: str = None,
@@ -91634,6 +92827,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91634
92827
  resource_group_id: str = None,
91635
92828
  spec: str = None,
91636
92829
  status: str = None,
92830
+ tunnel_options_specification: List[ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification] = None,
91637
92831
  vco_health_check: ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck = None,
91638
92832
  vpn_bgp_config: ModifyVpnAttachmentAttributeResponseBodyVpnBgpConfig = None,
91639
92833
  vpn_connection_id: str = None,
@@ -91670,6 +92864,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91670
92864
  # * **true**\
91671
92865
  # * **false**\
91672
92866
  self.enable_nat_traversal = enable_nat_traversal
92867
+ self.enable_tunnels_bgp = enable_tunnels_bgp
91673
92868
  # The configuration of Phase 1 negotiations.
91674
92869
  self.ike_config = ike_config
91675
92870
  # The configuration of Phase 2 negotiations.
@@ -91702,6 +92897,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91702
92897
  # * **ipsec_sa_not_established**: Phase 2 negotiations failed.
91703
92898
  # * **ipsec_sa_established**: Phase 2 negotiations succeeded.
91704
92899
  self.status = status
92900
+ self.tunnel_options_specification = tunnel_options_specification
91705
92901
  # The health check configuration of the IPsec-VPN connection.
91706
92902
  self.vco_health_check = vco_health_check
91707
92903
  # The BGP configuration of the IPsec-VPN connection.
@@ -91716,6 +92912,10 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91716
92912
  self.ike_config.validate()
91717
92913
  if self.ipsec_config:
91718
92914
  self.ipsec_config.validate()
92915
+ if self.tunnel_options_specification:
92916
+ for k in self.tunnel_options_specification:
92917
+ if k:
92918
+ k.validate()
91719
92919
  if self.vco_health_check:
91720
92920
  self.vco_health_check.validate()
91721
92921
  if self.vpn_bgp_config:
@@ -91743,6 +92943,8 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91743
92943
  result['EnableDpd'] = self.enable_dpd
91744
92944
  if self.enable_nat_traversal is not None:
91745
92945
  result['EnableNatTraversal'] = self.enable_nat_traversal
92946
+ if self.enable_tunnels_bgp is not None:
92947
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
91746
92948
  if self.ike_config is not None:
91747
92949
  result['IkeConfig'] = self.ike_config.to_map()
91748
92950
  if self.ipsec_config is not None:
@@ -91763,6 +92965,10 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91763
92965
  result['Spec'] = self.spec
91764
92966
  if self.status is not None:
91765
92967
  result['Status'] = self.status
92968
+ result['TunnelOptionsSpecification'] = []
92969
+ if self.tunnel_options_specification is not None:
92970
+ for k in self.tunnel_options_specification:
92971
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
91766
92972
  if self.vco_health_check is not None:
91767
92973
  result['VcoHealthCheck'] = self.vco_health_check.to_map()
91768
92974
  if self.vpn_bgp_config is not None:
@@ -91791,6 +92997,8 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91791
92997
  self.enable_dpd = m.get('EnableDpd')
91792
92998
  if m.get('EnableNatTraversal') is not None:
91793
92999
  self.enable_nat_traversal = m.get('EnableNatTraversal')
93000
+ if m.get('EnableTunnelsBgp') is not None:
93001
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
91794
93002
  if m.get('IkeConfig') is not None:
91795
93003
  temp_model = ModifyVpnAttachmentAttributeResponseBodyIkeConfig()
91796
93004
  self.ike_config = temp_model.from_map(m['IkeConfig'])
@@ -91813,6 +93021,11 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91813
93021
  self.spec = m.get('Spec')
91814
93022
  if m.get('Status') is not None:
91815
93023
  self.status = m.get('Status')
93024
+ self.tunnel_options_specification = []
93025
+ if m.get('TunnelOptionsSpecification') is not None:
93026
+ for k in m.get('TunnelOptionsSpecification'):
93027
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification()
93028
+ self.tunnel_options_specification.append(temp_model.from_map(k))
91816
93029
  if m.get('VcoHealthCheck') is not None:
91817
93030
  temp_model = ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck()
91818
93031
  self.vco_health_check = temp_model.from_map(m['VcoHealthCheck'])
@@ -91876,15 +93089,19 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelBgpConf
91876
93089
  ):
91877
93090
  # The ASN of the tunnel on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
91878
93091
  #
91879
- # > - You can specify or modify this parameter if BGP is enabled for the IPsec-VPN connection (**EnableTunnelsBgp** is set to **true**).
91880
- # > - 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).
91881
- # > - 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.
93092
+ # > You can specify this parameter only if **EnableTunnelsBgp** is set to **true**.
93093
+ #
93094
+ # * 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).
93095
+ #
93096
+ # * 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.
91882
93097
  self.local_asn = local_asn
91883
- # 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.
93098
+ # 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.
91884
93099
  self.local_bgp_ip = local_bgp_ip
91885
- # 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.
93100
+ # The BGP CIDR block of the tunnel.
93101
+ #
93102
+ # 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.
91886
93103
  #
91887
- # > The BGP CIDR block of a tunnel associated with a VPN gateway must be unique.
93104
+ # > The BGP CIDR block of each tunnel must be unique on a VPN gateway.
91888
93105
  self.tunnel_cidr = tunnel_cidr
91889
93106
 
91890
93107
  def validate(self):
@@ -91936,33 +93153,33 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIkeConf
91936
93153
  #
91937
93154
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**.
91938
93155
  self.ike_enc_alg = ike_enc_alg
91939
- # The SA lifetime that is determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**.
93156
+ # The SA lifetime as a result of Phase 1 negotiations. Unit: seconds Valid values: **0** to **86400**.
91940
93157
  self.ike_lifetime = ike_lifetime
91941
- # The IKE negotiation mode. Valid values:
93158
+ # The negotiation mode of IKE. Valid values:
91942
93159
  #
91943
- # * **main**: This mode offers higher security during negotiations.
91944
- # * **aggressive**: This mode is faster and has a higher success rate.
93160
+ # * **main:** This mode offers higher security during negotiations.
93161
+ # * **aggressive:** This mode supports faster negotiations and a higher success rate.
91945
93162
  self.ike_mode = ike_mode
91946
- # The DH key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
93163
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
91947
93164
  self.ike_pfs = ike_pfs
91948
93165
  # The version of the IKE protocol. Valid values: **ikev1** and **ikev2**.
91949
93166
  #
91950
- # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
93167
+ # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and provides better support for scenarios with multiple CIDR blocks.
91951
93168
  self.ike_version = ike_version
91952
- # 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.
93169
+ # 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.
91953
93170
  #
91954
- # You can set **LocalId** to a fully qualified domain name (FQDN). In this case, we recommend that you set IkeMode to **aggressive**.
93171
+ # **LocalId** supports fully qualified domain names (FQDNs). If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
91955
93172
  self.local_id = local_id
91956
93173
  # The pre-shared key, which is used for identity authentication between the tunnel and the tunnel peer.
91957
93174
  #
91958
- # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
91959
- # * 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.
93175
+ # * 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: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
93176
+ # * 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.
91960
93177
  #
91961
- # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be established.
93178
+ # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be built.
91962
93179
  self.psk = psk
91963
- # 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.
93180
+ # 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.
91964
93181
  #
91965
- # You can set **RemoteId** to an FQDN. In this case, we recommend that you set IkeMode to **aggressive**.
93182
+ # **RemoteId** supports FQDNs. If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
91966
93183
  self.remote_id = remote_id
91967
93184
 
91968
93185
  def validate(self):
@@ -92033,9 +93250,9 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecCo
92033
93250
  #
92034
93251
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**.
92035
93252
  self.ipsec_enc_alg = ipsec_enc_alg
92036
- # The SA lifetime that is determined by Phase 2 negotiations. Unit: seconds. Valid values: **0** to **86400**.
93253
+ # The SA lifetime as a result of Phase 2 negotiations. Unit: seconds Valid values: **0** to **86400**.
92037
93254
  self.ipsec_lifetime = ipsec_lifetime
92038
- # The DH key exchange algorithm that is used in Phase 2 negotiations.
93255
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 2 negotiations.
92039
93256
  #
92040
93257
  # Valid values: **disabled**, **group1**, **group2**, **group5**, and **group14**.
92041
93258
  self.ipsec_pfs = ipsec_pfs
@@ -92075,6 +93292,7 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecCo
92075
93292
  class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92076
93293
  def __init__(
92077
93294
  self,
93295
+ customer_gateway_id: str = None,
92078
93296
  enable_dpd: bool = None,
92079
93297
  enable_nat_traversal: bool = None,
92080
93298
  remote_ca_certificate: str = None,
@@ -92084,15 +93302,17 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92084
93302
  tunnel_ike_config: ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
92085
93303
  tunnel_ipsec_config: ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
92086
93304
  ):
93305
+ # The ID of the customer gateway associated with the tunnel.
93306
+ self.customer_gateway_id = customer_gateway_id
92087
93307
  # Specifies whether to enable the Dead Peer Detection (DPD) feature for the tunnel. Valid values:
92088
93308
  #
92089
- # * **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.
92090
- # * **false**\
93309
+ # * **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.
93310
+ # * **false**: disables DPD. The initiator of the IPsec-VPN connection does not send DPD packets.
92091
93311
  self.enable_dpd = enable_dpd
92092
93312
  # Specifies whether to enable NAT traversal for the tunnel. Valid values:
92093
93313
  #
92094
- # * **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.
92095
- # * **false**\
93314
+ # * **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.
93315
+ # * **false**: disables NAT traversal.
92096
93316
  self.enable_nat_traversal = enable_nat_traversal
92097
93317
  # If the VPN gateway uses an SM certificate, you can modify the CA certificate used by the IPsec peer.
92098
93318
  #
@@ -92105,8 +93325,6 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92105
93325
  self.role = role
92106
93326
  # The Border Gateway Protocol (BGP) configurations of the tunnel.
92107
93327
  self.tunnel_bgp_config = tunnel_bgp_config
92108
- # **TunnelOptionsSpecification** parameters are supported by dual-tunnel IPsec-VPN gateways. You can modify both the active and standby tunnels of the IPsec-VPN connection.
92109
- #
92110
93328
  # The tunnel ID.
92111
93329
  self.tunnel_id = tunnel_id
92112
93330
  # The configurations of Phase 1 negotiations.
@@ -92128,6 +93346,8 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92128
93346
  return _map
92129
93347
 
92130
93348
  result = dict()
93349
+ if self.customer_gateway_id is not None:
93350
+ result['CustomerGatewayId'] = self.customer_gateway_id
92131
93351
  if self.enable_dpd is not None:
92132
93352
  result['EnableDpd'] = self.enable_dpd
92133
93353
  if self.enable_nat_traversal is not None:
@@ -92148,6 +93368,8 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92148
93368
 
92149
93369
  def from_map(self, m: dict = None):
92150
93370
  m = m or dict()
93371
+ if m.get('CustomerGatewayId') is not None:
93372
+ self.customer_gateway_id = m.get('CustomerGatewayId')
92151
93373
  if m.get('EnableDpd') is not None:
92152
93374
  self.enable_dpd = m.get('EnableDpd')
92153
93375
  if m.get('EnableNatTraversal') is not None:
@@ -92200,27 +93422,27 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92200
93422
  # * **true**\
92201
93423
  # * **false**\
92202
93424
  self.auto_config_route = auto_config_route
92203
- # This parameter is supported by single-tunnel IPsec-VPN connections.
93425
+ # This parameter is supported if you modify the configurations of an IPsec-VPN connection in single-tunnel mode.
92204
93426
  #
92205
- # The Border Gateway Protocol (BGP) configurations:
93427
+ # BGP configuration:
92206
93428
  #
92207
- # * **BgpConfig.EnableBgp:** specifies whether to enable BGP. Valid values: **true** and **false**.
93429
+ # * **BgpConfig.EnableBgp**: specifies whether to enable BGP. Valid values: **true** and **false**.
92208
93430
  #
92209
93431
  # * **BgpConfig.LocalAsn:** the autonomous system number (ASN) on the Alibaba Cloud side. Valid values: **1** to **4294967295**.
92210
93432
  #
92211
- # 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.
93433
+ # 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.
92212
93434
  #
92213
- # For example, if you enter 123.456, the ASN is: 123 × 65536 + 456 = 8061384.
93435
+ # For example, if you enter 123.456, the ASN is 8061384. The ASN is calculated by using the following formula: 123 × 65536 + 456 = 8061384.
92214
93436
  #
92215
- # * **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.
93437
+ # * **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.
92216
93438
  #
92217
- # > The CIDR block of the IPsec tunnel of each IPsec-VPN connection must be unique on a VPN gateway.
93439
+ # > The CIDR block of the IPsec tunnel for each IPsec-VPN connection on a VPN gateway must be unique.
92218
93440
  #
92219
- # * **LocalBgpIp**: the BGP IP address on the Alibaba Cloud side. This IP address must fall within the CIDR block range of the IPsec tunnel.
93441
+ # * **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.
92220
93442
  #
92221
93443
  # > - This parameter is required when the VPN gateway has dynamic BGP enabled.
92222
- # > - 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).
92223
- # > - 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.
93444
+ # > - 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).
93445
+ # > - 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.
92224
93446
  self.bgp_config = bgp_config
92225
93447
  # The client token that is used to ensure the idempotence of the request.
92226
93448
  #
@@ -92261,25 +93483,27 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92261
93483
  # * **HealthCheckConfig.interval**: the interval between two consecutive health checks. Unit: seconds.
92262
93484
  # * **HealthCheckConfig.retry**: the maximum number of health check retries.
92263
93485
  self.health_check_config = health_check_config
92264
- # This parameter is supported by single-tunnel IPsec-VPN connections.
93486
+ # This parameter is supported if you modify the configurations of an IPsec-VPN connection in single-tunnel mode.
92265
93487
  #
92266
93488
  # The configurations of Phase 1 negotiations:
92267
93489
  #
92268
- # * **IkeConfig.Psk**: the pre-shared key that is used for authentication between the VPN gateway and the data center.
93490
+ # * **IkeConfig.Psk**: The pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
92269
93491
  #
92270
- # * It must be 1 to 100 characters in length, and can contain letters, digits, and the following characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
92271
- # * 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.
93492
+ # * 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: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
93493
+ # * 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.
92272
93494
  #
92273
- # > 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.
93495
+ # **\
93496
+ #
93497
+ # **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.
92274
93498
  #
92275
93499
  # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**.
92276
93500
  #
92277
- # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
93501
+ # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and provides better support for scenarios with multiple CIDR blocks.
92278
93502
  #
92279
93503
  # * **IkeConfig.IkeMode**: the negotiation mode of IKE. Valid values: **main** and **aggressive**.
92280
93504
  #
92281
- # * **main**: This mode offers higher security during negotiations.
92282
- # * **aggressive**: This mode is faster and has a higher success rate.
93505
+ # * **main:** This mode offers higher security during negotiations.
93506
+ # * **aggressive:** This mode supports faster negotiations and a higher success rate.
92283
93507
  #
92284
93508
  # * **IkeConfig.IkeEncAlg**: the encryption algorithm that is used in Phase 1 negotiations.
92285
93509
  #
@@ -92289,13 +93513,13 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92289
93513
  #
92290
93514
  # Valid values: **md5**, **sha1**, **sha256**, **sha384**, and **sha512**.
92291
93515
  #
92292
- # * **IkeConfig.IkePfs**: the Diffie-Hellman (DH) key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
93516
+ # * **IkeConfig.IkePfs**: the Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
92293
93517
  #
92294
- # * **IkeConfig.IkeLifetime**: the security association (SA) lifetime that is determined by Phase 1 negotiations. Unit: seconds. Valid values: **0 to 86400**.
93518
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds Valid values: **0 to 86400**.
92295
93519
  #
92296
- # * **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.
93520
+ # * **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.
92297
93521
  #
92298
- # * **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.
93522
+ # * **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.
92299
93523
  self.ike_config = ike_config
92300
93524
  # You can specify this parameter if you modify the configuration of a single-tunnel IPsec-VPN connection.
92301
93525
  #
@@ -92353,7 +93577,7 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92353
93577
  self.resource_owner_id = resource_owner_id
92354
93578
  # The tunnel configurations.
92355
93579
  #
92356
- # 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.
93580
+ # 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.
92357
93581
  self.tunnel_options_specification = tunnel_options_specification
92358
93582
  # The ID of the IPsec-VPN connection.
92359
93583
  #