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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12719,7 +12719,19 @@ class CreateNatGatewayRequestAccessMode(TeaModel):
12719
12719
  mode_value: str = None,
12720
12720
  tunnel_type: str = None,
12721
12721
  ):
12722
+ # Access mode. Valid values:
12723
+ #
12724
+ # - **route**: route mode
12725
+ #
12726
+ # - **tunnel**: tunnel mode
12727
+ #
12728
+ # > If this parameter is specified, you must set **PrivateLinkEnabled** to **true**.
12722
12729
  self.mode_value = mode_value
12730
+ # Tunnel mode type:
12731
+ #
12732
+ # - **geneve**: Geneve type
12733
+ #
12734
+ # > This value takes effect if the access mode is the tunnel mode.
12723
12735
  self.tunnel_type = tunnel_type
12724
12736
 
12725
12737
  def validate(self):
@@ -12752,9 +12764,9 @@ class CreateNatGatewayRequestTag(TeaModel):
12752
12764
  key: str = None,
12753
12765
  value: str = None,
12754
12766
  ):
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://.
12767
+ # The tag key. The format of Tag.N.Key when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
12756
12768
  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://.
12769
+ # The tag value. The format of Tag.N.Value when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
12758
12770
  self.value = value
12759
12771
 
12760
12772
  def validate(self):
@@ -12809,6 +12821,7 @@ class CreateNatGatewayRequest(TeaModel):
12809
12821
  v_switch_id: str = None,
12810
12822
  vpc_id: str = None,
12811
12823
  ):
12824
+ # The access mode for reverse access to the VPC NAT gateway.
12812
12825
  self.access_mode = access_mode
12813
12826
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12814
12827
  self.auto_pay = auto_pay
@@ -12826,13 +12839,11 @@ class CreateNatGatewayRequest(TeaModel):
12826
12839
  self.duration = duration
12827
12840
  # The mode in which the EIP is associated with the NAT gateway. Valid values:
12828
12841
  #
12829
- # * **MULTI_BINDED** (default): Multi-EIP-to-ENI mode.
12842
+ # - **MULTI_BINDED**(default): the multi-EIP-to-ENI mode.
12830
12843
  #
12831
- # * **NAT**: NAT mode. IPv4 gateways are supported in this mode.
12844
+ # - **NAT**: NAT mode, which is compatible with IPv4 addresses.
12832
12845
  #
12833
- # **\
12834
- #
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.
12846
+ # > If an EIP is associated with a NAT gateway in NAT mode, the EIP occupies a private IP address of the vSwitch where the NAT gateway is deployed. Make sure that the vSwitch has sufficient private IP addresses. Otherwise, EIPs cannot be associated with the NAT gateway. In NAT mode, a maximum number of 50 EIPs can be associated with each NAT gateway.
12836
12847
  self.eip_bind_mode = eip_bind_mode
12837
12848
  # Specifies whether to enable ICMP retrieval. Valid values:
12838
12849
  #
@@ -12849,7 +12860,7 @@ class CreateNatGatewayRequest(TeaModel):
12849
12860
  self.internet_charge_type = internet_charge_type
12850
12861
  # The name of the NAT gateway.
12851
12862
  #
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.
12863
+ # The name must be 2 to 128 characters in length and can contain letters, digits, underscores (_), and hyphens (-). The name must start with a letter.
12853
12864
  #
12854
12865
  # If this parameter is not set, the system assigns a default name to the NAT gateway.
12855
12866
  self.name = name
@@ -12864,6 +12875,7 @@ class CreateNatGatewayRequest(TeaModel):
12864
12875
  self.owner_id = owner_id
12865
12876
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
12866
12877
  self.pricing_cycle = pricing_cycle
12878
+ # PrivateLink is not supported by default. If you set the value to true, PrivateLink is supported.
12867
12879
  self.private_link_enabled = private_link_enabled
12868
12880
  # The region ID of the NAT gateway.
12869
12881
  #
@@ -13024,9 +13036,9 @@ class CreateNatGatewayShrinkRequestTag(TeaModel):
13024
13036
  key: str = None,
13025
13037
  value: str = None,
13026
13038
  ):
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://.
13039
+ # The tag key. The format of Tag.N.Key when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
13028
13040
  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://.
13041
+ # The tag value. The format of Tag.N.Value when you call the operation. Valid values of N: 1 to 20. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain http:// or https://. The tag key cannot start with acs: or aliyun.
13030
13042
  self.value = value
13031
13043
 
13032
13044
  def validate(self):
@@ -13081,6 +13093,7 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13081
13093
  v_switch_id: str = None,
13082
13094
  vpc_id: str = None,
13083
13095
  ):
13096
+ # The access mode for reverse access to the VPC NAT gateway.
13084
13097
  self.access_mode_shrink = access_mode_shrink
13085
13098
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
13086
13099
  self.auto_pay = auto_pay
@@ -13098,13 +13111,11 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13098
13111
  self.duration = duration
13099
13112
  # The mode in which the EIP is associated with the NAT gateway. Valid values:
13100
13113
  #
13101
- # * **MULTI_BINDED** (default): Multi-EIP-to-ENI mode.
13114
+ # - **MULTI_BINDED**(default): the multi-EIP-to-ENI mode.
13102
13115
  #
13103
- # * **NAT**: NAT mode. IPv4 gateways are supported in this mode.
13116
+ # - **NAT**: NAT mode, which is compatible with IPv4 addresses.
13104
13117
  #
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.
13118
+ # > If an EIP is associated with a NAT gateway in NAT mode, the EIP occupies a private IP address of the vSwitch where the NAT gateway is deployed. Make sure that the vSwitch has sufficient private IP addresses. Otherwise, EIPs cannot be associated with the NAT gateway. In NAT mode, a maximum number of 50 EIPs can be associated with each NAT gateway.
13108
13119
  self.eip_bind_mode = eip_bind_mode
13109
13120
  # Specifies whether to enable ICMP retrieval. Valid values:
13110
13121
  #
@@ -13121,7 +13132,7 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13121
13132
  self.internet_charge_type = internet_charge_type
13122
13133
  # The name of the NAT gateway.
13123
13134
  #
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.
13135
+ # The name must be 2 to 128 characters in length and can contain letters, digits, underscores (_), and hyphens (-). The name must start with a letter.
13125
13136
  #
13126
13137
  # If this parameter is not set, the system assigns a default name to the NAT gateway.
13127
13138
  self.name = name
@@ -13136,6 +13147,7 @@ class CreateNatGatewayShrinkRequest(TeaModel):
13136
13147
  self.owner_id = owner_id
13137
13148
  # Subscription Internet NAT gateways are no longer available for purchase. Ignore this parameter.
13138
13149
  self.pricing_cycle = pricing_cycle
13150
+ # PrivateLink is not supported by default. If you set the value to true, PrivateLink is supported.
13139
13151
  self.private_link_enabled = private_link_enabled
13140
13152
  # The region ID of the NAT gateway.
13141
13153
  #
@@ -17341,18 +17353,25 @@ class CreateSslVpnServerRequest(TeaModel):
17341
17353
  # * **true**\
17342
17354
  # * **false** (default)
17343
17355
  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:
17356
+ # Specifies whether to enable two-factor authentication. To enable two-factor authentication, you need to specify `IDaaSInstanceId`, `IDaaSRegionId`, and `IDaaSApplicationId`. Valid values:
17357
+ #
17358
+ # * **true**\
17359
+ # * **false** (default)
17360
+ #
17361
+ # >
17345
17362
  #
17346
- # * **true**: enables this feature.
17347
- # * **false** (default): disables this feature.
17363
+ # * If you use two-factor authentication for the first time, you need to complete [authorization](https://ram.console.aliyun.com/role/authorization?request=%7B%22Services%22%3A%5B%7B%22Service%22%3A%22VPN%22%2C%22Roles%22%3A%5B%7B%22RoleName%22%3A%22AliyunVpnAccessingIdaasRole%22%2C%22TemplateId%22%3A%22IdaasRole%22%7D%5D%7D%5D%2C%22ReturnUrl%22%3A%22https%3A%2F%2Fvpc.console.aliyun.com%2Fsslvpn%2Fcn-shanghai%2Fvpn-servers%22%7D) before you create an SSL server.
17348
17364
  #
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.
17365
+ # * IDaaS EIAM 1.0 instances are no longer available for purchase. If your Alibaba Cloud account has IDaaS EIAM 1.0 instances, IDaaS EIAM 1.0 instances can be associated after two-factor authentication is enabled. If your Alibaba Cloud account does not have IDaaS EIAM 1.0 instances, only IDaaS EIAM 2.0 instances can be associated after two-factor authentication is enabled.
17351
17366
  self.enable_multi_factor_auth = enable_multi_factor_auth
17367
+ # The ID of the IDaaS application.
17368
+ #
17369
+ # * If an IDaaS EIAM 2.0 instance is associated, you need to specify an IDaaS application ID.
17370
+ # * If an IDaaS EIAM 1.0 instance is associated, you do not need to specify an IDaaS application ID.
17352
17371
  self.idaa_sapplication_id = idaa_sapplication_id
17353
- # The Identity as a Service (IDaaS) instance ID.
17372
+ # The ID of the IDaaS EIAM instance.
17354
17373
  self.idaa_sinstance_id = idaa_sinstance_id
17355
- # The ID of the region where the IDaaS instance is created.
17374
+ # The region ID of the IDaaS EIAM instance.
17356
17375
  self.idaa_sregion_id = idaa_sregion_id
17357
17376
  # The local CIDR block.
17358
17377
  #
@@ -21446,6 +21465,236 @@ class CreateVpnAttachmentRequestTags(TeaModel):
21446
21465
  return self
21447
21466
 
21448
21467
 
21468
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
21469
+ def __init__(
21470
+ self,
21471
+ local_asn: int = None,
21472
+ local_bgp_ip: str = None,
21473
+ tunnel_cidr: str = None,
21474
+ ):
21475
+ self.local_asn = local_asn
21476
+ self.local_bgp_ip = local_bgp_ip
21477
+ self.tunnel_cidr = tunnel_cidr
21478
+
21479
+ def validate(self):
21480
+ pass
21481
+
21482
+ def to_map(self):
21483
+ _map = super().to_map()
21484
+ if _map is not None:
21485
+ return _map
21486
+
21487
+ result = dict()
21488
+ if self.local_asn is not None:
21489
+ result['LocalAsn'] = self.local_asn
21490
+ if self.local_bgp_ip is not None:
21491
+ result['LocalBgpIp'] = self.local_bgp_ip
21492
+ if self.tunnel_cidr is not None:
21493
+ result['TunnelCidr'] = self.tunnel_cidr
21494
+ return result
21495
+
21496
+ def from_map(self, m: dict = None):
21497
+ m = m or dict()
21498
+ if m.get('LocalAsn') is not None:
21499
+ self.local_asn = m.get('LocalAsn')
21500
+ if m.get('LocalBgpIp') is not None:
21501
+ self.local_bgp_ip = m.get('LocalBgpIp')
21502
+ if m.get('TunnelCidr') is not None:
21503
+ self.tunnel_cidr = m.get('TunnelCidr')
21504
+ return self
21505
+
21506
+
21507
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
21508
+ def __init__(
21509
+ self,
21510
+ ike_auth_alg: str = None,
21511
+ ike_enc_alg: str = None,
21512
+ ike_lifetime: int = None,
21513
+ ike_mode: str = None,
21514
+ ike_pfs: str = None,
21515
+ ike_version: str = None,
21516
+ local_id: str = None,
21517
+ psk: str = None,
21518
+ remote_id: str = None,
21519
+ ):
21520
+ self.ike_auth_alg = ike_auth_alg
21521
+ self.ike_enc_alg = ike_enc_alg
21522
+ self.ike_lifetime = ike_lifetime
21523
+ self.ike_mode = ike_mode
21524
+ self.ike_pfs = ike_pfs
21525
+ self.ike_version = ike_version
21526
+ self.local_id = local_id
21527
+ self.psk = psk
21528
+ self.remote_id = remote_id
21529
+
21530
+ def validate(self):
21531
+ pass
21532
+
21533
+ def to_map(self):
21534
+ _map = super().to_map()
21535
+ if _map is not None:
21536
+ return _map
21537
+
21538
+ result = dict()
21539
+ if self.ike_auth_alg is not None:
21540
+ result['IkeAuthAlg'] = self.ike_auth_alg
21541
+ if self.ike_enc_alg is not None:
21542
+ result['IkeEncAlg'] = self.ike_enc_alg
21543
+ if self.ike_lifetime is not None:
21544
+ result['IkeLifetime'] = self.ike_lifetime
21545
+ if self.ike_mode is not None:
21546
+ result['IkeMode'] = self.ike_mode
21547
+ if self.ike_pfs is not None:
21548
+ result['IkePfs'] = self.ike_pfs
21549
+ if self.ike_version is not None:
21550
+ result['IkeVersion'] = self.ike_version
21551
+ if self.local_id is not None:
21552
+ result['LocalId'] = self.local_id
21553
+ if self.psk is not None:
21554
+ result['Psk'] = self.psk
21555
+ if self.remote_id is not None:
21556
+ result['RemoteId'] = self.remote_id
21557
+ return result
21558
+
21559
+ def from_map(self, m: dict = None):
21560
+ m = m or dict()
21561
+ if m.get('IkeAuthAlg') is not None:
21562
+ self.ike_auth_alg = m.get('IkeAuthAlg')
21563
+ if m.get('IkeEncAlg') is not None:
21564
+ self.ike_enc_alg = m.get('IkeEncAlg')
21565
+ if m.get('IkeLifetime') is not None:
21566
+ self.ike_lifetime = m.get('IkeLifetime')
21567
+ if m.get('IkeMode') is not None:
21568
+ self.ike_mode = m.get('IkeMode')
21569
+ if m.get('IkePfs') is not None:
21570
+ self.ike_pfs = m.get('IkePfs')
21571
+ if m.get('IkeVersion') is not None:
21572
+ self.ike_version = m.get('IkeVersion')
21573
+ if m.get('LocalId') is not None:
21574
+ self.local_id = m.get('LocalId')
21575
+ if m.get('Psk') is not None:
21576
+ self.psk = m.get('Psk')
21577
+ if m.get('RemoteId') is not None:
21578
+ self.remote_id = m.get('RemoteId')
21579
+ return self
21580
+
21581
+
21582
+ class CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
21583
+ def __init__(
21584
+ self,
21585
+ ipsec_auth_alg: str = None,
21586
+ ipsec_enc_alg: str = None,
21587
+ ipsec_lifetime: int = None,
21588
+ ipsec_pfs: str = None,
21589
+ ):
21590
+ self.ipsec_auth_alg = ipsec_auth_alg
21591
+ self.ipsec_enc_alg = ipsec_enc_alg
21592
+ self.ipsec_lifetime = ipsec_lifetime
21593
+ self.ipsec_pfs = ipsec_pfs
21594
+
21595
+ def validate(self):
21596
+ pass
21597
+
21598
+ def to_map(self):
21599
+ _map = super().to_map()
21600
+ if _map is not None:
21601
+ return _map
21602
+
21603
+ result = dict()
21604
+ if self.ipsec_auth_alg is not None:
21605
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
21606
+ if self.ipsec_enc_alg is not None:
21607
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
21608
+ if self.ipsec_lifetime is not None:
21609
+ result['IpsecLifetime'] = self.ipsec_lifetime
21610
+ if self.ipsec_pfs is not None:
21611
+ result['IpsecPfs'] = self.ipsec_pfs
21612
+ return result
21613
+
21614
+ def from_map(self, m: dict = None):
21615
+ m = m or dict()
21616
+ if m.get('IpsecAuthAlg') is not None:
21617
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
21618
+ if m.get('IpsecEncAlg') is not None:
21619
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
21620
+ if m.get('IpsecLifetime') is not None:
21621
+ self.ipsec_lifetime = m.get('IpsecLifetime')
21622
+ if m.get('IpsecPfs') is not None:
21623
+ self.ipsec_pfs = m.get('IpsecPfs')
21624
+ return self
21625
+
21626
+
21627
+ class CreateVpnAttachmentRequestTunnelOptionsSpecification(TeaModel):
21628
+ def __init__(
21629
+ self,
21630
+ customer_gateway_id: str = None,
21631
+ enable_dpd: bool = None,
21632
+ enable_nat_traversal: bool = None,
21633
+ tunnel_bgp_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig = None,
21634
+ tunnel_ike_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
21635
+ tunnel_index: int = None,
21636
+ tunnel_ipsec_config: CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
21637
+ ):
21638
+ self.customer_gateway_id = customer_gateway_id
21639
+ self.enable_dpd = enable_dpd
21640
+ self.enable_nat_traversal = enable_nat_traversal
21641
+ self.tunnel_bgp_config = tunnel_bgp_config
21642
+ self.tunnel_ike_config = tunnel_ike_config
21643
+ self.tunnel_index = tunnel_index
21644
+ self.tunnel_ipsec_config = tunnel_ipsec_config
21645
+
21646
+ def validate(self):
21647
+ if self.tunnel_bgp_config:
21648
+ self.tunnel_bgp_config.validate()
21649
+ if self.tunnel_ike_config:
21650
+ self.tunnel_ike_config.validate()
21651
+ if self.tunnel_ipsec_config:
21652
+ self.tunnel_ipsec_config.validate()
21653
+
21654
+ def to_map(self):
21655
+ _map = super().to_map()
21656
+ if _map is not None:
21657
+ return _map
21658
+
21659
+ result = dict()
21660
+ if self.customer_gateway_id is not None:
21661
+ result['CustomerGatewayId'] = self.customer_gateway_id
21662
+ if self.enable_dpd is not None:
21663
+ result['EnableDpd'] = self.enable_dpd
21664
+ if self.enable_nat_traversal is not None:
21665
+ result['EnableNatTraversal'] = self.enable_nat_traversal
21666
+ if self.tunnel_bgp_config is not None:
21667
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
21668
+ if self.tunnel_ike_config is not None:
21669
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
21670
+ if self.tunnel_index is not None:
21671
+ result['TunnelIndex'] = self.tunnel_index
21672
+ if self.tunnel_ipsec_config is not None:
21673
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
21674
+ return result
21675
+
21676
+ def from_map(self, m: dict = None):
21677
+ m = m or dict()
21678
+ if m.get('CustomerGatewayId') is not None:
21679
+ self.customer_gateway_id = m.get('CustomerGatewayId')
21680
+ if m.get('EnableDpd') is not None:
21681
+ self.enable_dpd = m.get('EnableDpd')
21682
+ if m.get('EnableNatTraversal') is not None:
21683
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
21684
+ if m.get('TunnelBgpConfig') is not None:
21685
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelBgpConfig()
21686
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
21687
+ if m.get('TunnelIkeConfig') is not None:
21688
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIkeConfig()
21689
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
21690
+ if m.get('TunnelIndex') is not None:
21691
+ self.tunnel_index = m.get('TunnelIndex')
21692
+ if m.get('TunnelIpsecConfig') is not None:
21693
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecificationTunnelIpsecConfig()
21694
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
21695
+ return self
21696
+
21697
+
21449
21698
  class CreateVpnAttachmentRequest(TeaModel):
21450
21699
  def __init__(
21451
21700
  self,
@@ -21456,6 +21705,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21456
21705
  effect_immediately: bool = None,
21457
21706
  enable_dpd: bool = None,
21458
21707
  enable_nat_traversal: bool = None,
21708
+ enable_tunnels_bgp: bool = None,
21459
21709
  health_check_config: str = None,
21460
21710
  ike_config: str = None,
21461
21711
  ipsec_config: str = None,
@@ -21470,6 +21720,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21470
21720
  resource_owner_account: str = None,
21471
21721
  resource_owner_id: int = None,
21472
21722
  tags: List[CreateVpnAttachmentRequestTags] = None,
21723
+ tunnel_options_specification: List[CreateVpnAttachmentRequestTunnelOptionsSpecification] = None,
21473
21724
  ):
21474
21725
  # Specifies whether to automatically configure routes. Valid values:
21475
21726
  #
@@ -21499,9 +21750,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21499
21750
  #
21500
21751
  # > If you do not specify this parameter, the system automatically uses the **request ID** as the **client token**. The **request ID** may be different for each request.
21501
21752
  self.client_token = client_token
21502
- # The ID of the customer gateway.
21503
- #
21504
- # This parameter is required.
21753
+ # The customer gateway ID.
21505
21754
  self.customer_gateway_id = customer_gateway_id
21506
21755
  # Specifies whether to immediately start IPsec negotiations after the configuration takes effect. Valid values:
21507
21756
  #
@@ -21518,6 +21767,7 @@ class CreateVpnAttachmentRequest(TeaModel):
21518
21767
  # * **true** (default) After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the VPN tunnel.
21519
21768
  # * **false**\
21520
21769
  self.enable_nat_traversal = enable_nat_traversal
21770
+ self.enable_tunnels_bgp = enable_tunnels_bgp
21521
21771
  # The health check configuration:
21522
21772
  #
21523
21773
  # * **HealthCheckConfig.enable**: specifies whether to enable health checks. Valid values: **true** and **false**. Default value: false.
@@ -21537,14 +21787,14 @@ class CreateVpnAttachmentRequest(TeaModel):
21537
21787
  self.health_check_config = health_check_config
21538
21788
  # The configurations of Phase 1 negotiations:
21539
21789
  #
21540
- # * **IkeConfig.Psk**: The pre-shared key that is used for authentication between the VPN gateway and the data center.
21790
+ # * **IkeConfig.Psk**: the pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
21541
21791
  #
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.
21792
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
21793
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
21544
21794
  #
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.
21795
+ # > The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises data center. Otherwise, connections between the on-premises data center and the VPN gateway cannot be established.
21546
21796
  #
21547
- # * **IkeConfig.IkeVersion**: the IKE version. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21797
+ # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21548
21798
  #
21549
21799
  # * **IkeConfig.IkeMode**: the negotiation mode. Valid values: **main** and **aggressive**. Default value: **main**.
21550
21800
  #
@@ -21554,9 +21804,9 @@ class CreateVpnAttachmentRequest(TeaModel):
21554
21804
  #
21555
21805
  # * **IkeConfig.IkePfs**: the Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**. Default value: **group2**.
21556
21806
  #
21557
- # * **IkeConfig.IkeLifetime**: the SA lifetime determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
21807
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
21558
21808
  #
21559
- # * **IkeConfig.LocalId**: the identifier on the Alibaba Cloud side. The identifier cannot exceed 100 characters in length. This parameter is empty by default.
21809
+ # * **IkeConfig.LocalIdIPsec**: the identifier on the Alibaba Cloud side. The identifier cannot exceed 100 characters in length. This parameter is left empty by default.
21560
21810
  #
21561
21811
  # * **IkeConfig.RemoteId**: the identifier on the data center side. The identifier cannot exceed 100 characters in length. The default value is the IP address of the customer gateway.
21562
21812
  self.ike_config = ike_config
@@ -21620,12 +21870,17 @@ class CreateVpnAttachmentRequest(TeaModel):
21620
21870
  #
21621
21871
  # Each tag key corresponds to one tag value. You can specify up to 20 tag values in each call.
21622
21872
  self.tags = tags
21873
+ self.tunnel_options_specification = tunnel_options_specification
21623
21874
 
21624
21875
  def validate(self):
21625
21876
  if self.tags:
21626
21877
  for k in self.tags:
21627
21878
  if k:
21628
21879
  k.validate()
21880
+ if self.tunnel_options_specification:
21881
+ for k in self.tunnel_options_specification:
21882
+ if k:
21883
+ k.validate()
21629
21884
 
21630
21885
  def to_map(self):
21631
21886
  _map = super().to_map()
@@ -21647,6 +21902,8 @@ class CreateVpnAttachmentRequest(TeaModel):
21647
21902
  result['EnableDpd'] = self.enable_dpd
21648
21903
  if self.enable_nat_traversal is not None:
21649
21904
  result['EnableNatTraversal'] = self.enable_nat_traversal
21905
+ if self.enable_tunnels_bgp is not None:
21906
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
21650
21907
  if self.health_check_config is not None:
21651
21908
  result['HealthCheckConfig'] = self.health_check_config
21652
21909
  if self.ike_config is not None:
@@ -21677,6 +21934,10 @@ class CreateVpnAttachmentRequest(TeaModel):
21677
21934
  if self.tags is not None:
21678
21935
  for k in self.tags:
21679
21936
  result['Tags'].append(k.to_map() if k else None)
21937
+ result['TunnelOptionsSpecification'] = []
21938
+ if self.tunnel_options_specification is not None:
21939
+ for k in self.tunnel_options_specification:
21940
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
21680
21941
  return result
21681
21942
 
21682
21943
  def from_map(self, m: dict = None):
@@ -21695,6 +21956,8 @@ class CreateVpnAttachmentRequest(TeaModel):
21695
21956
  self.enable_dpd = m.get('EnableDpd')
21696
21957
  if m.get('EnableNatTraversal') is not None:
21697
21958
  self.enable_nat_traversal = m.get('EnableNatTraversal')
21959
+ if m.get('EnableTunnelsBgp') is not None:
21960
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
21698
21961
  if m.get('HealthCheckConfig') is not None:
21699
21962
  self.health_check_config = m.get('HealthCheckConfig')
21700
21963
  if m.get('IkeConfig') is not None:
@@ -21726,6 +21989,11 @@ class CreateVpnAttachmentRequest(TeaModel):
21726
21989
  for k in m.get('Tags'):
21727
21990
  temp_model = CreateVpnAttachmentRequestTags()
21728
21991
  self.tags.append(temp_model.from_map(k))
21992
+ self.tunnel_options_specification = []
21993
+ if m.get('TunnelOptionsSpecification') is not None:
21994
+ for k in m.get('TunnelOptionsSpecification'):
21995
+ temp_model = CreateVpnAttachmentRequestTunnelOptionsSpecification()
21996
+ self.tunnel_options_specification.append(temp_model.from_map(k))
21729
21997
  return self
21730
21998
 
21731
21999
 
@@ -21895,17 +22163,19 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaMod
21895
22163
  local_bgp_ip: str = None,
21896
22164
  tunnel_cidr: str = None,
21897
22165
  ):
21898
- # The ASN on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
22166
+ # The autonomous system number (ASN) of the tunnel on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
21899
22167
  #
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.
22168
+ #
22169
+ #
22170
+ # > - If you set **EnableTunnelsBgp** to **true**, you must set this parameter.
22171
+ # > - Before you add BGP configurations, we recommend that you learn about how BGP dynamic routing works and the limits. For more information, see [VPN Gateway supports BGP dynamic routing](https://help.aliyun.com/document_detail/170235.html).
22172
+ # > - We recommend that you use a private ASN to establish BGP connections to Alibaba Cloud. For information about the range of private ASNs, see the relevant documentation.
21903
22173
  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.
22174
+ # The BGP IP address of the tunnel on the Alibaba Cloud side. The address is an IP address that falls within the BGP CIDR block.
21905
22175
  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.
22176
+ # The BGP CIDR block of the tunnel. The CIDR block must fall within the 169.254.0.0/16 range. The subnet mask of the CIDR block must be 30 bits in length.
21907
22177
  #
21908
- # > The BGP CIDR block of a tunnel associated with a VPN gateway must be unique.
22178
+ # > The BGP CIDR block of each tunnel must be unique on a VPN gateway.
21909
22179
  self.tunnel_cidr = tunnel_cidr
21910
22180
 
21911
22181
  def validate(self):
@@ -21957,36 +22227,36 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaMod
21957
22227
  #
21958
22228
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**. Default value: **aes**.
21959
22229
  self.ike_enc_alg = ike_enc_alg
21960
- # The SA lifetime that is determined by Phase 1 negotiations. Unit: seconds.
22230
+ # The SA lifetime as a result of Phase 1 negotiations. Unit: seconds.
21961
22231
  #
21962
22232
  # Valid values: **0** to **86400**. Default value: **86400**.
21963
22233
  self.ike_lifetime = ike_lifetime
21964
22234
  # The negotiation mode of IKE. Valid values: **main** and **aggressive**. Default value: **main**.
21965
22235
  #
21966
- # * **main**: This mode offers higher security during negotiations.
21967
- # * **aggressive**: This mode is faster and has a higher success rate.
22236
+ # * **main:** This mode offers higher security during negotiations.
22237
+ # * **aggressive**: This mode supports faster negotiations and a higher success rate.
21968
22238
  self.ike_mode = ike_mode
21969
- # The DH key exchange algorithm that is used in Phase 1 negotiations. Default value: **group2**.\\
22239
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Default value: **group2**.\\
21970
22240
  # Valid values: **group1**, **group2**, **group5**, and **group14**.
21971
22241
  self.ike_pfs = ike_pfs
21972
22242
  # The version of the IKE protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
21973
22243
  #
21974
- # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and is more suitable for scenarios in which multiple CIDR blocks are used.
22244
+ # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and provides better support for scenarios with multiple CIDR blocks.
21975
22245
  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.
22246
+ # The identifier of the tunnel on the Alibaba Cloud side, which is used in Phase 1 negotiations. It can contain at most 100 characters. The default value is the IP address of the tunnel.
21977
22247
  #
21978
- # You can set **LocalId** to a fully qualified domain name (FQDN). In this case, we recommend that you set IkeMode to **aggressive**.
22248
+ # **LocalId** supports fully qualified domain names (FQDNs). If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
21979
22249
  self.local_id = local_id
21980
- # The pre-shared key, which is used for identity authentication between the tunnel and the tunnel peer.
22250
+ # The pre-shared key that is used for identity authentication between the tunnel and the tunnel peer.
21981
22251
  #
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.
22252
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22253
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
21984
22254
  #
21985
22255
  # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be established.
21986
22256
  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.
22257
+ # The identifier of the tunnel peer, which is used in Phase 1 negotiations. It can contain at most 100 characters. The default value is the IP address of the customer gateway that is associated with the tunnel.
21988
22258
  #
21989
- # You can set **RemoteId** to an FQDN. In this case, we recommend that you set IkeMode to **aggressive**.
22259
+ # **RemoteId** supports FQDNs. If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
21990
22260
  self.remote_id = remote_id
21991
22261
 
21992
22262
  def validate(self):
@@ -22057,11 +22327,11 @@ class CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaM
22057
22327
  #
22058
22328
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**. Default value: **aes**.
22059
22329
  self.ipsec_enc_alg = ipsec_enc_alg
22060
- # The SA lifetime that is determined by Phase 2 negotiations. Unit: seconds.
22330
+ # The SA lifetime as a result of Phase 2 negotiations. Unit: seconds.
22061
22331
  #
22062
22332
  # Valid values: **0** to **86400**. Default value: **86400**.
22063
22333
  self.ipsec_lifetime = ipsec_lifetime
22064
- # The DH key exchange algorithm that is used in Phase 2 negotiations. Default value: **group2**.
22334
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 2 negotiations. Default value: **group2**.
22065
22335
  #
22066
22336
  # Valid values: **disabled**, **group1**, **group2**, **group5**, and **group14**.
22067
22337
  self.ipsec_pfs = ipsec_pfs
@@ -22110,33 +22380,33 @@ class CreateVpnConnectionRequestTunnelOptionsSpecification(TeaModel):
22110
22380
  tunnel_ike_config: CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
22111
22381
  tunnel_ipsec_config: CreateVpnConnectionRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
22112
22382
  ):
22113
- # The ID of the customer gateway associated with the tunnel.
22383
+ # The ID of the customer gateway that is associated with the tunnel.
22114
22384
  #
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.
22385
+ # > - This parameter is required when you create an IPsec-VPN connection in dual-tunnel mode.
22386
+ # > - You can specify parameters in the **TunnelOptionsSpecification** array when you create an IPsec-VPN connection in dual tunnel mode.
22387
+ # > - When you create an IPsec-VPN connection in dual tunnel mode, you must add configurations of the active and standby tunnels for the IPsec-VPN connection. Each IPsec-VPN connection supports only one active tunnel and one standby tunnel.
22118
22388
  self.customer_gateway_id = customer_gateway_id
22119
- # Specifies whether to enable DPD for the tunnel. Valid values:
22389
+ # Specifies whether to enable the Dead Peer Detection (DPD) feature for the tunnel. Valid values:
22120
22390
  #
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**\
22391
+ # * **true** (default): enables DPD. The initiator of the IPsec-VPN connection sends DPD packets to check the existence and availability of the peer. If no feedback is received from the peer within the specified period of time, the connection fails. In this case, ISAKMP SA and IPsec SA are deleted. The security tunnel is also deleted.
22392
+ # * **false**: disables DPD. The initiator of the IPsec-VPN connection does not send DPD packets.
22123
22393
  self.enable_dpd = enable_dpd
22124
22394
  # Specifies whether to enable NAT traversal for the tunnel. Valid values:
22125
22395
  #
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**\
22396
+ # * **true** (default): enables NAT traversal. After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the IPsec-VPN tunnel.
22397
+ # * **false**: disables NAT traversal.
22128
22398
  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.
22399
+ # If the VPN gateway uses an SM certificate, you need to configure the CA certificate used by the IPsec peer.
22130
22400
  #
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.
22401
+ # * If the VPN gateway uses an SM certificate, this parameter is required.
22402
+ # * If the VPN gateway does not use an SM certificate, leave this parameter empty.
22133
22403
  self.remote_ca_certificate = remote_ca_certificate
22134
- # The role of the tunnel. Valid values:
22404
+ # The role of the tunnel. Valid values: Valid values:
22135
22405
  #
22136
- # * **master**: The tunnel is the active tunnel.
22137
- # * **slave**: The tunnel is the standby tunnel.
22406
+ # * **master**: The tunnel is an active tunnel.
22407
+ # * **slave**: The tunnel is a standby tunnel.
22138
22408
  self.role = role
22139
- # The BGP configurations for the tunnel.
22409
+ # The Border Gateway Protocol (BGP) configurations of the tunnel.
22140
22410
  self.tunnel_bgp_config = tunnel_bgp_config
22141
22411
  # The configurations of Phase 1 negotiations.
22142
22412
  self.tunnel_ike_config = tunnel_ike_config
@@ -22295,26 +22565,28 @@ class CreateVpnConnectionRequest(TeaModel):
22295
22565
  # * **HealthCheckConfig.interval**: the time interval of health check retries. Unit: seconds. Default value: **3**.
22296
22566
  # * **HealthCheckConfig.retry**: the maximum number of health check retries. Default value: **3**.
22297
22567
  self.health_check_config = health_check_config
22298
- # This parameter is available if you create an IPsec-VPN connection in single-tunnel mode.
22568
+ # This parameter is supported if you create an IPsec-VPN connection in single-tunnel mode.
22299
22569
  #
22300
22570
  # The configurations of Phase 1 negotiations:
22301
22571
  #
22302
- # * **IkeConfig.Psk**: The pre-shared key that is used for authentication between the VPN gateway and the on-premises database.
22572
+ # * **IkeConfig.Psk**: the pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
22303
22573
  #
22304
- # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22574
+ # * The key must be 1 to 100 characters in length and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
22305
22575
  #
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.
22576
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
22307
22577
  #
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.
22578
+ # **\
22579
+ #
22580
+ # **Note** The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises data center. Otherwise, connections between the on-premises data center and the VPN gateway cannot be established.
22309
22581
  #
22310
22582
  # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**. Default value: **ikev1**.
22311
22583
  #
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.
22584
+ # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and provides better support for scenarios with multiple CIDR blocks.
22313
22585
  #
22314
22586
  # * **IkeConfig.IkeMode**: the negotiation mode of IKE. Valid values: **main** and **aggressive**. Default value: **main**.
22315
22587
  #
22316
22588
  # * **main:** This mode offers higher security during negotiations.
22317
- # * **aggressive:** This mode is faster and has a higher success rate.
22589
+ # * **aggressive**: This mode supports faster negotiations and a higher success rate.
22318
22590
  #
22319
22591
  # * **IkeConfig.IkeEncAlg**: the encryption algorithm that is used in Phase 1 negotiations.
22320
22592
  #
@@ -22324,13 +22596,13 @@ class CreateVpnConnectionRequest(TeaModel):
22324
22596
  #
22325
22597
  # Valid values: **md5**, **sha1**, **sha256**, **sha384**, and **sha512**. Default value: **md5**.
22326
22598
  #
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**.
22599
+ # * **IkeConfig.IkePfs**: the Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**. Default value: **group2**.
22328
22600
  #
22329
- # * **IkeConfig.IkeLifetime**: the SA lifetime determined by Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
22601
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds. Valid values: **0** to **86400**. Default value: **86400**.
22330
22602
  #
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.
22603
+ # * **IkeConfig.LocalId**: the identifier of the VPN gateway. It can contain at most 100 characters. The default value is the IP address of the VPN gateway.
22332
22604
  #
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.
22605
+ # * **IkeConfig.RemoteId**: the identifier of the customer gateway. It can contain at most 100 characters. The default value is the IP address of the customer gateway.
22334
22606
  self.ike_config = ike_config
22335
22607
  # This parameter is available if you create an IPsec-VPN connection in single-tunnel mode.
22336
22608
  #
@@ -22397,8 +22669,8 @@ class CreateVpnConnectionRequest(TeaModel):
22397
22669
  self.tags = tags
22398
22670
  # The tunnel configurations.
22399
22671
  #
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.
22672
+ # * You can specify parameters in the **TunnelOptionsSpecification** array when you create an IPsec-VPN connection in dual tunnel mode.
22673
+ # * When you create an IPsec-VPN connection in dual tunnel mode, you must add configurations of the active and standby tunnels for the IPsec-VPN connection. Each IPsec-VPN connection supports only one active tunnel and one standby tunnel.
22402
22674
  self.tunnel_options_specification = tunnel_options_specification
22403
22675
  # The ID of the VPN gateway.
22404
22676
  #
@@ -56989,6 +57261,7 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
56989
57261
  community: str = None,
56990
57262
  create_time: int = None,
56991
57263
  next_hop: str = None,
57264
+ next_hop_tunnel_id_list: List[str] = None,
56992
57265
  route_dest: str = None,
56993
57266
  route_entry_type: str = None,
56994
57267
  source: str = None,
@@ -57006,6 +57279,7 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57006
57279
  self.create_time = create_time
57007
57280
  # The next hop of the route.
57008
57281
  self.next_hop = next_hop
57282
+ self.next_hop_tunnel_id_list = next_hop_tunnel_id_list
57009
57283
  # The destination CIDR block of the route.
57010
57284
  self.route_dest = route_dest
57011
57285
  # The route type. Valid values:
@@ -57048,6 +57322,8 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57048
57322
  result['CreateTime'] = self.create_time
57049
57323
  if self.next_hop is not None:
57050
57324
  result['NextHop'] = self.next_hop
57325
+ if self.next_hop_tunnel_id_list is not None:
57326
+ result['NextHopTunnelIdList'] = self.next_hop_tunnel_id_list
57051
57327
  if self.route_dest is not None:
57052
57328
  result['RouteDest'] = self.route_dest
57053
57329
  if self.route_entry_type is not None:
@@ -57072,6 +57348,8 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57072
57348
  self.create_time = m.get('CreateTime')
57073
57349
  if m.get('NextHop') is not None:
57074
57350
  self.next_hop = m.get('NextHop')
57351
+ if m.get('NextHopTunnelIdList') is not None:
57352
+ self.next_hop_tunnel_id_list = m.get('NextHopTunnelIdList')
57075
57353
  if m.get('RouteDest') is not None:
57076
57354
  self.route_dest = m.get('RouteDest')
57077
57355
  if m.get('RouteEntryType') is not None:
@@ -57087,6 +57365,45 @@ class DescribeVcoRouteEntriesResponseBodyVcoRouteEntries(TeaModel):
57087
57365
  return self
57088
57366
 
57089
57367
 
57368
+ class DescribeVcoRouteEntriesResponseBodyVpnRouteCounts(TeaModel):
57369
+ def __init__(
57370
+ self,
57371
+ route_count: int = None,
57372
+ route_entry_type: str = None,
57373
+ source: str = None,
57374
+ ):
57375
+ self.route_count = route_count
57376
+ self.route_entry_type = route_entry_type
57377
+ self.source = source
57378
+
57379
+ def validate(self):
57380
+ pass
57381
+
57382
+ def to_map(self):
57383
+ _map = super().to_map()
57384
+ if _map is not None:
57385
+ return _map
57386
+
57387
+ result = dict()
57388
+ if self.route_count is not None:
57389
+ result['RouteCount'] = self.route_count
57390
+ if self.route_entry_type is not None:
57391
+ result['RouteEntryType'] = self.route_entry_type
57392
+ if self.source is not None:
57393
+ result['Source'] = self.source
57394
+ return result
57395
+
57396
+ def from_map(self, m: dict = None):
57397
+ m = m or dict()
57398
+ if m.get('RouteCount') is not None:
57399
+ self.route_count = m.get('RouteCount')
57400
+ if m.get('RouteEntryType') is not None:
57401
+ self.route_entry_type = m.get('RouteEntryType')
57402
+ if m.get('Source') is not None:
57403
+ self.source = m.get('Source')
57404
+ return self
57405
+
57406
+
57090
57407
  class DescribeVcoRouteEntriesResponseBody(TeaModel):
57091
57408
  def __init__(
57092
57409
  self,
@@ -57095,6 +57412,7 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57095
57412
  request_id: str = None,
57096
57413
  total_count: int = None,
57097
57414
  vco_route_entries: List[DescribeVcoRouteEntriesResponseBodyVcoRouteEntries] = None,
57415
+ vpn_route_counts: List[DescribeVcoRouteEntriesResponseBodyVpnRouteCounts] = None,
57098
57416
  ):
57099
57417
  # The number of the returned page.
57100
57418
  self.page_number = page_number
@@ -57106,12 +57424,17 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57106
57424
  self.total_count = total_count
57107
57425
  # The list of routes.
57108
57426
  self.vco_route_entries = vco_route_entries
57427
+ self.vpn_route_counts = vpn_route_counts
57109
57428
 
57110
57429
  def validate(self):
57111
57430
  if self.vco_route_entries:
57112
57431
  for k in self.vco_route_entries:
57113
57432
  if k:
57114
57433
  k.validate()
57434
+ if self.vpn_route_counts:
57435
+ for k in self.vpn_route_counts:
57436
+ if k:
57437
+ k.validate()
57115
57438
 
57116
57439
  def to_map(self):
57117
57440
  _map = super().to_map()
@@ -57131,6 +57454,10 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57131
57454
  if self.vco_route_entries is not None:
57132
57455
  for k in self.vco_route_entries:
57133
57456
  result['VcoRouteEntries'].append(k.to_map() if k else None)
57457
+ result['VpnRouteCounts'] = []
57458
+ if self.vpn_route_counts is not None:
57459
+ for k in self.vpn_route_counts:
57460
+ result['VpnRouteCounts'].append(k.to_map() if k else None)
57134
57461
  return result
57135
57462
 
57136
57463
  def from_map(self, m: dict = None):
@@ -57148,6 +57475,11 @@ class DescribeVcoRouteEntriesResponseBody(TeaModel):
57148
57475
  for k in m.get('VcoRouteEntries'):
57149
57476
  temp_model = DescribeVcoRouteEntriesResponseBodyVcoRouteEntries()
57150
57477
  self.vco_route_entries.append(temp_model.from_map(k))
57478
+ self.vpn_route_counts = []
57479
+ if m.get('VpnRouteCounts') is not None:
57480
+ for k in m.get('VpnRouteCounts'):
57481
+ temp_model = DescribeVcoRouteEntriesResponseBodyVpnRouteCounts()
57482
+ self.vpn_route_counts.append(temp_model.from_map(k))
57151
57483
  return self
57152
57484
 
57153
57485
 
@@ -60471,6 +60803,39 @@ class DescribeVpnAttachmentsRequest(TeaModel):
60471
60803
  return self
60472
60804
 
60473
60805
 
60806
+ class DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags(TeaModel):
60807
+ def __init__(
60808
+ self,
60809
+ key: str = None,
60810
+ value: str = None,
60811
+ ):
60812
+ self.key = key
60813
+ self.value = value
60814
+
60815
+ def validate(self):
60816
+ pass
60817
+
60818
+ def to_map(self):
60819
+ _map = super().to_map()
60820
+ if _map is not None:
60821
+ return _map
60822
+
60823
+ result = dict()
60824
+ if self.key is not None:
60825
+ result['Key'] = self.key
60826
+ if self.value is not None:
60827
+ result['Value'] = self.value
60828
+ return result
60829
+
60830
+ def from_map(self, m: dict = None):
60831
+ m = m or dict()
60832
+ if m.get('Key') is not None:
60833
+ self.key = m.get('Key')
60834
+ if m.get('Value') is not None:
60835
+ self.value = m.get('Value')
60836
+ return self
60837
+
60838
+
60474
60839
  class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60475
60840
  def __init__(
60476
60841
  self,
@@ -60479,6 +60844,8 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60479
60844
  description: str = None,
60480
60845
  instance_id: str = None,
60481
60846
  name: str = None,
60847
+ tag: str = None,
60848
+ tags: List[DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags] = None,
60482
60849
  transit_router_id: str = None,
60483
60850
  transit_router_name: str = None,
60484
60851
  ):
@@ -60495,13 +60862,18 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60495
60862
  self.instance_id = instance_id
60496
60863
  # The name of the IPsec-VPN connection.
60497
60864
  self.name = name
60865
+ self.tag = tag
60866
+ self.tags = tags
60498
60867
  # The ID of the transit router with which the IPsec-VPN connection is associated.
60499
60868
  self.transit_router_id = transit_router_id
60500
60869
  # The name of the transit router.
60501
60870
  self.transit_router_name = transit_router_name
60502
60871
 
60503
60872
  def validate(self):
60504
- pass
60873
+ if self.tags:
60874
+ for k in self.tags:
60875
+ if k:
60876
+ k.validate()
60505
60877
 
60506
60878
  def to_map(self):
60507
60879
  _map = super().to_map()
@@ -60519,6 +60891,12 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60519
60891
  result['InstanceId'] = self.instance_id
60520
60892
  if self.name is not None:
60521
60893
  result['Name'] = self.name
60894
+ if self.tag is not None:
60895
+ result['Tag'] = self.tag
60896
+ result['Tags'] = []
60897
+ if self.tags is not None:
60898
+ for k in self.tags:
60899
+ result['Tags'].append(k.to_map() if k else None)
60522
60900
  if self.transit_router_id is not None:
60523
60901
  result['TransitRouterId'] = self.transit_router_id
60524
60902
  if self.transit_router_name is not None:
@@ -60537,6 +60915,13 @@ class DescribeVpnAttachmentsResponseBodyVpnAttachments(TeaModel):
60537
60915
  self.instance_id = m.get('InstanceId')
60538
60916
  if m.get('Name') is not None:
60539
60917
  self.name = m.get('Name')
60918
+ if m.get('Tag') is not None:
60919
+ self.tag = m.get('Tag')
60920
+ self.tags = []
60921
+ if m.get('Tags') is not None:
60922
+ for k in m.get('Tags'):
60923
+ temp_model = DescribeVpnAttachmentsResponseBodyVpnAttachmentsTags()
60924
+ self.tags.append(temp_model.from_map(k))
60540
60925
  if m.get('TransitRouterId') is not None:
60541
60926
  self.transit_router_id = m.get('TransitRouterId')
60542
60927
  if m.get('TransitRouterName') is not None:
@@ -61141,6 +61526,7 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61141
61526
  tunnel_bgp_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelBgpConfig = None,
61142
61527
  tunnel_id: str = None,
61143
61528
  tunnel_ike_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig = None,
61529
+ tunnel_index: int = None,
61144
61530
  tunnel_ipsec_config: DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig = None,
61145
61531
  zone_no: str = None,
61146
61532
  ):
@@ -61186,6 +61572,7 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61186
61572
  self.tunnel_id = tunnel_id
61187
61573
  # The configuration of Phase 1 negotiations.
61188
61574
  self.tunnel_ike_config = tunnel_ike_config
61575
+ self.tunnel_index = tunnel_index
61189
61576
  # The configurations of Phase 2 negotiations.
61190
61577
  self.tunnel_ipsec_config = tunnel_ipsec_config
61191
61578
  # The zone where the tunnel is deployed.
@@ -61229,6 +61616,8 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61229
61616
  result['TunnelId'] = self.tunnel_id
61230
61617
  if self.tunnel_ike_config is not None:
61231
61618
  result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
61619
+ if self.tunnel_index is not None:
61620
+ result['TunnelIndex'] = self.tunnel_index
61232
61621
  if self.tunnel_ipsec_config is not None:
61233
61622
  result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
61234
61623
  if self.zone_no is not None:
@@ -61261,6 +61650,8 @@ class DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptions(T
61261
61650
  if m.get('TunnelIkeConfig') is not None:
61262
61651
  temp_model = DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig()
61263
61652
  self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
61653
+ if m.get('TunnelIndex') is not None:
61654
+ self.tunnel_index = m.get('TunnelIndex')
61264
61655
  if m.get('TunnelIpsecConfig') is not None:
61265
61656
  temp_model = DescribeVpnConnectionResponseBodyTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig()
61266
61657
  self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
@@ -62656,6 +63047,7 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62656
63047
  tunnel_bgp_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelBgpConfig = None,
62657
63048
  tunnel_id: str = None,
62658
63049
  tunnel_ike_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig = None,
63050
+ tunnel_index: int = None,
62659
63051
  tunnel_ipsec_config: DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig = None,
62660
63052
  zone_no: str = None,
62661
63053
  ):
@@ -62701,6 +63093,7 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62701
63093
  self.tunnel_id = tunnel_id
62702
63094
  # The configuration of Phase 1 negotiations.
62703
63095
  self.tunnel_ike_config = tunnel_ike_config
63096
+ self.tunnel_index = tunnel_index
62704
63097
  # The configurations of Phase 2 negotiations.
62705
63098
  self.tunnel_ipsec_config = tunnel_ipsec_config
62706
63099
  # The zone of the tunnel.
@@ -62742,6 +63135,8 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62742
63135
  result['TunnelId'] = self.tunnel_id
62743
63136
  if self.tunnel_ike_config is not None:
62744
63137
  result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
63138
+ if self.tunnel_index is not None:
63139
+ result['TunnelIndex'] = self.tunnel_index
62745
63140
  if self.tunnel_ipsec_config is not None:
62746
63141
  result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
62747
63142
  if self.zone_no is not None:
@@ -62774,6 +63169,8 @@ class DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptions
62774
63169
  if m.get('TunnelIkeConfig') is not None:
62775
63170
  temp_model = DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIkeConfig()
62776
63171
  self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
63172
+ if m.get('TunnelIndex') is not None:
63173
+ self.tunnel_index = m.get('TunnelIndex')
62777
63174
  if m.get('TunnelIpsecConfig') is not None:
62778
63175
  temp_model = DescribeVpnConnectionsResponseBodyVpnConnectionsVpnConnectionTunnelOptionsSpecificationTunnelOptionsTunnelIpsecConfig()
62779
63176
  self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
@@ -64033,33 +64430,38 @@ class DescribeVpnGatewayResponseBody(TeaModel):
64033
64430
  # * **updating**\
64034
64431
  # * **deleting**\
64035
64432
  self.status = status
64036
- # The automatically generated tag of the VPN gateway.
64433
+ # The tag that is automatically generated for the VPN gateway. The tag consists of the following parameters:
64037
64434
  #
64038
64435
  # * **VpnEnableBgp**: indicates whether the VPN gateway supports BGP. Valid values:
64039
64436
  #
64040
64437
  # * **true**\
64041
64438
  # * **false**\
64042
64439
  #
64043
- # * **VisuallySsl**: indicates whether the VPN gateway allows you to view information about connected SSL clients.
64440
+ # * **VisuallySsl**: indicates whether the VPN gateway allows you to view the connection information of SSL clients. Valid values:
64044
64441
  #
64045
64442
  # * **true**\
64046
64443
  # * **false**\
64047
64444
  #
64048
- # * **PbrPriority**: indicates whether the VPN gateway allows you to configure priorities for policy-based routes.
64445
+ # * **PbrPriority**: indicates whether the VPN gateway allows you to configure priorities for policy-based routes. Valid values:
64049
64446
  #
64050
64447
  # * **true**\
64051
64448
  # * **false**\
64052
64449
  #
64053
- # * **VpnNewImage**: indicates whether the VPN gateway is upgraded.
64450
+ # * **VpnNewImage**: indicates whether the VPN gateway is upgraded. Valid values:
64054
64451
  #
64055
64452
  # * **true**\
64056
64453
  # * **false**\
64057
64454
  #
64058
- # * **description**\
64455
+ # * **description**: the description of the VPN gateway. This parameter is only for internal use.
64456
+ #
64457
+ # * **VpnVersion**: the version of the VPN gateway.
64458
+ #
64459
+ # * **IDaaSNewVersion**: indicates whether the VPN gateway can be associated with an EIAM 2.0 instance.
64059
64460
  #
64060
- # * **VpnVersion**\
64461
+ # * **true**\
64462
+ # * **false**\
64061
64463
  self.tag = tag
64062
- # The tag value.
64464
+ # The tags that are added to the VPN gateway.
64063
64465
  self.tags = tags
64064
64466
  # The ID of the vSwitch to which the VPN gateway belongs.
64065
64467
  self.v_switch_id = v_switch_id
@@ -64067,9 +64469,7 @@ class DescribeVpnGatewayResponseBody(TeaModel):
64067
64469
  self.vpc_id = vpc_id
64068
64470
  # The ID of the VPN gateway.
64069
64471
  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.
64472
+ # The type of VPN gateway. Only **Normal** may be returned, which indicates a standard VPN gateway.
64073
64473
  self.vpn_type = vpn_type
64074
64474
 
64075
64475
  def validate(self):
@@ -64441,17 +64841,13 @@ class DescribeVpnGatewaysRequestTag(TeaModel):
64441
64841
  key: str = None,
64442
64842
  value: str = None,
64443
64843
  ):
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:`.
64844
+ # The tag key.
64447
64845
  #
64448
- # You can specify at most 20 tag keys in each call.
64846
+ # You can specify at most 20 tag keys at a time.
64449
64847
  self.key = key
64450
64848
  # The tag value.
64451
64849
  #
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.
64850
+ # Each tag key corresponds to one tag value. You can specify at most 20 tag values at a time.
64455
64851
  self.value = value
64456
64852
 
64457
64853
  def validate(self):
@@ -64532,11 +64928,7 @@ class DescribeVpnGatewaysRequest(TeaModel):
64532
64928
  # * **updating**\
64533
64929
  # * **deleting**\
64534
64930
  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.
64931
+ # The tags that are added to the VPN gateway.
64540
64932
  self.tag = tag
64541
64933
  # The ID of the virtual private cloud (VPC) to which the VPN gateway belongs.
64542
64934
  self.vpc_id = vpc_id
@@ -64922,7 +65314,7 @@ class DescribeVpnGatewaysResponseBodyVpnGatewaysVpnGateway(TeaModel):
64922
65314
  # * **updating**\
64923
65315
  # * **deleting**\
64924
65316
  self.status = status
64925
- # The tag that is automatically generated for the VPN gateway. The tag consists of the following parameters:
65317
+ # The tag that is automatically generated for the VPN gateway.
64926
65318
  #
64927
65319
  # * **VpnEnableBgp**: indicates whether the VPN gateway supports BGP. Valid values:
64928
65320
  #
@@ -64941,12 +65333,17 @@ class DescribeVpnGatewaysResponseBodyVpnGatewaysVpnGateway(TeaModel):
64941
65333
  #
64942
65334
  # * **VpnNewImage**: indicates whether the VPN gateway is upgraded. Valid values:
64943
65335
  #
64944
- # * **true**\
65336
+ # * **true**: queries only SQL templates that need to be optimized.
64945
65337
  # * **false**: does not query only SQL statements that need to be optimized.
64946
65338
  #
64947
65339
  # * **description**: the description of the VPN gateway. This parameter is only for internal use.
64948
65340
  #
64949
65341
  # * **VpnVersion**: the version of the VPN gateway.
65342
+ #
65343
+ # * **IDaaSNewVersion**: indicates whether the VPN gateway can be associated with an EIAM 2.0 instance.
65344
+ #
65345
+ # * **true**\
65346
+ # * **false**\
64950
65347
  self.tag = tag
64951
65348
  # The tags that are added to the VPN gateway.
64952
65349
  self.tags = tags
@@ -65145,7 +65542,7 @@ class DescribeVpnGatewaysResponseBody(TeaModel):
65145
65542
  self.request_id = request_id
65146
65543
  # The number of entries returned.
65147
65544
  self.total_count = total_count
65148
- # The VPN gateways.
65545
+ # The information about the VPN gateways.
65149
65546
  self.vpn_gateways = vpn_gateways
65150
65547
 
65151
65548
  def validate(self):
@@ -65629,6 +66026,80 @@ class DescribeVpnRouteEntriesRequest(TeaModel):
65629
66026
  return self
65630
66027
 
65631
66028
 
66029
+ class DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount(TeaModel):
66030
+ def __init__(
66031
+ self,
66032
+ route_count: int = None,
66033
+ route_entry_type: str = None,
66034
+ source: str = None,
66035
+ ):
66036
+ self.route_count = route_count
66037
+ self.route_entry_type = route_entry_type
66038
+ self.source = source
66039
+
66040
+ def validate(self):
66041
+ pass
66042
+
66043
+ def to_map(self):
66044
+ _map = super().to_map()
66045
+ if _map is not None:
66046
+ return _map
66047
+
66048
+ result = dict()
66049
+ if self.route_count is not None:
66050
+ result['RouteCount'] = self.route_count
66051
+ if self.route_entry_type is not None:
66052
+ result['RouteEntryType'] = self.route_entry_type
66053
+ if self.source is not None:
66054
+ result['Source'] = self.source
66055
+ return result
66056
+
66057
+ def from_map(self, m: dict = None):
66058
+ m = m or dict()
66059
+ if m.get('RouteCount') is not None:
66060
+ self.route_count = m.get('RouteCount')
66061
+ if m.get('RouteEntryType') is not None:
66062
+ self.route_entry_type = m.get('RouteEntryType')
66063
+ if m.get('Source') is not None:
66064
+ self.source = m.get('Source')
66065
+ return self
66066
+
66067
+
66068
+ class DescribeVpnRouteEntriesResponseBodyVpnRouteCounts(TeaModel):
66069
+ def __init__(
66070
+ self,
66071
+ vpn_route_count: List[DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount] = None,
66072
+ ):
66073
+ self.vpn_route_count = vpn_route_count
66074
+
66075
+ def validate(self):
66076
+ if self.vpn_route_count:
66077
+ for k in self.vpn_route_count:
66078
+ if k:
66079
+ k.validate()
66080
+
66081
+ def to_map(self):
66082
+ _map = super().to_map()
66083
+ if _map is not None:
66084
+ return _map
66085
+
66086
+ result = dict()
66087
+ result['VpnRouteCount'] = []
66088
+ if self.vpn_route_count is not None:
66089
+ for k in self.vpn_route_count:
66090
+ result['VpnRouteCount'].append(k.to_map() if k else None)
66091
+ return result
66092
+
66093
+ def from_map(self, m: dict = None):
66094
+ m = m or dict()
66095
+ self.vpn_route_count = []
66096
+ if m.get('VpnRouteCount') is not None:
66097
+ for k in m.get('VpnRouteCount'):
66098
+ temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteCountsVpnRouteCount()
66099
+ self.vpn_route_count.append(temp_model.from_map(k))
66100
+ return self
66101
+
66102
+
65632
66103
  class DescribeVpnRouteEntriesResponseBodyVpnRouteEntriesVpnRouteEntry(TeaModel):
65633
66104
  def __init__(
65634
66105
  self,
@@ -65781,6 +66252,7 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65781
66252
  page_size: int = None,
65782
66253
  request_id: str = None,
65783
66254
  total_count: int = None,
66255
+ vpn_route_counts: DescribeVpnRouteEntriesResponseBodyVpnRouteCounts = None,
65784
66256
  vpn_route_entries: DescribeVpnRouteEntriesResponseBodyVpnRouteEntries = None,
65785
66257
  ):
65786
66258
  # The page number of the returned page.
@@ -65791,10 +66263,13 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65791
66263
  self.request_id = request_id
65792
66264
  # The total number of entries returned.
65793
66265
  self.total_count = total_count
66266
+ self.vpn_route_counts = vpn_route_counts
65794
66267
  # The list of route entries.
65795
66268
  self.vpn_route_entries = vpn_route_entries
65796
66269
 
65797
66270
  def validate(self):
66271
+ if self.vpn_route_counts:
66272
+ self.vpn_route_counts.validate()
65798
66273
  if self.vpn_route_entries:
65799
66274
  self.vpn_route_entries.validate()
65800
66275
 
@@ -65812,6 +66287,8 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65812
66287
  result['RequestId'] = self.request_id
65813
66288
  if self.total_count is not None:
65814
66289
  result['TotalCount'] = self.total_count
66290
+ if self.vpn_route_counts is not None:
66291
+ result['VpnRouteCounts'] = self.vpn_route_counts.to_map()
65815
66292
  if self.vpn_route_entries is not None:
65816
66293
  result['VpnRouteEntries'] = self.vpn_route_entries.to_map()
65817
66294
  return result
@@ -65826,6 +66303,9 @@ class DescribeVpnRouteEntriesResponseBody(TeaModel):
65826
66303
  self.request_id = m.get('RequestId')
65827
66304
  if m.get('TotalCount') is not None:
65828
66305
  self.total_count = m.get('TotalCount')
66306
+ if m.get('VpnRouteCounts') is not None:
66307
+ temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteCounts()
66308
+ self.vpn_route_counts = temp_model.from_map(m['VpnRouteCounts'])
65829
66309
  if m.get('VpnRouteEntries') is not None:
65830
66310
  temp_model = DescribeVpnRouteEntriesResponseBodyVpnRouteEntries()
65831
66311
  self.vpn_route_entries = temp_model.from_map(m['VpnRouteEntries'])
@@ -67547,7 +68027,7 @@ class DissociateVpnGatewayWithCertificateRequest(TeaModel):
67547
68027
  ):
67548
68028
  # The certificate ID.
67549
68029
  #
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.
68030
+ # > The certificate ID refers to the ID generated after the SSL certificate is associated with the VPN gateway. It is not the ID of the SSL certificate. You can call the [ListVpnCertificateAssociations](https://help.aliyun.com/document_detail/2521961.html) operation to query certificate IDs.
67551
68031
  #
67552
68032
  # This parameter is required.
67553
68033
  self.certificate_id = certificate_id
@@ -89062,6 +89542,7 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig(Te
89062
89542
  class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89063
89543
  def __init__(
89064
89544
  self,
89545
+ customer_gateway_id: str = None,
89065
89546
  enable_dpd: bool = None,
89066
89547
  enable_nat_traversal: bool = None,
89067
89548
  remote_ca_certificate: str = None,
@@ -89069,6 +89550,7 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89069
89550
  tunnel_ike_config: ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
89070
89551
  tunnel_ipsec_config: ModifyTunnelAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
89071
89552
  ):
89553
+ self.customer_gateway_id = customer_gateway_id
89072
89554
  # Specifies whether to enable the dead peer detection (DPD) feature. Valid values:
89073
89555
  #
89074
89556
  # * **true**: DPD is enabled. The IPsec initiator sends DPD packets to verify the existence and availability of the IPsec peer. If no response is received from the peer within a specified period of time, the IPsec peer is considered disconnected. Then, the ISAKMP SA, IPsec SA, and IPsec tunnel are deleted.
@@ -89104,6 +89586,8 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89104
89586
  return _map
89105
89587
 
89106
89588
  result = dict()
89589
+ if self.customer_gateway_id is not None:
89590
+ result['CustomerGatewayId'] = self.customer_gateway_id
89107
89591
  if self.enable_dpd is not None:
89108
89592
  result['EnableDpd'] = self.enable_dpd
89109
89593
  if self.enable_nat_traversal is not None:
@@ -89120,6 +89604,8 @@ class ModifyTunnelAttributeRequestTunnelOptionsSpecification(TeaModel):
89120
89604
 
89121
89605
  def from_map(self, m: dict = None):
89122
89606
  m = m or dict()
89607
+ if m.get('CustomerGatewayId') is not None:
89608
+ self.customer_gateway_id = m.get('CustomerGatewayId')
89123
89609
  if m.get('EnableDpd') is not None:
89124
89610
  self.enable_dpd = m.get('EnableDpd')
89125
89611
  if m.get('EnableNatTraversal') is not None:
@@ -91070,6 +91556,242 @@ class ModifyVpcPrefixListResponse(TeaModel):
91070
91556
  return self
91071
91557
 
91072
91558
 
91559
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
91560
+ def __init__(
91561
+ self,
91562
+ local_asn: int = None,
91563
+ local_bgp_ip: str = None,
91564
+ tunnel_cidr: str = None,
91565
+ ):
91566
+ self.local_asn = local_asn
91567
+ self.local_bgp_ip = local_bgp_ip
91568
+ self.tunnel_cidr = tunnel_cidr
91569
+
91570
+ def validate(self):
91571
+ pass
91572
+
91573
+ def to_map(self):
91574
+ _map = super().to_map()
91575
+ if _map is not None:
91576
+ return _map
91577
+
91578
+ result = dict()
91579
+ if self.local_asn is not None:
91580
+ result['LocalAsn'] = self.local_asn
91581
+ if self.local_bgp_ip is not None:
91582
+ result['LocalBgpIp'] = self.local_bgp_ip
91583
+ if self.tunnel_cidr is not None:
91584
+ result['TunnelCidr'] = self.tunnel_cidr
91585
+ return result
91586
+
91587
+ def from_map(self, m: dict = None):
91588
+ m = m or dict()
91589
+ if m.get('LocalAsn') is not None:
91590
+ self.local_asn = m.get('LocalAsn')
91591
+ if m.get('LocalBgpIp') is not None:
91592
+ self.local_bgp_ip = m.get('LocalBgpIp')
91593
+ if m.get('TunnelCidr') is not None:
91594
+ self.tunnel_cidr = m.get('TunnelCidr')
91595
+ return self
91596
+
91597
+
91598
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
91599
+ def __init__(
91600
+ self,
91601
+ ike_auth_alg: str = None,
91602
+ ike_enc_alg: str = None,
91603
+ ike_lifetime: int = None,
91604
+ ike_mode: str = None,
91605
+ ike_pfs: str = None,
91606
+ ike_version: str = None,
91607
+ local_id: str = None,
91608
+ psk: str = None,
91609
+ remote_id: str = None,
91610
+ ):
91611
+ self.ike_auth_alg = ike_auth_alg
91612
+ self.ike_enc_alg = ike_enc_alg
91613
+ self.ike_lifetime = ike_lifetime
91614
+ self.ike_mode = ike_mode
91615
+ self.ike_pfs = ike_pfs
91616
+ self.ike_version = ike_version
91617
+ self.local_id = local_id
91618
+ self.psk = psk
91619
+ self.remote_id = remote_id
91620
+
91621
+ def validate(self):
91622
+ pass
91623
+
91624
+ def to_map(self):
91625
+ _map = super().to_map()
91626
+ if _map is not None:
91627
+ return _map
91628
+
91629
+ result = dict()
91630
+ if self.ike_auth_alg is not None:
91631
+ result['IkeAuthAlg'] = self.ike_auth_alg
91632
+ if self.ike_enc_alg is not None:
91633
+ result['IkeEncAlg'] = self.ike_enc_alg
91634
+ if self.ike_lifetime is not None:
91635
+ result['IkeLifetime'] = self.ike_lifetime
91636
+ if self.ike_mode is not None:
91637
+ result['IkeMode'] = self.ike_mode
91638
+ if self.ike_pfs is not None:
91639
+ result['IkePfs'] = self.ike_pfs
91640
+ if self.ike_version is not None:
91641
+ result['IkeVersion'] = self.ike_version
91642
+ if self.local_id is not None:
91643
+ result['LocalId'] = self.local_id
91644
+ if self.psk is not None:
91645
+ result['Psk'] = self.psk
91646
+ if self.remote_id is not None:
91647
+ result['RemoteId'] = self.remote_id
91648
+ return result
91649
+
91650
+ def from_map(self, m: dict = None):
91651
+ m = m or dict()
91652
+ if m.get('IkeAuthAlg') is not None:
91653
+ self.ike_auth_alg = m.get('IkeAuthAlg')
91654
+ if m.get('IkeEncAlg') is not None:
91655
+ self.ike_enc_alg = m.get('IkeEncAlg')
91656
+ if m.get('IkeLifetime') is not None:
91657
+ self.ike_lifetime = m.get('IkeLifetime')
91658
+ if m.get('IkeMode') is not None:
91659
+ self.ike_mode = m.get('IkeMode')
91660
+ if m.get('IkePfs') is not None:
91661
+ self.ike_pfs = m.get('IkePfs')
91662
+ if m.get('IkeVersion') is not None:
91663
+ self.ike_version = m.get('IkeVersion')
91664
+ if m.get('LocalId') is not None:
91665
+ self.local_id = m.get('LocalId')
91666
+ if m.get('Psk') is not None:
91667
+ self.psk = m.get('Psk')
91668
+ if m.get('RemoteId') is not None:
91669
+ self.remote_id = m.get('RemoteId')
91670
+ return self
91671
+
91672
+
91673
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
91674
+ def __init__(
91675
+ self,
91676
+ ipsec_auth_alg: str = None,
91677
+ ipsec_enc_alg: str = None,
91678
+ ipsec_lifetime: int = None,
91679
+ ipsec_pfs: str = None,
91680
+ ):
91681
+ self.ipsec_auth_alg = ipsec_auth_alg
91682
+ self.ipsec_enc_alg = ipsec_enc_alg
91683
+ self.ipsec_lifetime = ipsec_lifetime
91684
+ self.ipsec_pfs = ipsec_pfs
91685
+
91686
+ def validate(self):
91687
+ pass
91688
+
91689
+ def to_map(self):
91690
+ _map = super().to_map()
91691
+ if _map is not None:
91692
+ return _map
91693
+
91694
+ result = dict()
91695
+ if self.ipsec_auth_alg is not None:
91696
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
91697
+ if self.ipsec_enc_alg is not None:
91698
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
91699
+ if self.ipsec_lifetime is not None:
91700
+ result['IpsecLifetime'] = self.ipsec_lifetime
91701
+ if self.ipsec_pfs is not None:
91702
+ result['IpsecPfs'] = self.ipsec_pfs
91703
+ return result
91704
+
91705
+ def from_map(self, m: dict = None):
91706
+ m = m or dict()
91707
+ if m.get('IpsecAuthAlg') is not None:
91708
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
91709
+ if m.get('IpsecEncAlg') is not None:
91710
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
91711
+ if m.get('IpsecLifetime') is not None:
91712
+ self.ipsec_lifetime = m.get('IpsecLifetime')
91713
+ if m.get('IpsecPfs') is not None:
91714
+ self.ipsec_pfs = m.get('IpsecPfs')
91715
+ return self
91716
+
91717
+
91718
+ class ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification(TeaModel):
91719
+ def __init__(
91720
+ self,
91721
+ customer_gateway_id: str = None,
91722
+ enable_dpd: bool = None,
91723
+ enable_nat_traversal: bool = None,
91724
+ tunnel_bgp_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig = None,
91725
+ tunnel_id: str = None,
91726
+ tunnel_ike_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
91727
+ tunnel_index: int = None,
91728
+ tunnel_ipsec_config: ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
91729
+ ):
91730
+ self.customer_gateway_id = customer_gateway_id
91731
+ self.enable_dpd = enable_dpd
91732
+ self.enable_nat_traversal = enable_nat_traversal
91733
+ self.tunnel_bgp_config = tunnel_bgp_config
91734
+ self.tunnel_id = tunnel_id
91735
+ self.tunnel_ike_config = tunnel_ike_config
91736
+ self.tunnel_index = tunnel_index
91737
+ self.tunnel_ipsec_config = tunnel_ipsec_config
91738
+
91739
+ def validate(self):
91740
+ if self.tunnel_bgp_config:
91741
+ self.tunnel_bgp_config.validate()
91742
+ if self.tunnel_ike_config:
91743
+ self.tunnel_ike_config.validate()
91744
+ if self.tunnel_ipsec_config:
91745
+ self.tunnel_ipsec_config.validate()
91746
+
91747
+ def to_map(self):
91748
+ _map = super().to_map()
91749
+ if _map is not None:
91750
+ return _map
91751
+
91752
+ result = dict()
91753
+ if self.customer_gateway_id is not None:
91754
+ result['CustomerGatewayId'] = self.customer_gateway_id
91755
+ if self.enable_dpd is not None:
91756
+ result['EnableDpd'] = self.enable_dpd
91757
+ if self.enable_nat_traversal is not None:
91758
+ result['EnableNatTraversal'] = self.enable_nat_traversal
91759
+ if self.tunnel_bgp_config is not None:
91760
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
91761
+ if self.tunnel_id is not None:
91762
+ result['TunnelId'] = self.tunnel_id
91763
+ if self.tunnel_ike_config is not None:
91764
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
91765
+ if self.tunnel_index is not None:
91766
+ result['TunnelIndex'] = self.tunnel_index
91767
+ if self.tunnel_ipsec_config is not None:
91768
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
91769
+ return result
91770
+
91771
+ def from_map(self, m: dict = None):
91772
+ m = m or dict()
91773
+ if m.get('CustomerGatewayId') is not None:
91774
+ self.customer_gateway_id = m.get('CustomerGatewayId')
91775
+ if m.get('EnableDpd') is not None:
91776
+ self.enable_dpd = m.get('EnableDpd')
91777
+ if m.get('EnableNatTraversal') is not None:
91778
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
91779
+ if m.get('TunnelBgpConfig') is not None:
91780
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelBgpConfig()
91781
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
91782
+ if m.get('TunnelId') is not None:
91783
+ self.tunnel_id = m.get('TunnelId')
91784
+ if m.get('TunnelIkeConfig') is not None:
91785
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig()
91786
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
91787
+ if m.get('TunnelIndex') is not None:
91788
+ self.tunnel_index = m.get('TunnelIndex')
91789
+ if m.get('TunnelIpsecConfig') is not None:
91790
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig()
91791
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
91792
+ return self
91793
+
91794
+
91073
91795
  class ModifyVpnAttachmentAttributeRequest(TeaModel):
91074
91796
  def __init__(
91075
91797
  self,
@@ -91080,6 +91802,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91080
91802
  effect_immediately: bool = None,
91081
91803
  enable_dpd: bool = None,
91082
91804
  enable_nat_traversal: bool = None,
91805
+ enable_tunnels_bgp: bool = None,
91083
91806
  health_check_config: str = None,
91084
91807
  ike_config: str = None,
91085
91808
  ipsec_config: str = None,
@@ -91092,6 +91815,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91092
91815
  remote_subnet: str = None,
91093
91816
  resource_owner_account: str = None,
91094
91817
  resource_owner_id: int = None,
91818
+ tunnel_options_specification: List[ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification] = None,
91095
91819
  vpn_connection_id: str = None,
91096
91820
  ):
91097
91821
  # Specifies whether to automatically configure routes. Valid values:
@@ -91142,6 +91866,7 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91142
91866
  # * **true** After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the IPsec tunnel.
91143
91867
  # * **false**\
91144
91868
  self.enable_nat_traversal = enable_nat_traversal
91869
+ self.enable_tunnels_bgp = enable_tunnels_bgp
91145
91870
  # The health check configurations:
91146
91871
  #
91147
91872
  # * **HealthCheckConfig.enable**: specifies whether to enable the health check feature. Valid values:
@@ -91232,13 +91957,17 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91232
91957
  self.remote_subnet = remote_subnet
91233
91958
  self.resource_owner_account = resource_owner_account
91234
91959
  self.resource_owner_id = resource_owner_id
91960
+ self.tunnel_options_specification = tunnel_options_specification
91235
91961
  # The ID of the IPsec-VPN connection.
91236
91962
  #
91237
91963
  # This parameter is required.
91238
91964
  self.vpn_connection_id = vpn_connection_id
91239
91965
 
91240
91966
  def validate(self):
91241
- pass
91967
+ if self.tunnel_options_specification:
91968
+ for k in self.tunnel_options_specification:
91969
+ if k:
91970
+ k.validate()
91242
91971
 
91243
91972
  def to_map(self):
91244
91973
  _map = super().to_map()
@@ -91260,6 +91989,8 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91260
91989
  result['EnableDpd'] = self.enable_dpd
91261
91990
  if self.enable_nat_traversal is not None:
91262
91991
  result['EnableNatTraversal'] = self.enable_nat_traversal
91992
+ if self.enable_tunnels_bgp is not None:
91993
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
91263
91994
  if self.health_check_config is not None:
91264
91995
  result['HealthCheckConfig'] = self.health_check_config
91265
91996
  if self.ike_config is not None:
@@ -91284,6 +92015,10 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91284
92015
  result['ResourceOwnerAccount'] = self.resource_owner_account
91285
92016
  if self.resource_owner_id is not None:
91286
92017
  result['ResourceOwnerId'] = self.resource_owner_id
92018
+ result['TunnelOptionsSpecification'] = []
92019
+ if self.tunnel_options_specification is not None:
92020
+ for k in self.tunnel_options_specification:
92021
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
91287
92022
  if self.vpn_connection_id is not None:
91288
92023
  result['VpnConnectionId'] = self.vpn_connection_id
91289
92024
  return result
@@ -91304,6 +92039,8 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91304
92039
  self.enable_dpd = m.get('EnableDpd')
91305
92040
  if m.get('EnableNatTraversal') is not None:
91306
92041
  self.enable_nat_traversal = m.get('EnableNatTraversal')
92042
+ if m.get('EnableTunnelsBgp') is not None:
92043
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
91307
92044
  if m.get('HealthCheckConfig') is not None:
91308
92045
  self.health_check_config = m.get('HealthCheckConfig')
91309
92046
  if m.get('IkeConfig') is not None:
@@ -91328,6 +92065,11 @@ class ModifyVpnAttachmentAttributeRequest(TeaModel):
91328
92065
  self.resource_owner_account = m.get('ResourceOwnerAccount')
91329
92066
  if m.get('ResourceOwnerId') is not None:
91330
92067
  self.resource_owner_id = m.get('ResourceOwnerId')
92068
+ self.tunnel_options_specification = []
92069
+ if m.get('TunnelOptionsSpecification') is not None:
92070
+ for k in m.get('TunnelOptionsSpecification'):
92071
+ temp_model = ModifyVpnAttachmentAttributeRequestTunnelOptionsSpecification()
92072
+ self.tunnel_options_specification.append(temp_model.from_map(k))
91331
92073
  if m.get('VpnConnectionId') is not None:
91332
92074
  self.vpn_connection_id = m.get('VpnConnectionId')
91333
92075
  return self
@@ -91468,6 +92210,272 @@ class ModifyVpnAttachmentAttributeResponseBodyIpsecConfig(TeaModel):
91468
92210
  return self
91469
92211
 
91470
92212
 
92213
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig(TeaModel):
92214
+ def __init__(
92215
+ self,
92216
+ local_asn: int = None,
92217
+ local_bgp_ip: str = None,
92218
+ peer_asn: int = None,
92219
+ peer_bgp_ip: str = None,
92220
+ tunnel_cidr: str = None,
92221
+ ):
92222
+ self.local_asn = local_asn
92223
+ self.local_bgp_ip = local_bgp_ip
92224
+ self.peer_asn = peer_asn
92225
+ self.peer_bgp_ip = peer_bgp_ip
92226
+ self.tunnel_cidr = tunnel_cidr
92227
+
92228
+ def validate(self):
92229
+ pass
92230
+
92231
+ def to_map(self):
92232
+ _map = super().to_map()
92233
+ if _map is not None:
92234
+ return _map
92235
+
92236
+ result = dict()
92237
+ if self.local_asn is not None:
92238
+ result['LocalAsn'] = self.local_asn
92239
+ if self.local_bgp_ip is not None:
92240
+ result['LocalBgpIp'] = self.local_bgp_ip
92241
+ if self.peer_asn is not None:
92242
+ result['PeerAsn'] = self.peer_asn
92243
+ if self.peer_bgp_ip is not None:
92244
+ result['PeerBgpIp'] = self.peer_bgp_ip
92245
+ if self.tunnel_cidr is not None:
92246
+ result['TunnelCidr'] = self.tunnel_cidr
92247
+ return result
92248
+
92249
+ def from_map(self, m: dict = None):
92250
+ m = m or dict()
92251
+ if m.get('LocalAsn') is not None:
92252
+ self.local_asn = m.get('LocalAsn')
92253
+ if m.get('LocalBgpIp') is not None:
92254
+ self.local_bgp_ip = m.get('LocalBgpIp')
92255
+ if m.get('PeerAsn') is not None:
92256
+ self.peer_asn = m.get('PeerAsn')
92257
+ if m.get('PeerBgpIp') is not None:
92258
+ self.peer_bgp_ip = m.get('PeerBgpIp')
92259
+ if m.get('TunnelCidr') is not None:
92260
+ self.tunnel_cidr = m.get('TunnelCidr')
92261
+ return self
92262
+
92263
+
92264
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig(TeaModel):
92265
+ def __init__(
92266
+ self,
92267
+ ike_auth_alg: str = None,
92268
+ ike_enc_alg: str = None,
92269
+ ike_lifetime: int = None,
92270
+ ike_mode: str = None,
92271
+ ike_pfs: str = None,
92272
+ ike_version: str = None,
92273
+ local_id: str = None,
92274
+ psk: str = None,
92275
+ remote_id: str = None,
92276
+ ):
92277
+ self.ike_auth_alg = ike_auth_alg
92278
+ self.ike_enc_alg = ike_enc_alg
92279
+ self.ike_lifetime = ike_lifetime
92280
+ self.ike_mode = ike_mode
92281
+ self.ike_pfs = ike_pfs
92282
+ self.ike_version = ike_version
92283
+ self.local_id = local_id
92284
+ self.psk = psk
92285
+ self.remote_id = remote_id
92286
+
92287
+ def validate(self):
92288
+ pass
92289
+
92290
+ def to_map(self):
92291
+ _map = super().to_map()
92292
+ if _map is not None:
92293
+ return _map
92294
+
92295
+ result = dict()
92296
+ if self.ike_auth_alg is not None:
92297
+ result['IkeAuthAlg'] = self.ike_auth_alg
92298
+ if self.ike_enc_alg is not None:
92299
+ result['IkeEncAlg'] = self.ike_enc_alg
92300
+ if self.ike_lifetime is not None:
92301
+ result['IkeLifetime'] = self.ike_lifetime
92302
+ if self.ike_mode is not None:
92303
+ result['IkeMode'] = self.ike_mode
92304
+ if self.ike_pfs is not None:
92305
+ result['IkePfs'] = self.ike_pfs
92306
+ if self.ike_version is not None:
92307
+ result['IkeVersion'] = self.ike_version
92308
+ if self.local_id is not None:
92309
+ result['LocalId'] = self.local_id
92310
+ if self.psk is not None:
92311
+ result['Psk'] = self.psk
92312
+ if self.remote_id is not None:
92313
+ result['RemoteId'] = self.remote_id
92314
+ return result
92315
+
92316
+ def from_map(self, m: dict = None):
92317
+ m = m or dict()
92318
+ if m.get('IkeAuthAlg') is not None:
92319
+ self.ike_auth_alg = m.get('IkeAuthAlg')
92320
+ if m.get('IkeEncAlg') is not None:
92321
+ self.ike_enc_alg = m.get('IkeEncAlg')
92322
+ if m.get('IkeLifetime') is not None:
92323
+ self.ike_lifetime = m.get('IkeLifetime')
92324
+ if m.get('IkeMode') is not None:
92325
+ self.ike_mode = m.get('IkeMode')
92326
+ if m.get('IkePfs') is not None:
92327
+ self.ike_pfs = m.get('IkePfs')
92328
+ if m.get('IkeVersion') is not None:
92329
+ self.ike_version = m.get('IkeVersion')
92330
+ if m.get('LocalId') is not None:
92331
+ self.local_id = m.get('LocalId')
92332
+ if m.get('Psk') is not None:
92333
+ self.psk = m.get('Psk')
92334
+ if m.get('RemoteId') is not None:
92335
+ self.remote_id = m.get('RemoteId')
92336
+ return self
92337
+
92338
+
92339
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig(TeaModel):
92340
+ def __init__(
92341
+ self,
92342
+ ipsec_auth_alg: str = None,
92343
+ ipsec_enc_alg: str = None,
92344
+ ipsec_lifetime: int = None,
92345
+ ipsec_pfs: str = None,
92346
+ ):
92347
+ self.ipsec_auth_alg = ipsec_auth_alg
92348
+ self.ipsec_enc_alg = ipsec_enc_alg
92349
+ self.ipsec_lifetime = ipsec_lifetime
92350
+ self.ipsec_pfs = ipsec_pfs
92351
+
92352
+ def validate(self):
92353
+ pass
92354
+
92355
+ def to_map(self):
92356
+ _map = super().to_map()
92357
+ if _map is not None:
92358
+ return _map
92359
+
92360
+ result = dict()
92361
+ if self.ipsec_auth_alg is not None:
92362
+ result['IpsecAuthAlg'] = self.ipsec_auth_alg
92363
+ if self.ipsec_enc_alg is not None:
92364
+ result['IpsecEncAlg'] = self.ipsec_enc_alg
92365
+ if self.ipsec_lifetime is not None:
92366
+ result['IpsecLifetime'] = self.ipsec_lifetime
92367
+ if self.ipsec_pfs is not None:
92368
+ result['IpsecPfs'] = self.ipsec_pfs
92369
+ return result
92370
+
92371
+ def from_map(self, m: dict = None):
92372
+ m = m or dict()
92373
+ if m.get('IpsecAuthAlg') is not None:
92374
+ self.ipsec_auth_alg = m.get('IpsecAuthAlg')
92375
+ if m.get('IpsecEncAlg') is not None:
92376
+ self.ipsec_enc_alg = m.get('IpsecEncAlg')
92377
+ if m.get('IpsecLifetime') is not None:
92378
+ self.ipsec_lifetime = m.get('IpsecLifetime')
92379
+ if m.get('IpsecPfs') is not None:
92380
+ self.ipsec_pfs = m.get('IpsecPfs')
92381
+ return self
92382
+
92383
+
92384
+ class ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification(TeaModel):
92385
+ def __init__(
92386
+ self,
92387
+ customer_gateway_id: str = None,
92388
+ enable_dpd: bool = None,
92389
+ enable_nat_traversal: bool = None,
92390
+ internet_ip: str = None,
92391
+ role: str = None,
92392
+ state: str = None,
92393
+ tunnel_bgp_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig = None,
92394
+ tunnel_id: str = None,
92395
+ tunnel_ike_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig = None,
92396
+ tunnel_index: int = None,
92397
+ tunnel_ipsec_config: ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig = None,
92398
+ ):
92399
+ self.customer_gateway_id = customer_gateway_id
92400
+ self.enable_dpd = enable_dpd
92401
+ self.enable_nat_traversal = enable_nat_traversal
92402
+ self.internet_ip = internet_ip
92403
+ self.role = role
92404
+ self.state = state
92405
+ self.tunnel_bgp_config = tunnel_bgp_config
92406
+ self.tunnel_id = tunnel_id
92407
+ self.tunnel_ike_config = tunnel_ike_config
92408
+ self.tunnel_index = tunnel_index
92409
+ self.tunnel_ipsec_config = tunnel_ipsec_config
92410
+
92411
+ def validate(self):
92412
+ if self.tunnel_bgp_config:
92413
+ self.tunnel_bgp_config.validate()
92414
+ if self.tunnel_ike_config:
92415
+ self.tunnel_ike_config.validate()
92416
+ if self.tunnel_ipsec_config:
92417
+ self.tunnel_ipsec_config.validate()
92418
+
92419
+ def to_map(self):
92420
+ _map = super().to_map()
92421
+ if _map is not None:
92422
+ return _map
92423
+
92424
+ result = dict()
92425
+ if self.customer_gateway_id is not None:
92426
+ result['CustomerGatewayId'] = self.customer_gateway_id
92427
+ if self.enable_dpd is not None:
92428
+ result['EnableDpd'] = self.enable_dpd
92429
+ if self.enable_nat_traversal is not None:
92430
+ result['EnableNatTraversal'] = self.enable_nat_traversal
92431
+ if self.internet_ip is not None:
92432
+ result['InternetIp'] = self.internet_ip
92433
+ if self.role is not None:
92434
+ result['Role'] = self.role
92435
+ if self.state is not None:
92436
+ result['State'] = self.state
92437
+ if self.tunnel_bgp_config is not None:
92438
+ result['TunnelBgpConfig'] = self.tunnel_bgp_config.to_map()
92439
+ if self.tunnel_id is not None:
92440
+ result['TunnelId'] = self.tunnel_id
92441
+ if self.tunnel_ike_config is not None:
92442
+ result['TunnelIkeConfig'] = self.tunnel_ike_config.to_map()
92443
+ if self.tunnel_index is not None:
92444
+ result['TunnelIndex'] = self.tunnel_index
92445
+ if self.tunnel_ipsec_config is not None:
92446
+ result['TunnelIpsecConfig'] = self.tunnel_ipsec_config.to_map()
92447
+ return result
92448
+
92449
+ def from_map(self, m: dict = None):
92450
+ m = m or dict()
92451
+ if m.get('CustomerGatewayId') is not None:
92452
+ self.customer_gateway_id = m.get('CustomerGatewayId')
92453
+ if m.get('EnableDpd') is not None:
92454
+ self.enable_dpd = m.get('EnableDpd')
92455
+ if m.get('EnableNatTraversal') is not None:
92456
+ self.enable_nat_traversal = m.get('EnableNatTraversal')
92457
+ if m.get('InternetIp') is not None:
92458
+ self.internet_ip = m.get('InternetIp')
92459
+ if m.get('Role') is not None:
92460
+ self.role = m.get('Role')
92461
+ if m.get('State') is not None:
92462
+ self.state = m.get('State')
92463
+ if m.get('TunnelBgpConfig') is not None:
92464
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelBgpConfig()
92465
+ self.tunnel_bgp_config = temp_model.from_map(m['TunnelBgpConfig'])
92466
+ if m.get('TunnelId') is not None:
92467
+ self.tunnel_id = m.get('TunnelId')
92468
+ if m.get('TunnelIkeConfig') is not None:
92469
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIkeConfig()
92470
+ self.tunnel_ike_config = temp_model.from_map(m['TunnelIkeConfig'])
92471
+ if m.get('TunnelIndex') is not None:
92472
+ self.tunnel_index = m.get('TunnelIndex')
92473
+ if m.get('TunnelIpsecConfig') is not None:
92474
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecificationTunnelIpsecConfig()
92475
+ self.tunnel_ipsec_config = temp_model.from_map(m['TunnelIpsecConfig'])
92476
+ return self
92477
+
92478
+
91471
92479
  class ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck(TeaModel):
91472
92480
  def __init__(
91473
92481
  self,
@@ -91624,6 +92632,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91624
92632
  effect_immediately: bool = None,
91625
92633
  enable_dpd: bool = None,
91626
92634
  enable_nat_traversal: bool = None,
92635
+ enable_tunnels_bgp: bool = None,
91627
92636
  ike_config: ModifyVpnAttachmentAttributeResponseBodyIkeConfig = None,
91628
92637
  ipsec_config: ModifyVpnAttachmentAttributeResponseBodyIpsecConfig = None,
91629
92638
  local_subnet: str = None,
@@ -91634,6 +92643,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91634
92643
  resource_group_id: str = None,
91635
92644
  spec: str = None,
91636
92645
  status: str = None,
92646
+ tunnel_options_specification: List[ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification] = None,
91637
92647
  vco_health_check: ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck = None,
91638
92648
  vpn_bgp_config: ModifyVpnAttachmentAttributeResponseBodyVpnBgpConfig = None,
91639
92649
  vpn_connection_id: str = None,
@@ -91670,6 +92680,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91670
92680
  # * **true**\
91671
92681
  # * **false**\
91672
92682
  self.enable_nat_traversal = enable_nat_traversal
92683
+ self.enable_tunnels_bgp = enable_tunnels_bgp
91673
92684
  # The configuration of Phase 1 negotiations.
91674
92685
  self.ike_config = ike_config
91675
92686
  # The configuration of Phase 2 negotiations.
@@ -91702,6 +92713,7 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91702
92713
  # * **ipsec_sa_not_established**: Phase 2 negotiations failed.
91703
92714
  # * **ipsec_sa_established**: Phase 2 negotiations succeeded.
91704
92715
  self.status = status
92716
+ self.tunnel_options_specification = tunnel_options_specification
91705
92717
  # The health check configuration of the IPsec-VPN connection.
91706
92718
  self.vco_health_check = vco_health_check
91707
92719
  # The BGP configuration of the IPsec-VPN connection.
@@ -91716,6 +92728,10 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91716
92728
  self.ike_config.validate()
91717
92729
  if self.ipsec_config:
91718
92730
  self.ipsec_config.validate()
92731
+ if self.tunnel_options_specification:
92732
+ for k in self.tunnel_options_specification:
92733
+ if k:
92734
+ k.validate()
91719
92735
  if self.vco_health_check:
91720
92736
  self.vco_health_check.validate()
91721
92737
  if self.vpn_bgp_config:
@@ -91743,6 +92759,8 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91743
92759
  result['EnableDpd'] = self.enable_dpd
91744
92760
  if self.enable_nat_traversal is not None:
91745
92761
  result['EnableNatTraversal'] = self.enable_nat_traversal
92762
+ if self.enable_tunnels_bgp is not None:
92763
+ result['EnableTunnelsBgp'] = self.enable_tunnels_bgp
91746
92764
  if self.ike_config is not None:
91747
92765
  result['IkeConfig'] = self.ike_config.to_map()
91748
92766
  if self.ipsec_config is not None:
@@ -91763,6 +92781,10 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91763
92781
  result['Spec'] = self.spec
91764
92782
  if self.status is not None:
91765
92783
  result['Status'] = self.status
92784
+ result['TunnelOptionsSpecification'] = []
92785
+ if self.tunnel_options_specification is not None:
92786
+ for k in self.tunnel_options_specification:
92787
+ result['TunnelOptionsSpecification'].append(k.to_map() if k else None)
91766
92788
  if self.vco_health_check is not None:
91767
92789
  result['VcoHealthCheck'] = self.vco_health_check.to_map()
91768
92790
  if self.vpn_bgp_config is not None:
@@ -91791,6 +92813,8 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91791
92813
  self.enable_dpd = m.get('EnableDpd')
91792
92814
  if m.get('EnableNatTraversal') is not None:
91793
92815
  self.enable_nat_traversal = m.get('EnableNatTraversal')
92816
+ if m.get('EnableTunnelsBgp') is not None:
92817
+ self.enable_tunnels_bgp = m.get('EnableTunnelsBgp')
91794
92818
  if m.get('IkeConfig') is not None:
91795
92819
  temp_model = ModifyVpnAttachmentAttributeResponseBodyIkeConfig()
91796
92820
  self.ike_config = temp_model.from_map(m['IkeConfig'])
@@ -91813,6 +92837,11 @@ class ModifyVpnAttachmentAttributeResponseBody(TeaModel):
91813
92837
  self.spec = m.get('Spec')
91814
92838
  if m.get('Status') is not None:
91815
92839
  self.status = m.get('Status')
92840
+ self.tunnel_options_specification = []
92841
+ if m.get('TunnelOptionsSpecification') is not None:
92842
+ for k in m.get('TunnelOptionsSpecification'):
92843
+ temp_model = ModifyVpnAttachmentAttributeResponseBodyTunnelOptionsSpecification()
92844
+ self.tunnel_options_specification.append(temp_model.from_map(k))
91816
92845
  if m.get('VcoHealthCheck') is not None:
91817
92846
  temp_model = ModifyVpnAttachmentAttributeResponseBodyVcoHealthCheck()
91818
92847
  self.vco_health_check = temp_model.from_map(m['VcoHealthCheck'])
@@ -91876,15 +92905,19 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelBgpConf
91876
92905
  ):
91877
92906
  # The ASN of the tunnel on the Alibaba Cloud side. Valid values: **1** to **4294967295**. Default value: **45104**.
91878
92907
  #
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.
92908
+ # > You can specify this parameter only if **EnableTunnelsBgp** is set to **true**.
92909
+ #
92910
+ # * Before you add BGP configurations, we recommend that you learn about how BGP dynamic routing works and the limits. For more information, see [Configure BGP dynamic routing](https://help.aliyun.com/document_detail/2638220.html).
92911
+ #
92912
+ # * We recommend that you use a private ASN to establish BGP connections to Alibaba Cloud. For information about the range of private ASNs, see the relevant documentation.
91882
92913
  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.
92914
+ # The BGP IP address of the tunnel on the Alibaba Cloud side. The address is an IP address that falls within the BGP CIDR block.
91884
92915
  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.
92916
+ # The BGP CIDR block of the tunnel.
92917
+ #
92918
+ # The CIDR block must fall within 169.254.0.0/16 and the mask of the CIDR block must be 30 bits in length. The CIDR block cannot be 169.254.0.0/30, 169.254.1.0/30, 169.254.2.0/30, 169.254.3.0/30, 169.254.4.0/30, 169.254.5.0/30, 169.254.6.0/30, or 169.254.169.252/30.
91886
92919
  #
91887
- # > The BGP CIDR block of a tunnel associated with a VPN gateway must be unique.
92920
+ # > The BGP CIDR block of each tunnel must be unique on a VPN gateway.
91888
92921
  self.tunnel_cidr = tunnel_cidr
91889
92922
 
91890
92923
  def validate(self):
@@ -91936,33 +92969,33 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIkeConf
91936
92969
  #
91937
92970
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**.
91938
92971
  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**.
92972
+ # The SA lifetime as a result of Phase 1 negotiations. Unit: seconds Valid values: **0** to **86400**.
91940
92973
  self.ike_lifetime = ike_lifetime
91941
- # The IKE negotiation mode. Valid values:
92974
+ # The negotiation mode of IKE. Valid values:
91942
92975
  #
91943
- # * **main**: This mode offers higher security during negotiations.
91944
- # * **aggressive**: This mode is faster and has a higher success rate.
92976
+ # * **main:** This mode offers higher security during negotiations.
92977
+ # * **aggressive:** This mode supports faster negotiations and a higher success rate.
91945
92978
  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**.
92979
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
91947
92980
  self.ike_pfs = ike_pfs
91948
92981
  # The version of the IKE protocol. Valid values: **ikev1** and **ikev2**.
91949
92982
  #
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.
92983
+ # Compared with IKEv1, IKEv2 simplifies the SA negotiation process and provides better support for scenarios with multiple CIDR blocks.
91951
92984
  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.
92985
+ # The identifier on the Alibaba Cloud side, which is used in Phase 1 negotiations. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the tunnel.
91953
92986
  #
91954
- # You can set **LocalId** to a fully qualified domain name (FQDN). In this case, we recommend that you set IkeMode to **aggressive**.
92987
+ # **LocalId** supports fully qualified domain names (FQDNs). If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
91955
92988
  self.local_id = local_id
91956
92989
  # The pre-shared key, which is used for identity authentication between the tunnel and the tunnel peer.
91957
92990
  #
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.
92991
+ # * The key cannot contain space characters. The key must be 1 to 100 characters in length, and can contain digits, letters, and the following special characters: ``~!\\`@#$%^&*()_-+={}[]|;:\\",.<>/?``
92992
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
91960
92993
  #
91961
- # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be established.
92994
+ # > The tunnel and the tunnel peer must use the same pre-shared key. Otherwise, the tunnel cannot be built.
91962
92995
  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.
92996
+ # The identifier of the tunnel peer, which is used in Phase 1 negotiations. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the customer gateway that is associated with the tunnel.
91964
92997
  #
91965
- # You can set **RemoteId** to an FQDN. In this case, we recommend that you set IkeMode to **aggressive**.
92998
+ # **RemoteId** supports FQDNs. If you use an FQDN, we recommend that you set the negotiation mode to **aggressive**.
91966
92999
  self.remote_id = remote_id
91967
93000
 
91968
93001
  def validate(self):
@@ -92033,9 +93066,9 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecCo
92033
93066
  #
92034
93067
  # Valid values: **aes**, **aes192**, **aes256**, **des**, and **3des**.
92035
93068
  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**.
93069
+ # The SA lifetime as a result of Phase 2 negotiations. Unit: seconds Valid values: **0** to **86400**.
92037
93070
  self.ipsec_lifetime = ipsec_lifetime
92038
- # The DH key exchange algorithm that is used in Phase 2 negotiations.
93071
+ # The Diffie-Hellman key exchange algorithm that is used in Phase 2 negotiations.
92039
93072
  #
92040
93073
  # Valid values: **disabled**, **group1**, **group2**, **group5**, and **group14**.
92041
93074
  self.ipsec_pfs = ipsec_pfs
@@ -92075,6 +93108,7 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecCo
92075
93108
  class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92076
93109
  def __init__(
92077
93110
  self,
93111
+ customer_gateway_id: str = None,
92078
93112
  enable_dpd: bool = None,
92079
93113
  enable_nat_traversal: bool = None,
92080
93114
  remote_ca_certificate: str = None,
@@ -92084,15 +93118,17 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92084
93118
  tunnel_ike_config: ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIkeConfig = None,
92085
93119
  tunnel_ipsec_config: ModifyVpnConnectionAttributeRequestTunnelOptionsSpecificationTunnelIpsecConfig = None,
92086
93120
  ):
93121
+ # The ID of the customer gateway associated with the tunnel.
93122
+ self.customer_gateway_id = customer_gateway_id
92087
93123
  # Specifies whether to enable the Dead Peer Detection (DPD) feature for the tunnel. Valid values:
92088
93124
  #
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**\
93125
+ # * **true**: enables DPD. The initiator of the IPsec-VPN connection sends DPD packets to check the existence and availability of the peer. If no feedback is received from the peer within the specified period of time, the connection fails. In this case, ISAKMP SA and IPsec SA are deleted. The security tunnel is also deleted.
93126
+ # * **false**: disables DPD. The initiator of the IPsec-VPN connection does not send DPD packets.
92091
93127
  self.enable_dpd = enable_dpd
92092
93128
  # Specifies whether to enable NAT traversal for the tunnel. Valid values:
92093
93129
  #
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**\
93130
+ # * **true**: enables NAT traversal. After NAT traversal is enabled, the initiator does not check the UDP ports during IKE negotiations and can automatically discover NAT gateway devices along the IPsec-VPN tunnel.
93131
+ # * **false**: disables NAT traversal.
92096
93132
  self.enable_nat_traversal = enable_nat_traversal
92097
93133
  # If the VPN gateway uses an SM certificate, you can modify the CA certificate used by the IPsec peer.
92098
93134
  #
@@ -92105,8 +93141,6 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92105
93141
  self.role = role
92106
93142
  # The Border Gateway Protocol (BGP) configurations of the tunnel.
92107
93143
  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
93144
  # The tunnel ID.
92111
93145
  self.tunnel_id = tunnel_id
92112
93146
  # The configurations of Phase 1 negotiations.
@@ -92128,6 +93162,8 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92128
93162
  return _map
92129
93163
 
92130
93164
  result = dict()
93165
+ if self.customer_gateway_id is not None:
93166
+ result['CustomerGatewayId'] = self.customer_gateway_id
92131
93167
  if self.enable_dpd is not None:
92132
93168
  result['EnableDpd'] = self.enable_dpd
92133
93169
  if self.enable_nat_traversal is not None:
@@ -92148,6 +93184,8 @@ class ModifyVpnConnectionAttributeRequestTunnelOptionsSpecification(TeaModel):
92148
93184
 
92149
93185
  def from_map(self, m: dict = None):
92150
93186
  m = m or dict()
93187
+ if m.get('CustomerGatewayId') is not None:
93188
+ self.customer_gateway_id = m.get('CustomerGatewayId')
92151
93189
  if m.get('EnableDpd') is not None:
92152
93190
  self.enable_dpd = m.get('EnableDpd')
92153
93191
  if m.get('EnableNatTraversal') is not None:
@@ -92200,27 +93238,27 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92200
93238
  # * **true**\
92201
93239
  # * **false**\
92202
93240
  self.auto_config_route = auto_config_route
92203
- # This parameter is supported by single-tunnel IPsec-VPN connections.
93241
+ # This parameter is supported if you modify the configurations of an IPsec-VPN connection in single-tunnel mode.
92204
93242
  #
92205
- # The Border Gateway Protocol (BGP) configurations:
93243
+ # BGP configuration:
92206
93244
  #
92207
- # * **BgpConfig.EnableBgp:** specifies whether to enable BGP. Valid values: **true** and **false**.
93245
+ # * **BgpConfig.EnableBgp**: specifies whether to enable BGP. Valid values: **true** and **false**.
92208
93246
  #
92209
93247
  # * **BgpConfig.LocalAsn:** the autonomous system number (ASN) on the Alibaba Cloud side. Valid values: **1** to **4294967295**.
92210
93248
  #
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.
93249
+ # You can enter a value in two segments separated by a period (.). Each segment is 16 bits in length. Enter the number in each segment in decimal format.
92212
93250
  #
92213
- # For example, if you enter 123.456, the ASN is: 123 × 65536 + 456 = 8061384.
93251
+ # For example, if you enter 123.456, the ASN is 8061384. The ASN is calculated by using the following formula: 123 × 65536 + 456 = 8061384.
92214
93252
  #
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.
93253
+ # * **BgpConfig.TunnelCidr**: The CIDR block of the IPsec tunnel. The CIDR block must fall within 169.254.0.0/16 and the mask of the CIDR block must be 30 bits in length. The CIDR block cannot be 169.254.0.0/30, 169.254.1.0/30, 169.254.2.0/30, 169.254.3.0/30, 169.254.4.0/30, 169.254.5.0/30, 169.254.6.0/30, or 169.254.169.252/30.
92216
93254
  #
92217
- # > The CIDR block of the IPsec tunnel of each IPsec-VPN connection must be unique on a VPN gateway.
93255
+ # > The CIDR block of the IPsec tunnel for each IPsec-VPN connection on a VPN gateway must be unique.
92218
93256
  #
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.
93257
+ # * **LocalBgpIp**: the BGP address on the Alibaba Cloud side. It must be an IP address that falls within the CIDR block of the IPsec tunnel.
92220
93258
  #
92221
93259
  # > - 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.
93260
+ # > - Before you add BGP configurations, we recommend that you learn about how BGP dynamic routing works and the limits. For more information, see [Configure BGP dynamic routing](https://help.aliyun.com/document_detail/2638220.html).
93261
+ # > - We recommend that you use a private ASN to establish BGP connections to Alibaba Cloud. For information about the range of private ASNs, see the relevant documentation.
92224
93262
  self.bgp_config = bgp_config
92225
93263
  # The client token that is used to ensure the idempotence of the request.
92226
93264
  #
@@ -92261,25 +93299,27 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92261
93299
  # * **HealthCheckConfig.interval**: the interval between two consecutive health checks. Unit: seconds.
92262
93300
  # * **HealthCheckConfig.retry**: the maximum number of health check retries.
92263
93301
  self.health_check_config = health_check_config
92264
- # This parameter is supported by single-tunnel IPsec-VPN connections.
93302
+ # This parameter is supported if you modify the configurations of an IPsec-VPN connection in single-tunnel mode.
92265
93303
  #
92266
93304
  # The configurations of Phase 1 negotiations:
92267
93305
  #
92268
- # * **IkeConfig.Psk**: the pre-shared key that is used for authentication between the VPN gateway and the data center.
93306
+ # * **IkeConfig.Psk**: The pre-shared key that is used for identity authentication between the VPN gateway and the on-premises data center.
92269
93307
  #
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.
93308
+ # * The key cannot contain space characters. The key must be 1 to 100 characters in length, and can contain digits, letters, and the following special characters: ``~!`@#$%^&*()_-+={}[]|;:\\",.<>/?``
93309
+ # * If you do not specify a pre-shared key, the system randomly generates a 16-bit string as the pre-shared key. You can call the [DescribeVpnConnection](https://help.aliyun.com/document_detail/2526951.html) operation to query the pre-shared key that is automatically generated by the system.
92272
93310
  #
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.
93311
+ # **\
93312
+ #
93313
+ # **Description** The pre-shared key of the IPsec-VPN connection must be the same as the authentication key of the on-premises data center. Otherwise, connections between the on-premises data center and the VPN gateway cannot be established.
92274
93314
  #
92275
93315
  # * **IkeConfig.IkeVersion**: the version of the Internet Key Exchange (IKE) protocol. Valid values: **ikev1** and **ikev2**.
92276
93316
  #
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.
93317
+ # Compared with IKEv1, IKEv2 simplifies the security association (SA) negotiation process and provides better support for scenarios with multiple CIDR blocks.
92278
93318
  #
92279
93319
  # * **IkeConfig.IkeMode**: the negotiation mode of IKE. Valid values: **main** and **aggressive**.
92280
93320
  #
92281
- # * **main**: This mode offers higher security during negotiations.
92282
- # * **aggressive**: This mode is faster and has a higher success rate.
93321
+ # * **main:** This mode offers higher security during negotiations.
93322
+ # * **aggressive:** This mode supports faster negotiations and a higher success rate.
92283
93323
  #
92284
93324
  # * **IkeConfig.IkeEncAlg**: the encryption algorithm that is used in Phase 1 negotiations.
92285
93325
  #
@@ -92289,13 +93329,13 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92289
93329
  #
92290
93330
  # Valid values: **md5**, **sha1**, **sha256**, **sha384**, and **sha512**.
92291
93331
  #
92292
- # * **IkeConfig.IkePfs**: the Diffie-Hellman (DH) key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
93332
+ # * **IkeConfig.IkePfs**: the Diffie-Hellman key exchange algorithm that is used in Phase 1 negotiations. Valid values: **group1**, **group2**, **group5**, and **group14**.
92293
93333
  #
92294
- # * **IkeConfig.IkeLifetime**: the security association (SA) lifetime that is determined by Phase 1 negotiations. Unit: seconds. Valid values: **0 to 86400**.
93334
+ # * **IkeConfig.IkeLifetime**: the SA lifetime as a result of Phase 1 negotiations. Unit: seconds Valid values: **0 to 86400**.
92295
93335
  #
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.
93336
+ # * **IkeConfig.LocalId**: the identifier of the VPN gateway. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the VPN gateway.
92297
93337
  #
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.
93338
+ # * **IkeConfig.RemoteId**: the identifier of the customer gateway. The identifier cannot exceed 100 characters in length and cannot contain space characters. The default value is the IP address of the customer gateway.
92299
93339
  self.ike_config = ike_config
92300
93340
  # You can specify this parameter if you modify the configuration of a single-tunnel IPsec-VPN connection.
92301
93341
  #
@@ -92353,7 +93393,7 @@ class ModifyVpnConnectionAttributeRequest(TeaModel):
92353
93393
  self.resource_owner_id = resource_owner_id
92354
93394
  # The tunnel configurations.
92355
93395
  #
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.
93396
+ # You can specify parameters in the **TunnelOptionsSpecification** array when you modify the configurations of an IPsec-VPN connection in dual-tunnel mode. You can modify the configurations of both the active and standby tunnels of the IPsec-VPN connection.
92357
93397
  self.tunnel_options_specification = tunnel_options_specification
92358
93398
  # The ID of the IPsec-VPN connection.
92359
93399
  #