diff --git a/tools/dpvs-agent/models/ipset_creation_option.go b/tools/dpvs-agent/models/ipset_creation_option.go
new file mode 100644
index 000000000..d205ab480
--- /dev/null
+++ b/tools/dpvs-agent/models/ipset_creation_option.go
@@ -0,0 +1,118 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"context"
+	"encoding/json"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IpsetCreationOption IpsetCreationOption contains all available options required in creating an ipset.
+//
+// swagger:model IpsetCreationOption
+type IpsetCreationOption struct {
+
+	// comment
+	Comment *bool `json:"Comment,omitempty"`
+
+	// family
+	// Enum: [ipv4 ipv6]
+	Family string `json:"Family,omitempty"`
+
+	// hash max elem
+	HashMaxElem uint32 `json:"HashMaxElem,omitempty"`
+
+	// hash size
+	HashSize uint32 `json:"HashSize,omitempty"`
+
+	// vaild format: ipv4-ipv4, ipv4/pfx, ipv6/pfx
+	//
+	Range string `json:"Range,omitempty"`
+}
+
+// Validate validates this ipset creation option
+func (m *IpsetCreationOption) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateFamily(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var ipsetCreationOptionTypeFamilyPropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["ipv4","ipv6"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		ipsetCreationOptionTypeFamilyPropEnum = append(ipsetCreationOptionTypeFamilyPropEnum, v)
+	}
+}
+
+const (
+
+	// IpsetCreationOptionFamilyIPV4 captures enum value "ipv4"
+	IpsetCreationOptionFamilyIPV4 string = "ipv4"
+
+	// IpsetCreationOptionFamilyIPV6 captures enum value "ipv6"
+	IpsetCreationOptionFamilyIPV6 string = "ipv6"
+)
+
+// prop value enum
+func (m *IpsetCreationOption) validateFamilyEnum(path, location string, value string) error {
+	if err := validate.EnumCase(path, location, value, ipsetCreationOptionTypeFamilyPropEnum, true); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *IpsetCreationOption) validateFamily(formats strfmt.Registry) error {
+	if swag.IsZero(m.Family) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateFamilyEnum("Family", "body", m.Family); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// ContextValidate validates this ipset creation option based on context it is used
+func (m *IpsetCreationOption) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IpsetCreationOption) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IpsetCreationOption) UnmarshalBinary(b []byte) error {
+	var res IpsetCreationOption
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/tools/dpvs-agent/models/ipset_info.go b/tools/dpvs-agent/models/ipset_info.go
new file mode 100644
index 000000000..986d8e1fb
--- /dev/null
+++ b/tools/dpvs-agent/models/ipset_info.go
@@ -0,0 +1,335 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"context"
+	"encoding/json"
+	"strconv"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IpsetInfo IpsetInfo contains all parameters and information for ipset operations.
+//
+// swagger:model IpsetInfo
+type IpsetInfo struct {
+
+	// comment
+	// Max Length: 32
+	// Min Length: 1
+	Comment string `json:"Comment,omitempty"`
+
+	// creation options
+	CreationOptions *IpsetCreationOption `json:"CreationOptions,omitempty"`
+
+	// entries
+	Entries []*IpsetMember `json:"Entries"`
+
+	// name
+	// Max Length: 32
+	// Min Length: 1
+	Name string `json:"Name,omitempty"`
+
+	// opertaion type code
+	// Enum: [0 1 2 3 4 5 6]
+	Opcode int64 `json:"Opcode,omitempty"`
+
+	// type
+	// Enum: [bitmap:ip bitmap:ip,mac bitmap:port hash:ip hash:net hash:ip,port hash:net,port hash:net,port,iface hash:ip,port,ip hash:ip,port,net hash:net,port,net hash:net,port,net,port]
+	Type string `json:"Type,omitempty"`
+}
+
+// Validate validates this ipset info
+func (m *IpsetInfo) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateComment(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if err := m.validateCreationOptions(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if err := m.validateEntries(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if err := m.validateName(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if err := m.validateOpcode(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if err := m.validateType(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IpsetInfo) validateComment(formats strfmt.Registry) error {
+	if swag.IsZero(m.Comment) { // not required
+		return nil
+	}
+
+	if err := validate.MinLength("Comment", "body", m.Comment, 1); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("Comment", "body", m.Comment, 32); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IpsetInfo) validateCreationOptions(formats strfmt.Registry) error {
+	if swag.IsZero(m.CreationOptions) { // not required
+		return nil
+	}
+
+	if m.CreationOptions != nil {
+		if err := m.CreationOptions.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("CreationOptions")
+			} else if ce, ok := err.(*errors.CompositeError); ok {
+				return ce.ValidateName("CreationOptions")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IpsetInfo) validateEntries(formats strfmt.Registry) error {
+	if swag.IsZero(m.Entries) { // not required
+		return nil
+	}
+
+	for i := 0; i < len(m.Entries); i++ {
+		if swag.IsZero(m.Entries[i]) { // not required
+			continue
+		}
+
+		if m.Entries[i] != nil {
+			if err := m.Entries[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName("Entries" + "." + strconv.Itoa(i))
+				} else if ce, ok := err.(*errors.CompositeError); ok {
+					return ce.ValidateName("Entries" + "." + strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	return nil
+}
+
+func (m *IpsetInfo) validateName(formats strfmt.Registry) error {
+	if swag.IsZero(m.Name) { // not required
+		return nil
+	}
+
+	if err := validate.MinLength("Name", "body", m.Name, 1); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("Name", "body", m.Name, 32); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var ipsetInfoTypeOpcodePropEnum []interface{}
+
+func init() {
+	var res []int64
+	if err := json.Unmarshal([]byte(`[0,1,2,3,4,5,6]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		ipsetInfoTypeOpcodePropEnum = append(ipsetInfoTypeOpcodePropEnum, v)
+	}
+}
+
+// prop value enum
+func (m *IpsetInfo) validateOpcodeEnum(path, location string, value int64) error {
+	if err := validate.EnumCase(path, location, value, ipsetInfoTypeOpcodePropEnum, true); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *IpsetInfo) validateOpcode(formats strfmt.Registry) error {
+	if swag.IsZero(m.Opcode) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateOpcodeEnum("Opcode", "body", m.Opcode); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var ipsetInfoTypeTypePropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["bitmap:ip","bitmap:ip,mac","bitmap:port","hash:ip","hash:net","hash:ip,port","hash:net,port","hash:net,port,iface","hash:ip,port,ip","hash:ip,port,net","hash:net,port,net","hash:net,port,net,port"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		ipsetInfoTypeTypePropEnum = append(ipsetInfoTypeTypePropEnum, v)
+	}
+}
+
+const (
+
+	// IpsetInfoTypeBitmapIP captures enum value "bitmap:ip"
+	IpsetInfoTypeBitmapIP string = "bitmap:ip"
+
+	// IpsetInfoTypeBitmapIPMac captures enum value "bitmap:ip,mac"
+	IpsetInfoTypeBitmapIPMac string = "bitmap:ip,mac"
+
+	// IpsetInfoTypeBitmapPort captures enum value "bitmap:port"
+	IpsetInfoTypeBitmapPort string = "bitmap:port"
+
+	// IpsetInfoTypeHashIP captures enum value "hash:ip"
+	IpsetInfoTypeHashIP string = "hash:ip"
+
+	// IpsetInfoTypeHashNet captures enum value "hash:net"
+	IpsetInfoTypeHashNet string = "hash:net"
+
+	// IpsetInfoTypeHashIPPort captures enum value "hash:ip,port"
+	IpsetInfoTypeHashIPPort string = "hash:ip,port"
+
+	// IpsetInfoTypeHashNetPort captures enum value "hash:net,port"
+	IpsetInfoTypeHashNetPort string = "hash:net,port"
+
+	// IpsetInfoTypeHashNetPortIface captures enum value "hash:net,port,iface"
+	IpsetInfoTypeHashNetPortIface string = "hash:net,port,iface"
+
+	// IpsetInfoTypeHashIPPortIP captures enum value "hash:ip,port,ip"
+	IpsetInfoTypeHashIPPortIP string = "hash:ip,port,ip"
+
+	// IpsetInfoTypeHashIPPortNet captures enum value "hash:ip,port,net"
+	IpsetInfoTypeHashIPPortNet string = "hash:ip,port,net"
+
+	// IpsetInfoTypeHashNetPortNet captures enum value "hash:net,port,net"
+	IpsetInfoTypeHashNetPortNet string = "hash:net,port,net"
+
+	// IpsetInfoTypeHashNetPortNetPort captures enum value "hash:net,port,net,port"
+	IpsetInfoTypeHashNetPortNetPort string = "hash:net,port,net,port"
+)
+
+// prop value enum
+func (m *IpsetInfo) validateTypeEnum(path, location string, value string) error {
+	if err := validate.EnumCase(path, location, value, ipsetInfoTypeTypePropEnum, true); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m *IpsetInfo) validateType(formats strfmt.Registry) error {
+	if swag.IsZero(m.Type) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := m.validateTypeEnum("Type", "body", m.Type); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// ContextValidate validate this ipset info based on the context it is used
+func (m *IpsetInfo) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.contextValidateCreationOptions(ctx, formats); err != nil {
+		res = append(res, err)
+	}
+
+	if err := m.contextValidateEntries(ctx, formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IpsetInfo) contextValidateCreationOptions(ctx context.Context, formats strfmt.Registry) error {
+
+	if m.CreationOptions != nil {
+		if err := m.CreationOptions.ContextValidate(ctx, formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("CreationOptions")
+			} else if ce, ok := err.(*errors.CompositeError); ok {
+				return ce.ValidateName("CreationOptions")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (m *IpsetInfo) contextValidateEntries(ctx context.Context, formats strfmt.Registry) error {
+
+	for i := 0; i < len(m.Entries); i++ {
+
+		if m.Entries[i] != nil {
+			if err := m.Entries[i].ContextValidate(ctx, formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName("Entries" + "." + strconv.Itoa(i))
+				} else if ce, ok := err.(*errors.CompositeError); ok {
+					return ce.ValidateName("Entries" + "." + strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IpsetInfo) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IpsetInfo) UnmarshalBinary(b []byte) error {
+	var res IpsetInfo
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/tools/dpvs-agent/models/ipset_info_array.go b/tools/dpvs-agent/models/ipset_info_array.go
new file mode 100644
index 000000000..432e65ff3
--- /dev/null
+++ b/tools/dpvs-agent/models/ipset_info_array.go
@@ -0,0 +1,119 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"context"
+	"strconv"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/swag"
+)
+
+// IpsetInfoArray IpsetInfoArray contains an array of ipset.
+//
+// swagger:model IpsetInfoArray
+type IpsetInfoArray struct {
+
+	// count
+	Count int32 `json:"Count,omitempty"`
+
+	// infos
+	Infos []*IpsetInfo `json:"Infos"`
+}
+
+// Validate validates this ipset info array
+func (m *IpsetInfoArray) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateInfos(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IpsetInfoArray) validateInfos(formats strfmt.Registry) error {
+	if swag.IsZero(m.Infos) { // not required
+		return nil
+	}
+
+	for i := 0; i < len(m.Infos); i++ {
+		if swag.IsZero(m.Infos[i]) { // not required
+			continue
+		}
+
+		if m.Infos[i] != nil {
+			if err := m.Infos[i].Validate(formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName("Infos" + "." + strconv.Itoa(i))
+				} else if ce, ok := err.(*errors.CompositeError); ok {
+					return ce.ValidateName("Infos" + "." + strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	return nil
+}
+
+// ContextValidate validate this ipset info array based on the context it is used
+func (m *IpsetInfoArray) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.contextValidateInfos(ctx, formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IpsetInfoArray) contextValidateInfos(ctx context.Context, formats strfmt.Registry) error {
+
+	for i := 0; i < len(m.Infos); i++ {
+
+		if m.Infos[i] != nil {
+			if err := m.Infos[i].ContextValidate(ctx, formats); err != nil {
+				if ve, ok := err.(*errors.Validation); ok {
+					return ve.ValidateName("Infos" + "." + strconv.Itoa(i))
+				} else if ce, ok := err.(*errors.CompositeError); ok {
+					return ce.ValidateName("Infos" + "." + strconv.Itoa(i))
+				}
+				return err
+			}
+		}
+
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IpsetInfoArray) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IpsetInfoArray) UnmarshalBinary(b []byte) error {
+	var res IpsetInfoArray
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/tools/dpvs-agent/models/ipset_member.go b/tools/dpvs-agent/models/ipset_member.go
new file mode 100644
index 000000000..bfc969e92
--- /dev/null
+++ b/tools/dpvs-agent/models/ipset_member.go
@@ -0,0 +1,137 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"context"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IpsetMember IpsetMember represents a specific entry in ipset.
+//
+// swagger:model IpsetMember
+type IpsetMember struct {
+
+	// comment
+	// Max Length: 32
+	// Min Length: 1
+	Comment string `json:"Comment,omitempty"`
+
+	// type specific entry data, for example
+	// * 192.168.1.0/29 (bitmap:ip)
+	// * 192.168.88.0/24,tcp:8080-8082 (hash:net)
+	// * 2001::1,8080-8082,2002::aaaa:bbbb:ccc0:0/108 (hash:ip,port,net)
+	//
+	Entry string `json:"Entry,omitempty"`
+
+	// options
+	Options *IpsetOption `json:"Options,omitempty"`
+}
+
+// Validate validates this ipset member
+func (m *IpsetMember) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.validateComment(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if err := m.validateOptions(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IpsetMember) validateComment(formats strfmt.Registry) error {
+	if swag.IsZero(m.Comment) { // not required
+		return nil
+	}
+
+	if err := validate.MinLength("Comment", "body", m.Comment, 1); err != nil {
+		return err
+	}
+
+	if err := validate.MaxLength("Comment", "body", m.Comment, 32); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (m *IpsetMember) validateOptions(formats strfmt.Registry) error {
+	if swag.IsZero(m.Options) { // not required
+		return nil
+	}
+
+	if m.Options != nil {
+		if err := m.Options.Validate(formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("Options")
+			} else if ce, ok := err.(*errors.CompositeError); ok {
+				return ce.ValidateName("Options")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// ContextValidate validate this ipset member based on the context it is used
+func (m *IpsetMember) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
+	var res []error
+
+	if err := m.contextValidateOptions(ctx, formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+func (m *IpsetMember) contextValidateOptions(ctx context.Context, formats strfmt.Registry) error {
+
+	if m.Options != nil {
+		if err := m.Options.ContextValidate(ctx, formats); err != nil {
+			if ve, ok := err.(*errors.Validation); ok {
+				return ve.ValidateName("Options")
+			} else if ce, ok := err.(*errors.CompositeError); ok {
+				return ce.ValidateName("Options")
+			}
+			return err
+		}
+	}
+
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IpsetMember) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IpsetMember) UnmarshalBinary(b []byte) error {
+	var res IpsetMember
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/tools/dpvs-agent/models/ipset_option.go b/tools/dpvs-agent/models/ipset_option.go
new file mode 100644
index 000000000..c8a302ada
--- /dev/null
+++ b/tools/dpvs-agent/models/ipset_option.go
@@ -0,0 +1,53 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package models
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"context"
+
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/swag"
+)
+
+// IpsetOption IpsetOption defines common options for ipset operations.
+//
+// swagger:model IpsetOption
+type IpsetOption struct {
+
+	// force
+	Force *bool `json:"Force,omitempty"`
+
+	// no match
+	NoMatch *bool `json:"NoMatch,omitempty"`
+}
+
+// Validate validates this ipset option
+func (m *IpsetOption) Validate(formats strfmt.Registry) error {
+	return nil
+}
+
+// ContextValidate validates this ipset option based on context it is used
+func (m *IpsetOption) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (m *IpsetOption) MarshalBinary() ([]byte, error) {
+	if m == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(m)
+}
+
+// UnmarshalBinary interface implementation
+func (m *IpsetOption) UnmarshalBinary(b []byte) error {
+	var res IpsetOption
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*m = res
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/embedded_spec.go b/tools/dpvs-agent/restapi/embedded_spec.go
index 1e474f23c..259038171 100644
--- a/tools/dpvs-agent/restapi/embedded_spec.go
+++ b/tools/dpvs-agent/restapi/embedded_spec.go
@@ -268,7 +268,7 @@ func init() {
         "tags": [
           "device"
         ],
-        "summary": "ip addr add 10.0.0.1/32 dev eth0: Set ip cird to linux net device",
+        "summary": "ip addr add 10.0.0.1/32 dev eth0: Set ip cird to linux net device\n",
         "parameters": [
           {
             "$ref": "#/parameters/snapshot"
@@ -299,7 +299,7 @@ func init() {
         "tags": [
           "device"
         ],
-        "summary": "ip addr del 10.0.0.1/32 dev eth0: Delete ip cird fron linux net device",
+        "summary": "ip addr del 10.0.0.1/32 dev eth0: Delete ip cird fron linux net device\n",
         "parameters": [
           {
             "$ref": "#/parameters/device-name"
@@ -360,7 +360,7 @@ func init() {
         "tags": [
           "device"
         ],
-        "summary": "dpip link set ${nic-name} [forward2kni,link,promisc,tc-ingress,tc-egress] [on/up,off/down]",
+        "summary": "dpip link set ${nic-name} [forward2kni,link,promisc,tc-ingress,tc-egress] [on/up,off/down]\n",
         "parameters": [
           {
             "$ref": "#/parameters/device-name"
@@ -566,6 +566,322 @@ func init() {
         }
       }
     },
+    "/ipset": {
+      "get": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Get all the ipsets and members.",
+        "operationId": "GetAll",
+        "responses": {
+          "200": {
+            "description": "Success",
+            "schema": {
+              "$ref": "#/definitions/IpsetInfoArray"
+            }
+          }
+        }
+      }
+    },
+    "/ipset/{name}": {
+      "get": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Get a specific ipset and its members.",
+        "operationId": "Get",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ipset-name"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "schema": {
+              "$ref": "#/definitions/IpsetInfo"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      },
+      "put": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Create an ipset named {name}.",
+        "operationId": "Create",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ipset-name"
+          },
+          {
+            "$ref": "#/parameters/ipset-param"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Replaced",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "201": {
+            "description": "Created",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Delete the ipset named {name}.",
+        "operationId": "Destroy",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ipset-name"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Deleted",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
+          }
+        }
+      }
+    },
+    "/ipset/{name}/member": {
+      "put": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Reset the whole ipset members.",
+        "operationId": "ReplaceMember",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ipset-name"
+          },
+          {
+            "$ref": "#/parameters/ipset-param"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Succeed",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
+          }
+        }
+      },
+      "post": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Add a member to the ipset.",
+        "operationId": "AddMember",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ipset-name"
+          },
+          {
+            "$ref": "#/parameters/ipset-param"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Existed",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "201": {
+            "description": "Created",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Delete a member from the ipset.",
+        "operationId": "DelMember",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ipset-name"
+          },
+          {
+            "$ref": "#/parameters/ipset-param"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Succeed",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
+          }
+        }
+      }
+    },
+    "/ipset/{name}/{object}": {
+      "get": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Check if an object in the ipset.",
+        "operationId": "IsIn",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ipset-name"
+          },
+          {
+            "$ref": "#/parameters/ipset-object"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Succeed",
+            "schema": {
+              "type": "object",
+              "properties": {
+                "Message": {
+                  "type": "string",
+                  "enum": [
+                    "Match",
+                    "MisMatch"
+                  ]
+                },
+                "Result": {
+                  "type": "boolean"
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
+          }
+        }
+      }
+    },
     "/vs": {
       "get": {
         "tags": [
@@ -1386,7 +1702,7 @@ func init() {
             "description": "Success"
           },
           "270": {
-            "description": "the rss-config parameter is outdated, update nothing and return the latest rs info",
+            "description": "the rss-config parameter is outdated, update nothing and return the latest rs info\n",
             "schema": {
               "$ref": "#/definitions/VirtualServerSpecExpand"
             },
@@ -1472,19 +1788,159 @@ func init() {
         }
       }
     },
-    "Error": {
-      "type": "string"
-    },
-    "InetAddrSpec": {
+    "Error": {
+      "type": "string"
+    },
+    "InetAddrSpec": {
+      "properties": {
+        "addr": {
+          "type": "string"
+        },
+        "broadcast": {
+          "type": "string"
+        },
+        "scope": {
+          "type": "string"
+        }
+      }
+    },
+    "IpsetCreationOption": {
+      "description": "IpsetCreationOption contains all available options required in creating an ipset.\n",
+      "properties": {
+        "Comment": {
+          "type": "boolean",
+          "default": false
+        },
+        "Family": {
+          "type": "string",
+          "enum": [
+            "ipv4",
+            "ipv6"
+          ]
+        },
+        "HashMaxElem": {
+          "type": "integer",
+          "format": "uint32"
+        },
+        "HashSize": {
+          "type": "integer",
+          "format": "uint32"
+        },
+        "Range": {
+          "description": "vaild format: ipv4-ipv4, ipv4/pfx, ipv6/pfx\n",
+          "type": "string"
+        }
+      }
+    },
+    "IpsetInfo": {
+      "description": "IpsetInfo contains all parameters and information for ipset operations.\n",
+      "type": "object",
+      "properties": {
+        "Comment": {
+          "type": "string",
+          "maxLength": 32,
+          "minLength": 1
+        },
+        "CreationOptions": {
+          "$ref": "#/definitions/IpsetCreationOption"
+        },
+        "Entries": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/IpsetMember"
+          }
+        },
+        "Name": {
+          "type": "string",
+          "maxLength": 32,
+          "minLength": 1
+        },
+        "Opcode": {
+          "description": "opertaion type code",
+          "type": "integer",
+          "enum": [
+            0,
+            1,
+            2,
+            3,
+            4,
+            5,
+            6
+          ],
+          "x-enum-varnames": [
+            "Add",
+            "Del",
+            "Test",
+            "Create",
+            "Destroy",
+            "Flush",
+            "List"
+          ]
+        },
+        "Type": {
+          "type": "string",
+          "enum": [
+            "bitmap:ip",
+            "bitmap:ip,mac",
+            "bitmap:port",
+            "hash:ip",
+            "hash:net",
+            "hash:ip,port",
+            "hash:net,port",
+            "hash:net,port,iface",
+            "hash:ip,port,ip",
+            "hash:ip,port,net",
+            "hash:net,port,net",
+            "hash:net,port,net,port"
+          ]
+        }
+      }
+    },
+    "IpsetInfoArray": {
+      "description": "IpsetInfoArray contains an array of ipset.",
+      "type": "object",
+      "properties": {
+        "Count": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "Infos": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/IpsetInfo"
+          }
+        }
+      }
+    },
+    "IpsetMember": {
+      "description": "IpsetMember represents a specific entry in ipset.",
+      "type": "object",
+      "properties": {
+        "Comment": {
+          "type": "string",
+          "maxLength": 32,
+          "minLength": 1
+        },
+        "Entry": {
+          "description": "type specific entry data, for example\n* 192.168.1.0/29 (bitmap:ip)\n* 192.168.88.0/24,tcp:8080-8082 (hash:net)\n* 2001::1,8080-8082,2002::aaaa:bbbb:ccc0:0/108 (hash:ip,port,net)\n",
+          "type": "string"
+        },
+        "Options": {
+          "$ref": "#/definitions/IpsetOption"
+        }
+      }
+    },
+    "IpsetOption": {
+      "description": "IpsetOption defines common options for ipset operations.",
+      "type": "object",
       "properties": {
-        "addr": {
-          "type": "string"
-        },
-        "broadcast": {
-          "type": "string"
+        "Force": {
+          "type": "boolean",
+          "default": false
         },
-        "scope": {
-          "type": "string"
+        "NoMatch": {
+          "type": "boolean",
+          "default": false
         }
       }
     },
@@ -2138,6 +2594,25 @@ func init() {
       "name": "healthcheck",
       "in": "query"
     },
+    "ipset-name": {
+      "type": "string",
+      "name": "name",
+      "in": "path",
+      "required": true
+    },
+    "ipset-object": {
+      "type": "string",
+      "name": "object",
+      "in": "path",
+      "required": true
+    },
+    "ipset-param": {
+      "name": "ipsetParam",
+      "in": "body",
+      "schema": {
+        "$ref": "#/definitions/IpsetInfo"
+      }
+    },
     "laddr-config": {
       "name": "spec",
       "in": "body",
@@ -2277,6 +2752,10 @@ func init() {
     {
       "description": "arp",
       "name": "arp"
+    },
+    {
+      "description": "ipset",
+      "name": "ipset"
     }
   ]
 }`))
@@ -2584,7 +3063,7 @@ func init() {
         "tags": [
           "device"
         ],
-        "summary": "ip addr add 10.0.0.1/32 dev eth0: Set ip cird to linux net device",
+        "summary": "ip addr add 10.0.0.1/32 dev eth0: Set ip cird to linux net device\n",
         "parameters": [
           {
             "type": "boolean",
@@ -2625,7 +3104,7 @@ func init() {
         "tags": [
           "device"
         ],
-        "summary": "ip addr del 10.0.0.1/32 dev eth0: Delete ip cird fron linux net device",
+        "summary": "ip addr del 10.0.0.1/32 dev eth0: Delete ip cird fron linux net device\n",
         "parameters": [
           {
             "type": "string",
@@ -2702,7 +3181,7 @@ func init() {
         "tags": [
           "device"
         ],
-        "summary": "dpip link set ${nic-name} [forward2kni,link,promisc,tc-ingress,tc-egress] [on/up,off/down]",
+        "summary": "dpip link set ${nic-name} [forward2kni,link,promisc,tc-ingress,tc-egress] [on/up,off/down]\n",
         "parameters": [
           {
             "type": "string",
@@ -2748,31 +3227,254 @@ func init() {
           "200": {
             "description": "Success",
             "schema": {
-              "type": "string"
-            }
-          },
-          "500": {
-            "description": "Failure",
-            "schema": {
-              "type": "string"
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Failure",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      }
+    },
+    "/device/{name}/route": {
+      "get": {
+        "tags": [
+          "device"
+        ],
+        "summary": "display special net device route",
+        "parameters": [
+          {
+            "type": "boolean",
+            "default": false,
+            "name": "stats",
+            "in": "query"
+          },
+          {
+            "type": "string",
+            "name": "name",
+            "in": "path",
+            "required": true
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      },
+      "put": {
+        "tags": [
+          "device"
+        ],
+        "summary": "add/update special net device route",
+        "parameters": [
+          {
+            "type": "string",
+            "name": "name",
+            "in": "path",
+            "required": true
+          },
+          {
+            "name": "spec",
+            "in": "body",
+            "schema": {
+              "$ref": "#/definitions/RouteSpec"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Update exist route Success",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "201": {
+            "description": "Add new route Success",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Failed",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "device"
+        ],
+        "summary": "delete special net device route",
+        "parameters": [
+          {
+            "type": "string",
+            "name": "name",
+            "in": "path",
+            "required": true
+          },
+          {
+            "name": "spec",
+            "in": "body",
+            "schema": {
+              "$ref": "#/definitions/RouteSpec"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "delete route Success",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Failed",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      }
+    },
+    "/device/{name}/vlan": {
+      "get": {
+        "tags": [
+          "device"
+        ],
+        "summary": "display all net device list",
+        "parameters": [
+          {
+            "type": "string",
+            "name": "name",
+            "in": "path",
+            "required": true
+          },
+          {
+            "type": "boolean",
+            "default": false,
+            "name": "stats",
+            "in": "query"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Not Found",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      },
+      "put": {
+        "tags": [
+          "device"
+        ],
+        "summary": "add/update special net device ",
+        "parameters": [
+          {
+            "type": "string",
+            "name": "name",
+            "in": "path",
+            "required": true
+          },
+          {
+            "name": "spec",
+            "in": "body",
+            "schema": {
+              "$ref": "#/definitions/VlanSpec"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Failed",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "device"
+        ],
+        "summary": "delete special net device",
+        "parameters": [
+          {
+            "type": "string",
+            "name": "name",
+            "in": "path",
+            "required": true
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Failed",
+            "schema": {
+              "type": "string"
+            }
+          }
+        }
+      }
+    },
+    "/ipset": {
+      "get": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Get all the ipsets and members.",
+        "operationId": "GetAll",
+        "responses": {
+          "200": {
+            "description": "Success",
+            "schema": {
+              "$ref": "#/definitions/IpsetInfoArray"
             }
           }
         }
       }
     },
-    "/device/{name}/route": {
+    "/ipset/{name}": {
       "get": {
         "tags": [
-          "device"
+          "ipset"
         ],
-        "summary": "display special net device route",
+        "summary": "Get a specific ipset and its members.",
+        "operationId": "Get",
         "parameters": [
-          {
-            "type": "boolean",
-            "default": false,
-            "name": "stats",
-            "in": "query"
-          },
           {
             "type": "string",
             "name": "name",
@@ -2784,11 +3486,11 @@ func init() {
           "200": {
             "description": "Success",
             "schema": {
-              "type": "string"
+              "$ref": "#/definitions/IpsetInfo"
             }
           },
           "404": {
-            "description": "Not Found",
+            "description": "Ipset not found",
             "schema": {
               "type": "string"
             }
@@ -2797,9 +3499,10 @@ func init() {
       },
       "put": {
         "tags": [
-          "device"
+          "ipset"
         ],
-        "summary": "add/update special net device route",
+        "summary": "Create an ipset named {name}.",
+        "operationId": "Create",
         "parameters": [
           {
             "type": "string",
@@ -2808,76 +3511,91 @@ func init() {
             "required": true
           },
           {
-            "name": "spec",
+            "name": "ipsetParam",
             "in": "body",
             "schema": {
-              "$ref": "#/definitions/RouteSpec"
+              "$ref": "#/definitions/IpsetInfo"
             }
           }
         ],
         "responses": {
           "200": {
-            "description": "Update exist route Success",
+            "description": "Replaced",
             "schema": {
               "type": "string"
             }
           },
           "201": {
-            "description": "Add new route Success",
+            "description": "Created",
             "schema": {
               "type": "string"
             }
           },
-          "500": {
-            "description": "Failed",
+          "400": {
+            "description": "Invalid ipset parameter",
             "schema": {
               "type": "string"
             }
+          },
+          "404": {
+            "description": "Ipset not found",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
           }
         }
       },
       "delete": {
         "tags": [
-          "device"
+          "ipset"
         ],
-        "summary": "delete special net device route",
+        "summary": "Delete the ipset named {name}.",
+        "operationId": "Destroy",
         "parameters": [
           {
             "type": "string",
             "name": "name",
             "in": "path",
             "required": true
-          },
-          {
-            "name": "spec",
-            "in": "body",
-            "schema": {
-              "$ref": "#/definitions/RouteSpec"
-            }
           }
         ],
         "responses": {
           "200": {
-            "description": "delete route Success",
+            "description": "Deleted",
             "schema": {
               "type": "string"
             }
           },
-          "500": {
-            "description": "Failed",
+          "404": {
+            "description": "Ipset not found",
             "schema": {
               "type": "string"
             }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
           }
         }
       }
     },
-    "/device/{name}/vlan": {
-      "get": {
+    "/ipset/{name}/member": {
+      "put": {
         "tags": [
-          "device"
+          "ipset"
         ],
-        "summary": "display all net device list",
+        "summary": "Reset the whole ipset members.",
+        "operationId": "ReplaceMember",
         "parameters": [
           {
             "type": "string",
@@ -2886,32 +3604,47 @@ func init() {
             "required": true
           },
           {
-            "type": "boolean",
-            "default": false,
-            "name": "stats",
-            "in": "query"
+            "name": "ipsetParam",
+            "in": "body",
+            "schema": {
+              "$ref": "#/definitions/IpsetInfo"
+            }
           }
         ],
         "responses": {
           "200": {
-            "description": "Success",
+            "description": "Succeed",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
             "schema": {
               "type": "string"
             }
           },
           "404": {
-            "description": "Not Found",
+            "description": "Ipset not found",
             "schema": {
               "type": "string"
             }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
           }
         }
       },
-      "put": {
+      "post": {
         "tags": [
-          "device"
+          "ipset"
         ],
-        "summary": "add/update special net device ",
+        "summary": "Add a member to the ipset.",
+        "operationId": "AddMember",
         "parameters": [
           {
             "type": "string",
@@ -2920,53 +3653,155 @@ func init() {
             "required": true
           },
           {
-            "name": "spec",
+            "name": "ipsetParam",
             "in": "body",
             "schema": {
-              "$ref": "#/definitions/VlanSpec"
+              "$ref": "#/definitions/IpsetInfo"
             }
           }
         ],
         "responses": {
           "200": {
-            "description": "Success",
+            "description": "Existed",
             "schema": {
               "type": "string"
             }
           },
-          "500": {
-            "description": "Failed",
+          "201": {
+            "description": "Created",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
             "schema": {
               "type": "string"
             }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
           }
         }
       },
       "delete": {
         "tags": [
-          "device"
+          "ipset"
         ],
-        "summary": "delete special net device",
+        "summary": "Delete a member from the ipset.",
+        "operationId": "DelMember",
         "parameters": [
           {
             "type": "string",
             "name": "name",
             "in": "path",
             "required": true
+          },
+          {
+            "name": "ipsetParam",
+            "in": "body",
+            "schema": {
+              "$ref": "#/definitions/IpsetInfo"
+            }
           }
         ],
         "responses": {
           "200": {
-            "description": "Success",
+            "description": "Succeed",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
             "schema": {
               "type": "string"
             }
           },
           "500": {
-            "description": "Failed",
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
+          }
+        }
+      }
+    },
+    "/ipset/{name}/{object}": {
+      "get": {
+        "tags": [
+          "ipset"
+        ],
+        "summary": "Check if an object in the ipset.",
+        "operationId": "IsIn",
+        "parameters": [
+          {
+            "type": "string",
+            "name": "name",
+            "in": "path",
+            "required": true
+          },
+          {
+            "type": "string",
+            "name": "object",
+            "in": "path",
+            "required": true
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Succeed",
+            "schema": {
+              "type": "object",
+              "properties": {
+                "Message": {
+                  "type": "string",
+                  "enum": [
+                    "Match",
+                    "MisMatch"
+                  ]
+                },
+                "Result": {
+                  "type": "boolean"
+                }
+              }
+            }
+          },
+          "400": {
+            "description": "Invalid ipset parameter",
+            "schema": {
+              "type": "string"
+            }
+          },
+          "404": {
+            "description": "Ipset not found",
             "schema": {
               "type": "string"
             }
+          },
+          "500": {
+            "description": "Service not available",
+            "schema": {
+              "type": "string"
+            },
+            "x-go-name": "Failure"
           }
         }
       }
@@ -3942,7 +4777,7 @@ func init() {
             "description": "Success"
           },
           "270": {
-            "description": "the rss-config parameter is outdated, update nothing and return the latest rs info",
+            "description": "the rss-config parameter is outdated, update nothing and return the latest rs info\n",
             "schema": {
               "$ref": "#/definitions/VirtualServerSpecExpand"
             },
@@ -4044,6 +4879,146 @@ func init() {
         }
       }
     },
+    "IpsetCreationOption": {
+      "description": "IpsetCreationOption contains all available options required in creating an ipset.\n",
+      "properties": {
+        "Comment": {
+          "type": "boolean",
+          "default": false
+        },
+        "Family": {
+          "type": "string",
+          "enum": [
+            "ipv4",
+            "ipv6"
+          ]
+        },
+        "HashMaxElem": {
+          "type": "integer",
+          "format": "uint32"
+        },
+        "HashSize": {
+          "type": "integer",
+          "format": "uint32"
+        },
+        "Range": {
+          "description": "vaild format: ipv4-ipv4, ipv4/pfx, ipv6/pfx\n",
+          "type": "string"
+        }
+      }
+    },
+    "IpsetInfo": {
+      "description": "IpsetInfo contains all parameters and information for ipset operations.\n",
+      "type": "object",
+      "properties": {
+        "Comment": {
+          "type": "string",
+          "maxLength": 32,
+          "minLength": 1
+        },
+        "CreationOptions": {
+          "$ref": "#/definitions/IpsetCreationOption"
+        },
+        "Entries": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/IpsetMember"
+          }
+        },
+        "Name": {
+          "type": "string",
+          "maxLength": 32,
+          "minLength": 1
+        },
+        "Opcode": {
+          "description": "opertaion type code",
+          "type": "integer",
+          "enum": [
+            0,
+            1,
+            2,
+            3,
+            4,
+            5,
+            6
+          ],
+          "x-enum-varnames": [
+            "Add",
+            "Del",
+            "Test",
+            "Create",
+            "Destroy",
+            "Flush",
+            "List"
+          ]
+        },
+        "Type": {
+          "type": "string",
+          "enum": [
+            "bitmap:ip",
+            "bitmap:ip,mac",
+            "bitmap:port",
+            "hash:ip",
+            "hash:net",
+            "hash:ip,port",
+            "hash:net,port",
+            "hash:net,port,iface",
+            "hash:ip,port,ip",
+            "hash:ip,port,net",
+            "hash:net,port,net",
+            "hash:net,port,net,port"
+          ]
+        }
+      }
+    },
+    "IpsetInfoArray": {
+      "description": "IpsetInfoArray contains an array of ipset.",
+      "type": "object",
+      "properties": {
+        "Count": {
+          "type": "integer",
+          "format": "int32"
+        },
+        "Infos": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/IpsetInfo"
+          }
+        }
+      }
+    },
+    "IpsetMember": {
+      "description": "IpsetMember represents a specific entry in ipset.",
+      "type": "object",
+      "properties": {
+        "Comment": {
+          "type": "string",
+          "maxLength": 32,
+          "minLength": 1
+        },
+        "Entry": {
+          "description": "type specific entry data, for example\n* 192.168.1.0/29 (bitmap:ip)\n* 192.168.88.0/24,tcp:8080-8082 (hash:net)\n* 2001::1,8080-8082,2002::aaaa:bbbb:ccc0:0/108 (hash:ip,port,net)\n",
+          "type": "string"
+        },
+        "Options": {
+          "$ref": "#/definitions/IpsetOption"
+        }
+      }
+    },
+    "IpsetOption": {
+      "description": "IpsetOption defines common options for ipset operations.",
+      "type": "object",
+      "properties": {
+        "Force": {
+          "type": "boolean",
+          "default": false
+        },
+        "NoMatch": {
+          "type": "boolean",
+          "default": false
+        }
+      }
+    },
     "LocalAddressExpandList": {
       "properties": {
         "Items": {
@@ -4694,6 +5669,25 @@ func init() {
       "name": "healthcheck",
       "in": "query"
     },
+    "ipset-name": {
+      "type": "string",
+      "name": "name",
+      "in": "path",
+      "required": true
+    },
+    "ipset-object": {
+      "type": "string",
+      "name": "object",
+      "in": "path",
+      "required": true
+    },
+    "ipset-param": {
+      "name": "ipsetParam",
+      "in": "body",
+      "schema": {
+        "$ref": "#/definitions/IpsetInfo"
+      }
+    },
     "laddr-config": {
       "name": "spec",
       "in": "body",
@@ -4833,6 +5827,10 @@ func init() {
     {
       "description": "arp",
       "name": "arp"
+    },
+    {
+      "description": "ipset",
+      "name": "ipset"
     }
   ]
 }`))
diff --git a/tools/dpvs-agent/restapi/operations/dpvs_agent_api.go b/tools/dpvs-agent/restapi/operations/dpvs_agent_api.go
index 8f292b4ba..3a40a7a50 100644
--- a/tools/dpvs-agent/restapi/operations/dpvs_agent_api.go
+++ b/tools/dpvs-agent/restapi/operations/dpvs_agent_api.go
@@ -20,6 +20,7 @@ import (
 	"github.com/go-openapi/swag"
 
 	"github.com/dpvs-agent/restapi/operations/device"
+	"github.com/dpvs-agent/restapi/operations/ipset"
 	"github.com/dpvs-agent/restapi/operations/virtualserver"
 )
 
@@ -45,6 +46,15 @@ func NewDpvsAgentAPI(spec *loads.Document) *DpvsAgentAPI {
 
 		JSONProducer: runtime.JSONProducer(),
 
+		IpsetAddMemberHandler: ipset.AddMemberHandlerFunc(func(params ipset.AddMemberParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.AddMember has not yet been implemented")
+		}),
+		IpsetCreateHandler: ipset.CreateHandlerFunc(func(params ipset.CreateParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.Create has not yet been implemented")
+		}),
+		IpsetDelMemberHandler: ipset.DelMemberHandlerFunc(func(params ipset.DelMemberParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.DelMember has not yet been implemented")
+		}),
 		DeviceDeleteDeviceNameAddrHandler: device.DeleteDeviceNameAddrHandlerFunc(func(params device.DeleteDeviceNameAddrParams) middleware.Responder {
 			return middleware.NotImplemented("operation device.DeleteDeviceNameAddr has not yet been implemented")
 		}),
@@ -75,6 +85,15 @@ func NewDpvsAgentAPI(spec *loads.Document) *DpvsAgentAPI {
 		VirtualserverDeleteVsVipPortRsHandler: virtualserver.DeleteVsVipPortRsHandlerFunc(func(params virtualserver.DeleteVsVipPortRsParams) middleware.Responder {
 			return middleware.NotImplemented("operation virtualserver.DeleteVsVipPortRs has not yet been implemented")
 		}),
+		IpsetDestroyHandler: ipset.DestroyHandlerFunc(func(params ipset.DestroyParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.Destroy has not yet been implemented")
+		}),
+		IpsetGetHandler: ipset.GetHandlerFunc(func(params ipset.GetParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.Get has not yet been implemented")
+		}),
+		IpsetGetAllHandler: ipset.GetAllHandlerFunc(func(params ipset.GetAllParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.GetAll has not yet been implemented")
+		}),
 		DeviceGetDeviceHandler: device.GetDeviceHandlerFunc(func(params device.GetDeviceParams) middleware.Responder {
 			return middleware.NotImplemented("operation device.GetDevice has not yet been implemented")
 		}),
@@ -114,6 +133,9 @@ func NewDpvsAgentAPI(spec *loads.Document) *DpvsAgentAPI {
 		VirtualserverGetVsVipPortRsHandler: virtualserver.GetVsVipPortRsHandlerFunc(func(params virtualserver.GetVsVipPortRsParams) middleware.Responder {
 			return middleware.NotImplemented("operation virtualserver.GetVsVipPortRs has not yet been implemented")
 		}),
+		IpsetIsInHandler: ipset.IsInHandlerFunc(func(params ipset.IsInParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.IsIn has not yet been implemented")
+		}),
 		VirtualserverPostVsVipPortAllowHandler: virtualserver.PostVsVipPortAllowHandlerFunc(func(params virtualserver.PostVsVipPortAllowParams) middleware.Responder {
 			return middleware.NotImplemented("operation virtualserver.PostVsVipPortAllow has not yet been implemented")
 		}),
@@ -159,6 +181,9 @@ func NewDpvsAgentAPI(spec *loads.Document) *DpvsAgentAPI {
 		VirtualserverPutVsVipPortRsHealthHandler: virtualserver.PutVsVipPortRsHealthHandlerFunc(func(params virtualserver.PutVsVipPortRsHealthParams) middleware.Responder {
 			return middleware.NotImplemented("operation virtualserver.PutVsVipPortRsHealth has not yet been implemented")
 		}),
+		IpsetReplaceMemberHandler: ipset.ReplaceMemberHandlerFunc(func(params ipset.ReplaceMemberParams) middleware.Responder {
+			return middleware.NotImplemented("operation ipset.ReplaceMember has not yet been implemented")
+		}),
 	}
 }
 
@@ -195,6 +220,12 @@ type DpvsAgentAPI struct {
 	//   - application/json
 	JSONProducer runtime.Producer
 
+	// IpsetAddMemberHandler sets the operation handler for the add member operation
+	IpsetAddMemberHandler ipset.AddMemberHandler
+	// IpsetCreateHandler sets the operation handler for the create operation
+	IpsetCreateHandler ipset.CreateHandler
+	// IpsetDelMemberHandler sets the operation handler for the del member operation
+	IpsetDelMemberHandler ipset.DelMemberHandler
 	// DeviceDeleteDeviceNameAddrHandler sets the operation handler for the delete device name addr operation
 	DeviceDeleteDeviceNameAddrHandler device.DeleteDeviceNameAddrHandler
 	// DeviceDeleteDeviceNameNetlinkHandler sets the operation handler for the delete device name netlink operation
@@ -215,6 +246,12 @@ type DpvsAgentAPI struct {
 	VirtualserverDeleteVsVipPortLaddrHandler virtualserver.DeleteVsVipPortLaddrHandler
 	// VirtualserverDeleteVsVipPortRsHandler sets the operation handler for the delete vs vip port rs operation
 	VirtualserverDeleteVsVipPortRsHandler virtualserver.DeleteVsVipPortRsHandler
+	// IpsetDestroyHandler sets the operation handler for the destroy operation
+	IpsetDestroyHandler ipset.DestroyHandler
+	// IpsetGetHandler sets the operation handler for the get operation
+	IpsetGetHandler ipset.GetHandler
+	// IpsetGetAllHandler sets the operation handler for the get all operation
+	IpsetGetAllHandler ipset.GetAllHandler
 	// DeviceGetDeviceHandler sets the operation handler for the get device operation
 	DeviceGetDeviceHandler device.GetDeviceHandler
 	// DeviceGetDeviceNameAddrHandler sets the operation handler for the get device name addr operation
@@ -241,6 +278,8 @@ type DpvsAgentAPI struct {
 	VirtualserverGetVsVipPortLaddrHandler virtualserver.GetVsVipPortLaddrHandler
 	// VirtualserverGetVsVipPortRsHandler sets the operation handler for the get vs vip port rs operation
 	VirtualserverGetVsVipPortRsHandler virtualserver.GetVsVipPortRsHandler
+	// IpsetIsInHandler sets the operation handler for the is in operation
+	IpsetIsInHandler ipset.IsInHandler
 	// VirtualserverPostVsVipPortAllowHandler sets the operation handler for the post vs vip port allow operation
 	VirtualserverPostVsVipPortAllowHandler virtualserver.PostVsVipPortAllowHandler
 	// VirtualserverPostVsVipPortDenyHandler sets the operation handler for the post vs vip port deny operation
@@ -271,6 +310,8 @@ type DpvsAgentAPI struct {
 	VirtualserverPutVsVipPortRsHandler virtualserver.PutVsVipPortRsHandler
 	// VirtualserverPutVsVipPortRsHealthHandler sets the operation handler for the put vs vip port rs health operation
 	VirtualserverPutVsVipPortRsHealthHandler virtualserver.PutVsVipPortRsHealthHandler
+	// IpsetReplaceMemberHandler sets the operation handler for the replace member operation
+	IpsetReplaceMemberHandler ipset.ReplaceMemberHandler
 
 	// ServeError is called when an error is received, there is a default handler
 	// but you can set your own with this
@@ -348,6 +389,15 @@ func (o *DpvsAgentAPI) Validate() error {
 		unregistered = append(unregistered, "JSONProducer")
 	}
 
+	if o.IpsetAddMemberHandler == nil {
+		unregistered = append(unregistered, "ipset.AddMemberHandler")
+	}
+	if o.IpsetCreateHandler == nil {
+		unregistered = append(unregistered, "ipset.CreateHandler")
+	}
+	if o.IpsetDelMemberHandler == nil {
+		unregistered = append(unregistered, "ipset.DelMemberHandler")
+	}
 	if o.DeviceDeleteDeviceNameAddrHandler == nil {
 		unregistered = append(unregistered, "device.DeleteDeviceNameAddrHandler")
 	}
@@ -378,6 +428,15 @@ func (o *DpvsAgentAPI) Validate() error {
 	if o.VirtualserverDeleteVsVipPortRsHandler == nil {
 		unregistered = append(unregistered, "virtualserver.DeleteVsVipPortRsHandler")
 	}
+	if o.IpsetDestroyHandler == nil {
+		unregistered = append(unregistered, "ipset.DestroyHandler")
+	}
+	if o.IpsetGetHandler == nil {
+		unregistered = append(unregistered, "ipset.GetHandler")
+	}
+	if o.IpsetGetAllHandler == nil {
+		unregistered = append(unregistered, "ipset.GetAllHandler")
+	}
 	if o.DeviceGetDeviceHandler == nil {
 		unregistered = append(unregistered, "device.GetDeviceHandler")
 	}
@@ -417,6 +476,9 @@ func (o *DpvsAgentAPI) Validate() error {
 	if o.VirtualserverGetVsVipPortRsHandler == nil {
 		unregistered = append(unregistered, "virtualserver.GetVsVipPortRsHandler")
 	}
+	if o.IpsetIsInHandler == nil {
+		unregistered = append(unregistered, "ipset.IsInHandler")
+	}
 	if o.VirtualserverPostVsVipPortAllowHandler == nil {
 		unregistered = append(unregistered, "virtualserver.PostVsVipPortAllowHandler")
 	}
@@ -462,6 +524,9 @@ func (o *DpvsAgentAPI) Validate() error {
 	if o.VirtualserverPutVsVipPortRsHealthHandler == nil {
 		unregistered = append(unregistered, "virtualserver.PutVsVipPortRsHealthHandler")
 	}
+	if o.IpsetReplaceMemberHandler == nil {
+		unregistered = append(unregistered, "ipset.ReplaceMemberHandler")
+	}
 
 	if len(unregistered) > 0 {
 		return fmt.Errorf("missing registration: %s", strings.Join(unregistered, ", "))
@@ -550,6 +615,18 @@ func (o *DpvsAgentAPI) initHandlerCache() {
 		o.handlers = make(map[string]map[string]http.Handler)
 	}
 
+	if o.handlers["POST"] == nil {
+		o.handlers["POST"] = make(map[string]http.Handler)
+	}
+	o.handlers["POST"]["/ipset/{name}/member"] = ipset.NewAddMember(o.context, o.IpsetAddMemberHandler)
+	if o.handlers["PUT"] == nil {
+		o.handlers["PUT"] = make(map[string]http.Handler)
+	}
+	o.handlers["PUT"]["/ipset/{name}"] = ipset.NewCreate(o.context, o.IpsetCreateHandler)
+	if o.handlers["DELETE"] == nil {
+		o.handlers["DELETE"] = make(map[string]http.Handler)
+	}
+	o.handlers["DELETE"]["/ipset/{name}/member"] = ipset.NewDelMember(o.context, o.IpsetDelMemberHandler)
 	if o.handlers["DELETE"] == nil {
 		o.handlers["DELETE"] = make(map[string]http.Handler)
 	}
@@ -590,6 +667,18 @@ func (o *DpvsAgentAPI) initHandlerCache() {
 		o.handlers["DELETE"] = make(map[string]http.Handler)
 	}
 	o.handlers["DELETE"]["/vs/{VipPort}/rs"] = virtualserver.NewDeleteVsVipPortRs(o.context, o.VirtualserverDeleteVsVipPortRsHandler)
+	if o.handlers["DELETE"] == nil {
+		o.handlers["DELETE"] = make(map[string]http.Handler)
+	}
+	o.handlers["DELETE"]["/ipset/{name}"] = ipset.NewDestroy(o.context, o.IpsetDestroyHandler)
+	if o.handlers["GET"] == nil {
+		o.handlers["GET"] = make(map[string]http.Handler)
+	}
+	o.handlers["GET"]["/ipset/{name}"] = ipset.NewGet(o.context, o.IpsetGetHandler)
+	if o.handlers["GET"] == nil {
+		o.handlers["GET"] = make(map[string]http.Handler)
+	}
+	o.handlers["GET"]["/ipset"] = ipset.NewGetAll(o.context, o.IpsetGetAllHandler)
 	if o.handlers["GET"] == nil {
 		o.handlers["GET"] = make(map[string]http.Handler)
 	}
@@ -642,6 +731,10 @@ func (o *DpvsAgentAPI) initHandlerCache() {
 		o.handlers["GET"] = make(map[string]http.Handler)
 	}
 	o.handlers["GET"]["/vs/{VipPort}/rs"] = virtualserver.NewGetVsVipPortRs(o.context, o.VirtualserverGetVsVipPortRsHandler)
+	if o.handlers["GET"] == nil {
+		o.handlers["GET"] = make(map[string]http.Handler)
+	}
+	o.handlers["GET"]["/ipset/{name}/{object}"] = ipset.NewIsIn(o.context, o.IpsetIsInHandler)
 	if o.handlers["POST"] == nil {
 		o.handlers["POST"] = make(map[string]http.Handler)
 	}
@@ -702,6 +795,10 @@ func (o *DpvsAgentAPI) initHandlerCache() {
 		o.handlers["PUT"] = make(map[string]http.Handler)
 	}
 	o.handlers["PUT"]["/vs/{VipPort}/rs/health"] = virtualserver.NewPutVsVipPortRsHealth(o.context, o.VirtualserverPutVsVipPortRsHealthHandler)
+	if o.handlers["PUT"] == nil {
+		o.handlers["PUT"] = make(map[string]http.Handler)
+	}
+	o.handlers["PUT"]["/ipset/{name}/member"] = ipset.NewReplaceMember(o.context, o.IpsetReplaceMemberHandler)
 }
 
 // Serve creates a http handler to serve the API over HTTP
diff --git a/tools/dpvs-agent/restapi/operations/ipset/add_member.go b/tools/dpvs-agent/restapi/operations/ipset/add_member.go
new file mode 100644
index 000000000..aaee35ca0
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/add_member.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// AddMemberHandlerFunc turns a function with the right signature into a add member handler
+type AddMemberHandlerFunc func(AddMemberParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn AddMemberHandlerFunc) Handle(params AddMemberParams) middleware.Responder {
+	return fn(params)
+}
+
+// AddMemberHandler interface for that can handle valid add member params
+type AddMemberHandler interface {
+	Handle(AddMemberParams) middleware.Responder
+}
+
+// NewAddMember creates a new http.Handler for the add member operation
+func NewAddMember(ctx *middleware.Context, handler AddMemberHandler) *AddMember {
+	return &AddMember{Context: ctx, Handler: handler}
+}
+
+/*
+	AddMember swagger:route POST /ipset/{name}/member ipset addMember
+
+Add a member to the ipset.
+*/
+type AddMember struct {
+	Context *middleware.Context
+	Handler AddMemberHandler
+}
+
+func (o *AddMember) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewAddMemberParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/add_member_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/add_member_parameters.go
new file mode 100644
index 000000000..b2b76bc29
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/add_member_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewAddMemberParams creates a new AddMemberParams object
+//
+// There are no default values defined in the spec.
+func NewAddMemberParams() AddMemberParams {
+
+	return AddMemberParams{}
+}
+
+// AddMemberParams contains all the bound params for the add member operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters AddMember
+type AddMemberParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewAddMemberParams() beforehand.
+func (o *AddMemberParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *AddMemberParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/add_member_responses.go b/tools/dpvs-agent/restapi/operations/ipset/add_member_responses.go
new file mode 100644
index 000000000..89aba02da
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/add_member_responses.go
@@ -0,0 +1,227 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// AddMemberOKCode is the HTTP code returned for type AddMemberOK
+const AddMemberOKCode int = 200
+
+/*
+AddMemberOK Existed
+
+swagger:response addMemberOK
+*/
+type AddMemberOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewAddMemberOK creates AddMemberOK with default headers values
+func NewAddMemberOK() *AddMemberOK {
+
+	return &AddMemberOK{}
+}
+
+// WithPayload adds the payload to the add member o k response
+func (o *AddMemberOK) WithPayload(payload string) *AddMemberOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the add member o k response
+func (o *AddMemberOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *AddMemberOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// AddMemberCreatedCode is the HTTP code returned for type AddMemberCreated
+const AddMemberCreatedCode int = 201
+
+/*
+AddMemberCreated Created
+
+swagger:response addMemberCreated
+*/
+type AddMemberCreated struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewAddMemberCreated creates AddMemberCreated with default headers values
+func NewAddMemberCreated() *AddMemberCreated {
+
+	return &AddMemberCreated{}
+}
+
+// WithPayload adds the payload to the add member created response
+func (o *AddMemberCreated) WithPayload(payload string) *AddMemberCreated {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the add member created response
+func (o *AddMemberCreated) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *AddMemberCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(201)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// AddMemberBadRequestCode is the HTTP code returned for type AddMemberBadRequest
+const AddMemberBadRequestCode int = 400
+
+/*
+AddMemberBadRequest Invalid ipset parameter
+
+swagger:response addMemberBadRequest
+*/
+type AddMemberBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewAddMemberBadRequest creates AddMemberBadRequest with default headers values
+func NewAddMemberBadRequest() *AddMemberBadRequest {
+
+	return &AddMemberBadRequest{}
+}
+
+// WithPayload adds the payload to the add member bad request response
+func (o *AddMemberBadRequest) WithPayload(payload string) *AddMemberBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the add member bad request response
+func (o *AddMemberBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *AddMemberBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// AddMemberNotFoundCode is the HTTP code returned for type AddMemberNotFound
+const AddMemberNotFoundCode int = 404
+
+/*
+AddMemberNotFound Ipset not found
+
+swagger:response addMemberNotFound
+*/
+type AddMemberNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewAddMemberNotFound creates AddMemberNotFound with default headers values
+func NewAddMemberNotFound() *AddMemberNotFound {
+
+	return &AddMemberNotFound{}
+}
+
+// WithPayload adds the payload to the add member not found response
+func (o *AddMemberNotFound) WithPayload(payload string) *AddMemberNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the add member not found response
+func (o *AddMemberNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *AddMemberNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// AddMemberFailureCode is the HTTP code returned for type AddMemberFailure
+const AddMemberFailureCode int = 500
+
+/*
+AddMemberFailure Service not available
+
+swagger:response addMemberFailure
+*/
+type AddMemberFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewAddMemberFailure creates AddMemberFailure with default headers values
+func NewAddMemberFailure() *AddMemberFailure {
+
+	return &AddMemberFailure{}
+}
+
+// WithPayload adds the payload to the add member failure response
+func (o *AddMemberFailure) WithPayload(payload string) *AddMemberFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the add member failure response
+func (o *AddMemberFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *AddMemberFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/add_member_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/add_member_urlbuilder.go
new file mode 100644
index 000000000..25bc040c4
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/add_member_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// AddMemberURL generates an URL for the add member operation
+type AddMemberURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *AddMemberURL) WithBasePath(bp string) *AddMemberURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *AddMemberURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *AddMemberURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/member"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on AddMemberURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *AddMemberURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *AddMemberURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *AddMemberURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on AddMemberURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on AddMemberURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *AddMemberURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/create.go b/tools/dpvs-agent/restapi/operations/ipset/create.go
new file mode 100644
index 000000000..211fa29e0
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/create.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// CreateHandlerFunc turns a function with the right signature into a create handler
+type CreateHandlerFunc func(CreateParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn CreateHandlerFunc) Handle(params CreateParams) middleware.Responder {
+	return fn(params)
+}
+
+// CreateHandler interface for that can handle valid create params
+type CreateHandler interface {
+	Handle(CreateParams) middleware.Responder
+}
+
+// NewCreate creates a new http.Handler for the create operation
+func NewCreate(ctx *middleware.Context, handler CreateHandler) *Create {
+	return &Create{Context: ctx, Handler: handler}
+}
+
+/*
+	Create swagger:route PUT /ipset/{name} ipset create
+
+Create an ipset named {name}.
+*/
+type Create struct {
+	Context *middleware.Context
+	Handler CreateHandler
+}
+
+func (o *Create) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewCreateParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/create_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/create_parameters.go
new file mode 100644
index 000000000..7aca005bf
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/create_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewCreateParams creates a new CreateParams object
+//
+// There are no default values defined in the spec.
+func NewCreateParams() CreateParams {
+
+	return CreateParams{}
+}
+
+// CreateParams contains all the bound params for the create operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters Create
+type CreateParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewCreateParams() beforehand.
+func (o *CreateParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *CreateParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/create_responses.go b/tools/dpvs-agent/restapi/operations/ipset/create_responses.go
new file mode 100644
index 000000000..7bd038576
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/create_responses.go
@@ -0,0 +1,227 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// CreateOKCode is the HTTP code returned for type CreateOK
+const CreateOKCode int = 200
+
+/*
+CreateOK Replaced
+
+swagger:response createOK
+*/
+type CreateOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewCreateOK creates CreateOK with default headers values
+func NewCreateOK() *CreateOK {
+
+	return &CreateOK{}
+}
+
+// WithPayload adds the payload to the create o k response
+func (o *CreateOK) WithPayload(payload string) *CreateOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the create o k response
+func (o *CreateOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *CreateOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// CreateCreatedCode is the HTTP code returned for type CreateCreated
+const CreateCreatedCode int = 201
+
+/*
+CreateCreated Created
+
+swagger:response createCreated
+*/
+type CreateCreated struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewCreateCreated creates CreateCreated with default headers values
+func NewCreateCreated() *CreateCreated {
+
+	return &CreateCreated{}
+}
+
+// WithPayload adds the payload to the create created response
+func (o *CreateCreated) WithPayload(payload string) *CreateCreated {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the create created response
+func (o *CreateCreated) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *CreateCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(201)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// CreateBadRequestCode is the HTTP code returned for type CreateBadRequest
+const CreateBadRequestCode int = 400
+
+/*
+CreateBadRequest Invalid ipset parameter
+
+swagger:response createBadRequest
+*/
+type CreateBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewCreateBadRequest creates CreateBadRequest with default headers values
+func NewCreateBadRequest() *CreateBadRequest {
+
+	return &CreateBadRequest{}
+}
+
+// WithPayload adds the payload to the create bad request response
+func (o *CreateBadRequest) WithPayload(payload string) *CreateBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the create bad request response
+func (o *CreateBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *CreateBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// CreateNotFoundCode is the HTTP code returned for type CreateNotFound
+const CreateNotFoundCode int = 404
+
+/*
+CreateNotFound Ipset not found
+
+swagger:response createNotFound
+*/
+type CreateNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewCreateNotFound creates CreateNotFound with default headers values
+func NewCreateNotFound() *CreateNotFound {
+
+	return &CreateNotFound{}
+}
+
+// WithPayload adds the payload to the create not found response
+func (o *CreateNotFound) WithPayload(payload string) *CreateNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the create not found response
+func (o *CreateNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *CreateNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// CreateFailureCode is the HTTP code returned for type CreateFailure
+const CreateFailureCode int = 500
+
+/*
+CreateFailure Service not available
+
+swagger:response createFailure
+*/
+type CreateFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewCreateFailure creates CreateFailure with default headers values
+func NewCreateFailure() *CreateFailure {
+
+	return &CreateFailure{}
+}
+
+// WithPayload adds the payload to the create failure response
+func (o *CreateFailure) WithPayload(payload string) *CreateFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the create failure response
+func (o *CreateFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *CreateFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/create_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/create_urlbuilder.go
new file mode 100644
index 000000000..fe549f1ab
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/create_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// CreateURL generates an URL for the create operation
+type CreateURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *CreateURL) WithBasePath(bp string) *CreateURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *CreateURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *CreateURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on CreateURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *CreateURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *CreateURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *CreateURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on CreateURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on CreateURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *CreateURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/del_member.go b/tools/dpvs-agent/restapi/operations/ipset/del_member.go
new file mode 100644
index 000000000..cdf189bf3
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/del_member.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// DelMemberHandlerFunc turns a function with the right signature into a del member handler
+type DelMemberHandlerFunc func(DelMemberParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn DelMemberHandlerFunc) Handle(params DelMemberParams) middleware.Responder {
+	return fn(params)
+}
+
+// DelMemberHandler interface for that can handle valid del member params
+type DelMemberHandler interface {
+	Handle(DelMemberParams) middleware.Responder
+}
+
+// NewDelMember creates a new http.Handler for the del member operation
+func NewDelMember(ctx *middleware.Context, handler DelMemberHandler) *DelMember {
+	return &DelMember{Context: ctx, Handler: handler}
+}
+
+/*
+	DelMember swagger:route DELETE /ipset/{name}/member ipset delMember
+
+Delete a member from the ipset.
+*/
+type DelMember struct {
+	Context *middleware.Context
+	Handler DelMemberHandler
+}
+
+func (o *DelMember) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewDelMemberParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/del_member_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/del_member_parameters.go
new file mode 100644
index 000000000..58ca3b276
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/del_member_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewDelMemberParams creates a new DelMemberParams object
+//
+// There are no default values defined in the spec.
+func NewDelMemberParams() DelMemberParams {
+
+	return DelMemberParams{}
+}
+
+// DelMemberParams contains all the bound params for the del member operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters DelMember
+type DelMemberParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewDelMemberParams() beforehand.
+func (o *DelMemberParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *DelMemberParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/del_member_responses.go b/tools/dpvs-agent/restapi/operations/ipset/del_member_responses.go
new file mode 100644
index 000000000..34767169d
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/del_member_responses.go
@@ -0,0 +1,184 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// DelMemberOKCode is the HTTP code returned for type DelMemberOK
+const DelMemberOKCode int = 200
+
+/*
+DelMemberOK Succeed
+
+swagger:response delMemberOK
+*/
+type DelMemberOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDelMemberOK creates DelMemberOK with default headers values
+func NewDelMemberOK() *DelMemberOK {
+
+	return &DelMemberOK{}
+}
+
+// WithPayload adds the payload to the del member o k response
+func (o *DelMemberOK) WithPayload(payload string) *DelMemberOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the del member o k response
+func (o *DelMemberOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DelMemberOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DelMemberBadRequestCode is the HTTP code returned for type DelMemberBadRequest
+const DelMemberBadRequestCode int = 400
+
+/*
+DelMemberBadRequest Invalid ipset parameter
+
+swagger:response delMemberBadRequest
+*/
+type DelMemberBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDelMemberBadRequest creates DelMemberBadRequest with default headers values
+func NewDelMemberBadRequest() *DelMemberBadRequest {
+
+	return &DelMemberBadRequest{}
+}
+
+// WithPayload adds the payload to the del member bad request response
+func (o *DelMemberBadRequest) WithPayload(payload string) *DelMemberBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the del member bad request response
+func (o *DelMemberBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DelMemberBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DelMemberNotFoundCode is the HTTP code returned for type DelMemberNotFound
+const DelMemberNotFoundCode int = 404
+
+/*
+DelMemberNotFound Ipset not found
+
+swagger:response delMemberNotFound
+*/
+type DelMemberNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDelMemberNotFound creates DelMemberNotFound with default headers values
+func NewDelMemberNotFound() *DelMemberNotFound {
+
+	return &DelMemberNotFound{}
+}
+
+// WithPayload adds the payload to the del member not found response
+func (o *DelMemberNotFound) WithPayload(payload string) *DelMemberNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the del member not found response
+func (o *DelMemberNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DelMemberNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DelMemberFailureCode is the HTTP code returned for type DelMemberFailure
+const DelMemberFailureCode int = 500
+
+/*
+DelMemberFailure Service not available
+
+swagger:response delMemberFailure
+*/
+type DelMemberFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDelMemberFailure creates DelMemberFailure with default headers values
+func NewDelMemberFailure() *DelMemberFailure {
+
+	return &DelMemberFailure{}
+}
+
+// WithPayload adds the payload to the del member failure response
+func (o *DelMemberFailure) WithPayload(payload string) *DelMemberFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the del member failure response
+func (o *DelMemberFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DelMemberFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/del_member_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/del_member_urlbuilder.go
new file mode 100644
index 000000000..8da232e0b
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/del_member_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// DelMemberURL generates an URL for the del member operation
+type DelMemberURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DelMemberURL) WithBasePath(bp string) *DelMemberURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DelMemberURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *DelMemberURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/member"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on DelMemberURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *DelMemberURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *DelMemberURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *DelMemberURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on DelMemberURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on DelMemberURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *DelMemberURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name.go
new file mode 100644
index 000000000..0048d0c66
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// DeleteIpsetNameHandlerFunc turns a function with the right signature into a delete ipset name handler
+type DeleteIpsetNameHandlerFunc func(DeleteIpsetNameParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn DeleteIpsetNameHandlerFunc) Handle(params DeleteIpsetNameParams) middleware.Responder {
+	return fn(params)
+}
+
+// DeleteIpsetNameHandler interface for that can handle valid delete ipset name params
+type DeleteIpsetNameHandler interface {
+	Handle(DeleteIpsetNameParams) middleware.Responder
+}
+
+// NewDeleteIpsetName creates a new http.Handler for the delete ipset name operation
+func NewDeleteIpsetName(ctx *middleware.Context, handler DeleteIpsetNameHandler) *DeleteIpsetName {
+	return &DeleteIpsetName{Context: ctx, Handler: handler}
+}
+
+/*
+	DeleteIpsetName swagger:route DELETE /ipset/{name} ipset deleteIpsetName
+
+Delete the ipset named {name}.
+*/
+type DeleteIpsetName struct {
+	Context *middleware.Context
+	Handler DeleteIpsetNameHandler
+}
+
+func (o *DeleteIpsetName) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewDeleteIpsetNameParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member.go
new file mode 100644
index 000000000..b24c5563c
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// DeleteIpsetNameMemberHandlerFunc turns a function with the right signature into a delete ipset name member handler
+type DeleteIpsetNameMemberHandlerFunc func(DeleteIpsetNameMemberParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn DeleteIpsetNameMemberHandlerFunc) Handle(params DeleteIpsetNameMemberParams) middleware.Responder {
+	return fn(params)
+}
+
+// DeleteIpsetNameMemberHandler interface for that can handle valid delete ipset name member params
+type DeleteIpsetNameMemberHandler interface {
+	Handle(DeleteIpsetNameMemberParams) middleware.Responder
+}
+
+// NewDeleteIpsetNameMember creates a new http.Handler for the delete ipset name member operation
+func NewDeleteIpsetNameMember(ctx *middleware.Context, handler DeleteIpsetNameMemberHandler) *DeleteIpsetNameMember {
+	return &DeleteIpsetNameMember{Context: ctx, Handler: handler}
+}
+
+/*
+	DeleteIpsetNameMember swagger:route DELETE /ipset/{name}/member ipset deleteIpsetNameMember
+
+Delete a member from the ipset.
+*/
+type DeleteIpsetNameMember struct {
+	Context *middleware.Context
+	Handler DeleteIpsetNameMemberHandler
+}
+
+func (o *DeleteIpsetNameMember) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewDeleteIpsetNameMemberParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_parameters.go
new file mode 100644
index 000000000..d0d2e0454
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewDeleteIpsetNameMemberParams creates a new DeleteIpsetNameMemberParams object
+//
+// There are no default values defined in the spec.
+func NewDeleteIpsetNameMemberParams() DeleteIpsetNameMemberParams {
+
+	return DeleteIpsetNameMemberParams{}
+}
+
+// DeleteIpsetNameMemberParams contains all the bound params for the delete ipset name member operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters DeleteIpsetNameMember
+type DeleteIpsetNameMemberParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewDeleteIpsetNameMemberParams() beforehand.
+func (o *DeleteIpsetNameMemberParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *DeleteIpsetNameMemberParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_responses.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_responses.go
new file mode 100644
index 000000000..57428580c
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_responses.go
@@ -0,0 +1,184 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// DeleteIpsetNameMemberOKCode is the HTTP code returned for type DeleteIpsetNameMemberOK
+const DeleteIpsetNameMemberOKCode int = 200
+
+/*
+DeleteIpsetNameMemberOK Succeed
+
+swagger:response deleteIpsetNameMemberOK
+*/
+type DeleteIpsetNameMemberOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDeleteIpsetNameMemberOK creates DeleteIpsetNameMemberOK with default headers values
+func NewDeleteIpsetNameMemberOK() *DeleteIpsetNameMemberOK {
+
+	return &DeleteIpsetNameMemberOK{}
+}
+
+// WithPayload adds the payload to the delete ipset name member o k response
+func (o *DeleteIpsetNameMemberOK) WithPayload(payload string) *DeleteIpsetNameMemberOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the delete ipset name member o k response
+func (o *DeleteIpsetNameMemberOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DeleteIpsetNameMemberOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DeleteIpsetNameMemberBadRequestCode is the HTTP code returned for type DeleteIpsetNameMemberBadRequest
+const DeleteIpsetNameMemberBadRequestCode int = 400
+
+/*
+DeleteIpsetNameMemberBadRequest Invalid ipset parameter
+
+swagger:response deleteIpsetNameMemberBadRequest
+*/
+type DeleteIpsetNameMemberBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDeleteIpsetNameMemberBadRequest creates DeleteIpsetNameMemberBadRequest with default headers values
+func NewDeleteIpsetNameMemberBadRequest() *DeleteIpsetNameMemberBadRequest {
+
+	return &DeleteIpsetNameMemberBadRequest{}
+}
+
+// WithPayload adds the payload to the delete ipset name member bad request response
+func (o *DeleteIpsetNameMemberBadRequest) WithPayload(payload string) *DeleteIpsetNameMemberBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the delete ipset name member bad request response
+func (o *DeleteIpsetNameMemberBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DeleteIpsetNameMemberBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DeleteIpsetNameMemberNotFoundCode is the HTTP code returned for type DeleteIpsetNameMemberNotFound
+const DeleteIpsetNameMemberNotFoundCode int = 404
+
+/*
+DeleteIpsetNameMemberNotFound Ipset not found
+
+swagger:response deleteIpsetNameMemberNotFound
+*/
+type DeleteIpsetNameMemberNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDeleteIpsetNameMemberNotFound creates DeleteIpsetNameMemberNotFound with default headers values
+func NewDeleteIpsetNameMemberNotFound() *DeleteIpsetNameMemberNotFound {
+
+	return &DeleteIpsetNameMemberNotFound{}
+}
+
+// WithPayload adds the payload to the delete ipset name member not found response
+func (o *DeleteIpsetNameMemberNotFound) WithPayload(payload string) *DeleteIpsetNameMemberNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the delete ipset name member not found response
+func (o *DeleteIpsetNameMemberNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DeleteIpsetNameMemberNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DeleteIpsetNameMemberFailureCode is the HTTP code returned for type DeleteIpsetNameMemberFailure
+const DeleteIpsetNameMemberFailureCode int = 500
+
+/*
+DeleteIpsetNameMemberFailure Service not available
+
+swagger:response deleteIpsetNameMemberFailure
+*/
+type DeleteIpsetNameMemberFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDeleteIpsetNameMemberFailure creates DeleteIpsetNameMemberFailure with default headers values
+func NewDeleteIpsetNameMemberFailure() *DeleteIpsetNameMemberFailure {
+
+	return &DeleteIpsetNameMemberFailure{}
+}
+
+// WithPayload adds the payload to the delete ipset name member failure response
+func (o *DeleteIpsetNameMemberFailure) WithPayload(payload string) *DeleteIpsetNameMemberFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the delete ipset name member failure response
+func (o *DeleteIpsetNameMemberFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DeleteIpsetNameMemberFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_urlbuilder.go
new file mode 100644
index 000000000..3cd3c06ba
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_member_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// DeleteIpsetNameMemberURL generates an URL for the delete ipset name member operation
+type DeleteIpsetNameMemberURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DeleteIpsetNameMemberURL) WithBasePath(bp string) *DeleteIpsetNameMemberURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DeleteIpsetNameMemberURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *DeleteIpsetNameMemberURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/member"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on DeleteIpsetNameMemberURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *DeleteIpsetNameMemberURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *DeleteIpsetNameMemberURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *DeleteIpsetNameMemberURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on DeleteIpsetNameMemberURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on DeleteIpsetNameMemberURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *DeleteIpsetNameMemberURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_parameters.go
new file mode 100644
index 000000000..7373182bc
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_parameters.go
@@ -0,0 +1,71 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+)
+
+// NewDeleteIpsetNameParams creates a new DeleteIpsetNameParams object
+//
+// There are no default values defined in the spec.
+func NewDeleteIpsetNameParams() DeleteIpsetNameParams {
+
+	return DeleteIpsetNameParams{}
+}
+
+// DeleteIpsetNameParams contains all the bound params for the delete ipset name operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters DeleteIpsetName
+type DeleteIpsetNameParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewDeleteIpsetNameParams() beforehand.
+func (o *DeleteIpsetNameParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *DeleteIpsetNameParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_responses.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_responses.go
new file mode 100644
index 000000000..00395858b
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_responses.go
@@ -0,0 +1,141 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// DeleteIpsetNameOKCode is the HTTP code returned for type DeleteIpsetNameOK
+const DeleteIpsetNameOKCode int = 200
+
+/*
+DeleteIpsetNameOK Deleted
+
+swagger:response deleteIpsetNameOK
+*/
+type DeleteIpsetNameOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDeleteIpsetNameOK creates DeleteIpsetNameOK with default headers values
+func NewDeleteIpsetNameOK() *DeleteIpsetNameOK {
+
+	return &DeleteIpsetNameOK{}
+}
+
+// WithPayload adds the payload to the delete ipset name o k response
+func (o *DeleteIpsetNameOK) WithPayload(payload string) *DeleteIpsetNameOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the delete ipset name o k response
+func (o *DeleteIpsetNameOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DeleteIpsetNameOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DeleteIpsetNameNotFoundCode is the HTTP code returned for type DeleteIpsetNameNotFound
+const DeleteIpsetNameNotFoundCode int = 404
+
+/*
+DeleteIpsetNameNotFound Ipset not found
+
+swagger:response deleteIpsetNameNotFound
+*/
+type DeleteIpsetNameNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDeleteIpsetNameNotFound creates DeleteIpsetNameNotFound with default headers values
+func NewDeleteIpsetNameNotFound() *DeleteIpsetNameNotFound {
+
+	return &DeleteIpsetNameNotFound{}
+}
+
+// WithPayload adds the payload to the delete ipset name not found response
+func (o *DeleteIpsetNameNotFound) WithPayload(payload string) *DeleteIpsetNameNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the delete ipset name not found response
+func (o *DeleteIpsetNameNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DeleteIpsetNameNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DeleteIpsetNameFailureCode is the HTTP code returned for type DeleteIpsetNameFailure
+const DeleteIpsetNameFailureCode int = 500
+
+/*
+DeleteIpsetNameFailure Service not available
+
+swagger:response deleteIpsetNameFailure
+*/
+type DeleteIpsetNameFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDeleteIpsetNameFailure creates DeleteIpsetNameFailure with default headers values
+func NewDeleteIpsetNameFailure() *DeleteIpsetNameFailure {
+
+	return &DeleteIpsetNameFailure{}
+}
+
+// WithPayload adds the payload to the delete ipset name failure response
+func (o *DeleteIpsetNameFailure) WithPayload(payload string) *DeleteIpsetNameFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the delete ipset name failure response
+func (o *DeleteIpsetNameFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DeleteIpsetNameFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_urlbuilder.go
new file mode 100644
index 000000000..2fcf4c346
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/delete_ipset_name_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// DeleteIpsetNameURL generates an URL for the delete ipset name operation
+type DeleteIpsetNameURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DeleteIpsetNameURL) WithBasePath(bp string) *DeleteIpsetNameURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DeleteIpsetNameURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *DeleteIpsetNameURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on DeleteIpsetNameURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *DeleteIpsetNameURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *DeleteIpsetNameURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *DeleteIpsetNameURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on DeleteIpsetNameURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on DeleteIpsetNameURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *DeleteIpsetNameURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy.go b/tools/dpvs-agent/restapi/operations/ipset/destroy.go
new file mode 100644
index 000000000..6f8c38afd
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// DestroyHandlerFunc turns a function with the right signature into a destroy handler
+type DestroyHandlerFunc func(DestroyParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn DestroyHandlerFunc) Handle(params DestroyParams) middleware.Responder {
+	return fn(params)
+}
+
+// DestroyHandler interface for that can handle valid destroy params
+type DestroyHandler interface {
+	Handle(DestroyParams) middleware.Responder
+}
+
+// NewDestroy creates a new http.Handler for the destroy operation
+func NewDestroy(ctx *middleware.Context, handler DestroyHandler) *Destroy {
+	return &Destroy{Context: ctx, Handler: handler}
+}
+
+/*
+	Destroy swagger:route DELETE /ipset/{name} ipset destroy
+
+Delete the ipset named {name}.
+*/
+type Destroy struct {
+	Context *middleware.Context
+	Handler DestroyHandler
+}
+
+func (o *Destroy) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewDestroyParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset.go b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset.go
new file mode 100644
index 000000000..504121700
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// DestroyIpsetHandlerFunc turns a function with the right signature into a destroy ipset handler
+type DestroyIpsetHandlerFunc func(DestroyIpsetParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn DestroyIpsetHandlerFunc) Handle(params DestroyIpsetParams) middleware.Responder {
+	return fn(params)
+}
+
+// DestroyIpsetHandler interface for that can handle valid destroy ipset params
+type DestroyIpsetHandler interface {
+	Handle(DestroyIpsetParams) middleware.Responder
+}
+
+// NewDestroyIpset creates a new http.Handler for the destroy ipset operation
+func NewDestroyIpset(ctx *middleware.Context, handler DestroyIpsetHandler) *DestroyIpset {
+	return &DestroyIpset{Context: ctx, Handler: handler}
+}
+
+/*
+	DestroyIpset swagger:route DELETE /ipset/{name} ipset destroyIpset
+
+Delete the ipset named {name}.
+*/
+type DestroyIpset struct {
+	Context *middleware.Context
+	Handler DestroyIpsetHandler
+}
+
+func (o *DestroyIpset) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewDestroyIpsetParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_parameters.go
new file mode 100644
index 000000000..82176cc99
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_parameters.go
@@ -0,0 +1,71 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+)
+
+// NewDestroyIpsetParams creates a new DestroyIpsetParams object
+//
+// There are no default values defined in the spec.
+func NewDestroyIpsetParams() DestroyIpsetParams {
+
+	return DestroyIpsetParams{}
+}
+
+// DestroyIpsetParams contains all the bound params for the destroy ipset operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters DestroyIpset
+type DestroyIpsetParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewDestroyIpsetParams() beforehand.
+func (o *DestroyIpsetParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *DestroyIpsetParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_responses.go b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_responses.go
new file mode 100644
index 000000000..0f803874d
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_responses.go
@@ -0,0 +1,141 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// DestroyIpsetOKCode is the HTTP code returned for type DestroyIpsetOK
+const DestroyIpsetOKCode int = 200
+
+/*
+DestroyIpsetOK Deleted
+
+swagger:response destroyIpsetOK
+*/
+type DestroyIpsetOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDestroyIpsetOK creates DestroyIpsetOK with default headers values
+func NewDestroyIpsetOK() *DestroyIpsetOK {
+
+	return &DestroyIpsetOK{}
+}
+
+// WithPayload adds the payload to the destroy ipset o k response
+func (o *DestroyIpsetOK) WithPayload(payload string) *DestroyIpsetOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the destroy ipset o k response
+func (o *DestroyIpsetOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DestroyIpsetOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DestroyIpsetNotFoundCode is the HTTP code returned for type DestroyIpsetNotFound
+const DestroyIpsetNotFoundCode int = 404
+
+/*
+DestroyIpsetNotFound Ipset not found
+
+swagger:response destroyIpsetNotFound
+*/
+type DestroyIpsetNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDestroyIpsetNotFound creates DestroyIpsetNotFound with default headers values
+func NewDestroyIpsetNotFound() *DestroyIpsetNotFound {
+
+	return &DestroyIpsetNotFound{}
+}
+
+// WithPayload adds the payload to the destroy ipset not found response
+func (o *DestroyIpsetNotFound) WithPayload(payload string) *DestroyIpsetNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the destroy ipset not found response
+func (o *DestroyIpsetNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DestroyIpsetNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DestroyIpsetFailureCode is the HTTP code returned for type DestroyIpsetFailure
+const DestroyIpsetFailureCode int = 500
+
+/*
+DestroyIpsetFailure Service not available
+
+swagger:response destroyIpsetFailure
+*/
+type DestroyIpsetFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDestroyIpsetFailure creates DestroyIpsetFailure with default headers values
+func NewDestroyIpsetFailure() *DestroyIpsetFailure {
+
+	return &DestroyIpsetFailure{}
+}
+
+// WithPayload adds the payload to the destroy ipset failure response
+func (o *DestroyIpsetFailure) WithPayload(payload string) *DestroyIpsetFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the destroy ipset failure response
+func (o *DestroyIpsetFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DestroyIpsetFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_urlbuilder.go
new file mode 100644
index 000000000..46c82a20b
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy_ipset_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// DestroyIpsetURL generates an URL for the destroy ipset operation
+type DestroyIpsetURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DestroyIpsetURL) WithBasePath(bp string) *DestroyIpsetURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DestroyIpsetURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *DestroyIpsetURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on DestroyIpsetURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *DestroyIpsetURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *DestroyIpsetURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *DestroyIpsetURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on DestroyIpsetURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on DestroyIpsetURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *DestroyIpsetURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/destroy_parameters.go
new file mode 100644
index 000000000..738d1688f
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy_parameters.go
@@ -0,0 +1,71 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+)
+
+// NewDestroyParams creates a new DestroyParams object
+//
+// There are no default values defined in the spec.
+func NewDestroyParams() DestroyParams {
+
+	return DestroyParams{}
+}
+
+// DestroyParams contains all the bound params for the destroy operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters Destroy
+type DestroyParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewDestroyParams() beforehand.
+func (o *DestroyParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *DestroyParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy_responses.go b/tools/dpvs-agent/restapi/operations/ipset/destroy_responses.go
new file mode 100644
index 000000000..4499b32c6
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy_responses.go
@@ -0,0 +1,141 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// DestroyOKCode is the HTTP code returned for type DestroyOK
+const DestroyOKCode int = 200
+
+/*
+DestroyOK Deleted
+
+swagger:response destroyOK
+*/
+type DestroyOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDestroyOK creates DestroyOK with default headers values
+func NewDestroyOK() *DestroyOK {
+
+	return &DestroyOK{}
+}
+
+// WithPayload adds the payload to the destroy o k response
+func (o *DestroyOK) WithPayload(payload string) *DestroyOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the destroy o k response
+func (o *DestroyOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DestroyOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DestroyNotFoundCode is the HTTP code returned for type DestroyNotFound
+const DestroyNotFoundCode int = 404
+
+/*
+DestroyNotFound Ipset not found
+
+swagger:response destroyNotFound
+*/
+type DestroyNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDestroyNotFound creates DestroyNotFound with default headers values
+func NewDestroyNotFound() *DestroyNotFound {
+
+	return &DestroyNotFound{}
+}
+
+// WithPayload adds the payload to the destroy not found response
+func (o *DestroyNotFound) WithPayload(payload string) *DestroyNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the destroy not found response
+func (o *DestroyNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DestroyNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// DestroyFailureCode is the HTTP code returned for type DestroyFailure
+const DestroyFailureCode int = 500
+
+/*
+DestroyFailure Service not available
+
+swagger:response destroyFailure
+*/
+type DestroyFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewDestroyFailure creates DestroyFailure with default headers values
+func NewDestroyFailure() *DestroyFailure {
+
+	return &DestroyFailure{}
+}
+
+// WithPayload adds the payload to the destroy failure response
+func (o *DestroyFailure) WithPayload(payload string) *DestroyFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the destroy failure response
+func (o *DestroyFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *DestroyFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/destroy_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/destroy_urlbuilder.go
new file mode 100644
index 000000000..fd259b65f
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/destroy_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// DestroyURL generates an URL for the destroy operation
+type DestroyURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DestroyURL) WithBasePath(bp string) *DestroyURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *DestroyURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *DestroyURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on DestroyURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *DestroyURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *DestroyURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *DestroyURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on DestroyURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on DestroyURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *DestroyURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get.go b/tools/dpvs-agent/restapi/operations/ipset/get.go
new file mode 100644
index 000000000..35d31e50e
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// GetHandlerFunc turns a function with the right signature into a get handler
+type GetHandlerFunc func(GetParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn GetHandlerFunc) Handle(params GetParams) middleware.Responder {
+	return fn(params)
+}
+
+// GetHandler interface for that can handle valid get params
+type GetHandler interface {
+	Handle(GetParams) middleware.Responder
+}
+
+// NewGet creates a new http.Handler for the get operation
+func NewGet(ctx *middleware.Context, handler GetHandler) *Get {
+	return &Get{Context: ctx, Handler: handler}
+}
+
+/*
+	Get swagger:route GET /ipset/{name} ipset get
+
+Get a specific ipset and its members.
+*/
+type Get struct {
+	Context *middleware.Context
+	Handler GetHandler
+}
+
+func (o *Get) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewGetParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_all.go b/tools/dpvs-agent/restapi/operations/ipset/get_all.go
new file mode 100644
index 000000000..d5a981a4a
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_all.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// GetAllHandlerFunc turns a function with the right signature into a get all handler
+type GetAllHandlerFunc func(GetAllParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn GetAllHandlerFunc) Handle(params GetAllParams) middleware.Responder {
+	return fn(params)
+}
+
+// GetAllHandler interface for that can handle valid get all params
+type GetAllHandler interface {
+	Handle(GetAllParams) middleware.Responder
+}
+
+// NewGetAll creates a new http.Handler for the get all operation
+func NewGetAll(ctx *middleware.Context, handler GetAllHandler) *GetAll {
+	return &GetAll{Context: ctx, Handler: handler}
+}
+
+/*
+	GetAll swagger:route GET /ipset ipset getAll
+
+Get all the ipsets and members.
+*/
+type GetAll struct {
+	Context *middleware.Context
+	Handler GetAllHandler
+}
+
+func (o *GetAll) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewGetAllParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_all_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/get_all_parameters.go
new file mode 100644
index 000000000..a92ff5454
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_all_parameters.go
@@ -0,0 +1,46 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// NewGetAllParams creates a new GetAllParams object
+//
+// There are no default values defined in the spec.
+func NewGetAllParams() GetAllParams {
+
+	return GetAllParams{}
+}
+
+// GetAllParams contains all the bound params for the get all operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters GetAll
+type GetAllParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewGetAllParams() beforehand.
+func (o *GetAllParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_all_responses.go b/tools/dpvs-agent/restapi/operations/ipset/get_all_responses.go
new file mode 100644
index 000000000..eb37c6d40
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_all_responses.go
@@ -0,0 +1,59 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+
+	"github.com/dpvs-agent/models"
+)
+
+// GetAllOKCode is the HTTP code returned for type GetAllOK
+const GetAllOKCode int = 200
+
+/*
+GetAllOK Success
+
+swagger:response getAllOK
+*/
+type GetAllOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload *models.IpsetInfoArray `json:"body,omitempty"`
+}
+
+// NewGetAllOK creates GetAllOK with default headers values
+func NewGetAllOK() *GetAllOK {
+
+	return &GetAllOK{}
+}
+
+// WithPayload adds the payload to the get all o k response
+func (o *GetAllOK) WithPayload(payload *models.IpsetInfoArray) *GetAllOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get all o k response
+func (o *GetAllOK) SetPayload(payload *models.IpsetInfoArray) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetAllOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	if o.Payload != nil {
+		payload := o.Payload
+		if err := producer.Produce(rw, payload); err != nil {
+			panic(err) // let the recovery middleware deal with this
+		}
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_all_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/get_all_urlbuilder.go
new file mode 100644
index 000000000..2fd0ac230
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_all_urlbuilder.go
@@ -0,0 +1,87 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+)
+
+// GetAllURL generates an URL for the get all operation
+type GetAllURL struct {
+	_basePath string
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetAllURL) WithBasePath(bp string) *GetAllURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetAllURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *GetAllURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset"
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *GetAllURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *GetAllURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *GetAllURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on GetAllURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on GetAllURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *GetAllURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset.go
new file mode 100644
index 000000000..104a30bd9
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// GetIpsetHandlerFunc turns a function with the right signature into a get ipset handler
+type GetIpsetHandlerFunc func(GetIpsetParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn GetIpsetHandlerFunc) Handle(params GetIpsetParams) middleware.Responder {
+	return fn(params)
+}
+
+// GetIpsetHandler interface for that can handle valid get ipset params
+type GetIpsetHandler interface {
+	Handle(GetIpsetParams) middleware.Responder
+}
+
+// NewGetIpset creates a new http.Handler for the get ipset operation
+func NewGetIpset(ctx *middleware.Context, handler GetIpsetHandler) *GetIpset {
+	return &GetIpset{Context: ctx, Handler: handler}
+}
+
+/*
+	GetIpset swagger:route GET /ipset ipset getIpset
+
+Get all the ipsets and members.
+*/
+type GetIpset struct {
+	Context *middleware.Context
+	Handler GetIpsetHandler
+}
+
+func (o *GetIpset) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewGetIpsetParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name.go
new file mode 100644
index 000000000..a7a259aa5
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// GetIpsetNameHandlerFunc turns a function with the right signature into a get ipset name handler
+type GetIpsetNameHandlerFunc func(GetIpsetNameParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn GetIpsetNameHandlerFunc) Handle(params GetIpsetNameParams) middleware.Responder {
+	return fn(params)
+}
+
+// GetIpsetNameHandler interface for that can handle valid get ipset name params
+type GetIpsetNameHandler interface {
+	Handle(GetIpsetNameParams) middleware.Responder
+}
+
+// NewGetIpsetName creates a new http.Handler for the get ipset name operation
+func NewGetIpsetName(ctx *middleware.Context, handler GetIpsetNameHandler) *GetIpsetName {
+	return &GetIpsetName{Context: ctx, Handler: handler}
+}
+
+/*
+	GetIpsetName swagger:route GET /ipset/{name} ipset getIpsetName
+
+Get a specific ipset and its members.
+*/
+type GetIpsetName struct {
+	Context *middleware.Context
+	Handler GetIpsetNameHandler
+}
+
+func (o *GetIpsetName) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewGetIpsetNameParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object.go
new file mode 100644
index 000000000..94cffe296
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object.go
@@ -0,0 +1,154 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"context"
+	"encoding/json"
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// GetIpsetNameObjectHandlerFunc turns a function with the right signature into a get ipset name object handler
+type GetIpsetNameObjectHandlerFunc func(GetIpsetNameObjectParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn GetIpsetNameObjectHandlerFunc) Handle(params GetIpsetNameObjectParams) middleware.Responder {
+	return fn(params)
+}
+
+// GetIpsetNameObjectHandler interface for that can handle valid get ipset name object params
+type GetIpsetNameObjectHandler interface {
+	Handle(GetIpsetNameObjectParams) middleware.Responder
+}
+
+// NewGetIpsetNameObject creates a new http.Handler for the get ipset name object operation
+func NewGetIpsetNameObject(ctx *middleware.Context, handler GetIpsetNameObjectHandler) *GetIpsetNameObject {
+	return &GetIpsetNameObject{Context: ctx, Handler: handler}
+}
+
+/*
+	GetIpsetNameObject swagger:route GET /ipset/{name}/{object} ipset getIpsetNameObject
+
+Check if an object in the ipset.
+*/
+type GetIpsetNameObject struct {
+	Context *middleware.Context
+	Handler GetIpsetNameObjectHandler
+}
+
+func (o *GetIpsetNameObject) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewGetIpsetNameObjectParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
+
+// GetIpsetNameObjectOKBody get ipset name object o k body
+//
+// swagger:model GetIpsetNameObjectOKBody
+type GetIpsetNameObjectOKBody struct {
+
+	// message
+	// Enum: [Match MisMatch]
+	Message string `json:"Message,omitempty"`
+
+	// result
+	Result bool `json:"Result,omitempty"`
+}
+
+// Validate validates this get ipset name object o k body
+func (o *GetIpsetNameObjectOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := o.validateMessage(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var getIpsetNameObjectOKBodyTypeMessagePropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["Match","MisMatch"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		getIpsetNameObjectOKBodyTypeMessagePropEnum = append(getIpsetNameObjectOKBodyTypeMessagePropEnum, v)
+	}
+}
+
+const (
+
+	// GetIpsetNameObjectOKBodyMessageMatch captures enum value "Match"
+	GetIpsetNameObjectOKBodyMessageMatch string = "Match"
+
+	// GetIpsetNameObjectOKBodyMessageMisMatch captures enum value "MisMatch"
+	GetIpsetNameObjectOKBodyMessageMisMatch string = "MisMatch"
+)
+
+// prop value enum
+func (o *GetIpsetNameObjectOKBody) validateMessageEnum(path, location string, value string) error {
+	if err := validate.EnumCase(path, location, value, getIpsetNameObjectOKBodyTypeMessagePropEnum, true); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (o *GetIpsetNameObjectOKBody) validateMessage(formats strfmt.Registry) error {
+	if swag.IsZero(o.Message) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := o.validateMessageEnum("getIpsetNameObjectOK"+"."+"Message", "body", o.Message); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// ContextValidate validates this get ipset name object o k body based on context it is used
+func (o *GetIpsetNameObjectOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (o *GetIpsetNameObjectOKBody) MarshalBinary() ([]byte, error) {
+	if o == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(o)
+}
+
+// UnmarshalBinary interface implementation
+func (o *GetIpsetNameObjectOKBody) UnmarshalBinary(b []byte) error {
+	var res GetIpsetNameObjectOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*o = res
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_parameters.go
new file mode 100644
index 000000000..fc26ec709
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_parameters.go
@@ -0,0 +1,95 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+)
+
+// NewGetIpsetNameObjectParams creates a new GetIpsetNameObjectParams object
+//
+// There are no default values defined in the spec.
+func NewGetIpsetNameObjectParams() GetIpsetNameObjectParams {
+
+	return GetIpsetNameObjectParams{}
+}
+
+// GetIpsetNameObjectParams contains all the bound params for the get ipset name object operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters GetIpsetNameObject
+type GetIpsetNameObjectParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+	/*
+	  Required: true
+	  In: path
+	*/
+	Object string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewGetIpsetNameObjectParams() beforehand.
+func (o *GetIpsetNameObjectParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+
+	rObject, rhkObject, _ := route.Params.GetOK("object")
+	if err := o.bindObject(rObject, rhkObject, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *GetIpsetNameObjectParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
+
+// bindObject binds and validates parameter Object from path.
+func (o *GetIpsetNameObjectParams) bindObject(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Object = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_responses.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_responses.go
new file mode 100644
index 000000000..7ffbde36e
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_responses.go
@@ -0,0 +1,186 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// GetIpsetNameObjectOKCode is the HTTP code returned for type GetIpsetNameObjectOK
+const GetIpsetNameObjectOKCode int = 200
+
+/*
+GetIpsetNameObjectOK Succeed
+
+swagger:response getIpsetNameObjectOK
+*/
+type GetIpsetNameObjectOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload *GetIpsetNameObjectOKBody `json:"body,omitempty"`
+}
+
+// NewGetIpsetNameObjectOK creates GetIpsetNameObjectOK with default headers values
+func NewGetIpsetNameObjectOK() *GetIpsetNameObjectOK {
+
+	return &GetIpsetNameObjectOK{}
+}
+
+// WithPayload adds the payload to the get ipset name object o k response
+func (o *GetIpsetNameObjectOK) WithPayload(payload *GetIpsetNameObjectOKBody) *GetIpsetNameObjectOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get ipset name object o k response
+func (o *GetIpsetNameObjectOK) SetPayload(payload *GetIpsetNameObjectOKBody) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetIpsetNameObjectOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	if o.Payload != nil {
+		payload := o.Payload
+		if err := producer.Produce(rw, payload); err != nil {
+			panic(err) // let the recovery middleware deal with this
+		}
+	}
+}
+
+// GetIpsetNameObjectBadRequestCode is the HTTP code returned for type GetIpsetNameObjectBadRequest
+const GetIpsetNameObjectBadRequestCode int = 400
+
+/*
+GetIpsetNameObjectBadRequest Invalid ipset parameter
+
+swagger:response getIpsetNameObjectBadRequest
+*/
+type GetIpsetNameObjectBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewGetIpsetNameObjectBadRequest creates GetIpsetNameObjectBadRequest with default headers values
+func NewGetIpsetNameObjectBadRequest() *GetIpsetNameObjectBadRequest {
+
+	return &GetIpsetNameObjectBadRequest{}
+}
+
+// WithPayload adds the payload to the get ipset name object bad request response
+func (o *GetIpsetNameObjectBadRequest) WithPayload(payload string) *GetIpsetNameObjectBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get ipset name object bad request response
+func (o *GetIpsetNameObjectBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetIpsetNameObjectBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// GetIpsetNameObjectNotFoundCode is the HTTP code returned for type GetIpsetNameObjectNotFound
+const GetIpsetNameObjectNotFoundCode int = 404
+
+/*
+GetIpsetNameObjectNotFound Ipset not found
+
+swagger:response getIpsetNameObjectNotFound
+*/
+type GetIpsetNameObjectNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewGetIpsetNameObjectNotFound creates GetIpsetNameObjectNotFound with default headers values
+func NewGetIpsetNameObjectNotFound() *GetIpsetNameObjectNotFound {
+
+	return &GetIpsetNameObjectNotFound{}
+}
+
+// WithPayload adds the payload to the get ipset name object not found response
+func (o *GetIpsetNameObjectNotFound) WithPayload(payload string) *GetIpsetNameObjectNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get ipset name object not found response
+func (o *GetIpsetNameObjectNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetIpsetNameObjectNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// GetIpsetNameObjectFailureCode is the HTTP code returned for type GetIpsetNameObjectFailure
+const GetIpsetNameObjectFailureCode int = 500
+
+/*
+GetIpsetNameObjectFailure Service not available
+
+swagger:response getIpsetNameObjectFailure
+*/
+type GetIpsetNameObjectFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewGetIpsetNameObjectFailure creates GetIpsetNameObjectFailure with default headers values
+func NewGetIpsetNameObjectFailure() *GetIpsetNameObjectFailure {
+
+	return &GetIpsetNameObjectFailure{}
+}
+
+// WithPayload adds the payload to the get ipset name object failure response
+func (o *GetIpsetNameObjectFailure) WithPayload(payload string) *GetIpsetNameObjectFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get ipset name object failure response
+func (o *GetIpsetNameObjectFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetIpsetNameObjectFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_urlbuilder.go
new file mode 100644
index 000000000..0641df34c
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_object_urlbuilder.go
@@ -0,0 +1,107 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// GetIpsetNameObjectURL generates an URL for the get ipset name object operation
+type GetIpsetNameObjectURL struct {
+	Name   string
+	Object string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetIpsetNameObjectURL) WithBasePath(bp string) *GetIpsetNameObjectURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetIpsetNameObjectURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *GetIpsetNameObjectURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/{object}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on GetIpsetNameObjectURL")
+	}
+
+	object := o.Object
+	if object != "" {
+		_path = strings.Replace(_path, "{object}", object, -1)
+	} else {
+		return nil, errors.New("object is required on GetIpsetNameObjectURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *GetIpsetNameObjectURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *GetIpsetNameObjectURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *GetIpsetNameObjectURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on GetIpsetNameObjectURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on GetIpsetNameObjectURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *GetIpsetNameObjectURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_parameters.go
new file mode 100644
index 000000000..e26e7315c
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_parameters.go
@@ -0,0 +1,71 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+)
+
+// NewGetIpsetNameParams creates a new GetIpsetNameParams object
+//
+// There are no default values defined in the spec.
+func NewGetIpsetNameParams() GetIpsetNameParams {
+
+	return GetIpsetNameParams{}
+}
+
+// GetIpsetNameParams contains all the bound params for the get ipset name operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters GetIpsetName
+type GetIpsetNameParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewGetIpsetNameParams() beforehand.
+func (o *GetIpsetNameParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *GetIpsetNameParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_responses.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_responses.go
new file mode 100644
index 000000000..874d39292
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_responses.go
@@ -0,0 +1,102 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+
+	"github.com/dpvs-agent/models"
+)
+
+// GetIpsetNameOKCode is the HTTP code returned for type GetIpsetNameOK
+const GetIpsetNameOKCode int = 200
+
+/*
+GetIpsetNameOK Success
+
+swagger:response getIpsetNameOK
+*/
+type GetIpsetNameOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload *models.IpsetInfo `json:"body,omitempty"`
+}
+
+// NewGetIpsetNameOK creates GetIpsetNameOK with default headers values
+func NewGetIpsetNameOK() *GetIpsetNameOK {
+
+	return &GetIpsetNameOK{}
+}
+
+// WithPayload adds the payload to the get ipset name o k response
+func (o *GetIpsetNameOK) WithPayload(payload *models.IpsetInfo) *GetIpsetNameOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get ipset name o k response
+func (o *GetIpsetNameOK) SetPayload(payload *models.IpsetInfo) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetIpsetNameOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	if o.Payload != nil {
+		payload := o.Payload
+		if err := producer.Produce(rw, payload); err != nil {
+			panic(err) // let the recovery middleware deal with this
+		}
+	}
+}
+
+// GetIpsetNameNotFoundCode is the HTTP code returned for type GetIpsetNameNotFound
+const GetIpsetNameNotFoundCode int = 404
+
+/*
+GetIpsetNameNotFound Ipset not found
+
+swagger:response getIpsetNameNotFound
+*/
+type GetIpsetNameNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewGetIpsetNameNotFound creates GetIpsetNameNotFound with default headers values
+func NewGetIpsetNameNotFound() *GetIpsetNameNotFound {
+
+	return &GetIpsetNameNotFound{}
+}
+
+// WithPayload adds the payload to the get ipset name not found response
+func (o *GetIpsetNameNotFound) WithPayload(payload string) *GetIpsetNameNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get ipset name not found response
+func (o *GetIpsetNameNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetIpsetNameNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_urlbuilder.go
new file mode 100644
index 000000000..4631b2428
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_name_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// GetIpsetNameURL generates an URL for the get ipset name operation
+type GetIpsetNameURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetIpsetNameURL) WithBasePath(bp string) *GetIpsetNameURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetIpsetNameURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *GetIpsetNameURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on GetIpsetNameURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *GetIpsetNameURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *GetIpsetNameURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *GetIpsetNameURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on GetIpsetNameURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on GetIpsetNameURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *GetIpsetNameURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_parameters.go
new file mode 100644
index 000000000..32de1d67b
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_parameters.go
@@ -0,0 +1,46 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// NewGetIpsetParams creates a new GetIpsetParams object
+//
+// There are no default values defined in the spec.
+func NewGetIpsetParams() GetIpsetParams {
+
+	return GetIpsetParams{}
+}
+
+// GetIpsetParams contains all the bound params for the get ipset operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters GetIpset
+type GetIpsetParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewGetIpsetParams() beforehand.
+func (o *GetIpsetParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_responses.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_responses.go
new file mode 100644
index 000000000..3c59914d6
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_responses.go
@@ -0,0 +1,59 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+
+	"github.com/dpvs-agent/models"
+)
+
+// GetIpsetOKCode is the HTTP code returned for type GetIpsetOK
+const GetIpsetOKCode int = 200
+
+/*
+GetIpsetOK Success
+
+swagger:response getIpsetOK
+*/
+type GetIpsetOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload *models.IpsetInfoArray `json:"body,omitempty"`
+}
+
+// NewGetIpsetOK creates GetIpsetOK with default headers values
+func NewGetIpsetOK() *GetIpsetOK {
+
+	return &GetIpsetOK{}
+}
+
+// WithPayload adds the payload to the get ipset o k response
+func (o *GetIpsetOK) WithPayload(payload *models.IpsetInfoArray) *GetIpsetOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get ipset o k response
+func (o *GetIpsetOK) SetPayload(payload *models.IpsetInfoArray) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetIpsetOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	if o.Payload != nil {
+		payload := o.Payload
+		if err := producer.Produce(rw, payload); err != nil {
+			panic(err) // let the recovery middleware deal with this
+		}
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_ipset_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_urlbuilder.go
new file mode 100644
index 000000000..fcd77f227
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_ipset_urlbuilder.go
@@ -0,0 +1,87 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+)
+
+// GetIpsetURL generates an URL for the get ipset operation
+type GetIpsetURL struct {
+	_basePath string
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetIpsetURL) WithBasePath(bp string) *GetIpsetURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetIpsetURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *GetIpsetURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset"
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *GetIpsetURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *GetIpsetURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *GetIpsetURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on GetIpsetURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on GetIpsetURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *GetIpsetURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/get_parameters.go
new file mode 100644
index 000000000..10a335867
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_parameters.go
@@ -0,0 +1,71 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+)
+
+// NewGetParams creates a new GetParams object
+//
+// There are no default values defined in the spec.
+func NewGetParams() GetParams {
+
+	return GetParams{}
+}
+
+// GetParams contains all the bound params for the get operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters Get
+type GetParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewGetParams() beforehand.
+func (o *GetParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *GetParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_responses.go b/tools/dpvs-agent/restapi/operations/ipset/get_responses.go
new file mode 100644
index 000000000..4727a5d1c
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_responses.go
@@ -0,0 +1,102 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+
+	"github.com/dpvs-agent/models"
+)
+
+// GetOKCode is the HTTP code returned for type GetOK
+const GetOKCode int = 200
+
+/*
+GetOK Success
+
+swagger:response getOK
+*/
+type GetOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload *models.IpsetInfo `json:"body,omitempty"`
+}
+
+// NewGetOK creates GetOK with default headers values
+func NewGetOK() *GetOK {
+
+	return &GetOK{}
+}
+
+// WithPayload adds the payload to the get o k response
+func (o *GetOK) WithPayload(payload *models.IpsetInfo) *GetOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get o k response
+func (o *GetOK) SetPayload(payload *models.IpsetInfo) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	if o.Payload != nil {
+		payload := o.Payload
+		if err := producer.Produce(rw, payload); err != nil {
+			panic(err) // let the recovery middleware deal with this
+		}
+	}
+}
+
+// GetNotFoundCode is the HTTP code returned for type GetNotFound
+const GetNotFoundCode int = 404
+
+/*
+GetNotFound Ipset not found
+
+swagger:response getNotFound
+*/
+type GetNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewGetNotFound creates GetNotFound with default headers values
+func NewGetNotFound() *GetNotFound {
+
+	return &GetNotFound{}
+}
+
+// WithPayload adds the payload to the get not found response
+func (o *GetNotFound) WithPayload(payload string) *GetNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the get not found response
+func (o *GetNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *GetNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/get_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/get_urlbuilder.go
new file mode 100644
index 000000000..0eeff8b86
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/get_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// GetURL generates an URL for the get operation
+type GetURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetURL) WithBasePath(bp string) *GetURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *GetURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *GetURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on GetURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *GetURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *GetURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *GetURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on GetURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on GetURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *GetURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/is_in.go b/tools/dpvs-agent/restapi/operations/ipset/is_in.go
new file mode 100644
index 000000000..82ea431b0
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/is_in.go
@@ -0,0 +1,154 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"context"
+	"encoding/json"
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/swag"
+	"github.com/go-openapi/validate"
+)
+
+// IsInHandlerFunc turns a function with the right signature into a is in handler
+type IsInHandlerFunc func(IsInParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn IsInHandlerFunc) Handle(params IsInParams) middleware.Responder {
+	return fn(params)
+}
+
+// IsInHandler interface for that can handle valid is in params
+type IsInHandler interface {
+	Handle(IsInParams) middleware.Responder
+}
+
+// NewIsIn creates a new http.Handler for the is in operation
+func NewIsIn(ctx *middleware.Context, handler IsInHandler) *IsIn {
+	return &IsIn{Context: ctx, Handler: handler}
+}
+
+/*
+	IsIn swagger:route GET /ipset/{name}/{object} ipset isIn
+
+Check if an object in the ipset.
+*/
+type IsIn struct {
+	Context *middleware.Context
+	Handler IsInHandler
+}
+
+func (o *IsIn) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewIsInParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
+
+// IsInOKBody is in o k body
+//
+// swagger:model IsInOKBody
+type IsInOKBody struct {
+
+	// message
+	// Enum: [Match MisMatch]
+	Message string `json:"Message,omitempty"`
+
+	// result
+	Result bool `json:"Result,omitempty"`
+}
+
+// Validate validates this is in o k body
+func (o *IsInOKBody) Validate(formats strfmt.Registry) error {
+	var res []error
+
+	if err := o.validateMessage(formats); err != nil {
+		res = append(res, err)
+	}
+
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+var isInOKBodyTypeMessagePropEnum []interface{}
+
+func init() {
+	var res []string
+	if err := json.Unmarshal([]byte(`["Match","MisMatch"]`), &res); err != nil {
+		panic(err)
+	}
+	for _, v := range res {
+		isInOKBodyTypeMessagePropEnum = append(isInOKBodyTypeMessagePropEnum, v)
+	}
+}
+
+const (
+
+	// IsInOKBodyMessageMatch captures enum value "Match"
+	IsInOKBodyMessageMatch string = "Match"
+
+	// IsInOKBodyMessageMisMatch captures enum value "MisMatch"
+	IsInOKBodyMessageMisMatch string = "MisMatch"
+)
+
+// prop value enum
+func (o *IsInOKBody) validateMessageEnum(path, location string, value string) error {
+	if err := validate.EnumCase(path, location, value, isInOKBodyTypeMessagePropEnum, true); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (o *IsInOKBody) validateMessage(formats strfmt.Registry) error {
+	if swag.IsZero(o.Message) { // not required
+		return nil
+	}
+
+	// value enum
+	if err := o.validateMessageEnum("isInOK"+"."+"Message", "body", o.Message); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// ContextValidate validates this is in o k body based on context it is used
+func (o *IsInOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
+	return nil
+}
+
+// MarshalBinary interface implementation
+func (o *IsInOKBody) MarshalBinary() ([]byte, error) {
+	if o == nil {
+		return nil, nil
+	}
+	return swag.WriteJSON(o)
+}
+
+// UnmarshalBinary interface implementation
+func (o *IsInOKBody) UnmarshalBinary(b []byte) error {
+	var res IsInOKBody
+	if err := swag.ReadJSON(b, &res); err != nil {
+		return err
+	}
+	*o = res
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/is_in_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/is_in_parameters.go
new file mode 100644
index 000000000..05b22f257
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/is_in_parameters.go
@@ -0,0 +1,95 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+)
+
+// NewIsInParams creates a new IsInParams object
+//
+// There are no default values defined in the spec.
+func NewIsInParams() IsInParams {
+
+	return IsInParams{}
+}
+
+// IsInParams contains all the bound params for the is in operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters IsIn
+type IsInParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+	/*
+	  Required: true
+	  In: path
+	*/
+	Object string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewIsInParams() beforehand.
+func (o *IsInParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+
+	rObject, rhkObject, _ := route.Params.GetOK("object")
+	if err := o.bindObject(rObject, rhkObject, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *IsInParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
+
+// bindObject binds and validates parameter Object from path.
+func (o *IsInParams) bindObject(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Object = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/is_in_responses.go b/tools/dpvs-agent/restapi/operations/ipset/is_in_responses.go
new file mode 100644
index 000000000..4565ceabb
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/is_in_responses.go
@@ -0,0 +1,186 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// IsInOKCode is the HTTP code returned for type IsInOK
+const IsInOKCode int = 200
+
+/*
+IsInOK Succeed
+
+swagger:response isInOK
+*/
+type IsInOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload *IsInOKBody `json:"body,omitempty"`
+}
+
+// NewIsInOK creates IsInOK with default headers values
+func NewIsInOK() *IsInOK {
+
+	return &IsInOK{}
+}
+
+// WithPayload adds the payload to the is in o k response
+func (o *IsInOK) WithPayload(payload *IsInOKBody) *IsInOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the is in o k response
+func (o *IsInOK) SetPayload(payload *IsInOKBody) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *IsInOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	if o.Payload != nil {
+		payload := o.Payload
+		if err := producer.Produce(rw, payload); err != nil {
+			panic(err) // let the recovery middleware deal with this
+		}
+	}
+}
+
+// IsInBadRequestCode is the HTTP code returned for type IsInBadRequest
+const IsInBadRequestCode int = 400
+
+/*
+IsInBadRequest Invalid ipset parameter
+
+swagger:response isInBadRequest
+*/
+type IsInBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewIsInBadRequest creates IsInBadRequest with default headers values
+func NewIsInBadRequest() *IsInBadRequest {
+
+	return &IsInBadRequest{}
+}
+
+// WithPayload adds the payload to the is in bad request response
+func (o *IsInBadRequest) WithPayload(payload string) *IsInBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the is in bad request response
+func (o *IsInBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *IsInBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// IsInNotFoundCode is the HTTP code returned for type IsInNotFound
+const IsInNotFoundCode int = 404
+
+/*
+IsInNotFound Ipset not found
+
+swagger:response isInNotFound
+*/
+type IsInNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewIsInNotFound creates IsInNotFound with default headers values
+func NewIsInNotFound() *IsInNotFound {
+
+	return &IsInNotFound{}
+}
+
+// WithPayload adds the payload to the is in not found response
+func (o *IsInNotFound) WithPayload(payload string) *IsInNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the is in not found response
+func (o *IsInNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *IsInNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// IsInFailureCode is the HTTP code returned for type IsInFailure
+const IsInFailureCode int = 500
+
+/*
+IsInFailure Service not available
+
+swagger:response isInFailure
+*/
+type IsInFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewIsInFailure creates IsInFailure with default headers values
+func NewIsInFailure() *IsInFailure {
+
+	return &IsInFailure{}
+}
+
+// WithPayload adds the payload to the is in failure response
+func (o *IsInFailure) WithPayload(payload string) *IsInFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the is in failure response
+func (o *IsInFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *IsInFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/is_in_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/is_in_urlbuilder.go
new file mode 100644
index 000000000..9a9ab7326
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/is_in_urlbuilder.go
@@ -0,0 +1,107 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// IsInURL generates an URL for the is in operation
+type IsInURL struct {
+	Name   string
+	Object string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *IsInURL) WithBasePath(bp string) *IsInURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *IsInURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *IsInURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/{object}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on IsInURL")
+	}
+
+	object := o.Object
+	if object != "" {
+		_path = strings.Replace(_path, "{object}", object, -1)
+	} else {
+		return nil, errors.New("object is required on IsInURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *IsInURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *IsInURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *IsInURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on IsInURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on IsInURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *IsInURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member.go b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member.go
new file mode 100644
index 000000000..073561743
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// PostIpsetNameMemberHandlerFunc turns a function with the right signature into a post ipset name member handler
+type PostIpsetNameMemberHandlerFunc func(PostIpsetNameMemberParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn PostIpsetNameMemberHandlerFunc) Handle(params PostIpsetNameMemberParams) middleware.Responder {
+	return fn(params)
+}
+
+// PostIpsetNameMemberHandler interface for that can handle valid post ipset name member params
+type PostIpsetNameMemberHandler interface {
+	Handle(PostIpsetNameMemberParams) middleware.Responder
+}
+
+// NewPostIpsetNameMember creates a new http.Handler for the post ipset name member operation
+func NewPostIpsetNameMember(ctx *middleware.Context, handler PostIpsetNameMemberHandler) *PostIpsetNameMember {
+	return &PostIpsetNameMember{Context: ctx, Handler: handler}
+}
+
+/*
+	PostIpsetNameMember swagger:route POST /ipset/{name}/member ipset postIpsetNameMember
+
+Add a member to the ipset.
+*/
+type PostIpsetNameMember struct {
+	Context *middleware.Context
+	Handler PostIpsetNameMemberHandler
+}
+
+func (o *PostIpsetNameMember) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewPostIpsetNameMemberParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_parameters.go
new file mode 100644
index 000000000..7501dda7a
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewPostIpsetNameMemberParams creates a new PostIpsetNameMemberParams object
+//
+// There are no default values defined in the spec.
+func NewPostIpsetNameMemberParams() PostIpsetNameMemberParams {
+
+	return PostIpsetNameMemberParams{}
+}
+
+// PostIpsetNameMemberParams contains all the bound params for the post ipset name member operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters PostIpsetNameMember
+type PostIpsetNameMemberParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewPostIpsetNameMemberParams() beforehand.
+func (o *PostIpsetNameMemberParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *PostIpsetNameMemberParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_responses.go b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_responses.go
new file mode 100644
index 000000000..98aa4981e
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_responses.go
@@ -0,0 +1,227 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// PostIpsetNameMemberOKCode is the HTTP code returned for type PostIpsetNameMemberOK
+const PostIpsetNameMemberOKCode int = 200
+
+/*
+PostIpsetNameMemberOK Existed
+
+swagger:response postIpsetNameMemberOK
+*/
+type PostIpsetNameMemberOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPostIpsetNameMemberOK creates PostIpsetNameMemberOK with default headers values
+func NewPostIpsetNameMemberOK() *PostIpsetNameMemberOK {
+
+	return &PostIpsetNameMemberOK{}
+}
+
+// WithPayload adds the payload to the post ipset name member o k response
+func (o *PostIpsetNameMemberOK) WithPayload(payload string) *PostIpsetNameMemberOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the post ipset name member o k response
+func (o *PostIpsetNameMemberOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PostIpsetNameMemberOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PostIpsetNameMemberCreatedCode is the HTTP code returned for type PostIpsetNameMemberCreated
+const PostIpsetNameMemberCreatedCode int = 201
+
+/*
+PostIpsetNameMemberCreated Created
+
+swagger:response postIpsetNameMemberCreated
+*/
+type PostIpsetNameMemberCreated struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPostIpsetNameMemberCreated creates PostIpsetNameMemberCreated with default headers values
+func NewPostIpsetNameMemberCreated() *PostIpsetNameMemberCreated {
+
+	return &PostIpsetNameMemberCreated{}
+}
+
+// WithPayload adds the payload to the post ipset name member created response
+func (o *PostIpsetNameMemberCreated) WithPayload(payload string) *PostIpsetNameMemberCreated {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the post ipset name member created response
+func (o *PostIpsetNameMemberCreated) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PostIpsetNameMemberCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(201)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PostIpsetNameMemberBadRequestCode is the HTTP code returned for type PostIpsetNameMemberBadRequest
+const PostIpsetNameMemberBadRequestCode int = 400
+
+/*
+PostIpsetNameMemberBadRequest Invalid ipset parameter
+
+swagger:response postIpsetNameMemberBadRequest
+*/
+type PostIpsetNameMemberBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPostIpsetNameMemberBadRequest creates PostIpsetNameMemberBadRequest with default headers values
+func NewPostIpsetNameMemberBadRequest() *PostIpsetNameMemberBadRequest {
+
+	return &PostIpsetNameMemberBadRequest{}
+}
+
+// WithPayload adds the payload to the post ipset name member bad request response
+func (o *PostIpsetNameMemberBadRequest) WithPayload(payload string) *PostIpsetNameMemberBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the post ipset name member bad request response
+func (o *PostIpsetNameMemberBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PostIpsetNameMemberBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PostIpsetNameMemberNotFoundCode is the HTTP code returned for type PostIpsetNameMemberNotFound
+const PostIpsetNameMemberNotFoundCode int = 404
+
+/*
+PostIpsetNameMemberNotFound Ipset not found
+
+swagger:response postIpsetNameMemberNotFound
+*/
+type PostIpsetNameMemberNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPostIpsetNameMemberNotFound creates PostIpsetNameMemberNotFound with default headers values
+func NewPostIpsetNameMemberNotFound() *PostIpsetNameMemberNotFound {
+
+	return &PostIpsetNameMemberNotFound{}
+}
+
+// WithPayload adds the payload to the post ipset name member not found response
+func (o *PostIpsetNameMemberNotFound) WithPayload(payload string) *PostIpsetNameMemberNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the post ipset name member not found response
+func (o *PostIpsetNameMemberNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PostIpsetNameMemberNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PostIpsetNameMemberFailureCode is the HTTP code returned for type PostIpsetNameMemberFailure
+const PostIpsetNameMemberFailureCode int = 500
+
+/*
+PostIpsetNameMemberFailure Service not available
+
+swagger:response postIpsetNameMemberFailure
+*/
+type PostIpsetNameMemberFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPostIpsetNameMemberFailure creates PostIpsetNameMemberFailure with default headers values
+func NewPostIpsetNameMemberFailure() *PostIpsetNameMemberFailure {
+
+	return &PostIpsetNameMemberFailure{}
+}
+
+// WithPayload adds the payload to the post ipset name member failure response
+func (o *PostIpsetNameMemberFailure) WithPayload(payload string) *PostIpsetNameMemberFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the post ipset name member failure response
+func (o *PostIpsetNameMemberFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PostIpsetNameMemberFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_urlbuilder.go
new file mode 100644
index 000000000..fcf2cf6de
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/post_ipset_name_member_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// PostIpsetNameMemberURL generates an URL for the post ipset name member operation
+type PostIpsetNameMemberURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *PostIpsetNameMemberURL) WithBasePath(bp string) *PostIpsetNameMemberURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *PostIpsetNameMemberURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *PostIpsetNameMemberURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/member"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on PostIpsetNameMemberURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *PostIpsetNameMemberURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *PostIpsetNameMemberURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *PostIpsetNameMemberURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on PostIpsetNameMemberURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on PostIpsetNameMemberURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *PostIpsetNameMemberURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name.go
new file mode 100644
index 000000000..d3a8a6472
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// PutIpsetNameHandlerFunc turns a function with the right signature into a put ipset name handler
+type PutIpsetNameHandlerFunc func(PutIpsetNameParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn PutIpsetNameHandlerFunc) Handle(params PutIpsetNameParams) middleware.Responder {
+	return fn(params)
+}
+
+// PutIpsetNameHandler interface for that can handle valid put ipset name params
+type PutIpsetNameHandler interface {
+	Handle(PutIpsetNameParams) middleware.Responder
+}
+
+// NewPutIpsetName creates a new http.Handler for the put ipset name operation
+func NewPutIpsetName(ctx *middleware.Context, handler PutIpsetNameHandler) *PutIpsetName {
+	return &PutIpsetName{Context: ctx, Handler: handler}
+}
+
+/*
+	PutIpsetName swagger:route PUT /ipset/{name} ipset putIpsetName
+
+Create an ipset named {name}.
+*/
+type PutIpsetName struct {
+	Context *middleware.Context
+	Handler PutIpsetNameHandler
+}
+
+func (o *PutIpsetName) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewPutIpsetNameParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member.go
new file mode 100644
index 000000000..a40950b5a
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// PutIpsetNameMemberHandlerFunc turns a function with the right signature into a put ipset name member handler
+type PutIpsetNameMemberHandlerFunc func(PutIpsetNameMemberParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn PutIpsetNameMemberHandlerFunc) Handle(params PutIpsetNameMemberParams) middleware.Responder {
+	return fn(params)
+}
+
+// PutIpsetNameMemberHandler interface for that can handle valid put ipset name member params
+type PutIpsetNameMemberHandler interface {
+	Handle(PutIpsetNameMemberParams) middleware.Responder
+}
+
+// NewPutIpsetNameMember creates a new http.Handler for the put ipset name member operation
+func NewPutIpsetNameMember(ctx *middleware.Context, handler PutIpsetNameMemberHandler) *PutIpsetNameMember {
+	return &PutIpsetNameMember{Context: ctx, Handler: handler}
+}
+
+/*
+	PutIpsetNameMember swagger:route PUT /ipset/{name}/member ipset putIpsetNameMember
+
+Reset the whole ipset members.
+*/
+type PutIpsetNameMember struct {
+	Context *middleware.Context
+	Handler PutIpsetNameMemberHandler
+}
+
+func (o *PutIpsetNameMember) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewPutIpsetNameMemberParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_parameters.go
new file mode 100644
index 000000000..e43d1418b
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewPutIpsetNameMemberParams creates a new PutIpsetNameMemberParams object
+//
+// There are no default values defined in the spec.
+func NewPutIpsetNameMemberParams() PutIpsetNameMemberParams {
+
+	return PutIpsetNameMemberParams{}
+}
+
+// PutIpsetNameMemberParams contains all the bound params for the put ipset name member operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters PutIpsetNameMember
+type PutIpsetNameMemberParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewPutIpsetNameMemberParams() beforehand.
+func (o *PutIpsetNameMemberParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *PutIpsetNameMemberParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_responses.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_responses.go
new file mode 100644
index 000000000..84a0b99e3
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_responses.go
@@ -0,0 +1,184 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// PutIpsetNameMemberOKCode is the HTTP code returned for type PutIpsetNameMemberOK
+const PutIpsetNameMemberOKCode int = 200
+
+/*
+PutIpsetNameMemberOK Succeed
+
+swagger:response putIpsetNameMemberOK
+*/
+type PutIpsetNameMemberOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameMemberOK creates PutIpsetNameMemberOK with default headers values
+func NewPutIpsetNameMemberOK() *PutIpsetNameMemberOK {
+
+	return &PutIpsetNameMemberOK{}
+}
+
+// WithPayload adds the payload to the put ipset name member o k response
+func (o *PutIpsetNameMemberOK) WithPayload(payload string) *PutIpsetNameMemberOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name member o k response
+func (o *PutIpsetNameMemberOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameMemberOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PutIpsetNameMemberBadRequestCode is the HTTP code returned for type PutIpsetNameMemberBadRequest
+const PutIpsetNameMemberBadRequestCode int = 400
+
+/*
+PutIpsetNameMemberBadRequest Invalid ipset parameter
+
+swagger:response putIpsetNameMemberBadRequest
+*/
+type PutIpsetNameMemberBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameMemberBadRequest creates PutIpsetNameMemberBadRequest with default headers values
+func NewPutIpsetNameMemberBadRequest() *PutIpsetNameMemberBadRequest {
+
+	return &PutIpsetNameMemberBadRequest{}
+}
+
+// WithPayload adds the payload to the put ipset name member bad request response
+func (o *PutIpsetNameMemberBadRequest) WithPayload(payload string) *PutIpsetNameMemberBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name member bad request response
+func (o *PutIpsetNameMemberBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameMemberBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PutIpsetNameMemberNotFoundCode is the HTTP code returned for type PutIpsetNameMemberNotFound
+const PutIpsetNameMemberNotFoundCode int = 404
+
+/*
+PutIpsetNameMemberNotFound Ipset not found
+
+swagger:response putIpsetNameMemberNotFound
+*/
+type PutIpsetNameMemberNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameMemberNotFound creates PutIpsetNameMemberNotFound with default headers values
+func NewPutIpsetNameMemberNotFound() *PutIpsetNameMemberNotFound {
+
+	return &PutIpsetNameMemberNotFound{}
+}
+
+// WithPayload adds the payload to the put ipset name member not found response
+func (o *PutIpsetNameMemberNotFound) WithPayload(payload string) *PutIpsetNameMemberNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name member not found response
+func (o *PutIpsetNameMemberNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameMemberNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PutIpsetNameMemberFailureCode is the HTTP code returned for type PutIpsetNameMemberFailure
+const PutIpsetNameMemberFailureCode int = 500
+
+/*
+PutIpsetNameMemberFailure Service not available
+
+swagger:response putIpsetNameMemberFailure
+*/
+type PutIpsetNameMemberFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameMemberFailure creates PutIpsetNameMemberFailure with default headers values
+func NewPutIpsetNameMemberFailure() *PutIpsetNameMemberFailure {
+
+	return &PutIpsetNameMemberFailure{}
+}
+
+// WithPayload adds the payload to the put ipset name member failure response
+func (o *PutIpsetNameMemberFailure) WithPayload(payload string) *PutIpsetNameMemberFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name member failure response
+func (o *PutIpsetNameMemberFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameMemberFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_urlbuilder.go
new file mode 100644
index 000000000..91fa88319
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_member_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// PutIpsetNameMemberURL generates an URL for the put ipset name member operation
+type PutIpsetNameMemberURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *PutIpsetNameMemberURL) WithBasePath(bp string) *PutIpsetNameMemberURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *PutIpsetNameMemberURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *PutIpsetNameMemberURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/member"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on PutIpsetNameMemberURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *PutIpsetNameMemberURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *PutIpsetNameMemberURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *PutIpsetNameMemberURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on PutIpsetNameMemberURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on PutIpsetNameMemberURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *PutIpsetNameMemberURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_parameters.go
new file mode 100644
index 000000000..1921b4c8a
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewPutIpsetNameParams creates a new PutIpsetNameParams object
+//
+// There are no default values defined in the spec.
+func NewPutIpsetNameParams() PutIpsetNameParams {
+
+	return PutIpsetNameParams{}
+}
+
+// PutIpsetNameParams contains all the bound params for the put ipset name operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters PutIpsetName
+type PutIpsetNameParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewPutIpsetNameParams() beforehand.
+func (o *PutIpsetNameParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *PutIpsetNameParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_responses.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_responses.go
new file mode 100644
index 000000000..fc80128d1
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_responses.go
@@ -0,0 +1,227 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// PutIpsetNameOKCode is the HTTP code returned for type PutIpsetNameOK
+const PutIpsetNameOKCode int = 200
+
+/*
+PutIpsetNameOK Replaced
+
+swagger:response putIpsetNameOK
+*/
+type PutIpsetNameOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameOK creates PutIpsetNameOK with default headers values
+func NewPutIpsetNameOK() *PutIpsetNameOK {
+
+	return &PutIpsetNameOK{}
+}
+
+// WithPayload adds the payload to the put ipset name o k response
+func (o *PutIpsetNameOK) WithPayload(payload string) *PutIpsetNameOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name o k response
+func (o *PutIpsetNameOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PutIpsetNameCreatedCode is the HTTP code returned for type PutIpsetNameCreated
+const PutIpsetNameCreatedCode int = 201
+
+/*
+PutIpsetNameCreated Created
+
+swagger:response putIpsetNameCreated
+*/
+type PutIpsetNameCreated struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameCreated creates PutIpsetNameCreated with default headers values
+func NewPutIpsetNameCreated() *PutIpsetNameCreated {
+
+	return &PutIpsetNameCreated{}
+}
+
+// WithPayload adds the payload to the put ipset name created response
+func (o *PutIpsetNameCreated) WithPayload(payload string) *PutIpsetNameCreated {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name created response
+func (o *PutIpsetNameCreated) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(201)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PutIpsetNameBadRequestCode is the HTTP code returned for type PutIpsetNameBadRequest
+const PutIpsetNameBadRequestCode int = 400
+
+/*
+PutIpsetNameBadRequest Invalid ipset parameter
+
+swagger:response putIpsetNameBadRequest
+*/
+type PutIpsetNameBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameBadRequest creates PutIpsetNameBadRequest with default headers values
+func NewPutIpsetNameBadRequest() *PutIpsetNameBadRequest {
+
+	return &PutIpsetNameBadRequest{}
+}
+
+// WithPayload adds the payload to the put ipset name bad request response
+func (o *PutIpsetNameBadRequest) WithPayload(payload string) *PutIpsetNameBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name bad request response
+func (o *PutIpsetNameBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PutIpsetNameNotFoundCode is the HTTP code returned for type PutIpsetNameNotFound
+const PutIpsetNameNotFoundCode int = 404
+
+/*
+PutIpsetNameNotFound Ipset not found
+
+swagger:response putIpsetNameNotFound
+*/
+type PutIpsetNameNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameNotFound creates PutIpsetNameNotFound with default headers values
+func NewPutIpsetNameNotFound() *PutIpsetNameNotFound {
+
+	return &PutIpsetNameNotFound{}
+}
+
+// WithPayload adds the payload to the put ipset name not found response
+func (o *PutIpsetNameNotFound) WithPayload(payload string) *PutIpsetNameNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name not found response
+func (o *PutIpsetNameNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// PutIpsetNameFailureCode is the HTTP code returned for type PutIpsetNameFailure
+const PutIpsetNameFailureCode int = 500
+
+/*
+PutIpsetNameFailure Service not available
+
+swagger:response putIpsetNameFailure
+*/
+type PutIpsetNameFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewPutIpsetNameFailure creates PutIpsetNameFailure with default headers values
+func NewPutIpsetNameFailure() *PutIpsetNameFailure {
+
+	return &PutIpsetNameFailure{}
+}
+
+// WithPayload adds the payload to the put ipset name failure response
+func (o *PutIpsetNameFailure) WithPayload(payload string) *PutIpsetNameFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the put ipset name failure response
+func (o *PutIpsetNameFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *PutIpsetNameFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_urlbuilder.go
new file mode 100644
index 000000000..29ed6ce2e
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/put_ipset_name_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// PutIpsetNameURL generates an URL for the put ipset name operation
+type PutIpsetNameURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *PutIpsetNameURL) WithBasePath(bp string) *PutIpsetNameURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *PutIpsetNameURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *PutIpsetNameURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on PutIpsetNameURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *PutIpsetNameURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *PutIpsetNameURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *PutIpsetNameURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on PutIpsetNameURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on PutIpsetNameURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *PutIpsetNameURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/replace_member.go b/tools/dpvs-agent/restapi/operations/ipset/replace_member.go
new file mode 100644
index 000000000..09668e599
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/replace_member.go
@@ -0,0 +1,56 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime/middleware"
+)
+
+// ReplaceMemberHandlerFunc turns a function with the right signature into a replace member handler
+type ReplaceMemberHandlerFunc func(ReplaceMemberParams) middleware.Responder
+
+// Handle executing the request and returning a response
+func (fn ReplaceMemberHandlerFunc) Handle(params ReplaceMemberParams) middleware.Responder {
+	return fn(params)
+}
+
+// ReplaceMemberHandler interface for that can handle valid replace member params
+type ReplaceMemberHandler interface {
+	Handle(ReplaceMemberParams) middleware.Responder
+}
+
+// NewReplaceMember creates a new http.Handler for the replace member operation
+func NewReplaceMember(ctx *middleware.Context, handler ReplaceMemberHandler) *ReplaceMember {
+	return &ReplaceMember{Context: ctx, Handler: handler}
+}
+
+/*
+	ReplaceMember swagger:route PUT /ipset/{name}/member ipset replaceMember
+
+Reset the whole ipset members.
+*/
+type ReplaceMember struct {
+	Context *middleware.Context
+	Handler ReplaceMemberHandler
+}
+
+func (o *ReplaceMember) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
+	route, rCtx, _ := o.Context.RouteInfo(r)
+	if rCtx != nil {
+		*r = *rCtx
+	}
+	var Params = NewReplaceMemberParams()
+	if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
+		o.Context.Respond(rw, r, route.Produces, route, err)
+		return
+	}
+
+	res := o.Handler.Handle(Params) // actually handle the request
+	o.Context.Respond(rw, r, route.Produces, route, res)
+
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/replace_member_parameters.go b/tools/dpvs-agent/restapi/operations/ipset/replace_member_parameters.go
new file mode 100644
index 000000000..95c1cb0da
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/replace_member_parameters.go
@@ -0,0 +1,101 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/errors"
+	"github.com/go-openapi/runtime"
+	"github.com/go-openapi/runtime/middleware"
+	"github.com/go-openapi/strfmt"
+	"github.com/go-openapi/validate"
+
+	"github.com/dpvs-agent/models"
+)
+
+// NewReplaceMemberParams creates a new ReplaceMemberParams object
+//
+// There are no default values defined in the spec.
+func NewReplaceMemberParams() ReplaceMemberParams {
+
+	return ReplaceMemberParams{}
+}
+
+// ReplaceMemberParams contains all the bound params for the replace member operation
+// typically these are obtained from a http.Request
+//
+// swagger:parameters ReplaceMember
+type ReplaceMemberParams struct {
+
+	// HTTP Request Object
+	HTTPRequest *http.Request `json:"-"`
+
+	/*
+	  In: body
+	*/
+	IpsetParam *models.IpsetInfo
+	/*
+	  Required: true
+	  In: path
+	*/
+	Name string
+}
+
+// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
+// for simple values it will use straight method calls.
+//
+// To ensure default values, the struct must have been initialized with NewReplaceMemberParams() beforehand.
+func (o *ReplaceMemberParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
+	var res []error
+
+	o.HTTPRequest = r
+
+	if runtime.HasBody(r) {
+		defer r.Body.Close()
+		var body models.IpsetInfo
+		if err := route.Consumer.Consume(r.Body, &body); err != nil {
+			res = append(res, errors.NewParseError("ipsetParam", "body", "", err))
+		} else {
+			// validate body object
+			if err := body.Validate(route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			ctx := validate.WithOperationRequest(r.Context())
+			if err := body.ContextValidate(ctx, route.Formats); err != nil {
+				res = append(res, err)
+			}
+
+			if len(res) == 0 {
+				o.IpsetParam = &body
+			}
+		}
+	}
+
+	rName, rhkName, _ := route.Params.GetOK("name")
+	if err := o.bindName(rName, rhkName, route.Formats); err != nil {
+		res = append(res, err)
+	}
+	if len(res) > 0 {
+		return errors.CompositeValidationError(res...)
+	}
+	return nil
+}
+
+// bindName binds and validates parameter Name from path.
+func (o *ReplaceMemberParams) bindName(rawData []string, hasKey bool, formats strfmt.Registry) error {
+	var raw string
+	if len(rawData) > 0 {
+		raw = rawData[len(rawData)-1]
+	}
+
+	// Required: true
+	// Parameter is provided by construction from the route
+	o.Name = raw
+
+	return nil
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/replace_member_responses.go b/tools/dpvs-agent/restapi/operations/ipset/replace_member_responses.go
new file mode 100644
index 000000000..f402f2f43
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/replace_member_responses.go
@@ -0,0 +1,184 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the swagger generate command
+
+import (
+	"net/http"
+
+	"github.com/go-openapi/runtime"
+)
+
+// ReplaceMemberOKCode is the HTTP code returned for type ReplaceMemberOK
+const ReplaceMemberOKCode int = 200
+
+/*
+ReplaceMemberOK Succeed
+
+swagger:response replaceMemberOK
+*/
+type ReplaceMemberOK struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewReplaceMemberOK creates ReplaceMemberOK with default headers values
+func NewReplaceMemberOK() *ReplaceMemberOK {
+
+	return &ReplaceMemberOK{}
+}
+
+// WithPayload adds the payload to the replace member o k response
+func (o *ReplaceMemberOK) WithPayload(payload string) *ReplaceMemberOK {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the replace member o k response
+func (o *ReplaceMemberOK) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *ReplaceMemberOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(200)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// ReplaceMemberBadRequestCode is the HTTP code returned for type ReplaceMemberBadRequest
+const ReplaceMemberBadRequestCode int = 400
+
+/*
+ReplaceMemberBadRequest Invalid ipset parameter
+
+swagger:response replaceMemberBadRequest
+*/
+type ReplaceMemberBadRequest struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewReplaceMemberBadRequest creates ReplaceMemberBadRequest with default headers values
+func NewReplaceMemberBadRequest() *ReplaceMemberBadRequest {
+
+	return &ReplaceMemberBadRequest{}
+}
+
+// WithPayload adds the payload to the replace member bad request response
+func (o *ReplaceMemberBadRequest) WithPayload(payload string) *ReplaceMemberBadRequest {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the replace member bad request response
+func (o *ReplaceMemberBadRequest) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *ReplaceMemberBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(400)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// ReplaceMemberNotFoundCode is the HTTP code returned for type ReplaceMemberNotFound
+const ReplaceMemberNotFoundCode int = 404
+
+/*
+ReplaceMemberNotFound Ipset not found
+
+swagger:response replaceMemberNotFound
+*/
+type ReplaceMemberNotFound struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewReplaceMemberNotFound creates ReplaceMemberNotFound with default headers values
+func NewReplaceMemberNotFound() *ReplaceMemberNotFound {
+
+	return &ReplaceMemberNotFound{}
+}
+
+// WithPayload adds the payload to the replace member not found response
+func (o *ReplaceMemberNotFound) WithPayload(payload string) *ReplaceMemberNotFound {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the replace member not found response
+func (o *ReplaceMemberNotFound) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *ReplaceMemberNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(404)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
+
+// ReplaceMemberFailureCode is the HTTP code returned for type ReplaceMemberFailure
+const ReplaceMemberFailureCode int = 500
+
+/*
+ReplaceMemberFailure Service not available
+
+swagger:response replaceMemberFailure
+*/
+type ReplaceMemberFailure struct {
+
+	/*
+	  In: Body
+	*/
+	Payload string `json:"body,omitempty"`
+}
+
+// NewReplaceMemberFailure creates ReplaceMemberFailure with default headers values
+func NewReplaceMemberFailure() *ReplaceMemberFailure {
+
+	return &ReplaceMemberFailure{}
+}
+
+// WithPayload adds the payload to the replace member failure response
+func (o *ReplaceMemberFailure) WithPayload(payload string) *ReplaceMemberFailure {
+	o.Payload = payload
+	return o
+}
+
+// SetPayload sets the payload to the replace member failure response
+func (o *ReplaceMemberFailure) SetPayload(payload string) {
+	o.Payload = payload
+}
+
+// WriteResponse to the client
+func (o *ReplaceMemberFailure) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
+
+	rw.WriteHeader(500)
+	payload := o.Payload
+	if err := producer.Produce(rw, payload); err != nil {
+		panic(err) // let the recovery middleware deal with this
+	}
+}
diff --git a/tools/dpvs-agent/restapi/operations/ipset/replace_member_urlbuilder.go b/tools/dpvs-agent/restapi/operations/ipset/replace_member_urlbuilder.go
new file mode 100644
index 000000000..e49b05b76
--- /dev/null
+++ b/tools/dpvs-agent/restapi/operations/ipset/replace_member_urlbuilder.go
@@ -0,0 +1,99 @@
+// Code generated by go-swagger; DO NOT EDIT.
+
+package ipset
+
+// This file was generated by the swagger tool.
+// Editing this file might prove futile when you re-run the generate command
+
+import (
+	"errors"
+	"net/url"
+	golangswaggerpaths "path"
+	"strings"
+)
+
+// ReplaceMemberURL generates an URL for the replace member operation
+type ReplaceMemberURL struct {
+	Name string
+
+	_basePath string
+	// avoid unkeyed usage
+	_ struct{}
+}
+
+// WithBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *ReplaceMemberURL) WithBasePath(bp string) *ReplaceMemberURL {
+	o.SetBasePath(bp)
+	return o
+}
+
+// SetBasePath sets the base path for this url builder, only required when it's different from the
+// base path specified in the swagger spec.
+// When the value of the base path is an empty string
+func (o *ReplaceMemberURL) SetBasePath(bp string) {
+	o._basePath = bp
+}
+
+// Build a url path and query string
+func (o *ReplaceMemberURL) Build() (*url.URL, error) {
+	var _result url.URL
+
+	var _path = "/ipset/{name}/member"
+
+	name := o.Name
+	if name != "" {
+		_path = strings.Replace(_path, "{name}", name, -1)
+	} else {
+		return nil, errors.New("name is required on ReplaceMemberURL")
+	}
+
+	_basePath := o._basePath
+	if _basePath == "" {
+		_basePath = "/v2"
+	}
+	_result.Path = golangswaggerpaths.Join(_basePath, _path)
+
+	return &_result, nil
+}
+
+// Must is a helper function to panic when the url builder returns an error
+func (o *ReplaceMemberURL) Must(u *url.URL, err error) *url.URL {
+	if err != nil {
+		panic(err)
+	}
+	if u == nil {
+		panic("url can't be nil")
+	}
+	return u
+}
+
+// String returns the string representation of the path with query string
+func (o *ReplaceMemberURL) String() string {
+	return o.Must(o.Build()).String()
+}
+
+// BuildFull builds a full url with scheme, host, path and query string
+func (o *ReplaceMemberURL) BuildFull(scheme, host string) (*url.URL, error) {
+	if scheme == "" {
+		return nil, errors.New("scheme is required for a full url on ReplaceMemberURL")
+	}
+	if host == "" {
+		return nil, errors.New("host is required for a full url on ReplaceMemberURL")
+	}
+
+	base, err := o.Build()
+	if err != nil {
+		return nil, err
+	}
+
+	base.Scheme = scheme
+	base.Host = host
+	return base, nil
+}
+
+// StringFull returns the string representation of a complete url
+func (o *ReplaceMemberURL) StringFull(scheme, host string) string {
+	return o.Must(o.BuildFull(scheme, host)).String()
+}