Binary API generator improvements
[govpp.git] / examples / binapi / interfaces / interfaces.ba.go
index 82e8f3c..8b9176c 100644 (file)
@@ -1,16 +1,16 @@
 // Code generated by GoVPP's binapi-generator. DO NOT EDIT.
 // versions:
-//  binapi-generator: v0.4.0-alpha-1-g435c3f4-dirty
-//  VPP:              20.01-45~g7a071e370~b63
+//  binapi-generator: v0.4.0-dev
+//  VPP:              20.05-release
 // source: /usr/share/vpp/api/core/interface.api.json
 
 /*
-Package interfaces contains generated code for VPP binary API defined by interface.api (version 3.2.2).
+Package interfaces contains generated code for VPP API file interface.api (3.2.2).
 
 It consists of:
          7 aliases
         10 enums
-        53 messages
+        57 messages
          6 types
          1 union
 */
@@ -20,13 +20,19 @@ import (
        "bytes"
        "context"
        "encoding/binary"
+       "fmt"
        "io"
        "math"
+       "net"
        "strconv"
+       "strings"
 
        api "git.fd.io/govpp.git/api"
        codec "git.fd.io/govpp.git/codec"
        struc "github.com/lunixbochs/struc"
+
+       interface_types "git.fd.io/govpp.git/examples/binapi/interface_types"
+       ip_types "git.fd.io/govpp.git/examples/binapi/ip_types"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -41,539 +47,29 @@ const (
        // APIVersion is the API version of this module.
        APIVersion = "3.2.2"
        // VersionCrc is the CRC of this module.
-       VersionCrc = 0xfebc3ffa
-)
-
-// AddressFamily represents VPP binary API enum 'address_family'.
-type AddressFamily uint32
-
-const (
-       ADDRESS_IP4 AddressFamily = 0
-       ADDRESS_IP6 AddressFamily = 1
-)
-
-var (
-       AddressFamily_name = map[uint32]string{
-               0: "ADDRESS_IP4",
-               1: "ADDRESS_IP6",
-       }
-       AddressFamily_value = map[string]uint32{
-               "ADDRESS_IP4": 0,
-               "ADDRESS_IP6": 1,
-       }
-)
-
-func (x AddressFamily) String() string {
-       s, ok := AddressFamily_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "AddressFamily(" + strconv.Itoa(int(x)) + ")"
-}
-
-// IfStatusFlags represents VPP binary API enum 'if_status_flags'.
-type IfStatusFlags uint32
-
-const (
-       IF_STATUS_API_FLAG_ADMIN_UP IfStatusFlags = 1
-       IF_STATUS_API_FLAG_LINK_UP  IfStatusFlags = 2
-)
-
-var (
-       IfStatusFlags_name = map[uint32]string{
-               1: "IF_STATUS_API_FLAG_ADMIN_UP",
-               2: "IF_STATUS_API_FLAG_LINK_UP",
-       }
-       IfStatusFlags_value = map[string]uint32{
-               "IF_STATUS_API_FLAG_ADMIN_UP": 1,
-               "IF_STATUS_API_FLAG_LINK_UP":  2,
-       }
-)
-
-func (x IfStatusFlags) String() string {
-       s, ok := IfStatusFlags_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "IfStatusFlags(" + strconv.Itoa(int(x)) + ")"
-}
-
-// IfType represents VPP binary API enum 'if_type'.
-type IfType uint32
-
-const (
-       IF_API_TYPE_HARDWARE IfType = 1
-       IF_API_TYPE_SUB      IfType = 2
-       IF_API_TYPE_P2P      IfType = 3
-       IF_API_TYPE_PIPE     IfType = 4
-)
-
-var (
-       IfType_name = map[uint32]string{
-               1: "IF_API_TYPE_HARDWARE",
-               2: "IF_API_TYPE_SUB",
-               3: "IF_API_TYPE_P2P",
-               4: "IF_API_TYPE_PIPE",
-       }
-       IfType_value = map[string]uint32{
-               "IF_API_TYPE_HARDWARE": 1,
-               "IF_API_TYPE_SUB":      2,
-               "IF_API_TYPE_P2P":      3,
-               "IF_API_TYPE_PIPE":     4,
-       }
-)
-
-func (x IfType) String() string {
-       s, ok := IfType_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "IfType(" + strconv.Itoa(int(x)) + ")"
-}
-
-// IPDscp represents VPP binary API enum 'ip_dscp'.
-type IPDscp uint8
-
-const (
-       IP_API_DSCP_CS0  IPDscp = 0
-       IP_API_DSCP_CS1  IPDscp = 8
-       IP_API_DSCP_AF11 IPDscp = 10
-       IP_API_DSCP_AF12 IPDscp = 12
-       IP_API_DSCP_AF13 IPDscp = 14
-       IP_API_DSCP_CS2  IPDscp = 16
-       IP_API_DSCP_AF21 IPDscp = 18
-       IP_API_DSCP_AF22 IPDscp = 20
-       IP_API_DSCP_AF23 IPDscp = 22
-       IP_API_DSCP_CS3  IPDscp = 24
-       IP_API_DSCP_AF31 IPDscp = 26
-       IP_API_DSCP_AF32 IPDscp = 28
-       IP_API_DSCP_AF33 IPDscp = 30
-       IP_API_DSCP_CS4  IPDscp = 32
-       IP_API_DSCP_AF41 IPDscp = 34
-       IP_API_DSCP_AF42 IPDscp = 36
-       IP_API_DSCP_AF43 IPDscp = 38
-       IP_API_DSCP_CS5  IPDscp = 40
-       IP_API_DSCP_EF   IPDscp = 46
-       IP_API_DSCP_CS6  IPDscp = 48
-       IP_API_DSCP_CS7  IPDscp = 50
-)
-
-var (
-       IPDscp_name = map[uint8]string{
-               0:  "IP_API_DSCP_CS0",
-               8:  "IP_API_DSCP_CS1",
-               10: "IP_API_DSCP_AF11",
-               12: "IP_API_DSCP_AF12",
-               14: "IP_API_DSCP_AF13",
-               16: "IP_API_DSCP_CS2",
-               18: "IP_API_DSCP_AF21",
-               20: "IP_API_DSCP_AF22",
-               22: "IP_API_DSCP_AF23",
-               24: "IP_API_DSCP_CS3",
-               26: "IP_API_DSCP_AF31",
-               28: "IP_API_DSCP_AF32",
-               30: "IP_API_DSCP_AF33",
-               32: "IP_API_DSCP_CS4",
-               34: "IP_API_DSCP_AF41",
-               36: "IP_API_DSCP_AF42",
-               38: "IP_API_DSCP_AF43",
-               40: "IP_API_DSCP_CS5",
-               46: "IP_API_DSCP_EF",
-               48: "IP_API_DSCP_CS6",
-               50: "IP_API_DSCP_CS7",
-       }
-       IPDscp_value = map[string]uint8{
-               "IP_API_DSCP_CS0":  0,
-               "IP_API_DSCP_CS1":  8,
-               "IP_API_DSCP_AF11": 10,
-               "IP_API_DSCP_AF12": 12,
-               "IP_API_DSCP_AF13": 14,
-               "IP_API_DSCP_CS2":  16,
-               "IP_API_DSCP_AF21": 18,
-               "IP_API_DSCP_AF22": 20,
-               "IP_API_DSCP_AF23": 22,
-               "IP_API_DSCP_CS3":  24,
-               "IP_API_DSCP_AF31": 26,
-               "IP_API_DSCP_AF32": 28,
-               "IP_API_DSCP_AF33": 30,
-               "IP_API_DSCP_CS4":  32,
-               "IP_API_DSCP_AF41": 34,
-               "IP_API_DSCP_AF42": 36,
-               "IP_API_DSCP_AF43": 38,
-               "IP_API_DSCP_CS5":  40,
-               "IP_API_DSCP_EF":   46,
-               "IP_API_DSCP_CS6":  48,
-               "IP_API_DSCP_CS7":  50,
-       }
-)
-
-func (x IPDscp) String() string {
-       s, ok := IPDscp_name[uint8(x)]
-       if ok {
-               return s
-       }
-       return "IPDscp(" + strconv.Itoa(int(x)) + ")"
-}
-
-// IPEcn represents VPP binary API enum 'ip_ecn'.
-type IPEcn uint8
-
-const (
-       IP_API_ECN_NONE IPEcn = 0
-       IP_API_ECN_ECT0 IPEcn = 1
-       IP_API_ECN_ECT1 IPEcn = 2
-       IP_API_ECN_CE   IPEcn = 3
-)
-
-var (
-       IPEcn_name = map[uint8]string{
-               0: "IP_API_ECN_NONE",
-               1: "IP_API_ECN_ECT0",
-               2: "IP_API_ECN_ECT1",
-               3: "IP_API_ECN_CE",
-       }
-       IPEcn_value = map[string]uint8{
-               "IP_API_ECN_NONE": 0,
-               "IP_API_ECN_ECT0": 1,
-               "IP_API_ECN_ECT1": 2,
-               "IP_API_ECN_CE":   3,
-       }
-)
-
-func (x IPEcn) String() string {
-       s, ok := IPEcn_name[uint8(x)]
-       if ok {
-               return s
-       }
-       return "IPEcn(" + strconv.Itoa(int(x)) + ")"
-}
-
-// IPProto represents VPP binary API enum 'ip_proto'.
-type IPProto uint32
-
-const (
-       IP_API_PROTO_HOPOPT   IPProto = 0
-       IP_API_PROTO_ICMP     IPProto = 1
-       IP_API_PROTO_IGMP     IPProto = 2
-       IP_API_PROTO_TCP      IPProto = 6
-       IP_API_PROTO_UDP      IPProto = 17
-       IP_API_PROTO_GRE      IPProto = 47
-       IP_API_PROTO_AH       IPProto = 50
-       IP_API_PROTO_ESP      IPProto = 51
-       IP_API_PROTO_EIGRP    IPProto = 88
-       IP_API_PROTO_OSPF     IPProto = 89
-       IP_API_PROTO_SCTP     IPProto = 132
-       IP_API_PROTO_RESERVED IPProto = 255
-)
-
-var (
-       IPProto_name = map[uint32]string{
-               0:   "IP_API_PROTO_HOPOPT",
-               1:   "IP_API_PROTO_ICMP",
-               2:   "IP_API_PROTO_IGMP",
-               6:   "IP_API_PROTO_TCP",
-               17:  "IP_API_PROTO_UDP",
-               47:  "IP_API_PROTO_GRE",
-               50:  "IP_API_PROTO_AH",
-               51:  "IP_API_PROTO_ESP",
-               88:  "IP_API_PROTO_EIGRP",
-               89:  "IP_API_PROTO_OSPF",
-               132: "IP_API_PROTO_SCTP",
-               255: "IP_API_PROTO_RESERVED",
-       }
-       IPProto_value = map[string]uint32{
-               "IP_API_PROTO_HOPOPT":   0,
-               "IP_API_PROTO_ICMP":     1,
-               "IP_API_PROTO_IGMP":     2,
-               "IP_API_PROTO_TCP":      6,
-               "IP_API_PROTO_UDP":      17,
-               "IP_API_PROTO_GRE":      47,
-               "IP_API_PROTO_AH":       50,
-               "IP_API_PROTO_ESP":      51,
-               "IP_API_PROTO_EIGRP":    88,
-               "IP_API_PROTO_OSPF":     89,
-               "IP_API_PROTO_SCTP":     132,
-               "IP_API_PROTO_RESERVED": 255,
-       }
-)
-
-func (x IPProto) String() string {
-       s, ok := IPProto_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "IPProto(" + strconv.Itoa(int(x)) + ")"
-}
-
-// LinkDuplex represents VPP binary API enum 'link_duplex'.
-type LinkDuplex uint32
-
-const (
-       LINK_DUPLEX_API_UNKNOWN LinkDuplex = 0
-       LINK_DUPLEX_API_HALF    LinkDuplex = 1
-       LINK_DUPLEX_API_FULL    LinkDuplex = 2
-)
-
-var (
-       LinkDuplex_name = map[uint32]string{
-               0: "LINK_DUPLEX_API_UNKNOWN",
-               1: "LINK_DUPLEX_API_HALF",
-               2: "LINK_DUPLEX_API_FULL",
-       }
-       LinkDuplex_value = map[string]uint32{
-               "LINK_DUPLEX_API_UNKNOWN": 0,
-               "LINK_DUPLEX_API_HALF":    1,
-               "LINK_DUPLEX_API_FULL":    2,
-       }
-)
-
-func (x LinkDuplex) String() string {
-       s, ok := LinkDuplex_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "LinkDuplex(" + strconv.Itoa(int(x)) + ")"
-}
-
-// MtuProto represents VPP binary API enum 'mtu_proto'.
-type MtuProto uint32
-
-const (
-       MTU_PROTO_API_L3   MtuProto = 1
-       MTU_PROTO_API_IP4  MtuProto = 2
-       MTU_PROTO_API_IP6  MtuProto = 3
-       MTU_PROTO_API_MPLS MtuProto = 4
-       MTU_PROTO_API_N    MtuProto = 5
+       VersionCrc = 0x58d4cf5a
 )
 
-var (
-       MtuProto_name = map[uint32]string{
-               1: "MTU_PROTO_API_L3",
-               2: "MTU_PROTO_API_IP4",
-               3: "MTU_PROTO_API_IP6",
-               4: "MTU_PROTO_API_MPLS",
-               5: "MTU_PROTO_API_N",
-       }
-       MtuProto_value = map[string]uint32{
-               "MTU_PROTO_API_L3":   1,
-               "MTU_PROTO_API_IP4":  2,
-               "MTU_PROTO_API_IP6":  3,
-               "MTU_PROTO_API_MPLS": 4,
-               "MTU_PROTO_API_N":    5,
-       }
-)
-
-func (x MtuProto) String() string {
-       s, ok := MtuProto_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "MtuProto(" + strconv.Itoa(int(x)) + ")"
-}
-
-// RxMode represents VPP binary API enum 'rx_mode'.
-type RxMode uint32
-
-const (
-       RX_MODE_API_UNKNOWN   RxMode = 0
-       RX_MODE_API_POLLING   RxMode = 1
-       RX_MODE_API_INTERRUPT RxMode = 2
-       RX_MODE_API_ADAPTIVE  RxMode = 3
-       RX_MODE_API_DEFAULT   RxMode = 4
-)
-
-var (
-       RxMode_name = map[uint32]string{
-               0: "RX_MODE_API_UNKNOWN",
-               1: "RX_MODE_API_POLLING",
-               2: "RX_MODE_API_INTERRUPT",
-               3: "RX_MODE_API_ADAPTIVE",
-               4: "RX_MODE_API_DEFAULT",
-       }
-       RxMode_value = map[string]uint32{
-               "RX_MODE_API_UNKNOWN":   0,
-               "RX_MODE_API_POLLING":   1,
-               "RX_MODE_API_INTERRUPT": 2,
-               "RX_MODE_API_ADAPTIVE":  3,
-               "RX_MODE_API_DEFAULT":   4,
-       }
-)
-
-func (x RxMode) String() string {
-       s, ok := RxMode_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "RxMode(" + strconv.Itoa(int(x)) + ")"
-}
-
-// SubIfFlags represents VPP binary API enum 'sub_if_flags'.
-type SubIfFlags uint32
-
-const (
-       SUB_IF_API_FLAG_NO_TAGS           SubIfFlags = 1
-       SUB_IF_API_FLAG_ONE_TAG           SubIfFlags = 2
-       SUB_IF_API_FLAG_TWO_TAGS          SubIfFlags = 4
-       SUB_IF_API_FLAG_DOT1AD            SubIfFlags = 8
-       SUB_IF_API_FLAG_EXACT_MATCH       SubIfFlags = 16
-       SUB_IF_API_FLAG_DEFAULT           SubIfFlags = 32
-       SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY SubIfFlags = 64
-       SUB_IF_API_FLAG_INNER_VLAN_ID_ANY SubIfFlags = 128
-       SUB_IF_API_FLAG_MASK_VNET         SubIfFlags = 254
-       SUB_IF_API_FLAG_DOT1AH            SubIfFlags = 256
-)
-
-var (
-       SubIfFlags_name = map[uint32]string{
-               1:   "SUB_IF_API_FLAG_NO_TAGS",
-               2:   "SUB_IF_API_FLAG_ONE_TAG",
-               4:   "SUB_IF_API_FLAG_TWO_TAGS",
-               8:   "SUB_IF_API_FLAG_DOT1AD",
-               16:  "SUB_IF_API_FLAG_EXACT_MATCH",
-               32:  "SUB_IF_API_FLAG_DEFAULT",
-               64:  "SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY",
-               128: "SUB_IF_API_FLAG_INNER_VLAN_ID_ANY",
-               254: "SUB_IF_API_FLAG_MASK_VNET",
-               256: "SUB_IF_API_FLAG_DOT1AH",
-       }
-       SubIfFlags_value = map[string]uint32{
-               "SUB_IF_API_FLAG_NO_TAGS":           1,
-               "SUB_IF_API_FLAG_ONE_TAG":           2,
-               "SUB_IF_API_FLAG_TWO_TAGS":          4,
-               "SUB_IF_API_FLAG_DOT1AD":            8,
-               "SUB_IF_API_FLAG_EXACT_MATCH":       16,
-               "SUB_IF_API_FLAG_DEFAULT":           32,
-               "SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY": 64,
-               "SUB_IF_API_FLAG_INNER_VLAN_ID_ANY": 128,
-               "SUB_IF_API_FLAG_MASK_VNET":         254,
-               "SUB_IF_API_FLAG_DOT1AH":            256,
-       }
-)
-
-func (x SubIfFlags) String() string {
-       s, ok := SubIfFlags_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "SubIfFlags(" + strconv.Itoa(int(x)) + ")"
-}
-
-// AddressWithPrefix represents VPP binary API alias 'address_with_prefix'.
-type AddressWithPrefix Prefix
-
-// InterfaceIndex represents VPP binary API alias 'interface_index'.
-type InterfaceIndex uint32
-
-// IP4Address represents VPP binary API alias 'ip4_address'.
-type IP4Address [4]uint8
-
-// IP4AddressWithPrefix represents VPP binary API alias 'ip4_address_with_prefix'.
-type IP4AddressWithPrefix IP4Prefix
-
-// IP6Address represents VPP binary API alias 'ip6_address'.
-type IP6Address [16]uint8
-
-// IP6AddressWithPrefix represents VPP binary API alias 'ip6_address_with_prefix'.
-type IP6AddressWithPrefix IP6Prefix
-
 // MacAddress represents VPP binary API alias 'mac_address'.
 type MacAddress [6]uint8
 
-// Address represents VPP binary API type 'address'.
-type Address struct {
-       Af AddressFamily `binapi:"address_family,name=af" json:"af,omitempty"`
-       Un AddressUnion  `binapi:"address_union,name=un" json:"un,omitempty"`
-}
-
-func (*Address) GetTypeName() string { return "address" }
-
-// IP4Prefix represents VPP binary API type 'ip4_prefix'.
-type IP4Prefix struct {
-       Address IP4Address `binapi:"ip4_address,name=address" json:"address,omitempty"`
-       Len     uint8      `binapi:"u8,name=len" json:"len,omitempty"`
-}
-
-func (*IP4Prefix) GetTypeName() string { return "ip4_prefix" }
-
-// IP6Prefix represents VPP binary API type 'ip6_prefix'.
-type IP6Prefix struct {
-       Address IP6Address `binapi:"ip6_address,name=address" json:"address,omitempty"`
-       Len     uint8      `binapi:"u8,name=len" json:"len,omitempty"`
-}
-
-func (*IP6Prefix) GetTypeName() string { return "ip6_prefix" }
-
-// Mprefix represents VPP binary API type 'mprefix'.
-type Mprefix struct {
-       Af               AddressFamily `binapi:"address_family,name=af" json:"af,omitempty"`
-       GrpAddressLength uint16        `binapi:"u16,name=grp_address_length" json:"grp_address_length,omitempty"`
-       GrpAddress       AddressUnion  `binapi:"address_union,name=grp_address" json:"grp_address,omitempty"`
-       SrcAddress       AddressUnion  `binapi:"address_union,name=src_address" json:"src_address,omitempty"`
-}
-
-func (*Mprefix) GetTypeName() string { return "mprefix" }
-
-// Prefix represents VPP binary API type 'prefix'.
-type Prefix struct {
-       Address Address `binapi:"address,name=address" json:"address,omitempty"`
-       Len     uint8   `binapi:"u8,name=len" json:"len,omitempty"`
-}
-
-func (*Prefix) GetTypeName() string { return "prefix" }
-
-// PrefixMatcher represents VPP binary API type 'prefix_matcher'.
-type PrefixMatcher struct {
-       Le uint8 `binapi:"u8,name=le" json:"le,omitempty"`
-       Ge uint8 `binapi:"u8,name=ge" json:"ge,omitempty"`
-}
-
-func (*PrefixMatcher) GetTypeName() string { return "prefix_matcher" }
-
-// AddressUnion represents VPP binary API union 'address_union'.
-type AddressUnion struct {
-       XXX_UnionData [16]byte
-}
-
-func (*AddressUnion) GetTypeName() string { return "address_union" }
-
-func AddressUnionIP4(a IP4Address) (u AddressUnion) {
-       u.SetIP4(a)
-       return
-}
-func (u *AddressUnion) SetIP4(a IP4Address) {
-       var b = new(bytes.Buffer)
-       if err := struc.Pack(b, &a); err != nil {
+func ParseMAC(mac string) (parsed MacAddress, err error) {
+       var hw net.HardwareAddr
+       if hw, err = net.ParseMAC(mac); err != nil {
                return
        }
-       copy(u.XXX_UnionData[:], b.Bytes())
-}
-func (u *AddressUnion) GetIP4() (a IP4Address) {
-       var b = bytes.NewReader(u.XXX_UnionData[:])
-       struc.Unpack(b, &a)
+       copy(parsed[:], hw[:])
        return
 }
 
-func AddressUnionIP6(a IP6Address) (u AddressUnion) {
-       u.SetIP6(a)
-       return
-}
-func (u *AddressUnion) SetIP6(a IP6Address) {
-       var b = new(bytes.Buffer)
-       if err := struc.Pack(b, &a); err != nil {
-               return
-       }
-       copy(u.XXX_UnionData[:], b.Bytes())
-}
-func (u *AddressUnion) GetIP6() (a IP6Address) {
-       var b = bytes.NewReader(u.XXX_UnionData[:])
-       struc.Unpack(b, &a)
-       return
+func (m *MacAddress) ToString() string {
+       return net.HardwareAddr(m[:]).String()
 }
 
 // CollectDetailedInterfaceStats represents VPP binary API message 'collect_detailed_interface_stats'.
 type CollectDetailedInterfaceStats struct {
-       SwIfIndex     InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       EnableDisable bool           `binapi:"bool,name=enable_disable" json:"enable_disable,omitempty"`
+       SwIfIndex     interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       EnableDisable bool                           `binapi:"bool,name=enable_disable" json:"enable_disable,omitempty"`
 }
 
 func (m *CollectDetailedInterfaceStats) Reset() { *m = CollectDetailedInterfaceStats{} }
@@ -621,7 +117,7 @@ func (m *CollectDetailedInterfaceStats) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.EnableDisable
        m.EnableDisable = tmp[pos] != 0
@@ -807,8 +303,8 @@ func (m *CreateLoopbackInstance) Unmarshal(tmp []byte) error {
 
 // CreateLoopbackInstanceReply represents VPP binary API message 'create_loopback_instance_reply'.
 type CreateLoopbackInstanceReply struct {
-       Retval    int32          `binapi:"i32,name=retval" json:"retval,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Retval    int32                          `binapi:"i32,name=retval" json:"retval,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *CreateLoopbackInstanceReply) Reset()                        { *m = CreateLoopbackInstanceReply{} }
@@ -855,15 +351,15 @@ func (m *CreateLoopbackInstanceReply) Unmarshal(tmp []byte) error {
        m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
 
 // CreateLoopbackReply represents VPP binary API message 'create_loopback_reply'.
 type CreateLoopbackReply struct {
-       Retval    int32          `binapi:"i32,name=retval" json:"retval,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Retval    int32                          `binapi:"i32,name=retval" json:"retval,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *CreateLoopbackReply) Reset()                        { *m = CreateLoopbackReply{} }
@@ -910,18 +406,18 @@ func (m *CreateLoopbackReply) Unmarshal(tmp []byte) error {
        m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
 
 // CreateSubif represents VPP binary API message 'create_subif'.
 type CreateSubif struct {
-       SwIfIndex   InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       SubID       uint32         `binapi:"u32,name=sub_id" json:"sub_id,omitempty"`
-       SubIfFlags  SubIfFlags     `binapi:"sub_if_flags,name=sub_if_flags" json:"sub_if_flags,omitempty"`
-       OuterVlanID uint16         `binapi:"u16,name=outer_vlan_id" json:"outer_vlan_id,omitempty"`
-       InnerVlanID uint16         `binapi:"u16,name=inner_vlan_id" json:"inner_vlan_id,omitempty"`
+       SwIfIndex   interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SubID       uint32                         `binapi:"u32,name=sub_id" json:"sub_id,omitempty"`
+       SubIfFlags  interface_types.SubIfFlags     `binapi:"sub_if_flags,name=sub_if_flags" json:"sub_if_flags,omitempty"`
+       OuterVlanID uint16                         `binapi:"u16,name=outer_vlan_id" json:"outer_vlan_id,omitempty"`
+       InnerVlanID uint16                         `binapi:"u16,name=inner_vlan_id" json:"inner_vlan_id,omitempty"`
 }
 
 func (m *CreateSubif) Reset()                        { *m = CreateSubif{} }
@@ -980,13 +476,13 @@ func (m *CreateSubif) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SubID
        m.SubID = uint32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SubIfFlags
-       m.SubIfFlags = SubIfFlags(o.Uint32(tmp[pos : pos+4]))
+       m.SubIfFlags = interface_types.SubIfFlags(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.OuterVlanID
        m.OuterVlanID = uint16(o.Uint16(tmp[pos : pos+2]))
@@ -999,8 +495,8 @@ func (m *CreateSubif) Unmarshal(tmp []byte) error {
 
 // CreateSubifReply represents VPP binary API message 'create_subif_reply'.
 type CreateSubifReply struct {
-       Retval    int32          `binapi:"i32,name=retval" json:"retval,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Retval    int32                          `binapi:"i32,name=retval" json:"retval,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *CreateSubifReply) Reset()                        { *m = CreateSubifReply{} }
@@ -1047,15 +543,15 @@ func (m *CreateSubifReply) Unmarshal(tmp []byte) error {
        m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
 
 // CreateVlanSubif represents VPP binary API message 'create_vlan_subif'.
 type CreateVlanSubif struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       VlanID    uint32         `binapi:"u32,name=vlan_id" json:"vlan_id,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       VlanID    uint32                         `binapi:"u32,name=vlan_id" json:"vlan_id,omitempty"`
 }
 
 func (m *CreateVlanSubif) Reset()                        { *m = CreateVlanSubif{} }
@@ -1099,7 +595,7 @@ func (m *CreateVlanSubif) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.VlanID
        m.VlanID = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -1109,8 +605,8 @@ func (m *CreateVlanSubif) Unmarshal(tmp []byte) error {
 
 // CreateVlanSubifReply represents VPP binary API message 'create_vlan_subif_reply'.
 type CreateVlanSubifReply struct {
-       Retval    int32          `binapi:"i32,name=retval" json:"retval,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Retval    int32                          `binapi:"i32,name=retval" json:"retval,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *CreateVlanSubifReply) Reset()                        { *m = CreateVlanSubifReply{} }
@@ -1157,14 +653,14 @@ func (m *CreateVlanSubifReply) Unmarshal(tmp []byte) error {
        m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
 
 // DeleteLoopback represents VPP binary API message 'delete_loopback'.
 type DeleteLoopback struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *DeleteLoopback) Reset()                        { *m = DeleteLoopback{} }
@@ -1203,7 +699,7 @@ func (m *DeleteLoopback) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
@@ -1256,7 +752,7 @@ func (m *DeleteLoopbackReply) Unmarshal(tmp []byte) error {
 
 // DeleteSubif represents VPP binary API message 'delete_subif'.
 type DeleteSubif struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *DeleteSubif) Reset()                        { *m = DeleteSubif{} }
@@ -1295,7 +791,7 @@ func (m *DeleteSubif) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
@@ -1348,8 +844,8 @@ func (m *DeleteSubifReply) Unmarshal(tmp []byte) error {
 
 // HwInterfaceSetMtu represents VPP binary API message 'hw_interface_set_mtu'.
 type HwInterfaceSetMtu struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Mtu       uint16         `binapi:"u16,name=mtu" json:"mtu,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Mtu       uint16                         `binapi:"u16,name=mtu" json:"mtu,omitempty"`
 }
 
 func (m *HwInterfaceSetMtu) Reset()                        { *m = HwInterfaceSetMtu{} }
@@ -1393,7 +889,7 @@ func (m *HwInterfaceSetMtu) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Mtu
        m.Mtu = uint16(o.Uint16(tmp[pos : pos+2]))
@@ -1449,8 +945,8 @@ func (m *HwInterfaceSetMtuReply) Unmarshal(tmp []byte) error {
 
 // InterfaceNameRenumber represents VPP binary API message 'interface_name_renumber'.
 type InterfaceNameRenumber struct {
-       SwIfIndex          InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       NewShowDevInstance uint32         `binapi:"u32,name=new_show_dev_instance" json:"new_show_dev_instance,omitempty"`
+       SwIfIndex          interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       NewShowDevInstance uint32                         `binapi:"u32,name=new_show_dev_instance" json:"new_show_dev_instance,omitempty"`
 }
 
 func (m *InterfaceNameRenumber) Reset()                        { *m = InterfaceNameRenumber{} }
@@ -1494,7 +990,7 @@ func (m *InterfaceNameRenumber) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.NewShowDevInstance
        m.NewShowDevInstance = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -1550,10 +1046,10 @@ func (m *InterfaceNameRenumberReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceAddDelAddress represents VPP binary API message 'sw_interface_add_del_address'.
 type SwInterfaceAddDelAddress struct {
-       SwIfIndex InterfaceIndex    `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       IsAdd     bool              `binapi:"bool,name=is_add" json:"is_add,omitempty"`
-       DelAll    bool              `binapi:"bool,name=del_all" json:"del_all,omitempty"`
-       Prefix    AddressWithPrefix `binapi:"address_with_prefix,name=prefix" json:"prefix,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       IsAdd     bool                           `binapi:"bool,name=is_add" json:"is_add,omitempty"`
+       DelAll    bool                           `binapi:"bool,name=del_all" json:"del_all,omitempty"`
+       Prefix    ip_types.AddressWithPrefix     `binapi:"address_with_prefix,name=prefix" json:"prefix,omitempty"`
 }
 
 func (m *SwInterfaceAddDelAddress) Reset()                        { *m = SwInterfaceAddDelAddress{} }
@@ -1575,7 +1071,7 @@ func (m *SwInterfaceAddDelAddress) Size() int {
        // field[1] m.Prefix
        // field[2] m.Prefix.Address
        // field[3] m.Prefix.Address.Af
-       size += 4
+       size += 1
        // field[3] m.Prefix.Address.Un
        size += 16
        // field[2] m.Prefix.Len
@@ -1609,8 +1105,8 @@ func (m *SwInterfaceAddDelAddress) Marshal(b []byte) ([]byte, error) {
        // field[1] m.Prefix
        // field[2] m.Prefix.Address
        // field[3] m.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Prefix.Address.Af))
-       pos += 4
+       buf[pos] = uint8(m.Prefix.Address.Af)
+       pos += 1
        // field[3] m.Prefix.Address.Un
        copy(buf[pos:pos+16], m.Prefix.Address.Un.XXX_UnionData[:])
        pos += 16
@@ -1625,7 +1121,7 @@ func (m *SwInterfaceAddDelAddress) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.IsAdd
        m.IsAdd = tmp[pos] != 0
@@ -1636,8 +1132,8 @@ func (m *SwInterfaceAddDelAddress) Unmarshal(tmp []byte) error {
        // field[1] m.Prefix
        // field[2] m.Prefix.Address
        // field[3] m.Prefix.Address.Af
-       m.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Prefix.Address.Af = ip_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[3] m.Prefix.Address.Un
        copy(m.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
        pos += 16
@@ -1817,9 +1313,181 @@ func (m *SwInterfaceAddDelMacAddressReply) Unmarshal(tmp []byte) error {
        return nil
 }
 
+// SwInterfaceAddressReplaceBegin represents VPP binary API message 'sw_interface_address_replace_begin'.
+type SwInterfaceAddressReplaceBegin struct{}
+
+func (m *SwInterfaceAddressReplaceBegin) Reset() { *m = SwInterfaceAddressReplaceBegin{} }
+func (*SwInterfaceAddressReplaceBegin) GetMessageName() string {
+       return "sw_interface_address_replace_begin"
+}
+func (*SwInterfaceAddressReplaceBegin) GetCrcString() string            { return "51077d14" }
+func (*SwInterfaceAddressReplaceBegin) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *SwInterfaceAddressReplaceBegin) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       return size
+}
+func (m *SwInterfaceAddressReplaceBegin) Marshal(b []byte) ([]byte, error) {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       var buf []byte
+       if b == nil {
+               buf = make([]byte, m.Size())
+       } else {
+               buf = b
+       }
+       return buf, nil
+}
+func (m *SwInterfaceAddressReplaceBegin) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       return nil
+}
+
+// SwInterfaceAddressReplaceBeginReply represents VPP binary API message 'sw_interface_address_replace_begin_reply'.
+type SwInterfaceAddressReplaceBeginReply struct {
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+}
+
+func (m *SwInterfaceAddressReplaceBeginReply) Reset() { *m = SwInterfaceAddressReplaceBeginReply{} }
+func (*SwInterfaceAddressReplaceBeginReply) GetMessageName() string {
+       return "sw_interface_address_replace_begin_reply"
+}
+func (*SwInterfaceAddressReplaceBeginReply) GetCrcString() string            { return "e8d4e804" }
+func (*SwInterfaceAddressReplaceBeginReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *SwInterfaceAddressReplaceBeginReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *SwInterfaceAddressReplaceBeginReply) Marshal(b []byte) ([]byte, error) {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       var buf []byte
+       if b == nil {
+               buf = make([]byte, m.Size())
+       } else {
+               buf = b
+       }
+       // field[1] m.Retval
+       o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
+       pos += 4
+       return buf, nil
+}
+func (m *SwInterfaceAddressReplaceBeginReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.Retval
+       m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
+// SwInterfaceAddressReplaceEnd represents VPP binary API message 'sw_interface_address_replace_end'.
+type SwInterfaceAddressReplaceEnd struct{}
+
+func (m *SwInterfaceAddressReplaceEnd) Reset() { *m = SwInterfaceAddressReplaceEnd{} }
+func (*SwInterfaceAddressReplaceEnd) GetMessageName() string {
+       return "sw_interface_address_replace_end"
+}
+func (*SwInterfaceAddressReplaceEnd) GetCrcString() string            { return "51077d14" }
+func (*SwInterfaceAddressReplaceEnd) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *SwInterfaceAddressReplaceEnd) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       return size
+}
+func (m *SwInterfaceAddressReplaceEnd) Marshal(b []byte) ([]byte, error) {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       var buf []byte
+       if b == nil {
+               buf = make([]byte, m.Size())
+       } else {
+               buf = b
+       }
+       return buf, nil
+}
+func (m *SwInterfaceAddressReplaceEnd) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       return nil
+}
+
+// SwInterfaceAddressReplaceEndReply represents VPP binary API message 'sw_interface_address_replace_end_reply'.
+type SwInterfaceAddressReplaceEndReply struct {
+       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
+}
+
+func (m *SwInterfaceAddressReplaceEndReply) Reset() { *m = SwInterfaceAddressReplaceEndReply{} }
+func (*SwInterfaceAddressReplaceEndReply) GetMessageName() string {
+       return "sw_interface_address_replace_end_reply"
+}
+func (*SwInterfaceAddressReplaceEndReply) GetCrcString() string            { return "e8d4e804" }
+func (*SwInterfaceAddressReplaceEndReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *SwInterfaceAddressReplaceEndReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       return size
+}
+func (m *SwInterfaceAddressReplaceEndReply) Marshal(b []byte) ([]byte, error) {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       var buf []byte
+       if b == nil {
+               buf = make([]byte, m.Size())
+       } else {
+               buf = b
+       }
+       // field[1] m.Retval
+       o.PutUint32(buf[pos:pos+4], uint32(m.Retval))
+       pos += 4
+       return buf, nil
+}
+func (m *SwInterfaceAddressReplaceEndReply) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.Retval
+       m.Retval = int32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       return nil
+}
+
 // SwInterfaceClearStats represents VPP binary API message 'sw_interface_clear_stats'.
 type SwInterfaceClearStats struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *SwInterfaceClearStats) Reset()                        { *m = SwInterfaceClearStats{} }
@@ -1858,7 +1526,7 @@ func (m *SwInterfaceClearStats) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
@@ -1911,32 +1579,32 @@ func (m *SwInterfaceClearStatsReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceDetails represents VPP binary API message 'sw_interface_details'.
 type SwInterfaceDetails struct {
-       SwIfIndex        InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       SupSwIfIndex     uint32         `binapi:"u32,name=sup_sw_if_index" json:"sup_sw_if_index,omitempty"`
-       L2Address        MacAddress     `binapi:"mac_address,name=l2_address" json:"l2_address,omitempty"`
-       Flags            IfStatusFlags  `binapi:"if_status_flags,name=flags" json:"flags,omitempty"`
-       Type             IfType         `binapi:"if_type,name=type" json:"type,omitempty"`
-       LinkDuplex       LinkDuplex     `binapi:"link_duplex,name=link_duplex" json:"link_duplex,omitempty"`
-       LinkSpeed        uint32         `binapi:"u32,name=link_speed" json:"link_speed,omitempty"`
-       LinkMtu          uint16         `binapi:"u16,name=link_mtu" json:"link_mtu,omitempty"`
-       Mtu              []uint32       `binapi:"u32[4],name=mtu" json:"mtu,omitempty" struc:"[4]uint32"`
-       SubID            uint32         `binapi:"u32,name=sub_id" json:"sub_id,omitempty"`
-       SubNumberOfTags  uint8          `binapi:"u8,name=sub_number_of_tags" json:"sub_number_of_tags,omitempty"`
-       SubOuterVlanID   uint16         `binapi:"u16,name=sub_outer_vlan_id" json:"sub_outer_vlan_id,omitempty"`
-       SubInnerVlanID   uint16         `binapi:"u16,name=sub_inner_vlan_id" json:"sub_inner_vlan_id,omitempty"`
-       SubIfFlags       SubIfFlags     `binapi:"sub_if_flags,name=sub_if_flags" json:"sub_if_flags,omitempty"`
-       VtrOp            uint32         `binapi:"u32,name=vtr_op" json:"vtr_op,omitempty"`
-       VtrPushDot1q     uint32         `binapi:"u32,name=vtr_push_dot1q" json:"vtr_push_dot1q,omitempty"`
-       VtrTag1          uint32         `binapi:"u32,name=vtr_tag1" json:"vtr_tag1,omitempty"`
-       VtrTag2          uint32         `binapi:"u32,name=vtr_tag2" json:"vtr_tag2,omitempty"`
-       OuterTag         uint16         `binapi:"u16,name=outer_tag" json:"outer_tag,omitempty"`
-       BDmac            MacAddress     `binapi:"mac_address,name=b_dmac" json:"b_dmac,omitempty"`
-       BSmac            MacAddress     `binapi:"mac_address,name=b_smac" json:"b_smac,omitempty"`
-       BVlanid          uint16         `binapi:"u16,name=b_vlanid" json:"b_vlanid,omitempty"`
-       ISid             uint32         `binapi:"u32,name=i_sid" json:"i_sid,omitempty"`
-       InterfaceName    string         `binapi:"string[64],name=interface_name" json:"interface_name,omitempty" struc:"[64]byte"`
-       InterfaceDevType string         `binapi:"string[64],name=interface_dev_type" json:"interface_dev_type,omitempty" struc:"[64]byte"`
-       Tag              string         `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
+       SwIfIndex        interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SupSwIfIndex     uint32                         `binapi:"u32,name=sup_sw_if_index" json:"sup_sw_if_index,omitempty"`
+       L2Address        MacAddress                     `binapi:"mac_address,name=l2_address" json:"l2_address,omitempty"`
+       Flags            interface_types.IfStatusFlags  `binapi:"if_status_flags,name=flags" json:"flags,omitempty"`
+       Type             interface_types.IfType         `binapi:"if_type,name=type" json:"type,omitempty"`
+       LinkDuplex       interface_types.LinkDuplex     `binapi:"link_duplex,name=link_duplex" json:"link_duplex,omitempty"`
+       LinkSpeed        uint32                         `binapi:"u32,name=link_speed" json:"link_speed,omitempty"`
+       LinkMtu          uint16                         `binapi:"u16,name=link_mtu" json:"link_mtu,omitempty"`
+       Mtu              []uint32                       `binapi:"u32[4],name=mtu" json:"mtu,omitempty" struc:"[4]uint32"`
+       SubID            uint32                         `binapi:"u32,name=sub_id" json:"sub_id,omitempty"`
+       SubNumberOfTags  uint8                          `binapi:"u8,name=sub_number_of_tags" json:"sub_number_of_tags,omitempty"`
+       SubOuterVlanID   uint16                         `binapi:"u16,name=sub_outer_vlan_id" json:"sub_outer_vlan_id,omitempty"`
+       SubInnerVlanID   uint16                         `binapi:"u16,name=sub_inner_vlan_id" json:"sub_inner_vlan_id,omitempty"`
+       SubIfFlags       interface_types.SubIfFlags     `binapi:"sub_if_flags,name=sub_if_flags" json:"sub_if_flags,omitempty"`
+       VtrOp            uint32                         `binapi:"u32,name=vtr_op" json:"vtr_op,omitempty"`
+       VtrPushDot1q     uint32                         `binapi:"u32,name=vtr_push_dot1q" json:"vtr_push_dot1q,omitempty"`
+       VtrTag1          uint32                         `binapi:"u32,name=vtr_tag1" json:"vtr_tag1,omitempty"`
+       VtrTag2          uint32                         `binapi:"u32,name=vtr_tag2" json:"vtr_tag2,omitempty"`
+       OuterTag         uint16                         `binapi:"u16,name=outer_tag" json:"outer_tag,omitempty"`
+       BDmac            MacAddress                     `binapi:"mac_address,name=b_dmac" json:"b_dmac,omitempty"`
+       BSmac            MacAddress                     `binapi:"mac_address,name=b_smac" json:"b_smac,omitempty"`
+       BVlanid          uint16                         `binapi:"u16,name=b_vlanid" json:"b_vlanid,omitempty"`
+       ISid             uint32                         `binapi:"u32,name=i_sid" json:"i_sid,omitempty"`
+       InterfaceName    string                         `binapi:"string[64],name=interface_name" json:"interface_name,omitempty" struc:"[64]byte"`
+       InterfaceDevType string                         `binapi:"string[64],name=interface_dev_type" json:"interface_dev_type,omitempty" struc:"[64]byte"`
+       Tag              string                         `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
 }
 
 func (m *SwInterfaceDetails) Reset()                        { *m = SwInterfaceDetails{} }
@@ -2124,7 +1792,7 @@ func (m *SwInterfaceDetails) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SupSwIfIndex
        m.SupSwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -2135,13 +1803,13 @@ func (m *SwInterfaceDetails) Unmarshal(tmp []byte) error {
                pos += 1
        }
        // field[1] m.Flags
-       m.Flags = IfStatusFlags(o.Uint32(tmp[pos : pos+4]))
+       m.Flags = interface_types.IfStatusFlags(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Type
-       m.Type = IfType(o.Uint32(tmp[pos : pos+4]))
+       m.Type = interface_types.IfType(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.LinkDuplex
-       m.LinkDuplex = LinkDuplex(o.Uint32(tmp[pos : pos+4]))
+       m.LinkDuplex = interface_types.LinkDuplex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.LinkSpeed
        m.LinkSpeed = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -2168,7 +1836,7 @@ func (m *SwInterfaceDetails) Unmarshal(tmp []byte) error {
        m.SubInnerVlanID = uint16(o.Uint16(tmp[pos : pos+2]))
        pos += 2
        // field[1] m.SubIfFlags
-       m.SubIfFlags = SubIfFlags(o.Uint32(tmp[pos : pos+4]))
+       m.SubIfFlags = interface_types.SubIfFlags(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.VtrOp
        m.VtrOp = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -2224,10 +1892,10 @@ func (m *SwInterfaceDetails) Unmarshal(tmp []byte) error {
 
 // SwInterfaceDump represents VPP binary API message 'sw_interface_dump'.
 type SwInterfaceDump struct {
-       SwIfIndex         InterfaceIndex `binapi:"interface_index,name=sw_if_index,default=4294967295" json:"sw_if_index,omitempty"`
-       NameFilterValid   bool           `binapi:"bool,name=name_filter_valid" json:"name_filter_valid,omitempty"`
-       XXX_NameFilterLen uint32         `struc:"sizeof=NameFilter"`
-       NameFilter        string         `json:"name_filter,omitempty"`
+       SwIfIndex         interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index,default=4.294967295e+09" json:"sw_if_index,omitempty"`
+       NameFilterValid   bool                           `binapi:"bool,name=name_filter_valid" json:"name_filter_valid,omitempty"`
+       XXX_NameFilterLen uint32                         `struc:"sizeof=NameFilter"`
+       NameFilter        string                         `json:"name_filter,omitempty"`
 }
 
 func (m *SwInterfaceDump) Reset()                        { *m = SwInterfaceDump{} }
@@ -2280,7 +1948,7 @@ func (m *SwInterfaceDump) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.NameFilterValid
        m.NameFilterValid = tmp[pos] != 0
@@ -2297,10 +1965,10 @@ func (m *SwInterfaceDump) Unmarshal(tmp []byte) error {
 
 // SwInterfaceEvent represents VPP binary API message 'sw_interface_event'.
 type SwInterfaceEvent struct {
-       PID       uint32         `binapi:"u32,name=pid" json:"pid,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Flags     IfStatusFlags  `binapi:"if_status_flags,name=flags" json:"flags,omitempty"`
-       Deleted   bool           `binapi:"bool,name=deleted" json:"deleted,omitempty"`
+       PID       uint32                         `binapi:"u32,name=pid" json:"pid,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Flags     interface_types.IfStatusFlags  `binapi:"if_status_flags,name=flags" json:"flags,omitempty"`
+       Deleted   bool                           `binapi:"bool,name=deleted" json:"deleted,omitempty"`
 }
 
 func (m *SwInterfaceEvent) Reset()                        { *m = SwInterfaceEvent{} }
@@ -2359,10 +2027,10 @@ func (m *SwInterfaceEvent) Unmarshal(tmp []byte) error {
        m.PID = uint32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Flags
-       m.Flags = IfStatusFlags(o.Uint32(tmp[pos : pos+4]))
+       m.Flags = interface_types.IfStatusFlags(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Deleted
        m.Deleted = tmp[pos] != 0
@@ -2372,7 +2040,7 @@ func (m *SwInterfaceEvent) Unmarshal(tmp []byte) error {
 
 // SwInterfaceGetMacAddress represents VPP binary API message 'sw_interface_get_mac_address'.
 type SwInterfaceGetMacAddress struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *SwInterfaceGetMacAddress) Reset()                        { *m = SwInterfaceGetMacAddress{} }
@@ -2411,7 +2079,7 @@ func (m *SwInterfaceGetMacAddress) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
@@ -2483,8 +2151,8 @@ func (m *SwInterfaceGetMacAddressReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceGetTable represents VPP binary API message 'sw_interface_get_table'.
 type SwInterfaceGetTable struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       IsIPv6    bool           `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       IsIPv6    bool                           `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
 }
 
 func (m *SwInterfaceGetTable) Reset()                        { *m = SwInterfaceGetTable{} }
@@ -2530,7 +2198,7 @@ func (m *SwInterfaceGetTable) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.IsIPv6
        m.IsIPv6 = tmp[pos] != 0
@@ -2595,10 +2263,10 @@ func (m *SwInterfaceGetTableReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceRxPlacementDetails represents VPP binary API message 'sw_interface_rx_placement_details'.
 type SwInterfaceRxPlacementDetails struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       QueueID   uint32         `binapi:"u32,name=queue_id" json:"queue_id,omitempty"`
-       WorkerID  uint32         `binapi:"u32,name=worker_id" json:"worker_id,omitempty"`
-       Mode      RxMode         `binapi:"rx_mode,name=mode" json:"mode,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       QueueID   uint32                         `binapi:"u32,name=queue_id" json:"queue_id,omitempty"`
+       WorkerID  uint32                         `binapi:"u32,name=worker_id" json:"worker_id,omitempty"`
+       Mode      interface_types.RxMode         `binapi:"rx_mode,name=mode" json:"mode,omitempty"`
 }
 
 func (m *SwInterfaceRxPlacementDetails) Reset() { *m = SwInterfaceRxPlacementDetails{} }
@@ -2654,7 +2322,7 @@ func (m *SwInterfaceRxPlacementDetails) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.QueueID
        m.QueueID = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -2663,14 +2331,14 @@ func (m *SwInterfaceRxPlacementDetails) Unmarshal(tmp []byte) error {
        m.WorkerID = uint32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Mode
-       m.Mode = RxMode(o.Uint32(tmp[pos : pos+4]))
+       m.Mode = interface_types.RxMode(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
 
 // SwInterfaceRxPlacementDump represents VPP binary API message 'sw_interface_rx_placement_dump'.
 type SwInterfaceRxPlacementDump struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
 }
 
 func (m *SwInterfaceRxPlacementDump) Reset()                        { *m = SwInterfaceRxPlacementDump{} }
@@ -2709,15 +2377,15 @@ func (m *SwInterfaceRxPlacementDump) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
 
 // SwInterfaceSetFlags represents VPP binary API message 'sw_interface_set_flags'.
 type SwInterfaceSetFlags struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Flags     IfStatusFlags  `binapi:"if_status_flags,name=flags" json:"flags,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Flags     interface_types.IfStatusFlags  `binapi:"if_status_flags,name=flags" json:"flags,omitempty"`
 }
 
 func (m *SwInterfaceSetFlags) Reset()                        { *m = SwInterfaceSetFlags{} }
@@ -2761,10 +2429,10 @@ func (m *SwInterfaceSetFlags) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Flags
-       m.Flags = IfStatusFlags(o.Uint32(tmp[pos : pos+4]))
+       m.Flags = interface_types.IfStatusFlags(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
@@ -2817,8 +2485,8 @@ func (m *SwInterfaceSetFlagsReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceSetIPDirectedBroadcast represents VPP binary API message 'sw_interface_set_ip_directed_broadcast'.
 type SwInterfaceSetIPDirectedBroadcast struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Enable    bool           `binapi:"bool,name=enable" json:"enable,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Enable    bool                           `binapi:"bool,name=enable" json:"enable,omitempty"`
 }
 
 func (m *SwInterfaceSetIPDirectedBroadcast) Reset() { *m = SwInterfaceSetIPDirectedBroadcast{} }
@@ -2866,7 +2534,7 @@ func (m *SwInterfaceSetIPDirectedBroadcast) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Enable
        m.Enable = tmp[pos] != 0
@@ -2928,8 +2596,8 @@ func (m *SwInterfaceSetIPDirectedBroadcastReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceSetMacAddress represents VPP binary API message 'sw_interface_set_mac_address'.
 type SwInterfaceSetMacAddress struct {
-       SwIfIndex  InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       MacAddress MacAddress     `binapi:"mac_address,name=mac_address" json:"mac_address,omitempty"`
+       SwIfIndex  interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       MacAddress MacAddress                     `binapi:"mac_address,name=mac_address" json:"mac_address,omitempty"`
 }
 
 func (m *SwInterfaceSetMacAddress) Reset()                        { *m = SwInterfaceSetMacAddress{} }
@@ -2979,7 +2647,7 @@ func (m *SwInterfaceSetMacAddress) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.MacAddress
        for i := 0; i < len(m.MacAddress); i++ {
@@ -3039,8 +2707,8 @@ func (m *SwInterfaceSetMacAddressReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceSetMtu represents VPP binary API message 'sw_interface_set_mtu'.
 type SwInterfaceSetMtu struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Mtu       []uint32       `binapi:"u32[4],name=mtu" json:"mtu,omitempty" struc:"[4]uint32"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Mtu       []uint32                       `binapi:"u32[4],name=mtu" json:"mtu,omitempty" struc:"[4]uint32"`
 }
 
 func (m *SwInterfaceSetMtu) Reset()                        { *m = SwInterfaceSetMtu{} }
@@ -3090,7 +2758,7 @@ func (m *SwInterfaceSetMtu) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Mtu
        m.Mtu = make([]uint32, 4)
@@ -3149,10 +2817,10 @@ func (m *SwInterfaceSetMtuReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceSetRxMode represents VPP binary API message 'sw_interface_set_rx_mode'.
 type SwInterfaceSetRxMode struct {
-       SwIfIndex    InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       QueueIDValid bool           `binapi:"bool,name=queue_id_valid" json:"queue_id_valid,omitempty"`
-       QueueID      uint32         `binapi:"u32,name=queue_id" json:"queue_id,omitempty"`
-       Mode         RxMode         `binapi:"rx_mode,name=mode" json:"mode,omitempty"`
+       SwIfIndex    interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       QueueIDValid bool                           `binapi:"bool,name=queue_id_valid" json:"queue_id_valid,omitempty"`
+       QueueID      uint32                         `binapi:"u32,name=queue_id" json:"queue_id,omitempty"`
+       Mode         interface_types.RxMode         `binapi:"rx_mode,name=mode" json:"mode,omitempty"`
 }
 
 func (m *SwInterfaceSetRxMode) Reset()                        { *m = SwInterfaceSetRxMode{} }
@@ -3208,7 +2876,7 @@ func (m *SwInterfaceSetRxMode) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.QueueIDValid
        m.QueueIDValid = tmp[pos] != 0
@@ -3217,7 +2885,7 @@ func (m *SwInterfaceSetRxMode) Unmarshal(tmp []byte) error {
        m.QueueID = uint32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Mode
-       m.Mode = RxMode(o.Uint32(tmp[pos : pos+4]))
+       m.Mode = interface_types.RxMode(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
@@ -3270,10 +2938,10 @@ func (m *SwInterfaceSetRxModeReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceSetRxPlacement represents VPP binary API message 'sw_interface_set_rx_placement'.
 type SwInterfaceSetRxPlacement struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       QueueID   uint32         `binapi:"u32,name=queue_id" json:"queue_id,omitempty"`
-       WorkerID  uint32         `binapi:"u32,name=worker_id" json:"worker_id,omitempty"`
-       IsMain    bool           `binapi:"bool,name=is_main" json:"is_main,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       QueueID   uint32                         `binapi:"u32,name=queue_id" json:"queue_id,omitempty"`
+       WorkerID  uint32                         `binapi:"u32,name=worker_id" json:"worker_id,omitempty"`
+       IsMain    bool                           `binapi:"bool,name=is_main" json:"is_main,omitempty"`
 }
 
 func (m *SwInterfaceSetRxPlacement) Reset()                        { *m = SwInterfaceSetRxPlacement{} }
@@ -3329,7 +2997,7 @@ func (m *SwInterfaceSetRxPlacement) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.QueueID
        m.QueueID = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -3393,9 +3061,9 @@ func (m *SwInterfaceSetRxPlacementReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceSetTable represents VPP binary API message 'sw_interface_set_table'.
 type SwInterfaceSetTable struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       IsIPv6    bool           `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
-       VrfID     uint32         `binapi:"u32,name=vrf_id" json:"vrf_id,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       IsIPv6    bool                           `binapi:"bool,name=is_ipv6" json:"is_ipv6,omitempty"`
+       VrfID     uint32                         `binapi:"u32,name=vrf_id" json:"vrf_id,omitempty"`
 }
 
 func (m *SwInterfaceSetTable) Reset()                        { *m = SwInterfaceSetTable{} }
@@ -3446,7 +3114,7 @@ func (m *SwInterfaceSetTable) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.IsIPv6
        m.IsIPv6 = tmp[pos] != 0
@@ -3505,9 +3173,9 @@ func (m *SwInterfaceSetTableReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceSetUnnumbered represents VPP binary API message 'sw_interface_set_unnumbered'.
 type SwInterfaceSetUnnumbered struct {
-       SwIfIndex           InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       UnnumberedSwIfIndex InterfaceIndex `binapi:"interface_index,name=unnumbered_sw_if_index" json:"unnumbered_sw_if_index,omitempty"`
-       IsAdd               bool           `binapi:"bool,name=is_add" json:"is_add,omitempty"`
+       SwIfIndex           interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       UnnumberedSwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=unnumbered_sw_if_index" json:"unnumbered_sw_if_index,omitempty"`
+       IsAdd               bool                           `binapi:"bool,name=is_add" json:"is_add,omitempty"`
 }
 
 func (m *SwInterfaceSetUnnumbered) Reset()                        { *m = SwInterfaceSetUnnumbered{} }
@@ -3558,10 +3226,10 @@ func (m *SwInterfaceSetUnnumbered) Unmarshal(tmp []byte) error {
        pos := 0
        _ = pos
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.UnnumberedSwIfIndex
-       m.UnnumberedSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.UnnumberedSwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.IsAdd
        m.IsAdd = tmp[pos] != 0
@@ -3619,9 +3287,9 @@ func (m *SwInterfaceSetUnnumberedReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceTagAddDel represents VPP binary API message 'sw_interface_tag_add_del'.
 type SwInterfaceTagAddDel struct {
-       IsAdd     bool           `binapi:"bool,name=is_add" json:"is_add,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Tag       string         `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
+       IsAdd     bool                           `binapi:"bool,name=is_add" json:"is_add,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Tag       string                         `binapi:"string[64],name=tag" json:"tag,omitempty" struc:"[64]byte"`
 }
 
 func (m *SwInterfaceTagAddDel) Reset()                        { *m = SwInterfaceTagAddDel{} }
@@ -3675,7 +3343,7 @@ func (m *SwInterfaceTagAddDel) Unmarshal(tmp []byte) error {
        m.IsAdd = tmp[pos] != 0
        pos += 1
        // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.SwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Tag
        {
@@ -3857,6 +3525,10 @@ func file_interfaces_binapi_init() {
        api.RegisterMessage((*SwInterfaceAddDelAddressReply)(nil), "interface.SwInterfaceAddDelAddressReply")
        api.RegisterMessage((*SwInterfaceAddDelMacAddress)(nil), "interface.SwInterfaceAddDelMacAddress")
        api.RegisterMessage((*SwInterfaceAddDelMacAddressReply)(nil), "interface.SwInterfaceAddDelMacAddressReply")
+       api.RegisterMessage((*SwInterfaceAddressReplaceBegin)(nil), "interface.SwInterfaceAddressReplaceBegin")
+       api.RegisterMessage((*SwInterfaceAddressReplaceBeginReply)(nil), "interface.SwInterfaceAddressReplaceBeginReply")
+       api.RegisterMessage((*SwInterfaceAddressReplaceEnd)(nil), "interface.SwInterfaceAddressReplaceEnd")
+       api.RegisterMessage((*SwInterfaceAddressReplaceEndReply)(nil), "interface.SwInterfaceAddressReplaceEndReply")
        api.RegisterMessage((*SwInterfaceClearStats)(nil), "interface.SwInterfaceClearStats")
        api.RegisterMessage((*SwInterfaceClearStatsReply)(nil), "interface.SwInterfaceClearStatsReply")
        api.RegisterMessage((*SwInterfaceDetails)(nil), "interface.SwInterfaceDetails")
@@ -3915,6 +3587,10 @@ func AllMessages() []api.Message {
                (*SwInterfaceAddDelAddressReply)(nil),
                (*SwInterfaceAddDelMacAddress)(nil),
                (*SwInterfaceAddDelMacAddressReply)(nil),
+               (*SwInterfaceAddressReplaceBegin)(nil),
+               (*SwInterfaceAddressReplaceBeginReply)(nil),
+               (*SwInterfaceAddressReplaceEnd)(nil),
+               (*SwInterfaceAddressReplaceEndReply)(nil),
                (*SwInterfaceClearStats)(nil),
                (*SwInterfaceClearStatsReply)(nil),
                (*SwInterfaceDetails)(nil),
@@ -3956,6 +3632,9 @@ var _ = bytes.NewBuffer
 var _ = context.Background
 var _ = io.Copy
 var _ = strconv.Itoa
+var _ = strings.Contains
 var _ = struc.Pack
 var _ = binary.BigEndian
 var _ = math.Float32bits
+var _ = net.ParseIP
+var _ = fmt.Errorf