Selaa lähdekoodia

SMARTAG SDK Auto Released By jijun.jj,Version:1.60.34

Signed-off-by: sdk-team <sdk-team@alibabacloud.com>
sdk-team 6 vuotta sitten
vanhempi
commit
57a2ce229f
72 muutettua tiedostoa jossa 4501 lisäystä ja 62 poistoa
  1. 3 0
      ChangeLog.txt
  2. 128 0
      services/smartag/add_acl_rule.go
  3. 109 0
      services/smartag/add_network_optimization_setting.go
  4. 108 0
      services/smartag/associate_acl.go
  5. 108 0
      services/smartag/attach_network_optimization_sags.go
  6. 108 0
      services/smartag/clear_sag_routeable_address.go
  7. 28 5
      services/smartag/client.go
  8. 108 0
      services/smartag/create_acl.go
  9. 9 5
      services/smartag/create_cloud_connect_network.go
  10. 111 0
      services/smartag/create_network_optimization.go
  11. 3 0
      services/smartag/create_smart_access_gateway.go
  12. 115 0
      services/smartag/create_smart_access_gateway_client_user.go
  13. 113 0
      services/smartag/create_smart_access_gateway_software.go
  14. 107 0
      services/smartag/delete_acl.go
  15. 108 0
      services/smartag/delete_acl_rule.go
  16. 107 0
      services/smartag/delete_network_optimization.go
  17. 109 0
      services/smartag/delete_network_optimization_setting.go
  18. 1 0
      services/smartag/delete_sag_link_level_ha.go
  19. 108 0
      services/smartag/delete_smart_access_gateway_client_user.go
  20. 114 0
      services/smartag/describe_ac_ls.go
  21. 115 0
      services/smartag/describe_acl_attribute.go
  22. 15 8
      services/smartag/describe_cloud_connect_networks.go
  23. 113 0
      services/smartag/describe_network_optimization_sags.go
  24. 113 0
      services/smartag/describe_network_optimization_settings.go
  25. 115 0
      services/smartag/describe_network_optimizations.go
  26. 108 0
      services/smartag/describe_sag_online_client_statistics.go
  27. 109 0
      services/smartag/describe_sag_routeable_address.go
  28. 114 0
      services/smartag/describe_smart_access_gateway_client_users.go
  29. 7 12
      services/smartag/describe_smart_access_gateway_ha.go
  30. 8 5
      services/smartag/describe_smart_access_gateways.go
  31. 110 0
      services/smartag/describe_user_flow_statistics.go
  32. 109 0
      services/smartag/describe_user_online_client_statistics.go
  33. 109 0
      services/smartag/describe_user_online_clients.go
  34. 108 0
      services/smartag/detach_network_optimization_sags.go
  35. 108 0
      services/smartag/disassociate_acl.go
  36. 2 0
      services/smartag/downgrade_smart_access_gateway.go
  37. 108 0
      services/smartag/kick_out_clients.go
  38. 108 0
      services/smartag/modify_acl.go
  39. 129 0
      services/smartag/modify_acl_rule.go
  40. 2 0
      services/smartag/modify_cloud_connect_network.go
  41. 108 0
      services/smartag/modify_network_optimization.go
  42. 108 0
      services/smartag/modify_serial_number.go
  43. 17 10
      services/smartag/modify_smart_access_gateway.go
  44. 113 0
      services/smartag/modify_smart_access_gateway_client_user.go
  45. 108 0
      services/smartag/reset_smart_access_gateway_client_user_password.go
  46. 109 0
      services/smartag/set_sag_routeable_address.go
  47. 23 0
      services/smartag/struct_acl.go
  48. 21 0
      services/smartag/struct_acls.go
  49. 32 0
      services/smartag/struct_acr.go
  50. 21 0
      services/smartag/struct_acrs.go
  51. 3 0
      services/smartag/struct_cloud_connect_network.go
  52. 21 0
      services/smartag/struct_link_backup_info_list.go
  53. 26 0
      services/smartag/struct_link_backup_info_list_item.go
  54. 26 0
      services/smartag/struct_network_optimization.go
  55. 21 0
      services/smartag/struct_network_optimizations.go
  56. 21 0
      services/smartag/struct_sag_statistics_in_describe_sag_online_client_statistics.go
  57. 21 0
      services/smartag/struct_sag_statistics_in_describe_user_flow_statistics.go
  58. 22 0
      services/smartag/struct_setting.go
  59. 21 0
      services/smartag/struct_settings.go
  60. 21 15
      services/smartag/struct_smart_access_gateway.go
  61. 21 0
      services/smartag/struct_smart_access_gateways_in_describe_network_optimization_sags.go
  62. 2 2
      services/smartag/struct_smart_access_gateways_in_describe_smart_access_gateways.go
  63. 21 0
      services/smartag/struct_snat_entries.go
  64. 22 0
      services/smartag/struct_snat_entry.go
  65. 24 0
      services/smartag/struct_statistics.go
  66. 22 0
      services/smartag/struct_tag.go
  67. 21 0
      services/smartag/struct_tags.go
  68. 25 0
      services/smartag/struct_user.go
  69. 21 0
      services/smartag/struct_user_statistics.go
  70. 21 0
      services/smartag/struct_users_in_describe_smart_access_gateway_client_users.go
  71. 21 0
      services/smartag/struct_users_in_describe_user_online_clients.go
  72. 2 0
      services/smartag/upgrade_smart_access_gateway.go

+ 3 - 0
ChangeLog.txt

@@ -1,3 +1,6 @@
+2019-06-03 Version: 1.60.34
+1, Add openapi of ACL.
+
 2019-06-03 Version: 1.60.33
 1, Order info add relatedOrderId.
 

+ 128 - 0
services/smartag/add_acl_rule.go

@@ -0,0 +1,128 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// AddACLRule invokes the smartag.AddACLRule API synchronously
+// api document: https://help.aliyun.com/api/smartag/addaclrule.html
+func (client *Client) AddACLRule(request *AddACLRuleRequest) (response *AddACLRuleResponse, err error) {
+	response = CreateAddACLRuleResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// AddACLRuleWithChan invokes the smartag.AddACLRule API asynchronously
+// api document: https://help.aliyun.com/api/smartag/addaclrule.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AddACLRuleWithChan(request *AddACLRuleRequest) (<-chan *AddACLRuleResponse, <-chan error) {
+	responseChan := make(chan *AddACLRuleResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.AddACLRule(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// AddACLRuleWithCallback invokes the smartag.AddACLRule API asynchronously
+// api document: https://help.aliyun.com/api/smartag/addaclrule.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AddACLRuleWithCallback(request *AddACLRuleRequest, callback func(response *AddACLRuleResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *AddACLRuleResponse
+		var err error
+		defer close(result)
+		response, err = client.AddACLRule(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// AddACLRuleRequest is the request struct for api AddACLRule
+type AddACLRuleRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	SourcePortRange      string           `position:"Query" name:"SourcePortRange"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	IpProtocol           string           `position:"Query" name:"IpProtocol"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SourceCidr           string           `position:"Query" name:"SourceCidr"`
+	Description          string           `position:"Query" name:"Description"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	Priority             requests.Integer `position:"Query" name:"Priority"`
+	DestCidr             string           `position:"Query" name:"DestCidr"`
+	DestPortRange        string           `position:"Query" name:"DestPortRange"`
+	Direction            string           `position:"Query" name:"Direction"`
+	Policy               string           `position:"Query" name:"Policy"`
+}
+
+// AddACLRuleResponse is the response struct for api AddACLRule
+type AddACLRuleResponse struct {
+	*responses.BaseResponse
+	RequestId       string `json:"RequestId" xml:"RequestId"`
+	AcrId           string `json:"AcrId" xml:"AcrId"`
+	AclId           string `json:"AclId" xml:"AclId"`
+	Description     string `json:"Description" xml:"Description"`
+	Direction       string `json:"Direction" xml:"Direction"`
+	SourceCidr      string `json:"SourceCidr" xml:"SourceCidr"`
+	DestCidr        string `json:"DestCidr" xml:"DestCidr"`
+	IpProtocol      string `json:"IpProtocol" xml:"IpProtocol"`
+	SourcePortRange string `json:"SourcePortRange" xml:"SourcePortRange"`
+	DestPortRange   string `json:"DestPortRange" xml:"DestPortRange"`
+	Policy          string `json:"Policy" xml:"Policy"`
+	Priority        int    `json:"Priority" xml:"Priority"`
+	GmtCreate       int    `json:"GmtCreate" xml:"GmtCreate"`
+}
+
+// CreateAddACLRuleRequest creates a request to invoke AddACLRule API
+func CreateAddACLRuleRequest() (request *AddACLRuleRequest) {
+	request = &AddACLRuleRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "AddACLRule", "smartag", "openAPI")
+	return
+}
+
+// CreateAddACLRuleResponse creates a response to parse from AddACLRule response
+func CreateAddACLRuleResponse() (response *AddACLRuleResponse) {
+	response = &AddACLRuleResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 109 - 0
services/smartag/add_network_optimization_setting.go

@@ -0,0 +1,109 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// AddNetworkOptimizationSetting invokes the smartag.AddNetworkOptimizationSetting API synchronously
+// api document: https://help.aliyun.com/api/smartag/addnetworkoptimizationsetting.html
+func (client *Client) AddNetworkOptimizationSetting(request *AddNetworkOptimizationSettingRequest) (response *AddNetworkOptimizationSettingResponse, err error) {
+	response = CreateAddNetworkOptimizationSettingResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// AddNetworkOptimizationSettingWithChan invokes the smartag.AddNetworkOptimizationSetting API asynchronously
+// api document: https://help.aliyun.com/api/smartag/addnetworkoptimizationsetting.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AddNetworkOptimizationSettingWithChan(request *AddNetworkOptimizationSettingRequest) (<-chan *AddNetworkOptimizationSettingResponse, <-chan error) {
+	responseChan := make(chan *AddNetworkOptimizationSettingResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.AddNetworkOptimizationSetting(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// AddNetworkOptimizationSettingWithCallback invokes the smartag.AddNetworkOptimizationSetting API asynchronously
+// api document: https://help.aliyun.com/api/smartag/addnetworkoptimizationsetting.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AddNetworkOptimizationSettingWithCallback(request *AddNetworkOptimizationSettingRequest, callback func(response *AddNetworkOptimizationSettingResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *AddNetworkOptimizationSettingResponse
+		var err error
+		defer close(result)
+		response, err = client.AddNetworkOptimizationSetting(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// AddNetworkOptimizationSettingRequest is the request struct for api AddNetworkOptimizationSetting
+type AddNetworkOptimizationSettingRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	Domain               string           `position:"Query" name:"Domain"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	Type                 string           `position:"Query" name:"Type"`
+}
+
+// AddNetworkOptimizationSettingResponse is the response struct for api AddNetworkOptimizationSetting
+type AddNetworkOptimizationSettingResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateAddNetworkOptimizationSettingRequest creates a request to invoke AddNetworkOptimizationSetting API
+func CreateAddNetworkOptimizationSettingRequest() (request *AddNetworkOptimizationSettingRequest) {
+	request = &AddNetworkOptimizationSettingRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "AddNetworkOptimizationSetting", "smartag", "openAPI")
+	return
+}
+
+// CreateAddNetworkOptimizationSettingResponse creates a response to parse from AddNetworkOptimizationSetting response
+func CreateAddNetworkOptimizationSettingResponse() (response *AddNetworkOptimizationSettingResponse) {
+	response = &AddNetworkOptimizationSettingResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/associate_acl.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// AssociateACL invokes the smartag.AssociateACL API synchronously
+// api document: https://help.aliyun.com/api/smartag/associateacl.html
+func (client *Client) AssociateACL(request *AssociateACLRequest) (response *AssociateACLResponse, err error) {
+	response = CreateAssociateACLResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// AssociateACLWithChan invokes the smartag.AssociateACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/associateacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AssociateACLWithChan(request *AssociateACLRequest) (<-chan *AssociateACLResponse, <-chan error) {
+	responseChan := make(chan *AssociateACLResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.AssociateACL(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// AssociateACLWithCallback invokes the smartag.AssociateACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/associateacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AssociateACLWithCallback(request *AssociateACLRequest, callback func(response *AssociateACLResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *AssociateACLResponse
+		var err error
+		defer close(result)
+		response, err = client.AssociateACL(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// AssociateACLRequest is the request struct for api AssociateACL
+type AssociateACLRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// AssociateACLResponse is the response struct for api AssociateACL
+type AssociateACLResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateAssociateACLRequest creates a request to invoke AssociateACL API
+func CreateAssociateACLRequest() (request *AssociateACLRequest) {
+	request = &AssociateACLRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "AssociateACL", "smartag", "openAPI")
+	return
+}
+
+// CreateAssociateACLResponse creates a response to parse from AssociateACL response
+func CreateAssociateACLResponse() (response *AssociateACLResponse) {
+	response = &AssociateACLResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/attach_network_optimization_sags.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// AttachNetworkOptimizationSags invokes the smartag.AttachNetworkOptimizationSags API synchronously
+// api document: https://help.aliyun.com/api/smartag/attachnetworkoptimizationsags.html
+func (client *Client) AttachNetworkOptimizationSags(request *AttachNetworkOptimizationSagsRequest) (response *AttachNetworkOptimizationSagsResponse, err error) {
+	response = CreateAttachNetworkOptimizationSagsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// AttachNetworkOptimizationSagsWithChan invokes the smartag.AttachNetworkOptimizationSags API asynchronously
+// api document: https://help.aliyun.com/api/smartag/attachnetworkoptimizationsags.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AttachNetworkOptimizationSagsWithChan(request *AttachNetworkOptimizationSagsRequest) (<-chan *AttachNetworkOptimizationSagsResponse, <-chan error) {
+	responseChan := make(chan *AttachNetworkOptimizationSagsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.AttachNetworkOptimizationSags(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// AttachNetworkOptimizationSagsWithCallback invokes the smartag.AttachNetworkOptimizationSags API asynchronously
+// api document: https://help.aliyun.com/api/smartag/attachnetworkoptimizationsags.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) AttachNetworkOptimizationSagsWithCallback(request *AttachNetworkOptimizationSagsRequest, callback func(response *AttachNetworkOptimizationSagsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *AttachNetworkOptimizationSagsResponse
+		var err error
+		defer close(result)
+		response, err = client.AttachNetworkOptimizationSags(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// AttachNetworkOptimizationSagsRequest is the request struct for api AttachNetworkOptimizationSags
+type AttachNetworkOptimizationSagsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGIds           *[]string        `position:"Query" name:"SmartAGIds"  type:"Repeated"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// AttachNetworkOptimizationSagsResponse is the response struct for api AttachNetworkOptimizationSags
+type AttachNetworkOptimizationSagsResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateAttachNetworkOptimizationSagsRequest creates a request to invoke AttachNetworkOptimizationSags API
+func CreateAttachNetworkOptimizationSagsRequest() (request *AttachNetworkOptimizationSagsRequest) {
+	request = &AttachNetworkOptimizationSagsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "AttachNetworkOptimizationSags", "smartag", "openAPI")
+	return
+}
+
+// CreateAttachNetworkOptimizationSagsResponse creates a response to parse from AttachNetworkOptimizationSags response
+func CreateAttachNetworkOptimizationSagsResponse() (response *AttachNetworkOptimizationSagsResponse) {
+	response = &AttachNetworkOptimizationSagsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/clear_sag_routeable_address.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ClearSagRouteableAddress invokes the smartag.ClearSagRouteableAddress API synchronously
+// api document: https://help.aliyun.com/api/smartag/clearsagrouteableaddress.html
+func (client *Client) ClearSagRouteableAddress(request *ClearSagRouteableAddressRequest) (response *ClearSagRouteableAddressResponse, err error) {
+	response = CreateClearSagRouteableAddressResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ClearSagRouteableAddressWithChan invokes the smartag.ClearSagRouteableAddress API asynchronously
+// api document: https://help.aliyun.com/api/smartag/clearsagrouteableaddress.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ClearSagRouteableAddressWithChan(request *ClearSagRouteableAddressRequest) (<-chan *ClearSagRouteableAddressResponse, <-chan error) {
+	responseChan := make(chan *ClearSagRouteableAddressResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ClearSagRouteableAddress(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ClearSagRouteableAddressWithCallback invokes the smartag.ClearSagRouteableAddress API asynchronously
+// api document: https://help.aliyun.com/api/smartag/clearsagrouteableaddress.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ClearSagRouteableAddressWithCallback(request *ClearSagRouteableAddressRequest, callback func(response *ClearSagRouteableAddressResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ClearSagRouteableAddressResponse
+		var err error
+		defer close(result)
+		response, err = client.ClearSagRouteableAddress(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ClearSagRouteableAddressRequest is the request struct for api ClearSagRouteableAddress
+type ClearSagRouteableAddressRequest struct {
+	*requests.RpcRequest
+	AccessKeyId          string           `position:"Query" name:"access_key_id"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	SagId                string           `position:"Query" name:"SagId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// ClearSagRouteableAddressResponse is the response struct for api ClearSagRouteableAddress
+type ClearSagRouteableAddressResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateClearSagRouteableAddressRequest creates a request to invoke ClearSagRouteableAddress API
+func CreateClearSagRouteableAddressRequest() (request *ClearSagRouteableAddressRequest) {
+	request = &ClearSagRouteableAddressRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "ClearSagRouteableAddress", "smartag", "openAPI")
+	return
+}
+
+// CreateClearSagRouteableAddressResponse creates a response to parse from ClearSagRouteableAddress response
+func CreateClearSagRouteableAddressResponse() (response *ClearSagRouteableAddressResponse) {
+	response = &ClearSagRouteableAddressResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 28 - 5
services/smartag/client.go

@@ -18,6 +18,7 @@ package smartag
 import (
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials/provider"
 )
 
 // Client is the sdk client struct, each func corresponds to an OpenAPI
@@ -32,6 +33,20 @@ func NewClient() (client *Client, err error) {
 	return
 }
 
+// NewClientWithProvider creates a sdk client with providers
+// usage: https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/docs/2-Client-EN.md
+func NewClientWithProvider(regionId string, providers ...provider.Provider) (client *Client, err error) {
+	client = &Client{}
+	var pc provider.Provider
+	if len(providers) == 0 {
+		pc = provider.DefaultChain
+	} else {
+		pc = provider.NewProviderChain(providers)
+	}
+	err = client.InitWithProviderChain(regionId, pc)
+	return
+}
+
 // NewClientWithOptions creates a sdk client with regionId/sdkConfig/credential
 // this is the common api to create a sdk client
 func NewClientWithOptions(regionId string, config *sdk.Config, credential auth.Credential) (client *Client, err error) {
@@ -41,7 +56,7 @@ func NewClientWithOptions(regionId string, config *sdk.Config, credential auth.C
 }
 
 // NewClientWithAccessKey is a shortcut to create sdk client with accesskey
-// usage: https://help.aliyun.com/document_detail/66217.html
+// usage: https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/docs/2-Client-EN.md
 func NewClientWithAccessKey(regionId, accessKeyId, accessKeySecret string) (client *Client, err error) {
 	client = &Client{}
 	err = client.InitWithAccessKey(regionId, accessKeyId, accessKeySecret)
@@ -49,7 +64,7 @@ func NewClientWithAccessKey(regionId, accessKeyId, accessKeySecret string) (clie
 }
 
 // NewClientWithStsToken is a shortcut to create sdk client with sts token
-// usage: https://help.aliyun.com/document_detail/66222.html
+// usage: https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/docs/2-Client-EN.md
 func NewClientWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToken string) (client *Client, err error) {
 	client = &Client{}
 	err = client.InitWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToken)
@@ -57,15 +72,23 @@ func NewClientWithStsToken(regionId, stsAccessKeyId, stsAccessKeySecret, stsToke
 }
 
 // NewClientWithRamRoleArn is a shortcut to create sdk client with ram roleArn
-// usage: https://help.aliyun.com/document_detail/66222.html
+// usage: https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/docs/2-Client-EN.md
 func NewClientWithRamRoleArn(regionId string, accessKeyId, accessKeySecret, roleArn, roleSessionName string) (client *Client, err error) {
 	client = &Client{}
 	err = client.InitWithRamRoleArn(regionId, accessKeyId, accessKeySecret, roleArn, roleSessionName)
 	return
 }
 
+// NewClientWithRamRoleArn is a shortcut to create sdk client with ram roleArn and policy
+// usage: https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/docs/2-Client-EN.md
+func NewClientWithRamRoleArnAndPolicy(regionId string, accessKeyId, accessKeySecret, roleArn, roleSessionName, policy string) (client *Client, err error) {
+	client = &Client{}
+	err = client.InitWithRamRoleArnAndPolicy(regionId, accessKeyId, accessKeySecret, roleArn, roleSessionName, policy)
+	return
+}
+
 // NewClientWithEcsRamRole is a shortcut to create sdk client with ecs ram role
-// usage: https://help.aliyun.com/document_detail/66223.html
+// usage: https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/docs/2-Client-EN.md
 func NewClientWithEcsRamRole(regionId string, roleName string) (client *Client, err error) {
 	client = &Client{}
 	err = client.InitWithEcsRamRole(regionId, roleName)
@@ -73,7 +96,7 @@ func NewClientWithEcsRamRole(regionId string, roleName string) (client *Client,
 }
 
 // NewClientWithRsaKeyPair is a shortcut to create sdk client with rsa key pair
-// attention: rsa key pair auth is only Japan regions available
+// usage: https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/docs/2-Client-EN.md
 func NewClientWithRsaKeyPair(regionId string, publicKeyId, privateKey string, sessionExpiration int) (client *Client, err error) {
 	client = &Client{}
 	err = client.InitWithRsaKeyPair(regionId, publicKeyId, privateKey, sessionExpiration)

+ 108 - 0
services/smartag/create_acl.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// CreateACL invokes the smartag.CreateACL API synchronously
+// api document: https://help.aliyun.com/api/smartag/createacl.html
+func (client *Client) CreateACL(request *CreateACLRequest) (response *CreateACLResponse, err error) {
+	response = CreateCreateACLResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// CreateACLWithChan invokes the smartag.CreateACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateACLWithChan(request *CreateACLRequest) (<-chan *CreateACLResponse, <-chan error) {
+	responseChan := make(chan *CreateACLResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.CreateACL(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// CreateACLWithCallback invokes the smartag.CreateACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateACLWithCallback(request *CreateACLRequest, callback func(response *CreateACLResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *CreateACLResponse
+		var err error
+		defer close(result)
+		response, err = client.CreateACL(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// CreateACLRequest is the request struct for api CreateACL
+type CreateACLRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	Name                 string           `position:"Query" name:"Name"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// CreateACLResponse is the response struct for api CreateACL
+type CreateACLResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+	AclId     string `json:"AclId" xml:"AclId"`
+}
+
+// CreateCreateACLRequest creates a request to invoke CreateACL API
+func CreateCreateACLRequest() (request *CreateACLRequest) {
+	request = &CreateACLRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "CreateACL", "smartag", "openAPI")
+	return
+}
+
+// CreateCreateACLResponse creates a response to parse from CreateACL response
+func CreateCreateACLResponse() (response *CreateACLResponse) {
+	response = &CreateACLResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 9 - 5
services/smartag/create_cloud_connect_network.go

@@ -80,7 +80,9 @@ type CreateCloudConnectNetworkRequest struct {
 	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
 	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
 	Name                 string           `position:"Query" name:"Name"`
+	CidrBlock            string           `position:"Query" name:"CidrBlock"`
 	Description          string           `position:"Query" name:"Description"`
+	SnatCidrBlock        string           `position:"Query" name:"SnatCidrBlock"`
 	IsDefault            requests.Boolean `position:"Query" name:"IsDefault"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
 }
@@ -88,11 +90,13 @@ type CreateCloudConnectNetworkRequest struct {
 // CreateCloudConnectNetworkResponse is the response struct for api CreateCloudConnectNetwork
 type CreateCloudConnectNetworkResponse struct {
 	*responses.BaseResponse
-	RequestId   string `json:"RequestId" xml:"RequestId"`
-	CcnId       string `json:"CcnId" xml:"CcnId"`
-	Name        string `json:"Name" xml:"Name"`
-	Status      string `json:"Status" xml:"Status"`
-	Description string `json:"Description" xml:"Description"`
+	RequestId     string `json:"RequestId" xml:"RequestId"`
+	CcnId         string `json:"CcnId" xml:"CcnId"`
+	Name          string `json:"Name" xml:"Name"`
+	Status        string `json:"Status" xml:"Status"`
+	Description   string `json:"Description" xml:"Description"`
+	SnatCidrBlock string `json:"SnatCidrBlock" xml:"SnatCidrBlock"`
+	CidrBlock     string `json:"CidrBlock" xml:"CidrBlock"`
 }
 
 // CreateCreateCloudConnectNetworkRequest creates a request to invoke CreateCloudConnectNetwork API

+ 111 - 0
services/smartag/create_network_optimization.go

@@ -0,0 +1,111 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// CreateNetworkOptimization invokes the smartag.CreateNetworkOptimization API synchronously
+// api document: https://help.aliyun.com/api/smartag/createnetworkoptimization.html
+func (client *Client) CreateNetworkOptimization(request *CreateNetworkOptimizationRequest) (response *CreateNetworkOptimizationResponse, err error) {
+	response = CreateCreateNetworkOptimizationResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// CreateNetworkOptimizationWithChan invokes the smartag.CreateNetworkOptimization API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createnetworkoptimization.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateNetworkOptimizationWithChan(request *CreateNetworkOptimizationRequest) (<-chan *CreateNetworkOptimizationResponse, <-chan error) {
+	responseChan := make(chan *CreateNetworkOptimizationResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.CreateNetworkOptimization(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// CreateNetworkOptimizationWithCallback invokes the smartag.CreateNetworkOptimization API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createnetworkoptimization.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateNetworkOptimizationWithCallback(request *CreateNetworkOptimizationRequest, callback func(response *CreateNetworkOptimizationResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *CreateNetworkOptimizationResponse
+		var err error
+		defer close(result)
+		response, err = client.CreateNetworkOptimization(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// CreateNetworkOptimizationRequest is the request struct for api CreateNetworkOptimization
+type CreateNetworkOptimizationRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	Name                 string           `position:"Query" name:"Name"`
+	CcnId                string           `position:"Query" name:"CcnId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// CreateNetworkOptimizationResponse is the response struct for api CreateNetworkOptimization
+type CreateNetworkOptimizationResponse struct {
+	*responses.BaseResponse
+	RequestId    string `json:"RequestId" xml:"RequestId"`
+	NetworkOptId string `json:"NetworkOptId" xml:"NetworkOptId"`
+	Name         string `json:"Name" xml:"Name"`
+	State        string `json:"State" xml:"State"`
+}
+
+// CreateCreateNetworkOptimizationRequest creates a request to invoke CreateNetworkOptimization API
+func CreateCreateNetworkOptimizationRequest() (request *CreateNetworkOptimizationRequest) {
+	request = &CreateNetworkOptimizationRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "CreateNetworkOptimization", "smartag", "openAPI")
+	return
+}
+
+// CreateCreateNetworkOptimizationResponse creates a response to parse from CreateNetworkOptimization response
+func CreateCreateNetworkOptimizationResponse() (response *CreateNetworkOptimizationResponse) {
+	response = &CreateNetworkOptimizationResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 3 - 0
services/smartag/create_smart_access_gateway.go

@@ -81,7 +81,9 @@ type CreateSmartAccessGatewayRequest struct {
 	Description          string           `position:"Query" name:"Description"`
 	ReceiverTown         string           `position:"Query" name:"ReceiverTown"`
 	ReceiverDistrict     string           `position:"Query" name:"ReceiverDistrict"`
+	UserCount            requests.Integer `position:"Query" name:"UserCount"`
 	ReceiverAddress      string           `position:"Query" name:"ReceiverAddress"`
+	InstanceType         string           `position:"Query" name:"InstanceType"`
 	BuyerMessage         string           `position:"Query" name:"BuyerMessage"`
 	HardWareSpec         string           `position:"Query" name:"HardWareSpec"`
 	ReceiverEmail        string           `position:"Query" name:"ReceiverEmail"`
@@ -99,6 +101,7 @@ type CreateSmartAccessGatewayRequest struct {
 	Name                 string           `position:"Query" name:"Name"`
 	ReceiverCountry      string           `position:"Query" name:"ReceiverCountry"`
 	ChargeType           string           `position:"Query" name:"ChargeType"`
+	DataPlan             requests.Integer `position:"Query" name:"DataPlan"`
 	ReceiverZip          string           `position:"Query" name:"ReceiverZip"`
 }
 

+ 115 - 0
services/smartag/create_smart_access_gateway_client_user.go

@@ -0,0 +1,115 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// CreateSmartAccessGatewayClientUser invokes the smartag.CreateSmartAccessGatewayClientUser API synchronously
+// api document: https://help.aliyun.com/api/smartag/createsmartaccessgatewayclientuser.html
+func (client *Client) CreateSmartAccessGatewayClientUser(request *CreateSmartAccessGatewayClientUserRequest) (response *CreateSmartAccessGatewayClientUserResponse, err error) {
+	response = CreateCreateSmartAccessGatewayClientUserResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// CreateSmartAccessGatewayClientUserWithChan invokes the smartag.CreateSmartAccessGatewayClientUser API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createsmartaccessgatewayclientuser.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateSmartAccessGatewayClientUserWithChan(request *CreateSmartAccessGatewayClientUserRequest) (<-chan *CreateSmartAccessGatewayClientUserResponse, <-chan error) {
+	responseChan := make(chan *CreateSmartAccessGatewayClientUserResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.CreateSmartAccessGatewayClientUser(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// CreateSmartAccessGatewayClientUserWithCallback invokes the smartag.CreateSmartAccessGatewayClientUser API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createsmartaccessgatewayclientuser.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateSmartAccessGatewayClientUserWithCallback(request *CreateSmartAccessGatewayClientUserRequest, callback func(response *CreateSmartAccessGatewayClientUserResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *CreateSmartAccessGatewayClientUserResponse
+		var err error
+		defer close(result)
+		response, err = client.CreateSmartAccessGatewayClientUser(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// CreateSmartAccessGatewayClientUserRequest is the request struct for api CreateSmartAccessGatewayClientUser
+type CreateSmartAccessGatewayClientUserRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	Bandwidth            requests.Integer `position:"Query" name:"Bandwidth"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	ClientIp             string           `position:"Query" name:"ClientIp"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	UserMail             string           `position:"Query" name:"UserMail"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	UserName             string           `position:"Query" name:"UserName"`
+}
+
+// CreateSmartAccessGatewayClientUserResponse is the response struct for api CreateSmartAccessGatewayClientUser
+type CreateSmartAccessGatewayClientUserResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+	ClientIp  string `json:"ClientIp" xml:"ClientIp"`
+	UserMail  string `json:"UserMail" xml:"UserMail"`
+	UserName  string `json:"UserName" xml:"UserName"`
+	Bandwidth int    `json:"Bandwidth" xml:"Bandwidth"`
+}
+
+// CreateCreateSmartAccessGatewayClientUserRequest creates a request to invoke CreateSmartAccessGatewayClientUser API
+func CreateCreateSmartAccessGatewayClientUserRequest() (request *CreateSmartAccessGatewayClientUserRequest) {
+	request = &CreateSmartAccessGatewayClientUserRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "CreateSmartAccessGatewayClientUser", "smartag", "openAPI")
+	return
+}
+
+// CreateCreateSmartAccessGatewayClientUserResponse creates a response to parse from CreateSmartAccessGatewayClientUser response
+func CreateCreateSmartAccessGatewayClientUserResponse() (response *CreateSmartAccessGatewayClientUserResponse) {
+	response = &CreateSmartAccessGatewayClientUserResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 113 - 0
services/smartag/create_smart_access_gateway_software.go

@@ -0,0 +1,113 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// CreateSmartAccessGatewaySoftware invokes the smartag.CreateSmartAccessGatewaySoftware API synchronously
+// api document: https://help.aliyun.com/api/smartag/createsmartaccessgatewaysoftware.html
+func (client *Client) CreateSmartAccessGatewaySoftware(request *CreateSmartAccessGatewaySoftwareRequest) (response *CreateSmartAccessGatewaySoftwareResponse, err error) {
+	response = CreateCreateSmartAccessGatewaySoftwareResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// CreateSmartAccessGatewaySoftwareWithChan invokes the smartag.CreateSmartAccessGatewaySoftware API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createsmartaccessgatewaysoftware.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateSmartAccessGatewaySoftwareWithChan(request *CreateSmartAccessGatewaySoftwareRequest) (<-chan *CreateSmartAccessGatewaySoftwareResponse, <-chan error) {
+	responseChan := make(chan *CreateSmartAccessGatewaySoftwareResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.CreateSmartAccessGatewaySoftware(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// CreateSmartAccessGatewaySoftwareWithCallback invokes the smartag.CreateSmartAccessGatewaySoftware API asynchronously
+// api document: https://help.aliyun.com/api/smartag/createsmartaccessgatewaysoftware.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) CreateSmartAccessGatewaySoftwareWithCallback(request *CreateSmartAccessGatewaySoftwareRequest, callback func(response *CreateSmartAccessGatewaySoftwareResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *CreateSmartAccessGatewaySoftwareResponse
+		var err error
+		defer close(result)
+		response, err = client.CreateSmartAccessGatewaySoftware(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// CreateSmartAccessGatewaySoftwareRequest is the request struct for api CreateSmartAccessGatewaySoftware
+type CreateSmartAccessGatewaySoftwareRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	Period               requests.Integer `position:"Query" name:"Period"`
+	AutoPay              requests.Boolean `position:"Query" name:"AutoPay"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	UserCount            requests.Integer `position:"Query" name:"UserCount"`
+	ChargeType           string           `position:"Query" name:"ChargeType"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	DataPlan             requests.Integer `position:"Query" name:"DataPlan"`
+}
+
+// CreateSmartAccessGatewaySoftwareResponse is the response struct for api CreateSmartAccessGatewaySoftware
+type CreateSmartAccessGatewaySoftwareResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+	SmartAGId string `json:"SmartAGId" xml:"SmartAGId"`
+	OrderId   string `json:"OrderId" xml:"OrderId"`
+}
+
+// CreateCreateSmartAccessGatewaySoftwareRequest creates a request to invoke CreateSmartAccessGatewaySoftware API
+func CreateCreateSmartAccessGatewaySoftwareRequest() (request *CreateSmartAccessGatewaySoftwareRequest) {
+	request = &CreateSmartAccessGatewaySoftwareRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "CreateSmartAccessGatewaySoftware", "smartag", "openAPI")
+	return
+}
+
+// CreateCreateSmartAccessGatewaySoftwareResponse creates a response to parse from CreateSmartAccessGatewaySoftware response
+func CreateCreateSmartAccessGatewaySoftwareResponse() (response *CreateSmartAccessGatewaySoftwareResponse) {
+	response = &CreateSmartAccessGatewaySoftwareResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 107 - 0
services/smartag/delete_acl.go

@@ -0,0 +1,107 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteACL invokes the smartag.DeleteACL API synchronously
+// api document: https://help.aliyun.com/api/smartag/deleteacl.html
+func (client *Client) DeleteACL(request *DeleteACLRequest) (response *DeleteACLResponse, err error) {
+	response = CreateDeleteACLResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteACLWithChan invokes the smartag.DeleteACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deleteacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteACLWithChan(request *DeleteACLRequest) (<-chan *DeleteACLResponse, <-chan error) {
+	responseChan := make(chan *DeleteACLResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteACL(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteACLWithCallback invokes the smartag.DeleteACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deleteacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteACLWithCallback(request *DeleteACLRequest, callback func(response *DeleteACLResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteACLResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteACL(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteACLRequest is the request struct for api DeleteACL
+type DeleteACLRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DeleteACLResponse is the response struct for api DeleteACL
+type DeleteACLResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteACLRequest creates a request to invoke DeleteACL API
+func CreateDeleteACLRequest() (request *DeleteACLRequest) {
+	request = &DeleteACLRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DeleteACL", "smartag", "openAPI")
+	return
+}
+
+// CreateDeleteACLResponse creates a response to parse from DeleteACL response
+func CreateDeleteACLResponse() (response *DeleteACLResponse) {
+	response = &DeleteACLResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/delete_acl_rule.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteACLRule invokes the smartag.DeleteACLRule API synchronously
+// api document: https://help.aliyun.com/api/smartag/deleteaclrule.html
+func (client *Client) DeleteACLRule(request *DeleteACLRuleRequest) (response *DeleteACLRuleResponse, err error) {
+	response = CreateDeleteACLRuleResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteACLRuleWithChan invokes the smartag.DeleteACLRule API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deleteaclrule.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteACLRuleWithChan(request *DeleteACLRuleRequest) (<-chan *DeleteACLRuleResponse, <-chan error) {
+	responseChan := make(chan *DeleteACLRuleResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteACLRule(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteACLRuleWithCallback invokes the smartag.DeleteACLRule API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deleteaclrule.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteACLRuleWithCallback(request *DeleteACLRuleRequest, callback func(response *DeleteACLRuleResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteACLRuleResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteACLRule(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteACLRuleRequest is the request struct for api DeleteACLRule
+type DeleteACLRuleRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	AcrId                string           `position:"Query" name:"AcrId"`
+}
+
+// DeleteACLRuleResponse is the response struct for api DeleteACLRule
+type DeleteACLRuleResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteACLRuleRequest creates a request to invoke DeleteACLRule API
+func CreateDeleteACLRuleRequest() (request *DeleteACLRuleRequest) {
+	request = &DeleteACLRuleRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DeleteACLRule", "smartag", "openAPI")
+	return
+}
+
+// CreateDeleteACLRuleResponse creates a response to parse from DeleteACLRule response
+func CreateDeleteACLRuleResponse() (response *DeleteACLRuleResponse) {
+	response = &DeleteACLRuleResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 107 - 0
services/smartag/delete_network_optimization.go

@@ -0,0 +1,107 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteNetworkOptimization invokes the smartag.DeleteNetworkOptimization API synchronously
+// api document: https://help.aliyun.com/api/smartag/deletenetworkoptimization.html
+func (client *Client) DeleteNetworkOptimization(request *DeleteNetworkOptimizationRequest) (response *DeleteNetworkOptimizationResponse, err error) {
+	response = CreateDeleteNetworkOptimizationResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteNetworkOptimizationWithChan invokes the smartag.DeleteNetworkOptimization API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deletenetworkoptimization.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteNetworkOptimizationWithChan(request *DeleteNetworkOptimizationRequest) (<-chan *DeleteNetworkOptimizationResponse, <-chan error) {
+	responseChan := make(chan *DeleteNetworkOptimizationResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteNetworkOptimization(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteNetworkOptimizationWithCallback invokes the smartag.DeleteNetworkOptimization API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deletenetworkoptimization.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteNetworkOptimizationWithCallback(request *DeleteNetworkOptimizationRequest, callback func(response *DeleteNetworkOptimizationResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteNetworkOptimizationResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteNetworkOptimization(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteNetworkOptimizationRequest is the request struct for api DeleteNetworkOptimization
+type DeleteNetworkOptimizationRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DeleteNetworkOptimizationResponse is the response struct for api DeleteNetworkOptimization
+type DeleteNetworkOptimizationResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteNetworkOptimizationRequest creates a request to invoke DeleteNetworkOptimization API
+func CreateDeleteNetworkOptimizationRequest() (request *DeleteNetworkOptimizationRequest) {
+	request = &DeleteNetworkOptimizationRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DeleteNetworkOptimization", "smartag", "openAPI")
+	return
+}
+
+// CreateDeleteNetworkOptimizationResponse creates a response to parse from DeleteNetworkOptimization response
+func CreateDeleteNetworkOptimizationResponse() (response *DeleteNetworkOptimizationResponse) {
+	response = &DeleteNetworkOptimizationResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 109 - 0
services/smartag/delete_network_optimization_setting.go

@@ -0,0 +1,109 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteNetworkOptimizationSetting invokes the smartag.DeleteNetworkOptimizationSetting API synchronously
+// api document: https://help.aliyun.com/api/smartag/deletenetworkoptimizationsetting.html
+func (client *Client) DeleteNetworkOptimizationSetting(request *DeleteNetworkOptimizationSettingRequest) (response *DeleteNetworkOptimizationSettingResponse, err error) {
+	response = CreateDeleteNetworkOptimizationSettingResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteNetworkOptimizationSettingWithChan invokes the smartag.DeleteNetworkOptimizationSetting API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deletenetworkoptimizationsetting.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteNetworkOptimizationSettingWithChan(request *DeleteNetworkOptimizationSettingRequest) (<-chan *DeleteNetworkOptimizationSettingResponse, <-chan error) {
+	responseChan := make(chan *DeleteNetworkOptimizationSettingResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteNetworkOptimizationSetting(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteNetworkOptimizationSettingWithCallback invokes the smartag.DeleteNetworkOptimizationSetting API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deletenetworkoptimizationsetting.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteNetworkOptimizationSettingWithCallback(request *DeleteNetworkOptimizationSettingRequest, callback func(response *DeleteNetworkOptimizationSettingResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteNetworkOptimizationSettingResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteNetworkOptimizationSetting(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteNetworkOptimizationSettingRequest is the request struct for api DeleteNetworkOptimizationSetting
+type DeleteNetworkOptimizationSettingRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	Domain               string           `position:"Query" name:"Domain"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	Type                 string           `position:"Query" name:"Type"`
+}
+
+// DeleteNetworkOptimizationSettingResponse is the response struct for api DeleteNetworkOptimizationSetting
+type DeleteNetworkOptimizationSettingResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteNetworkOptimizationSettingRequest creates a request to invoke DeleteNetworkOptimizationSetting API
+func CreateDeleteNetworkOptimizationSettingRequest() (request *DeleteNetworkOptimizationSettingRequest) {
+	request = &DeleteNetworkOptimizationSettingRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DeleteNetworkOptimizationSetting", "smartag", "openAPI")
+	return
+}
+
+// CreateDeleteNetworkOptimizationSettingResponse creates a response to parse from DeleteNetworkOptimizationSetting response
+func CreateDeleteNetworkOptimizationSettingResponse() (response *DeleteNetworkOptimizationSettingResponse) {
+	response = &DeleteNetworkOptimizationSettingResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 1 - 0
services/smartag/delete_sag_link_level_ha.go

@@ -78,6 +78,7 @@ type DeleteSAGLinkLevelHaRequest struct {
 	*requests.RpcRequest
 	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
 	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	HaType               string           `position:"Query" name:"HaType"`
 	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
 	SmartAGId            string           `position:"Query" name:"SmartAGId"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`

+ 108 - 0
services/smartag/delete_smart_access_gateway_client_user.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DeleteSmartAccessGatewayClientUser invokes the smartag.DeleteSmartAccessGatewayClientUser API synchronously
+// api document: https://help.aliyun.com/api/smartag/deletesmartaccessgatewayclientuser.html
+func (client *Client) DeleteSmartAccessGatewayClientUser(request *DeleteSmartAccessGatewayClientUserRequest) (response *DeleteSmartAccessGatewayClientUserResponse, err error) {
+	response = CreateDeleteSmartAccessGatewayClientUserResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DeleteSmartAccessGatewayClientUserWithChan invokes the smartag.DeleteSmartAccessGatewayClientUser API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deletesmartaccessgatewayclientuser.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteSmartAccessGatewayClientUserWithChan(request *DeleteSmartAccessGatewayClientUserRequest) (<-chan *DeleteSmartAccessGatewayClientUserResponse, <-chan error) {
+	responseChan := make(chan *DeleteSmartAccessGatewayClientUserResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DeleteSmartAccessGatewayClientUser(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DeleteSmartAccessGatewayClientUserWithCallback invokes the smartag.DeleteSmartAccessGatewayClientUser API asynchronously
+// api document: https://help.aliyun.com/api/smartag/deletesmartaccessgatewayclientuser.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DeleteSmartAccessGatewayClientUserWithCallback(request *DeleteSmartAccessGatewayClientUserRequest, callback func(response *DeleteSmartAccessGatewayClientUserResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DeleteSmartAccessGatewayClientUserResponse
+		var err error
+		defer close(result)
+		response, err = client.DeleteSmartAccessGatewayClientUser(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DeleteSmartAccessGatewayClientUserRequest is the request struct for api DeleteSmartAccessGatewayClientUser
+type DeleteSmartAccessGatewayClientUserRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	UserName             string           `position:"Query" name:"UserName"`
+}
+
+// DeleteSmartAccessGatewayClientUserResponse is the response struct for api DeleteSmartAccessGatewayClientUser
+type DeleteSmartAccessGatewayClientUserResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDeleteSmartAccessGatewayClientUserRequest creates a request to invoke DeleteSmartAccessGatewayClientUser API
+func CreateDeleteSmartAccessGatewayClientUserRequest() (request *DeleteSmartAccessGatewayClientUserRequest) {
+	request = &DeleteSmartAccessGatewayClientUserRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DeleteSmartAccessGatewayClientUser", "smartag", "openAPI")
+	return
+}
+
+// CreateDeleteSmartAccessGatewayClientUserResponse creates a response to parse from DeleteSmartAccessGatewayClientUser response
+func CreateDeleteSmartAccessGatewayClientUserResponse() (response *DeleteSmartAccessGatewayClientUserResponse) {
+	response = &DeleteSmartAccessGatewayClientUserResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 114 - 0
services/smartag/describe_ac_ls.go

@@ -0,0 +1,114 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeACLs invokes the smartag.DescribeACLs API synchronously
+// api document: https://help.aliyun.com/api/smartag/describeacls.html
+func (client *Client) DescribeACLs(request *DescribeACLsRequest) (response *DescribeACLsResponse, err error) {
+	response = CreateDescribeACLsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeACLsWithChan invokes the smartag.DescribeACLs API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeacls.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeACLsWithChan(request *DescribeACLsRequest) (<-chan *DescribeACLsResponse, <-chan error) {
+	responseChan := make(chan *DescribeACLsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeACLs(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeACLsWithCallback invokes the smartag.DescribeACLs API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeacls.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeACLsWithCallback(request *DescribeACLsRequest, callback func(response *DescribeACLsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeACLsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeACLs(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeACLsRequest is the request struct for api DescribeACLs
+type DescribeACLsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	AclIds               string           `position:"Query" name:"AclIds"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	Name                 string           `position:"Query" name:"Name"`
+	PageSize             requests.Integer `position:"Query" name:"PageSize"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	PageNumber           requests.Integer `position:"Query" name:"PageNumber"`
+}
+
+// DescribeACLsResponse is the response struct for api DescribeACLs
+type DescribeACLsResponse struct {
+	*responses.BaseResponse
+	RequestId  string `json:"RequestId" xml:"RequestId"`
+	TotalCount int    `json:"TotalCount" xml:"TotalCount"`
+	PageNumber int    `json:"PageNumber" xml:"PageNumber"`
+	PageSize   int    `json:"PageSize" xml:"PageSize"`
+	Acls       Acls   `json:"Acls" xml:"Acls"`
+}
+
+// CreateDescribeACLsRequest creates a request to invoke DescribeACLs API
+func CreateDescribeACLsRequest() (request *DescribeACLsRequest) {
+	request = &DescribeACLsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeACLs", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeACLsResponse creates a response to parse from DescribeACLs response
+func CreateDescribeACLsResponse() (response *DescribeACLsResponse) {
+	response = &DescribeACLsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 115 - 0
services/smartag/describe_acl_attribute.go

@@ -0,0 +1,115 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeACLAttribute invokes the smartag.DescribeACLAttribute API synchronously
+// api document: https://help.aliyun.com/api/smartag/describeaclattribute.html
+func (client *Client) DescribeACLAttribute(request *DescribeACLAttributeRequest) (response *DescribeACLAttributeResponse, err error) {
+	response = CreateDescribeACLAttributeResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeACLAttributeWithChan invokes the smartag.DescribeACLAttribute API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeaclattribute.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeACLAttributeWithChan(request *DescribeACLAttributeRequest) (<-chan *DescribeACLAttributeResponse, <-chan error) {
+	responseChan := make(chan *DescribeACLAttributeResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeACLAttribute(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeACLAttributeWithCallback invokes the smartag.DescribeACLAttribute API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeaclattribute.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeACLAttributeWithCallback(request *DescribeACLAttributeRequest, callback func(response *DescribeACLAttributeResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeACLAttributeResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeACLAttribute(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeACLAttributeRequest is the request struct for api DescribeACLAttribute
+type DescribeACLAttributeRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	PageSize             requests.Integer `position:"Query" name:"PageSize"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	PageNumber           requests.Integer `position:"Query" name:"PageNumber"`
+	Direction            string           `position:"Query" name:"Direction"`
+	Order                string           `position:"Query" name:"Order"`
+}
+
+// DescribeACLAttributeResponse is the response struct for api DescribeACLAttribute
+type DescribeACLAttributeResponse struct {
+	*responses.BaseResponse
+	RequestId  string `json:"RequestId" xml:"RequestId"`
+	TotalCount int    `json:"TotalCount" xml:"TotalCount"`
+	PageNumber int    `json:"PageNumber" xml:"PageNumber"`
+	PageSize   int    `json:"PageSize" xml:"PageSize"`
+	Acrs       Acrs   `json:"Acrs" xml:"Acrs"`
+}
+
+// CreateDescribeACLAttributeRequest creates a request to invoke DescribeACLAttribute API
+func CreateDescribeACLAttributeRequest() (request *DescribeACLAttributeRequest) {
+	request = &DescribeACLAttributeRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeACLAttribute", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeACLAttributeResponse creates a response to parse from DescribeACLAttribute response
+func CreateDescribeACLAttributeResponse() (response *DescribeACLAttributeResponse) {
+	response = &DescribeACLAttributeResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 15 - 8
services/smartag/describe_cloud_connect_networks.go

@@ -76,14 +76,21 @@ func (client *Client) DescribeCloudConnectNetworksWithCallback(request *Describe
 // DescribeCloudConnectNetworksRequest is the request struct for api DescribeCloudConnectNetworks
 type DescribeCloudConnectNetworksRequest struct {
 	*requests.RpcRequest
-	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
-	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
-	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
-	Name                 string           `position:"Query" name:"Name"`
-	CcnId                string           `position:"Query" name:"CcnId"`
-	PageSize             string           `position:"Query" name:"PageSize"`
-	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
-	PageNumber           string           `position:"Query" name:"PageNumber"`
+	ResourceOwnerId      requests.Integer                   `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string                             `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string                             `position:"Query" name:"OwnerAccount"`
+	Name                 string                             `position:"Query" name:"Name"`
+	CcnId                string                             `position:"Query" name:"CcnId"`
+	PageSize             string                             `position:"Query" name:"PageSize"`
+	Tag                  *[]DescribeCloudConnectNetworksTag `position:"Query" name:"Tag"  type:"Repeated"`
+	OwnerId              requests.Integer                   `position:"Query" name:"OwnerId"`
+	PageNumber           string                             `position:"Query" name:"PageNumber"`
+}
+
+// DescribeCloudConnectNetworksTag is a repeated param struct in DescribeCloudConnectNetworksRequest
+type DescribeCloudConnectNetworksTag struct {
+	Value string `name:"Value"`
+	Key   string `name:"Key"`
 }
 
 // DescribeCloudConnectNetworksResponse is the response struct for api DescribeCloudConnectNetworks

+ 113 - 0
services/smartag/describe_network_optimization_sags.go

@@ -0,0 +1,113 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeNetworkOptimizationSags invokes the smartag.DescribeNetworkOptimizationSags API synchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizationsags.html
+func (client *Client) DescribeNetworkOptimizationSags(request *DescribeNetworkOptimizationSagsRequest) (response *DescribeNetworkOptimizationSagsResponse, err error) {
+	response = CreateDescribeNetworkOptimizationSagsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeNetworkOptimizationSagsWithChan invokes the smartag.DescribeNetworkOptimizationSags API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizationsags.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNetworkOptimizationSagsWithChan(request *DescribeNetworkOptimizationSagsRequest) (<-chan *DescribeNetworkOptimizationSagsResponse, <-chan error) {
+	responseChan := make(chan *DescribeNetworkOptimizationSagsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeNetworkOptimizationSags(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeNetworkOptimizationSagsWithCallback invokes the smartag.DescribeNetworkOptimizationSags API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizationsags.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNetworkOptimizationSagsWithCallback(request *DescribeNetworkOptimizationSagsRequest, callback func(response *DescribeNetworkOptimizationSagsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeNetworkOptimizationSagsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeNetworkOptimizationSags(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeNetworkOptimizationSagsRequest is the request struct for api DescribeNetworkOptimizationSags
+type DescribeNetworkOptimizationSagsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	PageNo               requests.Integer `position:"Query" name:"PageNo"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	PageSize             requests.Integer `position:"Query" name:"PageSize"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DescribeNetworkOptimizationSagsResponse is the response struct for api DescribeNetworkOptimizationSags
+type DescribeNetworkOptimizationSagsResponse struct {
+	*responses.BaseResponse
+	RequestId           string                                               `json:"RequestId" xml:"RequestId"`
+	TotalCount          int                                                  `json:"TotalCount" xml:"TotalCount"`
+	PageNo              int                                                  `json:"PageNo" xml:"PageNo"`
+	PageSize            int                                                  `json:"PageSize" xml:"PageSize"`
+	SmartAccessGateways SmartAccessGatewaysInDescribeNetworkOptimizationSags `json:"SmartAccessGateways" xml:"SmartAccessGateways"`
+}
+
+// CreateDescribeNetworkOptimizationSagsRequest creates a request to invoke DescribeNetworkOptimizationSags API
+func CreateDescribeNetworkOptimizationSagsRequest() (request *DescribeNetworkOptimizationSagsRequest) {
+	request = &DescribeNetworkOptimizationSagsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeNetworkOptimizationSags", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeNetworkOptimizationSagsResponse creates a response to parse from DescribeNetworkOptimizationSags response
+func CreateDescribeNetworkOptimizationSagsResponse() (response *DescribeNetworkOptimizationSagsResponse) {
+	response = &DescribeNetworkOptimizationSagsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 113 - 0
services/smartag/describe_network_optimization_settings.go

@@ -0,0 +1,113 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeNetworkOptimizationSettings invokes the smartag.DescribeNetworkOptimizationSettings API synchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizationsettings.html
+func (client *Client) DescribeNetworkOptimizationSettings(request *DescribeNetworkOptimizationSettingsRequest) (response *DescribeNetworkOptimizationSettingsResponse, err error) {
+	response = CreateDescribeNetworkOptimizationSettingsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeNetworkOptimizationSettingsWithChan invokes the smartag.DescribeNetworkOptimizationSettings API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizationsettings.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNetworkOptimizationSettingsWithChan(request *DescribeNetworkOptimizationSettingsRequest) (<-chan *DescribeNetworkOptimizationSettingsResponse, <-chan error) {
+	responseChan := make(chan *DescribeNetworkOptimizationSettingsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeNetworkOptimizationSettings(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeNetworkOptimizationSettingsWithCallback invokes the smartag.DescribeNetworkOptimizationSettings API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizationsettings.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNetworkOptimizationSettingsWithCallback(request *DescribeNetworkOptimizationSettingsRequest, callback func(response *DescribeNetworkOptimizationSettingsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeNetworkOptimizationSettingsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeNetworkOptimizationSettings(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeNetworkOptimizationSettingsRequest is the request struct for api DescribeNetworkOptimizationSettings
+type DescribeNetworkOptimizationSettingsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	PageNo               requests.Integer `position:"Query" name:"PageNo"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	PageSize             requests.Integer `position:"Query" name:"PageSize"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DescribeNetworkOptimizationSettingsResponse is the response struct for api DescribeNetworkOptimizationSettings
+type DescribeNetworkOptimizationSettingsResponse struct {
+	*responses.BaseResponse
+	RequestId  string   `json:"RequestId" xml:"RequestId"`
+	TotalCount int      `json:"TotalCount" xml:"TotalCount"`
+	PageNo     int      `json:"PageNo" xml:"PageNo"`
+	PageSize   int      `json:"PageSize" xml:"PageSize"`
+	Settings   Settings `json:"Settings" xml:"Settings"`
+}
+
+// CreateDescribeNetworkOptimizationSettingsRequest creates a request to invoke DescribeNetworkOptimizationSettings API
+func CreateDescribeNetworkOptimizationSettingsRequest() (request *DescribeNetworkOptimizationSettingsRequest) {
+	request = &DescribeNetworkOptimizationSettingsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeNetworkOptimizationSettings", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeNetworkOptimizationSettingsResponse creates a response to parse from DescribeNetworkOptimizationSettings response
+func CreateDescribeNetworkOptimizationSettingsResponse() (response *DescribeNetworkOptimizationSettingsResponse) {
+	response = &DescribeNetworkOptimizationSettingsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 115 - 0
services/smartag/describe_network_optimizations.go

@@ -0,0 +1,115 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeNetworkOptimizations invokes the smartag.DescribeNetworkOptimizations API synchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizations.html
+func (client *Client) DescribeNetworkOptimizations(request *DescribeNetworkOptimizationsRequest) (response *DescribeNetworkOptimizationsResponse, err error) {
+	response = CreateDescribeNetworkOptimizationsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeNetworkOptimizationsWithChan invokes the smartag.DescribeNetworkOptimizations API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizations.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNetworkOptimizationsWithChan(request *DescribeNetworkOptimizationsRequest) (<-chan *DescribeNetworkOptimizationsResponse, <-chan error) {
+	responseChan := make(chan *DescribeNetworkOptimizationsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeNetworkOptimizations(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeNetworkOptimizationsWithCallback invokes the smartag.DescribeNetworkOptimizations API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describenetworkoptimizations.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeNetworkOptimizationsWithCallback(request *DescribeNetworkOptimizationsRequest, callback func(response *DescribeNetworkOptimizationsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeNetworkOptimizationsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeNetworkOptimizations(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeNetworkOptimizationsRequest is the request struct for api DescribeNetworkOptimizations
+type DescribeNetworkOptimizationsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	PageNo               requests.Integer `position:"Query" name:"PageNo"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	CcnId                string           `position:"Query" name:"CcnId"`
+	Name                 string           `position:"Query" name:"Name"`
+	PageSize             requests.Integer `position:"Query" name:"PageSize"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DescribeNetworkOptimizationsResponse is the response struct for api DescribeNetworkOptimizations
+type DescribeNetworkOptimizationsResponse struct {
+	*responses.BaseResponse
+	RequestId            string               `json:"RequestId" xml:"RequestId"`
+	TotalCount           int                  `json:"TotalCount" xml:"TotalCount"`
+	PageNo               int                  `json:"PageNo" xml:"PageNo"`
+	PageSize             int                  `json:"PageSize" xml:"PageSize"`
+	NetworkOptimizations NetworkOptimizations `json:"NetworkOptimizations" xml:"NetworkOptimizations"`
+}
+
+// CreateDescribeNetworkOptimizationsRequest creates a request to invoke DescribeNetworkOptimizations API
+func CreateDescribeNetworkOptimizationsRequest() (request *DescribeNetworkOptimizationsRequest) {
+	request = &DescribeNetworkOptimizationsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeNetworkOptimizations", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeNetworkOptimizationsResponse creates a response to parse from DescribeNetworkOptimizations response
+func CreateDescribeNetworkOptimizationsResponse() (response *DescribeNetworkOptimizationsResponse) {
+	response = &DescribeNetworkOptimizationsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/describe_sag_online_client_statistics.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeSagOnlineClientStatistics invokes the smartag.DescribeSagOnlineClientStatistics API synchronously
+// api document: https://help.aliyun.com/api/smartag/describesagonlineclientstatistics.html
+func (client *Client) DescribeSagOnlineClientStatistics(request *DescribeSagOnlineClientStatisticsRequest) (response *DescribeSagOnlineClientStatisticsResponse, err error) {
+	response = CreateDescribeSagOnlineClientStatisticsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeSagOnlineClientStatisticsWithChan invokes the smartag.DescribeSagOnlineClientStatistics API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describesagonlineclientstatistics.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeSagOnlineClientStatisticsWithChan(request *DescribeSagOnlineClientStatisticsRequest) (<-chan *DescribeSagOnlineClientStatisticsResponse, <-chan error) {
+	responseChan := make(chan *DescribeSagOnlineClientStatisticsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeSagOnlineClientStatistics(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeSagOnlineClientStatisticsWithCallback invokes the smartag.DescribeSagOnlineClientStatistics API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describesagonlineclientstatistics.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeSagOnlineClientStatisticsWithCallback(request *DescribeSagOnlineClientStatisticsRequest, callback func(response *DescribeSagOnlineClientStatisticsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeSagOnlineClientStatisticsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeSagOnlineClientStatistics(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeSagOnlineClientStatisticsRequest is the request struct for api DescribeSagOnlineClientStatistics
+type DescribeSagOnlineClientStatisticsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGIds           *[]string        `position:"Query" name:"SmartAGIds"  type:"Repeated"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DescribeSagOnlineClientStatisticsResponse is the response struct for api DescribeSagOnlineClientStatistics
+type DescribeSagOnlineClientStatisticsResponse struct {
+	*responses.BaseResponse
+	RequestId     string                                           `json:"RequestId" xml:"RequestId"`
+	SagStatistics SagStatisticsInDescribeSagOnlineClientStatistics `json:"SagStatistics" xml:"SagStatistics"`
+}
+
+// CreateDescribeSagOnlineClientStatisticsRequest creates a request to invoke DescribeSagOnlineClientStatistics API
+func CreateDescribeSagOnlineClientStatisticsRequest() (request *DescribeSagOnlineClientStatisticsRequest) {
+	request = &DescribeSagOnlineClientStatisticsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeSagOnlineClientStatistics", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeSagOnlineClientStatisticsResponse creates a response to parse from DescribeSagOnlineClientStatistics response
+func CreateDescribeSagOnlineClientStatisticsResponse() (response *DescribeSagOnlineClientStatisticsResponse) {
+	response = &DescribeSagOnlineClientStatisticsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 109 - 0
services/smartag/describe_sag_routeable_address.go

@@ -0,0 +1,109 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeSagRouteableAddress invokes the smartag.DescribeSagRouteableAddress API synchronously
+// api document: https://help.aliyun.com/api/smartag/describesagrouteableaddress.html
+func (client *Client) DescribeSagRouteableAddress(request *DescribeSagRouteableAddressRequest) (response *DescribeSagRouteableAddressResponse, err error) {
+	response = CreateDescribeSagRouteableAddressResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeSagRouteableAddressWithChan invokes the smartag.DescribeSagRouteableAddress API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describesagrouteableaddress.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeSagRouteableAddressWithChan(request *DescribeSagRouteableAddressRequest) (<-chan *DescribeSagRouteableAddressResponse, <-chan error) {
+	responseChan := make(chan *DescribeSagRouteableAddressResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeSagRouteableAddress(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeSagRouteableAddressWithCallback invokes the smartag.DescribeSagRouteableAddress API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describesagrouteableaddress.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeSagRouteableAddressWithCallback(request *DescribeSagRouteableAddressRequest, callback func(response *DescribeSagRouteableAddressResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeSagRouteableAddressResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeSagRouteableAddress(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeSagRouteableAddressRequest is the request struct for api DescribeSagRouteableAddress
+type DescribeSagRouteableAddressRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	SagId                string           `position:"Query" name:"SagId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DescribeSagRouteableAddressResponse is the response struct for api DescribeSagRouteableAddress
+type DescribeSagRouteableAddressResponse struct {
+	*responses.BaseResponse
+	RequestId        string `json:"RequestId" xml:"RequestId"`
+	RouteableAddress string `json:"RouteableAddress" xml:"RouteableAddress"`
+	Origin           string `json:"Origin" xml:"Origin"`
+}
+
+// CreateDescribeSagRouteableAddressRequest creates a request to invoke DescribeSagRouteableAddress API
+func CreateDescribeSagRouteableAddressRequest() (request *DescribeSagRouteableAddressRequest) {
+	request = &DescribeSagRouteableAddressRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeSagRouteableAddress", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeSagRouteableAddressResponse creates a response to parse from DescribeSagRouteableAddress response
+func CreateDescribeSagRouteableAddressResponse() (response *DescribeSagRouteableAddressResponse) {
+	response = &DescribeSagRouteableAddressResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 114 - 0
services/smartag/describe_smart_access_gateway_client_users.go

@@ -0,0 +1,114 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeSmartAccessGatewayClientUsers invokes the smartag.DescribeSmartAccessGatewayClientUsers API synchronously
+// api document: https://help.aliyun.com/api/smartag/describesmartaccessgatewayclientusers.html
+func (client *Client) DescribeSmartAccessGatewayClientUsers(request *DescribeSmartAccessGatewayClientUsersRequest) (response *DescribeSmartAccessGatewayClientUsersResponse, err error) {
+	response = CreateDescribeSmartAccessGatewayClientUsersResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeSmartAccessGatewayClientUsersWithChan invokes the smartag.DescribeSmartAccessGatewayClientUsers API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describesmartaccessgatewayclientusers.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeSmartAccessGatewayClientUsersWithChan(request *DescribeSmartAccessGatewayClientUsersRequest) (<-chan *DescribeSmartAccessGatewayClientUsersResponse, <-chan error) {
+	responseChan := make(chan *DescribeSmartAccessGatewayClientUsersResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeSmartAccessGatewayClientUsers(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeSmartAccessGatewayClientUsersWithCallback invokes the smartag.DescribeSmartAccessGatewayClientUsers API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describesmartaccessgatewayclientusers.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeSmartAccessGatewayClientUsersWithCallback(request *DescribeSmartAccessGatewayClientUsersRequest, callback func(response *DescribeSmartAccessGatewayClientUsersResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeSmartAccessGatewayClientUsersResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeSmartAccessGatewayClientUsers(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeSmartAccessGatewayClientUsersRequest is the request struct for api DescribeSmartAccessGatewayClientUsers
+type DescribeSmartAccessGatewayClientUsersRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	PageNo               requests.Integer `position:"Query" name:"PageNo"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	PageSize             requests.Integer `position:"Query" name:"PageSize"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	UserName             string           `position:"Query" name:"UserName"`
+}
+
+// DescribeSmartAccessGatewayClientUsersResponse is the response struct for api DescribeSmartAccessGatewayClientUsers
+type DescribeSmartAccessGatewayClientUsersResponse struct {
+	*responses.BaseResponse
+	RequestId  string                                       `json:"RequestId" xml:"RequestId"`
+	TotalCount int                                          `json:"TotalCount" xml:"TotalCount"`
+	PageNo     int                                          `json:"PageNo" xml:"PageNo"`
+	PageSize   int                                          `json:"PageSize" xml:"PageSize"`
+	Users      UsersInDescribeSmartAccessGatewayClientUsers `json:"Users" xml:"Users"`
+}
+
+// CreateDescribeSmartAccessGatewayClientUsersRequest creates a request to invoke DescribeSmartAccessGatewayClientUsers API
+func CreateDescribeSmartAccessGatewayClientUsersRequest() (request *DescribeSmartAccessGatewayClientUsersRequest) {
+	request = &DescribeSmartAccessGatewayClientUsersRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeSmartAccessGatewayClientUsers", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeSmartAccessGatewayClientUsersResponse creates a response to parse from DescribeSmartAccessGatewayClientUsers response
+func CreateDescribeSmartAccessGatewayClientUsersResponse() (response *DescribeSmartAccessGatewayClientUsersResponse) {
+	response = &DescribeSmartAccessGatewayClientUsersResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 7 - 12
services/smartag/describe_smart_access_gateway_ha.go

@@ -86,18 +86,13 @@ type DescribeSmartAccessGatewayHaRequest struct {
 // DescribeSmartAccessGatewayHaResponse is the response struct for api DescribeSmartAccessGatewayHa
 type DescribeSmartAccessGatewayHaResponse struct {
 	*responses.BaseResponse
-	RequestId              string `json:"RequestId" xml:"RequestId"`
-	DeviceLevelBackupState string `json:"DeviceLevelBackupState" xml:"DeviceLevelBackupState"`
-	DeviceLevelBackupType  string `json:"DeviceLevelBackupType" xml:"DeviceLevelBackupType"`
-	MainDeviceId           string `json:"MainDeviceId" xml:"MainDeviceId"`
-	BackupDeviceId         string `json:"BackupDeviceId" xml:"BackupDeviceId"`
-	LinkLevelBackupState   string `json:"LinkLevelBackupState" xml:"LinkLevelBackupState"`
-	LinkLevelBackupType    string `json:"LinkLevelBackupType" xml:"LinkLevelBackupType"`
-	MainLinkId             string `json:"MainLinkId" xml:"MainLinkId"`
-	BackupLinkId           string `json:"BackupLinkId" xml:"BackupLinkId"`
-	SmartAGId              string `json:"SmartAGId" xml:"SmartAGId"`
-	MainLinkState          string `json:"MainLinkState" xml:"MainLinkState"`
-	BackupLinkState        string `json:"BackupLinkState" xml:"BackupLinkState"`
+	RequestId              string             `json:"RequestId" xml:"RequestId"`
+	DeviceLevelBackupState string             `json:"DeviceLevelBackupState" xml:"DeviceLevelBackupState"`
+	DeviceLevelBackupType  string             `json:"DeviceLevelBackupType" xml:"DeviceLevelBackupType"`
+	MainDeviceId           string             `json:"MainDeviceId" xml:"MainDeviceId"`
+	BackupDeviceId         string             `json:"BackupDeviceId" xml:"BackupDeviceId"`
+	SmartAGId              string             `json:"SmartAGId" xml:"SmartAGId"`
+	LinkBackupInfoList     LinkBackupInfoList `json:"LinkBackupInfoList" xml:"LinkBackupInfoList"`
 }
 
 // CreateDescribeSmartAccessGatewayHaRequest creates a request to invoke DescribeSmartAccessGatewayHa API

+ 8 - 5
services/smartag/describe_smart_access_gateways.go

@@ -79,24 +79,27 @@ type DescribeSmartAccessGatewaysRequest struct {
 	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
 	SerialNumber         string           `position:"Query" name:"SerialNumber"`
 	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	AclIds               string           `position:"Query" name:"AclIds"`
 	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
 	AssociatedCcnId      string           `position:"Query" name:"AssociatedCcnId"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	UnboundAclIds        string           `position:"Query" name:"UnboundAclIds"`
 	PageNumber           string           `position:"Query" name:"PageNumber"`
 	Name                 string           `position:"Query" name:"Name"`
 	PageSize             string           `position:"Query" name:"PageSize"`
 	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	InstanceType         string           `position:"Query" name:"InstanceType"`
 	Status               string           `position:"Query" name:"Status"`
 }
 
 // DescribeSmartAccessGatewaysResponse is the response struct for api DescribeSmartAccessGateways
 type DescribeSmartAccessGatewaysResponse struct {
 	*responses.BaseResponse
-	RequestId           string              `json:"RequestId" xml:"RequestId"`
-	TotalCount          int                 `json:"TotalCount" xml:"TotalCount"`
-	PageNumber          int                 `json:"PageNumber" xml:"PageNumber"`
-	PageSize            int                 `json:"PageSize" xml:"PageSize"`
-	SmartAccessGateways SmartAccessGateways `json:"SmartAccessGateways" xml:"SmartAccessGateways"`
+	RequestId           string                                           `json:"RequestId" xml:"RequestId"`
+	TotalCount          int                                              `json:"TotalCount" xml:"TotalCount"`
+	PageNumber          int                                              `json:"PageNumber" xml:"PageNumber"`
+	PageSize            int                                              `json:"PageSize" xml:"PageSize"`
+	SmartAccessGateways SmartAccessGatewaysInDescribeSmartAccessGateways `json:"SmartAccessGateways" xml:"SmartAccessGateways"`
 }
 
 // CreateDescribeSmartAccessGatewaysRequest creates a request to invoke DescribeSmartAccessGateways API

+ 110 - 0
services/smartag/describe_user_flow_statistics.go

@@ -0,0 +1,110 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeUserFlowStatistics invokes the smartag.DescribeUserFlowStatistics API synchronously
+// api document: https://help.aliyun.com/api/smartag/describeuserflowstatistics.html
+func (client *Client) DescribeUserFlowStatistics(request *DescribeUserFlowStatisticsRequest) (response *DescribeUserFlowStatisticsResponse, err error) {
+	response = CreateDescribeUserFlowStatisticsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeUserFlowStatisticsWithChan invokes the smartag.DescribeUserFlowStatistics API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeuserflowstatistics.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeUserFlowStatisticsWithChan(request *DescribeUserFlowStatisticsRequest) (<-chan *DescribeUserFlowStatisticsResponse, <-chan error) {
+	responseChan := make(chan *DescribeUserFlowStatisticsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeUserFlowStatistics(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeUserFlowStatisticsWithCallback invokes the smartag.DescribeUserFlowStatistics API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeuserflowstatistics.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeUserFlowStatisticsWithCallback(request *DescribeUserFlowStatisticsRequest, callback func(response *DescribeUserFlowStatisticsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeUserFlowStatisticsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeUserFlowStatistics(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeUserFlowStatisticsRequest is the request struct for api DescribeUserFlowStatistics
+type DescribeUserFlowStatisticsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	StatisticsDate       string           `position:"Query" name:"StatisticsDate"`
+	UserNames            *[]string        `position:"Query" name:"UserNames"  type:"Repeated"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DescribeUserFlowStatisticsResponse is the response struct for api DescribeUserFlowStatistics
+type DescribeUserFlowStatisticsResponse struct {
+	*responses.BaseResponse
+	RequestId     string                                    `json:"RequestId" xml:"RequestId"`
+	SagStatistics SagStatisticsInDescribeUserFlowStatistics `json:"SagStatistics" xml:"SagStatistics"`
+}
+
+// CreateDescribeUserFlowStatisticsRequest creates a request to invoke DescribeUserFlowStatistics API
+func CreateDescribeUserFlowStatisticsRequest() (request *DescribeUserFlowStatisticsRequest) {
+	request = &DescribeUserFlowStatisticsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeUserFlowStatistics", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeUserFlowStatisticsResponse creates a response to parse from DescribeUserFlowStatistics response
+func CreateDescribeUserFlowStatisticsResponse() (response *DescribeUserFlowStatisticsResponse) {
+	response = &DescribeUserFlowStatisticsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 109 - 0
services/smartag/describe_user_online_client_statistics.go

@@ -0,0 +1,109 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeUserOnlineClientStatistics invokes the smartag.DescribeUserOnlineClientStatistics API synchronously
+// api document: https://help.aliyun.com/api/smartag/describeuseronlineclientstatistics.html
+func (client *Client) DescribeUserOnlineClientStatistics(request *DescribeUserOnlineClientStatisticsRequest) (response *DescribeUserOnlineClientStatisticsResponse, err error) {
+	response = CreateDescribeUserOnlineClientStatisticsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeUserOnlineClientStatisticsWithChan invokes the smartag.DescribeUserOnlineClientStatistics API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeuseronlineclientstatistics.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeUserOnlineClientStatisticsWithChan(request *DescribeUserOnlineClientStatisticsRequest) (<-chan *DescribeUserOnlineClientStatisticsResponse, <-chan error) {
+	responseChan := make(chan *DescribeUserOnlineClientStatisticsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeUserOnlineClientStatistics(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeUserOnlineClientStatisticsWithCallback invokes the smartag.DescribeUserOnlineClientStatistics API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeuseronlineclientstatistics.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeUserOnlineClientStatisticsWithCallback(request *DescribeUserOnlineClientStatisticsRequest, callback func(response *DescribeUserOnlineClientStatisticsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeUserOnlineClientStatisticsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeUserOnlineClientStatistics(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeUserOnlineClientStatisticsRequest is the request struct for api DescribeUserOnlineClientStatistics
+type DescribeUserOnlineClientStatisticsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	UserNames            *[]string        `position:"Query" name:"UserNames"  type:"Repeated"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DescribeUserOnlineClientStatisticsResponse is the response struct for api DescribeUserOnlineClientStatistics
+type DescribeUserOnlineClientStatisticsResponse struct {
+	*responses.BaseResponse
+	RequestId      string         `json:"RequestId" xml:"RequestId"`
+	UserStatistics UserStatistics `json:"UserStatistics" xml:"UserStatistics"`
+}
+
+// CreateDescribeUserOnlineClientStatisticsRequest creates a request to invoke DescribeUserOnlineClientStatistics API
+func CreateDescribeUserOnlineClientStatisticsRequest() (request *DescribeUserOnlineClientStatisticsRequest) {
+	request = &DescribeUserOnlineClientStatisticsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeUserOnlineClientStatistics", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeUserOnlineClientStatisticsResponse creates a response to parse from DescribeUserOnlineClientStatistics response
+func CreateDescribeUserOnlineClientStatisticsResponse() (response *DescribeUserOnlineClientStatisticsResponse) {
+	response = &DescribeUserOnlineClientStatisticsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 109 - 0
services/smartag/describe_user_online_clients.go

@@ -0,0 +1,109 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DescribeUserOnlineClients invokes the smartag.DescribeUserOnlineClients API synchronously
+// api document: https://help.aliyun.com/api/smartag/describeuseronlineclients.html
+func (client *Client) DescribeUserOnlineClients(request *DescribeUserOnlineClientsRequest) (response *DescribeUserOnlineClientsResponse, err error) {
+	response = CreateDescribeUserOnlineClientsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DescribeUserOnlineClientsWithChan invokes the smartag.DescribeUserOnlineClients API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeuseronlineclients.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeUserOnlineClientsWithChan(request *DescribeUserOnlineClientsRequest) (<-chan *DescribeUserOnlineClientsResponse, <-chan error) {
+	responseChan := make(chan *DescribeUserOnlineClientsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DescribeUserOnlineClients(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DescribeUserOnlineClientsWithCallback invokes the smartag.DescribeUserOnlineClients API asynchronously
+// api document: https://help.aliyun.com/api/smartag/describeuseronlineclients.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DescribeUserOnlineClientsWithCallback(request *DescribeUserOnlineClientsRequest, callback func(response *DescribeUserOnlineClientsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DescribeUserOnlineClientsResponse
+		var err error
+		defer close(result)
+		response, err = client.DescribeUserOnlineClients(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DescribeUserOnlineClientsRequest is the request struct for api DescribeUserOnlineClients
+type DescribeUserOnlineClientsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	UserName             string           `position:"Query" name:"UserName"`
+}
+
+// DescribeUserOnlineClientsResponse is the response struct for api DescribeUserOnlineClients
+type DescribeUserOnlineClientsResponse struct {
+	*responses.BaseResponse
+	RequestId string                           `json:"RequestId" xml:"RequestId"`
+	Users     UsersInDescribeUserOnlineClients `json:"Users" xml:"Users"`
+}
+
+// CreateDescribeUserOnlineClientsRequest creates a request to invoke DescribeUserOnlineClients API
+func CreateDescribeUserOnlineClientsRequest() (request *DescribeUserOnlineClientsRequest) {
+	request = &DescribeUserOnlineClientsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DescribeUserOnlineClients", "smartag", "openAPI")
+	return
+}
+
+// CreateDescribeUserOnlineClientsResponse creates a response to parse from DescribeUserOnlineClients response
+func CreateDescribeUserOnlineClientsResponse() (response *DescribeUserOnlineClientsResponse) {
+	response = &DescribeUserOnlineClientsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/detach_network_optimization_sags.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DetachNetworkOptimizationSags invokes the smartag.DetachNetworkOptimizationSags API synchronously
+// api document: https://help.aliyun.com/api/smartag/detachnetworkoptimizationsags.html
+func (client *Client) DetachNetworkOptimizationSags(request *DetachNetworkOptimizationSagsRequest) (response *DetachNetworkOptimizationSagsResponse, err error) {
+	response = CreateDetachNetworkOptimizationSagsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DetachNetworkOptimizationSagsWithChan invokes the smartag.DetachNetworkOptimizationSags API asynchronously
+// api document: https://help.aliyun.com/api/smartag/detachnetworkoptimizationsags.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DetachNetworkOptimizationSagsWithChan(request *DetachNetworkOptimizationSagsRequest) (<-chan *DetachNetworkOptimizationSagsResponse, <-chan error) {
+	responseChan := make(chan *DetachNetworkOptimizationSagsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DetachNetworkOptimizationSags(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DetachNetworkOptimizationSagsWithCallback invokes the smartag.DetachNetworkOptimizationSags API asynchronously
+// api document: https://help.aliyun.com/api/smartag/detachnetworkoptimizationsags.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DetachNetworkOptimizationSagsWithCallback(request *DetachNetworkOptimizationSagsRequest, callback func(response *DetachNetworkOptimizationSagsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DetachNetworkOptimizationSagsResponse
+		var err error
+		defer close(result)
+		response, err = client.DetachNetworkOptimizationSags(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DetachNetworkOptimizationSagsRequest is the request struct for api DetachNetworkOptimizationSags
+type DetachNetworkOptimizationSagsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGIds           *[]string        `position:"Query" name:"SmartAGIds"  type:"Repeated"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DetachNetworkOptimizationSagsResponse is the response struct for api DetachNetworkOptimizationSags
+type DetachNetworkOptimizationSagsResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDetachNetworkOptimizationSagsRequest creates a request to invoke DetachNetworkOptimizationSags API
+func CreateDetachNetworkOptimizationSagsRequest() (request *DetachNetworkOptimizationSagsRequest) {
+	request = &DetachNetworkOptimizationSagsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DetachNetworkOptimizationSags", "smartag", "openAPI")
+	return
+}
+
+// CreateDetachNetworkOptimizationSagsResponse creates a response to parse from DetachNetworkOptimizationSags response
+func CreateDetachNetworkOptimizationSagsResponse() (response *DetachNetworkOptimizationSagsResponse) {
+	response = &DetachNetworkOptimizationSagsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/disassociate_acl.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// DisassociateACL invokes the smartag.DisassociateACL API synchronously
+// api document: https://help.aliyun.com/api/smartag/disassociateacl.html
+func (client *Client) DisassociateACL(request *DisassociateACLRequest) (response *DisassociateACLResponse, err error) {
+	response = CreateDisassociateACLResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// DisassociateACLWithChan invokes the smartag.DisassociateACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/disassociateacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DisassociateACLWithChan(request *DisassociateACLRequest) (<-chan *DisassociateACLResponse, <-chan error) {
+	responseChan := make(chan *DisassociateACLResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.DisassociateACL(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// DisassociateACLWithCallback invokes the smartag.DisassociateACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/disassociateacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) DisassociateACLWithCallback(request *DisassociateACLRequest, callback func(response *DisassociateACLResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *DisassociateACLResponse
+		var err error
+		defer close(result)
+		response, err = client.DisassociateACL(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// DisassociateACLRequest is the request struct for api DisassociateACL
+type DisassociateACLRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// DisassociateACLResponse is the response struct for api DisassociateACL
+type DisassociateACLResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateDisassociateACLRequest creates a request to invoke DisassociateACL API
+func CreateDisassociateACLRequest() (request *DisassociateACLRequest) {
+	request = &DisassociateACLRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "DisassociateACL", "smartag", "openAPI")
+	return
+}
+
+// CreateDisassociateACLResponse creates a response to parse from DisassociateACL response
+func CreateDisassociateACLResponse() (response *DisassociateACLResponse) {
+	response = &DisassociateACLResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 2 - 0
services/smartag/downgrade_smart_access_gateway.go

@@ -81,8 +81,10 @@ type DowngradeSmartAccessGatewayRequest struct {
 	BandWidthSpec        requests.Integer `position:"Query" name:"BandWidthSpec"`
 	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
 	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	UserCount            requests.Integer `position:"Query" name:"UserCount"`
 	SmartAGId            string           `position:"Query" name:"SmartAGId"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	DataPlan             requests.Integer `position:"Query" name:"DataPlan"`
 }
 
 // DowngradeSmartAccessGatewayResponse is the response struct for api DowngradeSmartAccessGateway

+ 108 - 0
services/smartag/kick_out_clients.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// KickOutClients invokes the smartag.KickOutClients API synchronously
+// api document: https://help.aliyun.com/api/smartag/kickoutclients.html
+func (client *Client) KickOutClients(request *KickOutClientsRequest) (response *KickOutClientsResponse, err error) {
+	response = CreateKickOutClientsResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// KickOutClientsWithChan invokes the smartag.KickOutClients API asynchronously
+// api document: https://help.aliyun.com/api/smartag/kickoutclients.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) KickOutClientsWithChan(request *KickOutClientsRequest) (<-chan *KickOutClientsResponse, <-chan error) {
+	responseChan := make(chan *KickOutClientsResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.KickOutClients(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// KickOutClientsWithCallback invokes the smartag.KickOutClients API asynchronously
+// api document: https://help.aliyun.com/api/smartag/kickoutclients.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) KickOutClientsWithCallback(request *KickOutClientsRequest, callback func(response *KickOutClientsResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *KickOutClientsResponse
+		var err error
+		defer close(result)
+		response, err = client.KickOutClients(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// KickOutClientsRequest is the request struct for api KickOutClients
+type KickOutClientsRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	Username             string           `position:"Query" name:"Username"`
+}
+
+// KickOutClientsResponse is the response struct for api KickOutClients
+type KickOutClientsResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateKickOutClientsRequest creates a request to invoke KickOutClients API
+func CreateKickOutClientsRequest() (request *KickOutClientsRequest) {
+	request = &KickOutClientsRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "KickOutClients", "smartag", "openAPI")
+	return
+}
+
+// CreateKickOutClientsResponse creates a response to parse from KickOutClients response
+func CreateKickOutClientsResponse() (response *KickOutClientsResponse) {
+	response = &KickOutClientsResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/modify_acl.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ModifyACL invokes the smartag.ModifyACL API synchronously
+// api document: https://help.aliyun.com/api/smartag/modifyacl.html
+func (client *Client) ModifyACL(request *ModifyACLRequest) (response *ModifyACLResponse, err error) {
+	response = CreateModifyACLResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ModifyACLWithChan invokes the smartag.ModifyACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifyacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyACLWithChan(request *ModifyACLRequest) (<-chan *ModifyACLResponse, <-chan error) {
+	responseChan := make(chan *ModifyACLResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ModifyACL(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ModifyACLWithCallback invokes the smartag.ModifyACL API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifyacl.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyACLWithCallback(request *ModifyACLRequest, callback func(response *ModifyACLResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ModifyACLResponse
+		var err error
+		defer close(result)
+		response, err = client.ModifyACL(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ModifyACLRequest is the request struct for api ModifyACL
+type ModifyACLRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	Name                 string           `position:"Query" name:"Name"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// ModifyACLResponse is the response struct for api ModifyACL
+type ModifyACLResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateModifyACLRequest creates a request to invoke ModifyACL API
+func CreateModifyACLRequest() (request *ModifyACLRequest) {
+	request = &ModifyACLRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "ModifyACL", "smartag", "openAPI")
+	return
+}
+
+// CreateModifyACLResponse creates a response to parse from ModifyACL response
+func CreateModifyACLResponse() (response *ModifyACLResponse) {
+	response = &ModifyACLResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 129 - 0
services/smartag/modify_acl_rule.go

@@ -0,0 +1,129 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ModifyACLRule invokes the smartag.ModifyACLRule API synchronously
+// api document: https://help.aliyun.com/api/smartag/modifyaclrule.html
+func (client *Client) ModifyACLRule(request *ModifyACLRuleRequest) (response *ModifyACLRuleResponse, err error) {
+	response = CreateModifyACLRuleResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ModifyACLRuleWithChan invokes the smartag.ModifyACLRule API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifyaclrule.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyACLRuleWithChan(request *ModifyACLRuleRequest) (<-chan *ModifyACLRuleResponse, <-chan error) {
+	responseChan := make(chan *ModifyACLRuleResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ModifyACLRule(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ModifyACLRuleWithCallback invokes the smartag.ModifyACLRule API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifyaclrule.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyACLRuleWithCallback(request *ModifyACLRuleRequest, callback func(response *ModifyACLRuleResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ModifyACLRuleResponse
+		var err error
+		defer close(result)
+		response, err = client.ModifyACLRule(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ModifyACLRuleRequest is the request struct for api ModifyACLRule
+type ModifyACLRuleRequest struct {
+	*requests.RpcRequest
+	AclId                string           `position:"Query" name:"AclId"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	SourcePortRange      string           `position:"Query" name:"SourcePortRange"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	IpProtocol           string           `position:"Query" name:"IpProtocol"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SourceCidr           string           `position:"Query" name:"SourceCidr"`
+	Description          string           `position:"Query" name:"Description"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	Priority             requests.Integer `position:"Query" name:"Priority"`
+	AcrId                string           `position:"Query" name:"AcrId"`
+	DestCidr             string           `position:"Query" name:"DestCidr"`
+	DestPortRange        string           `position:"Query" name:"DestPortRange"`
+	Direction            string           `position:"Query" name:"Direction"`
+	Policy               string           `position:"Query" name:"Policy"`
+}
+
+// ModifyACLRuleResponse is the response struct for api ModifyACLRule
+type ModifyACLRuleResponse struct {
+	*responses.BaseResponse
+	RequestId       string `json:"RequestId" xml:"RequestId"`
+	AcrId           string `json:"AcrId" xml:"AcrId"`
+	AclId           string `json:"AclId" xml:"AclId"`
+	Description     string `json:"Description" xml:"Description"`
+	Direction       string `json:"Direction" xml:"Direction"`
+	SourceCidr      string `json:"SourceCidr" xml:"SourceCidr"`
+	DestCidr        string `json:"DestCidr" xml:"DestCidr"`
+	IpProtocol      string `json:"IpProtocol" xml:"IpProtocol"`
+	SourcePortRange string `json:"SourcePortRange" xml:"SourcePortRange"`
+	DestPortRange   string `json:"DestPortRange" xml:"DestPortRange"`
+	Policy          string `json:"Policy" xml:"Policy"`
+	Priority        int    `json:"Priority" xml:"Priority"`
+	GmtCreate       int    `json:"GmtCreate" xml:"GmtCreate"`
+}
+
+// CreateModifyACLRuleRequest creates a request to invoke ModifyACLRule API
+func CreateModifyACLRuleRequest() (request *ModifyACLRuleRequest) {
+	request = &ModifyACLRuleRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "ModifyACLRule", "smartag", "openAPI")
+	return
+}
+
+// CreateModifyACLRuleResponse creates a response to parse from ModifyACLRule response
+func CreateModifyACLRuleResponse() (response *ModifyACLRuleResponse) {
+	response = &ModifyACLRuleResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 2 - 0
services/smartag/modify_cloud_connect_network.go

@@ -81,7 +81,9 @@ type ModifyCloudConnectNetworkRequest struct {
 	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
 	CcnId                string           `position:"Query" name:"CcnId"`
 	Name                 string           `position:"Query" name:"Name"`
+	CidrBlock            string           `position:"Query" name:"CidrBlock"`
 	Description          string           `position:"Query" name:"Description"`
+	SnatCidrBlock        string           `position:"Query" name:"SnatCidrBlock"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
 }
 

+ 108 - 0
services/smartag/modify_network_optimization.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ModifyNetworkOptimization invokes the smartag.ModifyNetworkOptimization API synchronously
+// api document: https://help.aliyun.com/api/smartag/modifynetworkoptimization.html
+func (client *Client) ModifyNetworkOptimization(request *ModifyNetworkOptimizationRequest) (response *ModifyNetworkOptimizationResponse, err error) {
+	response = CreateModifyNetworkOptimizationResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ModifyNetworkOptimizationWithChan invokes the smartag.ModifyNetworkOptimization API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifynetworkoptimization.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyNetworkOptimizationWithChan(request *ModifyNetworkOptimizationRequest) (<-chan *ModifyNetworkOptimizationResponse, <-chan error) {
+	responseChan := make(chan *ModifyNetworkOptimizationResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ModifyNetworkOptimization(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ModifyNetworkOptimizationWithCallback invokes the smartag.ModifyNetworkOptimization API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifynetworkoptimization.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifyNetworkOptimizationWithCallback(request *ModifyNetworkOptimizationRequest, callback func(response *ModifyNetworkOptimizationResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ModifyNetworkOptimizationResponse
+		var err error
+		defer close(result)
+		response, err = client.ModifyNetworkOptimization(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ModifyNetworkOptimizationRequest is the request struct for api ModifyNetworkOptimization
+type ModifyNetworkOptimizationRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	NetworkOptId         string           `position:"Query" name:"NetworkOptId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	Name                 string           `position:"Query" name:"Name"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// ModifyNetworkOptimizationResponse is the response struct for api ModifyNetworkOptimization
+type ModifyNetworkOptimizationResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateModifyNetworkOptimizationRequest creates a request to invoke ModifyNetworkOptimization API
+func CreateModifyNetworkOptimizationRequest() (request *ModifyNetworkOptimizationRequest) {
+	request = &ModifyNetworkOptimizationRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "ModifyNetworkOptimization", "smartag", "openAPI")
+	return
+}
+
+// CreateModifyNetworkOptimizationResponse creates a response to parse from ModifyNetworkOptimization response
+func CreateModifyNetworkOptimizationResponse() (response *ModifyNetworkOptimizationResponse) {
+	response = &ModifyNetworkOptimizationResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/modify_serial_number.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ModifySerialNumber invokes the smartag.ModifySerialNumber API synchronously
+// api document: https://help.aliyun.com/api/smartag/modifyserialnumber.html
+func (client *Client) ModifySerialNumber(request *ModifySerialNumberRequest) (response *ModifySerialNumberResponse, err error) {
+	response = CreateModifySerialNumberResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ModifySerialNumberWithChan invokes the smartag.ModifySerialNumber API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifyserialnumber.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifySerialNumberWithChan(request *ModifySerialNumberRequest) (<-chan *ModifySerialNumberResponse, <-chan error) {
+	responseChan := make(chan *ModifySerialNumberResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ModifySerialNumber(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ModifySerialNumberWithCallback invokes the smartag.ModifySerialNumber API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifyserialnumber.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifySerialNumberWithCallback(request *ModifySerialNumberRequest, callback func(response *ModifySerialNumberResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ModifySerialNumberResponse
+		var err error
+		defer close(result)
+		response, err = client.ModifySerialNumber(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ModifySerialNumberRequest is the request struct for api ModifySerialNumber
+type ModifySerialNumberRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	SerialNumber         string           `position:"Query" name:"SerialNumber"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+}
+
+// ModifySerialNumberResponse is the response struct for api ModifySerialNumber
+type ModifySerialNumberResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateModifySerialNumberRequest creates a request to invoke ModifySerialNumber API
+func CreateModifySerialNumberRequest() (request *ModifySerialNumberRequest) {
+	request = &ModifySerialNumberRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "ModifySerialNumber", "smartag", "openAPI")
+	return
+}
+
+// CreateModifySerialNumberResponse creates a response to parse from ModifySerialNumber response
+func CreateModifySerialNumberResponse() (response *ModifySerialNumberResponse) {
+	response = &ModifySerialNumberResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 17 - 10
services/smartag/modify_smart_access_gateway.go

@@ -76,16 +76,23 @@ func (client *Client) ModifySmartAccessGatewayWithCallback(request *ModifySmartA
 // ModifySmartAccessGatewayRequest is the request struct for api ModifySmartAccessGateway
 type ModifySmartAccessGatewayRequest struct {
 	*requests.RpcRequest
-	ResourceOwnerId       requests.Integer `position:"Query" name:"ResourceOwnerId"`
-	ResourceOwnerAccount  string           `position:"Query" name:"ResourceOwnerAccount"`
-	City                  string           `position:"Query" name:"City"`
-	OwnerAccount          string           `position:"Query" name:"OwnerAccount"`
-	Name                  string           `position:"Query" name:"Name"`
-	CidrBlock             string           `position:"Query" name:"CidrBlock"`
-	SmartAGId             string           `position:"Query" name:"SmartAGId"`
-	Description           string           `position:"Query" name:"Description"`
-	OwnerId               requests.Integer `position:"Query" name:"OwnerId"`
-	SecurityLockThreshold requests.Integer `position:"Query" name:"SecurityLockThreshold"`
+	SnatEntries           *[]ModifySmartAccessGatewaySnatEntries `position:"Query" name:"SnatEntries"  type:"Repeated"`
+	ResourceOwnerId       requests.Integer                       `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount  string                                 `position:"Query" name:"ResourceOwnerAccount"`
+	City                  string                                 `position:"Query" name:"City"`
+	OwnerAccount          string                                 `position:"Query" name:"OwnerAccount"`
+	Description           string                                 `position:"Query" name:"Description"`
+	OwnerId               requests.Integer                       `position:"Query" name:"OwnerId"`
+	SecurityLockThreshold requests.Integer                       `position:"Query" name:"SecurityLockThreshold"`
+	Name                  string                                 `position:"Query" name:"Name"`
+	CidrBlock             string                                 `position:"Query" name:"CidrBlock"`
+	SmartAGId             string                                 `position:"Query" name:"SmartAGId"`
+}
+
+// ModifySmartAccessGatewaySnatEntries is a repeated param struct in ModifySmartAccessGatewayRequest
+type ModifySmartAccessGatewaySnatEntries struct {
+	CidrBlock string `name:"CidrBlock"`
+	SnatIp    string `name:"SnatIp"`
 }
 
 // ModifySmartAccessGatewayResponse is the response struct for api ModifySmartAccessGateway

+ 113 - 0
services/smartag/modify_smart_access_gateway_client_user.go

@@ -0,0 +1,113 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ModifySmartAccessGatewayClientUser invokes the smartag.ModifySmartAccessGatewayClientUser API synchronously
+// api document: https://help.aliyun.com/api/smartag/modifysmartaccessgatewayclientuser.html
+func (client *Client) ModifySmartAccessGatewayClientUser(request *ModifySmartAccessGatewayClientUserRequest) (response *ModifySmartAccessGatewayClientUserResponse, err error) {
+	response = CreateModifySmartAccessGatewayClientUserResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ModifySmartAccessGatewayClientUserWithChan invokes the smartag.ModifySmartAccessGatewayClientUser API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifysmartaccessgatewayclientuser.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifySmartAccessGatewayClientUserWithChan(request *ModifySmartAccessGatewayClientUserRequest) (<-chan *ModifySmartAccessGatewayClientUserResponse, <-chan error) {
+	responseChan := make(chan *ModifySmartAccessGatewayClientUserResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ModifySmartAccessGatewayClientUser(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ModifySmartAccessGatewayClientUserWithCallback invokes the smartag.ModifySmartAccessGatewayClientUser API asynchronously
+// api document: https://help.aliyun.com/api/smartag/modifysmartaccessgatewayclientuser.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ModifySmartAccessGatewayClientUserWithCallback(request *ModifySmartAccessGatewayClientUserRequest, callback func(response *ModifySmartAccessGatewayClientUserResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ModifySmartAccessGatewayClientUserResponse
+		var err error
+		defer close(result)
+		response, err = client.ModifySmartAccessGatewayClientUser(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ModifySmartAccessGatewayClientUserRequest is the request struct for api ModifySmartAccessGatewayClientUser
+type ModifySmartAccessGatewayClientUserRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	Bandwidth            requests.Integer `position:"Query" name:"Bandwidth"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	UserName             string           `position:"Query" name:"UserName"`
+}
+
+// ModifySmartAccessGatewayClientUserResponse is the response struct for api ModifySmartAccessGatewayClientUser
+type ModifySmartAccessGatewayClientUserResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+	ClientIp  string `json:"ClientIp" xml:"ClientIp"`
+	UserMail  string `json:"UserMail" xml:"UserMail"`
+	UserName  string `json:"UserName" xml:"UserName"`
+	Bandwidth int    `json:"Bandwidth" xml:"Bandwidth"`
+}
+
+// CreateModifySmartAccessGatewayClientUserRequest creates a request to invoke ModifySmartAccessGatewayClientUser API
+func CreateModifySmartAccessGatewayClientUserRequest() (request *ModifySmartAccessGatewayClientUserRequest) {
+	request = &ModifySmartAccessGatewayClientUserRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "ModifySmartAccessGatewayClientUser", "smartag", "openAPI")
+	return
+}
+
+// CreateModifySmartAccessGatewayClientUserResponse creates a response to parse from ModifySmartAccessGatewayClientUser response
+func CreateModifySmartAccessGatewayClientUserResponse() (response *ModifySmartAccessGatewayClientUserResponse) {
+	response = &ModifySmartAccessGatewayClientUserResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 108 - 0
services/smartag/reset_smart_access_gateway_client_user_password.go

@@ -0,0 +1,108 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// ResetSmartAccessGatewayClientUserPassword invokes the smartag.ResetSmartAccessGatewayClientUserPassword API synchronously
+// api document: https://help.aliyun.com/api/smartag/resetsmartaccessgatewayclientuserpassword.html
+func (client *Client) ResetSmartAccessGatewayClientUserPassword(request *ResetSmartAccessGatewayClientUserPasswordRequest) (response *ResetSmartAccessGatewayClientUserPasswordResponse, err error) {
+	response = CreateResetSmartAccessGatewayClientUserPasswordResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// ResetSmartAccessGatewayClientUserPasswordWithChan invokes the smartag.ResetSmartAccessGatewayClientUserPassword API asynchronously
+// api document: https://help.aliyun.com/api/smartag/resetsmartaccessgatewayclientuserpassword.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ResetSmartAccessGatewayClientUserPasswordWithChan(request *ResetSmartAccessGatewayClientUserPasswordRequest) (<-chan *ResetSmartAccessGatewayClientUserPasswordResponse, <-chan error) {
+	responseChan := make(chan *ResetSmartAccessGatewayClientUserPasswordResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.ResetSmartAccessGatewayClientUserPassword(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// ResetSmartAccessGatewayClientUserPasswordWithCallback invokes the smartag.ResetSmartAccessGatewayClientUserPassword API asynchronously
+// api document: https://help.aliyun.com/api/smartag/resetsmartaccessgatewayclientuserpassword.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) ResetSmartAccessGatewayClientUserPasswordWithCallback(request *ResetSmartAccessGatewayClientUserPasswordRequest, callback func(response *ResetSmartAccessGatewayClientUserPasswordResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *ResetSmartAccessGatewayClientUserPasswordResponse
+		var err error
+		defer close(result)
+		response, err = client.ResetSmartAccessGatewayClientUserPassword(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// ResetSmartAccessGatewayClientUserPasswordRequest is the request struct for api ResetSmartAccessGatewayClientUserPassword
+type ResetSmartAccessGatewayClientUserPasswordRequest struct {
+	*requests.RpcRequest
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	SmartAGId            string           `position:"Query" name:"SmartAGId"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	UserName             string           `position:"Query" name:"UserName"`
+}
+
+// ResetSmartAccessGatewayClientUserPasswordResponse is the response struct for api ResetSmartAccessGatewayClientUserPassword
+type ResetSmartAccessGatewayClientUserPasswordResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateResetSmartAccessGatewayClientUserPasswordRequest creates a request to invoke ResetSmartAccessGatewayClientUserPassword API
+func CreateResetSmartAccessGatewayClientUserPasswordRequest() (request *ResetSmartAccessGatewayClientUserPasswordRequest) {
+	request = &ResetSmartAccessGatewayClientUserPasswordRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "ResetSmartAccessGatewayClientUserPassword", "smartag", "openAPI")
+	return
+}
+
+// CreateResetSmartAccessGatewayClientUserPasswordResponse creates a response to parse from ResetSmartAccessGatewayClientUserPassword response
+func CreateResetSmartAccessGatewayClientUserPasswordResponse() (response *ResetSmartAccessGatewayClientUserPasswordResponse) {
+	response = &ResetSmartAccessGatewayClientUserPasswordResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 109 - 0
services/smartag/set_sag_routeable_address.go

@@ -0,0 +1,109 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+import (
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
+)
+
+// SetSagRouteableAddress invokes the smartag.SetSagRouteableAddress API synchronously
+// api document: https://help.aliyun.com/api/smartag/setsagrouteableaddress.html
+func (client *Client) SetSagRouteableAddress(request *SetSagRouteableAddressRequest) (response *SetSagRouteableAddressResponse, err error) {
+	response = CreateSetSagRouteableAddressResponse()
+	err = client.DoAction(request, response)
+	return
+}
+
+// SetSagRouteableAddressWithChan invokes the smartag.SetSagRouteableAddress API asynchronously
+// api document: https://help.aliyun.com/api/smartag/setsagrouteableaddress.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) SetSagRouteableAddressWithChan(request *SetSagRouteableAddressRequest) (<-chan *SetSagRouteableAddressResponse, <-chan error) {
+	responseChan := make(chan *SetSagRouteableAddressResponse, 1)
+	errChan := make(chan error, 1)
+	err := client.AddAsyncTask(func() {
+		defer close(responseChan)
+		defer close(errChan)
+		response, err := client.SetSagRouteableAddress(request)
+		if err != nil {
+			errChan <- err
+		} else {
+			responseChan <- response
+		}
+	})
+	if err != nil {
+		errChan <- err
+		close(responseChan)
+		close(errChan)
+	}
+	return responseChan, errChan
+}
+
+// SetSagRouteableAddressWithCallback invokes the smartag.SetSagRouteableAddress API asynchronously
+// api document: https://help.aliyun.com/api/smartag/setsagrouteableaddress.html
+// asynchronous document: https://help.aliyun.com/document_detail/66220.html
+func (client *Client) SetSagRouteableAddressWithCallback(request *SetSagRouteableAddressRequest, callback func(response *SetSagRouteableAddressResponse, err error)) <-chan int {
+	result := make(chan int, 1)
+	err := client.AddAsyncTask(func() {
+		var response *SetSagRouteableAddressResponse
+		var err error
+		defer close(result)
+		response, err = client.SetSagRouteableAddress(request)
+		callback(response, err)
+		result <- 1
+	})
+	if err != nil {
+		defer close(result)
+		callback(nil, err)
+		result <- 0
+	}
+	return result
+}
+
+// SetSagRouteableAddressRequest is the request struct for api SetSagRouteableAddress
+type SetSagRouteableAddressRequest struct {
+	*requests.RpcRequest
+	AccessKeyId          string           `position:"Query" name:"access_key_id"`
+	ResourceOwnerId      requests.Integer `position:"Query" name:"ResourceOwnerId"`
+	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
+	SagId                string           `position:"Query" name:"SagId"`
+	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	RouteableAddress     string           `position:"Query" name:"RouteableAddress"`
+}
+
+// SetSagRouteableAddressResponse is the response struct for api SetSagRouteableAddress
+type SetSagRouteableAddressResponse struct {
+	*responses.BaseResponse
+	RequestId string `json:"RequestId" xml:"RequestId"`
+}
+
+// CreateSetSagRouteableAddressRequest creates a request to invoke SetSagRouteableAddress API
+func CreateSetSagRouteableAddressRequest() (request *SetSagRouteableAddressRequest) {
+	request = &SetSagRouteableAddressRequest{
+		RpcRequest: &requests.RpcRequest{},
+	}
+	request.InitWithApiInfo("Smartag", "2018-03-13", "SetSagRouteableAddress", "smartag", "openAPI")
+	return
+}
+
+// CreateSetSagRouteableAddressResponse creates a response to parse from SetSagRouteableAddress response
+func CreateSetSagRouteableAddressResponse() (response *SetSagRouteableAddressResponse) {
+	response = &SetSagRouteableAddressResponse{
+		BaseResponse: &responses.BaseResponse{},
+	}
+	return
+}

+ 23 - 0
services/smartag/struct_acl.go

@@ -0,0 +1,23 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Acl is a nested struct in smartag response
+type Acl struct {
+	AclId    string `json:"AclId" xml:"AclId"`
+	Name     string `json:"Name" xml:"Name"`
+	SagCount string `json:"SagCount" xml:"SagCount"`
+}

+ 21 - 0
services/smartag/struct_acls.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Acls is a nested struct in smartag response
+type Acls struct {
+	Acl []Acl `json:"Acl" xml:"Acl"`
+}

+ 32 - 0
services/smartag/struct_acr.go

@@ -0,0 +1,32 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Acr is a nested struct in smartag response
+type Acr struct {
+	AcrId           string `json:"AcrId" xml:"AcrId"`
+	Description     string `json:"Description" xml:"Description"`
+	Direction       string `json:"Direction" xml:"Direction"`
+	SourceCidr      string `json:"SourceCidr" xml:"SourceCidr"`
+	DestCidr        string `json:"DestCidr" xml:"DestCidr"`
+	IpProtocol      string `json:"IpProtocol" xml:"IpProtocol"`
+	SourcePortRange string `json:"SourcePortRange" xml:"SourcePortRange"`
+	DestPortRange   string `json:"DestPortRange" xml:"DestPortRange"`
+	Policy          string `json:"Policy" xml:"Policy"`
+	Priority        int    `json:"Priority" xml:"Priority"`
+	GmtCreate       int    `json:"GmtCreate" xml:"GmtCreate"`
+	AclId           string `json:"AclId" xml:"AclId"`
+}

+ 21 - 0
services/smartag/struct_acrs.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Acrs is a nested struct in smartag response
+type Acrs struct {
+	Acr []Acr `json:"Acr" xml:"Acr"`
+}

+ 3 - 0
services/smartag/struct_cloud_connect_network.go

@@ -26,4 +26,7 @@ type CloudConnectNetwork struct {
 	Description             string `json:"Description" xml:"Description"`
 	CreateTime              int    `json:"CreateTime" xml:"CreateTime"`
 	IsDefault               bool   `json:"IsDefault" xml:"IsDefault"`
+	CidrBlock               string `json:"CidrBlock" xml:"CidrBlock"`
+	SnatCidrBlock           string `json:"SnatCidrBlock" xml:"SnatCidrBlock"`
+	Tags                    Tags   `json:"Tags" xml:"Tags"`
 }

+ 21 - 0
services/smartag/struct_link_backup_info_list.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// LinkBackupInfoList is a nested struct in smartag response
+type LinkBackupInfoList struct {
+	LinkBackupInfoListItem []LinkBackupInfoListItem `json:"LinkBackupInfoListItem" xml:"LinkBackupInfoListItem"`
+}

+ 26 - 0
services/smartag/struct_link_backup_info_list_item.go

@@ -0,0 +1,26 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// LinkBackupInfoListItem is a nested struct in smartag response
+type LinkBackupInfoListItem struct {
+	LinkLevelBackupState string `json:"LinkLevelBackupState" xml:"LinkLevelBackupState"`
+	LinkLevelBackupType  string `json:"LinkLevelBackupType" xml:"LinkLevelBackupType"`
+	MainLinkId           string `json:"MainLinkId" xml:"MainLinkId"`
+	MainLinkState        string `json:"MainLinkState" xml:"MainLinkState"`
+	BackupLinkId         string `json:"BackupLinkId" xml:"BackupLinkId"`
+	BackupLinkState      string `json:"BackupLinkState" xml:"BackupLinkState"`
+}

+ 26 - 0
services/smartag/struct_network_optimization.go

@@ -0,0 +1,26 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// NetworkOptimization is a nested struct in smartag response
+type NetworkOptimization struct {
+	InstanceId string `json:"InstanceId" xml:"InstanceId"`
+	Name       string `json:"Name" xml:"Name"`
+	State      string `json:"State" xml:"State"`
+	CreateTime int    `json:"CreateTime" xml:"CreateTime"`
+	SagCount   int    `json:"SagCount" xml:"SagCount"`
+	CcnId      string `json:"CcnId" xml:"CcnId"`
+}

+ 21 - 0
services/smartag/struct_network_optimizations.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// NetworkOptimizations is a nested struct in smartag response
+type NetworkOptimizations struct {
+	NetworkOptimization []NetworkOptimization `json:"NetworkOptimization" xml:"NetworkOptimization"`
+}

+ 21 - 0
services/smartag/struct_sag_statistics_in_describe_sag_online_client_statistics.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// SagStatisticsInDescribeSagOnlineClientStatistics is a nested struct in smartag response
+type SagStatisticsInDescribeSagOnlineClientStatistics struct {
+	Statistics []Statistics `json:"Statistics" xml:"Statistics"`
+}

+ 21 - 0
services/smartag/struct_sag_statistics_in_describe_user_flow_statistics.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// SagStatisticsInDescribeUserFlowStatistics is a nested struct in smartag response
+type SagStatisticsInDescribeUserFlowStatistics struct {
+	Statistics []Statistics `json:"Statistics" xml:"Statistics"`
+}

+ 22 - 0
services/smartag/struct_setting.go

@@ -0,0 +1,22 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Setting is a nested struct in smartag response
+type Setting struct {
+	Domain string `json:"Domain" xml:"Domain"`
+	Type   string `json:"Type" xml:"Type"`
+}

+ 21 - 0
services/smartag/struct_settings.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Settings is a nested struct in smartag response
+type Settings struct {
+	Setting []Setting `json:"Setting" xml:"Setting"`
+}

+ 21 - 15
services/smartag/struct_smart_access_gateway.go

@@ -17,19 +17,25 @@ package smartag
 
 // SmartAccessGateway is a nested struct in smartag response
 type SmartAccessGateway struct {
-	SmartAGId             string `json:"SmartAGId" xml:"SmartAGId"`
-	Name                  string `json:"Name" xml:"Name"`
-	City                  string `json:"City" xml:"City"`
-	MaxBandwidth          string `json:"MaxBandwidth" xml:"MaxBandwidth"`
-	Status                string `json:"Status" xml:"Status"`
-	CidrBlock             string `json:"CidrBlock" xml:"CidrBlock"`
-	AssociatedCcnId       string `json:"AssociatedCcnId" xml:"AssociatedCcnId"`
-	AssociatedCcnName     string `json:"AssociatedCcnName" xml:"AssociatedCcnName"`
-	Description           string `json:"Description" xml:"Description"`
-	CreateTime            int    `json:"CreateTime" xml:"CreateTime"`
-	EndTime               int    `json:"EndTime" xml:"EndTime"`
-	SoftwareVersion       string `json:"SoftwareVersion" xml:"SoftwareVersion"`
-	HardwareVersion       string `json:"HardwareVersion" xml:"HardwareVersion"`
-	SerialNumber          string `json:"SerialNumber" xml:"SerialNumber"`
-	SecurityLockThreshold int    `json:"SecurityLockThreshold" xml:"SecurityLockThreshold"`
+	Name                  string      `json:"Name" xml:"Name"`
+	MaxBandwidth          string      `json:"MaxBandwidth" xml:"MaxBandwidth"`
+	SoftwareVersion       string      `json:"SoftwareVersion" xml:"SoftwareVersion"`
+	HardwareVersion       string      `json:"HardwareVersion" xml:"HardwareVersion"`
+	CreateTime            int         `json:"CreateTime" xml:"CreateTime"`
+	EndTime               int         `json:"EndTime" xml:"EndTime"`
+	City                  string      `json:"City" xml:"City"`
+	SerialNumber          string      `json:"SerialNumber" xml:"SerialNumber"`
+	AssociatedCcnId       string      `json:"AssociatedCcnId" xml:"AssociatedCcnId"`
+	State                 string      `json:"State" xml:"State"`
+	AclIds                string      `json:"AclIds" xml:"AclIds"`
+	InstanceId            string      `json:"InstanceId" xml:"InstanceId"`
+	SecurityLockThreshold int         `json:"SecurityLockThreshold" xml:"SecurityLockThreshold"`
+	UserCount             int         `json:"UserCount" xml:"UserCount"`
+	Status                string      `json:"Status" xml:"Status"`
+	CidrBlock             string      `json:"CidrBlock" xml:"CidrBlock"`
+	AssociatedCcnName     string      `json:"AssociatedCcnName" xml:"AssociatedCcnName"`
+	Description           string      `json:"Description" xml:"Description"`
+	SmartAGId             string      `json:"SmartAGId" xml:"SmartAGId"`
+	DataPlan              int         `json:"DataPlan" xml:"DataPlan"`
+	SnatEntries           SnatEntries `json:"SnatEntries" xml:"SnatEntries"`
 }

+ 21 - 0
services/smartag/struct_smart_access_gateways_in_describe_network_optimization_sags.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// SmartAccessGatewaysInDescribeNetworkOptimizationSags is a nested struct in smartag response
+type SmartAccessGatewaysInDescribeNetworkOptimizationSags struct {
+	SmartAccessGateway []SmartAccessGateway `json:"SmartAccessGateway" xml:"SmartAccessGateway"`
+}

+ 2 - 2
services/smartag/struct_smart_access_gateways.go → services/smartag/struct_smart_access_gateways_in_describe_smart_access_gateways.go

@@ -15,7 +15,7 @@ package smartag
 // Code generated by Alibaba Cloud SDK Code Generator.
 // Changes may cause incorrect behavior and will be lost if the code is regenerated.
 
-// SmartAccessGateways is a nested struct in smartag response
-type SmartAccessGateways struct {
+// SmartAccessGatewaysInDescribeSmartAccessGateways is a nested struct in smartag response
+type SmartAccessGatewaysInDescribeSmartAccessGateways struct {
 	SmartAccessGateway []SmartAccessGateway `json:"SmartAccessGateway" xml:"SmartAccessGateway"`
 }

+ 21 - 0
services/smartag/struct_snat_entries.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// SnatEntries is a nested struct in smartag response
+type SnatEntries struct {
+	SnatEntry []SnatEntry `json:"SnatEntry" xml:"SnatEntry"`
+}

+ 22 - 0
services/smartag/struct_snat_entry.go

@@ -0,0 +1,22 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// SnatEntry is a nested struct in smartag response
+type SnatEntry struct {
+	CidrBlock string `json:"CidrBlock" xml:"CidrBlock"`
+	SnatIp    string `json:"SnatIp" xml:"SnatIp"`
+}

+ 24 - 0
services/smartag/struct_statistics.go

@@ -0,0 +1,24 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Statistics is a nested struct in smartag response
+type Statistics struct {
+	UserName    string `json:"UserName" xml:"UserName"`
+	TotalBytes  string `json:"TotalBytes" xml:"TotalBytes"`
+	OnlineCount string `json:"OnlineCount" xml:"OnlineCount"`
+	SmartAGId   string `json:"SmartAGId" xml:"SmartAGId"`
+}

+ 22 - 0
services/smartag/struct_tag.go

@@ -0,0 +1,22 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Tag is a nested struct in smartag response
+type Tag struct {
+	Key   string `json:"Key" xml:"Key"`
+	Value string `json:"Value" xml:"Value"`
+}

+ 21 - 0
services/smartag/struct_tags.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// Tags is a nested struct in smartag response
+type Tags struct {
+	Tag []Tag `json:"Tag" xml:"Tag"`
+}

+ 25 - 0
services/smartag/struct_user.go

@@ -0,0 +1,25 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// User is a nested struct in smartag response
+type User struct {
+	Bandwidth  int    `json:"Bandwidth" xml:"Bandwidth"`
+	UserMail   string `json:"UserMail" xml:"UserMail"`
+	UserName   string `json:"UserName" xml:"UserName"`
+	OnlineTime string `json:"OnlineTime" xml:"OnlineTime"`
+	ClientIp   string `json:"ClientIp" xml:"ClientIp"`
+}

+ 21 - 0
services/smartag/struct_user_statistics.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// UserStatistics is a nested struct in smartag response
+type UserStatistics struct {
+	Statistics []Statistics `json:"Statistics" xml:"Statistics"`
+}

+ 21 - 0
services/smartag/struct_users_in_describe_smart_access_gateway_client_users.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// UsersInDescribeSmartAccessGatewayClientUsers is a nested struct in smartag response
+type UsersInDescribeSmartAccessGatewayClientUsers struct {
+	User []User `json:"User" xml:"User"`
+}

+ 21 - 0
services/smartag/struct_users_in_describe_user_online_clients.go

@@ -0,0 +1,21 @@
+package smartag
+
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+//
+// Code generated by Alibaba Cloud SDK Code Generator.
+// Changes may cause incorrect behavior and will be lost if the code is regenerated.
+
+// UsersInDescribeUserOnlineClients is a nested struct in smartag response
+type UsersInDescribeUserOnlineClients struct {
+	User []User `json:"User" xml:"User"`
+}

+ 2 - 0
services/smartag/upgrade_smart_access_gateway.go

@@ -81,8 +81,10 @@ type UpgradeSmartAccessGatewayRequest struct {
 	BandWidthSpec        requests.Integer `position:"Query" name:"BandWidthSpec"`
 	ResourceOwnerAccount string           `position:"Query" name:"ResourceOwnerAccount"`
 	OwnerAccount         string           `position:"Query" name:"OwnerAccount"`
+	UserCount            requests.Integer `position:"Query" name:"UserCount"`
 	SmartAGId            string           `position:"Query" name:"SmartAGId"`
 	OwnerId              requests.Integer `position:"Query" name:"OwnerId"`
+	DataPlan             requests.Integer `position:"Query" name:"DataPlan"`
 }
 
 // UpgradeSmartAccessGatewayResponse is the response struct for api UpgradeSmartAccessGateway