Binary API generator improvements
[govpp.git] / examples / binapi / ip / ip.ba.go
index b15a489..ed8640b 100644 (file)
@@ -1,11 +1,11 @@
 // 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/ip.api.json
 
 /*
-Package ip contains generated code for VPP binary API defined by ip.api (version 3.0.1).
+Package ip contains generated code for VPP API file ip.api (3.0.1).
 
 It consists of:
          7 aliases
@@ -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"
+
+       fib_types "git.fd.io/govpp.git/examples/binapi/fib_types"
+       interface_types "git.fd.io/govpp.git/examples/binapi/interface_types"
 )
 
 // This is a compile-time assertion to ensure that this generated file
@@ -41,393 +47,9 @@ const (
        // APIVersion is the API version of this module.
        APIVersion = "3.0.1"
        // VersionCrc is the CRC of this module.
-       VersionCrc = 0xfc3fea46
-)
-
-// 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)) + ")"
-}
-
-// FibPathFlags represents VPP binary API enum 'fib_path_flags'.
-type FibPathFlags uint32
-
-const (
-       FIB_API_PATH_FLAG_NONE                 FibPathFlags = 0
-       FIB_API_PATH_FLAG_RESOLVE_VIA_ATTACHED FibPathFlags = 1
-       FIB_API_PATH_FLAG_RESOLVE_VIA_HOST     FibPathFlags = 2
-       FIB_API_PATH_FLAG_POP_PW_CW            FibPathFlags = 4
-)
-
-var (
-       FibPathFlags_name = map[uint32]string{
-               0: "FIB_API_PATH_FLAG_NONE",
-               1: "FIB_API_PATH_FLAG_RESOLVE_VIA_ATTACHED",
-               2: "FIB_API_PATH_FLAG_RESOLVE_VIA_HOST",
-               4: "FIB_API_PATH_FLAG_POP_PW_CW",
-       }
-       FibPathFlags_value = map[string]uint32{
-               "FIB_API_PATH_FLAG_NONE":                 0,
-               "FIB_API_PATH_FLAG_RESOLVE_VIA_ATTACHED": 1,
-               "FIB_API_PATH_FLAG_RESOLVE_VIA_HOST":     2,
-               "FIB_API_PATH_FLAG_POP_PW_CW":            4,
-       }
-)
-
-func (x FibPathFlags) String() string {
-       s, ok := FibPathFlags_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "FibPathFlags(" + strconv.Itoa(int(x)) + ")"
-}
-
-// FibPathNhProto represents VPP binary API enum 'fib_path_nh_proto'.
-type FibPathNhProto uint32
-
-const (
-       FIB_API_PATH_NH_PROTO_IP4      FibPathNhProto = 0
-       FIB_API_PATH_NH_PROTO_IP6      FibPathNhProto = 1
-       FIB_API_PATH_NH_PROTO_MPLS     FibPathNhProto = 2
-       FIB_API_PATH_NH_PROTO_ETHERNET FibPathNhProto = 3
-       FIB_API_PATH_NH_PROTO_BIER     FibPathNhProto = 4
-)
-
-var (
-       FibPathNhProto_name = map[uint32]string{
-               0: "FIB_API_PATH_NH_PROTO_IP4",
-               1: "FIB_API_PATH_NH_PROTO_IP6",
-               2: "FIB_API_PATH_NH_PROTO_MPLS",
-               3: "FIB_API_PATH_NH_PROTO_ETHERNET",
-               4: "FIB_API_PATH_NH_PROTO_BIER",
-       }
-       FibPathNhProto_value = map[string]uint32{
-               "FIB_API_PATH_NH_PROTO_IP4":      0,
-               "FIB_API_PATH_NH_PROTO_IP6":      1,
-               "FIB_API_PATH_NH_PROTO_MPLS":     2,
-               "FIB_API_PATH_NH_PROTO_ETHERNET": 3,
-               "FIB_API_PATH_NH_PROTO_BIER":     4,
-       }
-)
-
-func (x FibPathNhProto) String() string {
-       s, ok := FibPathNhProto_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "FibPathNhProto(" + strconv.Itoa(int(x)) + ")"
-}
-
-// FibPathType represents VPP binary API enum 'fib_path_type'.
-type FibPathType uint32
-
-const (
-       FIB_API_PATH_TYPE_NORMAL        FibPathType = 0
-       FIB_API_PATH_TYPE_LOCAL         FibPathType = 1
-       FIB_API_PATH_TYPE_DROP          FibPathType = 2
-       FIB_API_PATH_TYPE_UDP_ENCAP     FibPathType = 3
-       FIB_API_PATH_TYPE_BIER_IMP      FibPathType = 4
-       FIB_API_PATH_TYPE_ICMP_UNREACH  FibPathType = 5
-       FIB_API_PATH_TYPE_ICMP_PROHIBIT FibPathType = 6
-       FIB_API_PATH_TYPE_SOURCE_LOOKUP FibPathType = 7
-       FIB_API_PATH_TYPE_DVR           FibPathType = 8
-       FIB_API_PATH_TYPE_INTERFACE_RX  FibPathType = 9
-       FIB_API_PATH_TYPE_CLASSIFY      FibPathType = 10
-)
-
-var (
-       FibPathType_name = map[uint32]string{
-               0:  "FIB_API_PATH_TYPE_NORMAL",
-               1:  "FIB_API_PATH_TYPE_LOCAL",
-               2:  "FIB_API_PATH_TYPE_DROP",
-               3:  "FIB_API_PATH_TYPE_UDP_ENCAP",
-               4:  "FIB_API_PATH_TYPE_BIER_IMP",
-               5:  "FIB_API_PATH_TYPE_ICMP_UNREACH",
-               6:  "FIB_API_PATH_TYPE_ICMP_PROHIBIT",
-               7:  "FIB_API_PATH_TYPE_SOURCE_LOOKUP",
-               8:  "FIB_API_PATH_TYPE_DVR",
-               9:  "FIB_API_PATH_TYPE_INTERFACE_RX",
-               10: "FIB_API_PATH_TYPE_CLASSIFY",
-       }
-       FibPathType_value = map[string]uint32{
-               "FIB_API_PATH_TYPE_NORMAL":        0,
-               "FIB_API_PATH_TYPE_LOCAL":         1,
-               "FIB_API_PATH_TYPE_DROP":          2,
-               "FIB_API_PATH_TYPE_UDP_ENCAP":     3,
-               "FIB_API_PATH_TYPE_BIER_IMP":      4,
-               "FIB_API_PATH_TYPE_ICMP_UNREACH":  5,
-               "FIB_API_PATH_TYPE_ICMP_PROHIBIT": 6,
-               "FIB_API_PATH_TYPE_SOURCE_LOOKUP": 7,
-               "FIB_API_PATH_TYPE_DVR":           8,
-               "FIB_API_PATH_TYPE_INTERFACE_RX":  9,
-               "FIB_API_PATH_TYPE_CLASSIFY":      10,
-       }
-)
-
-func (x FibPathType) String() string {
-       s, ok := FibPathType_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "FibPathType(" + 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,
-       }
+       VersionCrc = 0x765d74b1
 )
 
-func (x IPProto) String() string {
-       s, ok := IPProto_name[uint32(x)]
-       if ok {
-               return s
-       }
-       return "IPProto(" + strconv.Itoa(int(x)) + ")"
-}
-
 // IPReassType represents VPP binary API enum 'ip_reass_type'.
 type IPReassType uint32
 
@@ -455,36 +77,6 @@ func (x IPReassType) String() string {
        return "IPReassType(" + 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)) + ")"
-}
-
 // MfibItfFlags represents VPP binary API enum 'mfib_itf_flags'.
 type MfibItfFlags uint32
 
@@ -524,230 +116,41 @@ func (x MfibItfFlags) String() string {
        return "MfibItfFlags(" + 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
-)
-
-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" }
-
-// FibMplsLabel represents VPP binary API type 'fib_mpls_label'.
-type FibMplsLabel struct {
-       IsUniform uint8  `binapi:"u8,name=is_uniform" json:"is_uniform,omitempty"`
-       Label     uint32 `binapi:"u32,name=label" json:"label,omitempty"`
-       TTL       uint8  `binapi:"u8,name=ttl" json:"ttl,omitempty"`
-       Exp       uint8  `binapi:"u8,name=exp" json:"exp,omitempty"`
-}
-
-func (*FibMplsLabel) GetTypeName() string { return "fib_mpls_label" }
-
-// FibPath represents VPP binary API type 'fib_path'.
-type FibPath struct {
-       SwIfIndex  uint32           `binapi:"u32,name=sw_if_index" json:"sw_if_index,omitempty"`
-       TableID    uint32           `binapi:"u32,name=table_id" json:"table_id,omitempty"`
-       RpfID      uint32           `binapi:"u32,name=rpf_id" json:"rpf_id,omitempty"`
-       Weight     uint8            `binapi:"u8,name=weight" json:"weight,omitempty"`
-       Preference uint8            `binapi:"u8,name=preference" json:"preference,omitempty"`
-       Type       FibPathType      `binapi:"fib_path_type,name=type" json:"type,omitempty"`
-       Flags      FibPathFlags     `binapi:"fib_path_flags,name=flags" json:"flags,omitempty"`
-       Proto      FibPathNhProto   `binapi:"fib_path_nh_proto,name=proto" json:"proto,omitempty"`
-       Nh         FibPathNh        `binapi:"fib_path_nh,name=nh" json:"nh,omitempty"`
-       NLabels    uint8            `binapi:"u8,name=n_labels" json:"n_labels,omitempty"`
-       LabelStack [16]FibMplsLabel `binapi:"fib_mpls_label[16],name=label_stack" json:"label_stack,omitempty" struc:"[16]FibMplsLabel"`
-}
-
-func (*FibPath) GetTypeName() string { return "fib_path" }
-
-// FibPathNh represents VPP binary API type 'fib_path_nh'.
-type FibPathNh struct {
-       Address            AddressUnion `binapi:"address_union,name=address" json:"address,omitempty"`
-       ViaLabel           uint32       `binapi:"u32,name=via_label" json:"via_label,omitempty"`
-       ObjID              uint32       `binapi:"u32,name=obj_id" json:"obj_id,omitempty"`
-       ClassifyTableIndex uint32       `binapi:"u32,name=classify_table_index" json:"classify_table_index,omitempty"`
-}
-
-func (*FibPathNh) GetTypeName() string { return "fib_path_nh" }
-
-// 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 ParseMAC(mac string) (parsed MacAddress, err error) {
+       var hw net.HardwareAddr
+       if hw, err = net.ParseMAC(mac); err != nil {
+               return
+       }
+       copy(parsed[:], hw[:])
+       return
 }
 
-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 (m *MacAddress) ToString() string {
+       return net.HardwareAddr(m[:]).String()
 }
 
-func (*IP6Prefix) GetTypeName() string { return "ip6_prefix" }
-
 // IPMroute represents VPP binary API type 'ip_mroute'.
 type IPMroute struct {
-       TableID    uint32     `binapi:"u32,name=table_id" json:"table_id,omitempty"`
-       EntryFlags uint32     `binapi:"u32,name=entry_flags" json:"entry_flags,omitempty"`
-       RpfID      uint32     `binapi:"u32,name=rpf_id" json:"rpf_id,omitempty"`
-       Prefix     Mprefix    `binapi:"mprefix,name=prefix" json:"prefix,omitempty"`
-       NPaths     uint8      `binapi:"u8,name=n_paths" json:"n_paths,omitempty" struc:"sizeof=Paths"`
-       Paths      []MfibPath `binapi:"mfib_path[n_paths],name=paths" json:"paths,omitempty"`
+       TableID    uint32            `binapi:"u32,name=table_id" json:"table_id,omitempty"`
+       EntryFlags uint32            `binapi:"u32,name=entry_flags" json:"entry_flags,omitempty"`
+       RpfID      uint32            `binapi:"u32,name=rpf_id" json:"rpf_id,omitempty"`
+       Prefix     fib_types.Mprefix `binapi:"mprefix,name=prefix" json:"prefix,omitempty"`
+       NPaths     uint8             `binapi:"u8,name=n_paths" json:"n_paths,omitempty" struc:"sizeof=Paths"`
+       Paths      []MfibPath        `binapi:"mfib_path[n_paths],name=paths" json:"paths,omitempty"`
 }
 
 func (*IPMroute) GetTypeName() string { return "ip_mroute" }
 
 // IPRoute represents VPP binary API type 'ip_route'.
 type IPRoute struct {
-       TableID    uint32    `binapi:"u32,name=table_id" json:"table_id,omitempty"`
-       StatsIndex uint32    `binapi:"u32,name=stats_index" json:"stats_index,omitempty"`
-       Prefix     Prefix    `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
-       NPaths     uint8     `binapi:"u8,name=n_paths" json:"n_paths,omitempty" struc:"sizeof=Paths"`
-       Paths      []FibPath `binapi:"fib_path[n_paths],name=paths" json:"paths,omitempty"`
+       TableID    uint32              `binapi:"u32,name=table_id" json:"table_id,omitempty"`
+       StatsIndex uint32              `binapi:"u32,name=stats_index" json:"stats_index,omitempty"`
+       Prefix     fib_types.Prefix    `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
+       NPaths     uint8               `binapi:"u8,name=n_paths" json:"n_paths,omitempty" struc:"sizeof=Paths"`
+       Paths      []fib_types.FibPath `binapi:"fib_path[n_paths],name=paths" json:"paths,omitempty"`
 }
 
 func (*IPRoute) GetTypeName() string { return "ip_route" }
@@ -763,88 +166,21 @@ func (*IPTable) GetTypeName() string { return "ip_table" }
 
 // MfibPath represents VPP binary API type 'mfib_path'.
 type MfibPath struct {
-       ItfFlags MfibItfFlags `binapi:"mfib_itf_flags,name=itf_flags" json:"itf_flags,omitempty"`
-       Path     FibPath      `binapi:"fib_path,name=path" json:"path,omitempty"`
+       ItfFlags MfibItfFlags      `binapi:"mfib_itf_flags,name=itf_flags" json:"itf_flags,omitempty"`
+       Path     fib_types.FibPath `binapi:"fib_path,name=path" json:"path,omitempty"`
 }
 
 func (*MfibPath) GetTypeName() string { return "mfib_path" }
 
-// 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" }
-
 // PuntRedirect represents VPP binary API type 'punt_redirect'.
 type PuntRedirect struct {
-       RxSwIfIndex InterfaceIndex `binapi:"interface_index,name=rx_sw_if_index" json:"rx_sw_if_index,omitempty"`
-       TxSwIfIndex InterfaceIndex `binapi:"interface_index,name=tx_sw_if_index" json:"tx_sw_if_index,omitempty"`
-       Nh          Address        `binapi:"address,name=nh" json:"nh,omitempty"`
+       RxSwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=rx_sw_if_index" json:"rx_sw_if_index,omitempty"`
+       TxSwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=tx_sw_if_index" json:"tx_sw_if_index,omitempty"`
+       Nh          fib_types.Address              `binapi:"address,name=nh" json:"nh,omitempty"`
 }
 
 func (*PuntRedirect) GetTypeName() string { return "punt_redirect" }
 
-// 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 {
-               return
-       }
-       copy(u.XXX_UnionData[:], b.Bytes())
-}
-func (u *AddressUnion) GetIP4() (a IP4Address) {
-       var b = bytes.NewReader(u.XXX_UnionData[:])
-       struc.Unpack(b, &a)
-       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
-}
-
 // IoamDisable represents VPP binary API message 'ioam_disable'.
 type IoamDisable struct {
        ID uint16 `binapi:"u16,name=id" json:"id,omitempty"`
@@ -1084,8 +420,8 @@ func (m *IoamEnableReply) Unmarshal(tmp []byte) error {
 
 // IPAddressDetails represents VPP binary API message 'ip_address_details'.
 type IPAddressDetails struct {
-       SwIfIndex InterfaceIndex    `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,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"`
+       Prefix    fib_types.AddressWithPrefix    `binapi:"address_with_prefix,name=prefix" json:"prefix,omitempty"`
 }
 
 func (m *IPAddressDetails) Reset()                        { *m = IPAddressDetails{} }
@@ -1103,7 +439,7 @@ func (m *IPAddressDetails) 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
@@ -1127,8 +463,8 @@ func (m *IPAddressDetails) 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
@@ -1143,13 +479,13 @@ func (m *IPAddressDetails) 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.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 = fib_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
@@ -1161,8 +497,8 @@ func (m *IPAddressDetails) Unmarshal(tmp []byte) error {
 
 // IPAddressDump represents VPP binary API message 'ip_address_dump'.
 type IPAddressDump 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 *IPAddressDump) Reset()                        { *m = IPAddressDump{} }
@@ -1208,7 +544,7 @@ func (m *IPAddressDump) 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
@@ -1218,9 +554,9 @@ func (m *IPAddressDump) Unmarshal(tmp []byte) error {
 
 // IPContainerProxyAddDel represents VPP binary API message 'ip_container_proxy_add_del'.
 type IPContainerProxyAddDel struct {
-       Pfx       Prefix         `binapi:"prefix,name=pfx" json:"pfx,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       IsAdd     bool           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
+       Pfx       fib_types.Prefix               `binapi:"prefix,name=pfx" json:"pfx,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       IsAdd     bool                           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
 }
 
 func (m *IPContainerProxyAddDel) Reset()                        { *m = IPContainerProxyAddDel{} }
@@ -1236,7 +572,7 @@ func (m *IPContainerProxyAddDel) Size() int {
        // field[1] m.Pfx
        // field[2] m.Pfx.Address
        // field[3] m.Pfx.Address.Af
-       size += 4
+       size += 1
        // field[3] m.Pfx.Address.Un
        size += 16
        // field[2] m.Pfx.Len
@@ -1261,8 +597,8 @@ func (m *IPContainerProxyAddDel) Marshal(b []byte) ([]byte, error) {
        // field[1] m.Pfx
        // field[2] m.Pfx.Address
        // field[3] m.Pfx.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Pfx.Address.Af))
-       pos += 4
+       buf[pos] = uint8(m.Pfx.Address.Af)
+       pos += 1
        // field[3] m.Pfx.Address.Un
        copy(buf[pos:pos+16], m.Pfx.Address.Un.XXX_UnionData[:])
        pos += 16
@@ -1287,8 +623,8 @@ func (m *IPContainerProxyAddDel) Unmarshal(tmp []byte) error {
        // field[1] m.Pfx
        // field[2] m.Pfx.Address
        // field[3] m.Pfx.Address.Af
-       m.Pfx.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Pfx.Address.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[3] m.Pfx.Address.Un
        copy(m.Pfx.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
        pos += 16
@@ -1296,7 +632,7 @@ func (m *IPContainerProxyAddDel) Unmarshal(tmp []byte) error {
        m.Pfx.Len = uint8(tmp[pos])
        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.IsAdd
        m.IsAdd = tmp[pos] != 0
@@ -1354,8 +690,8 @@ func (m *IPContainerProxyAddDelReply) Unmarshal(tmp []byte) error {
 
 // IPContainerProxyDetails represents VPP binary API message 'ip_container_proxy_details'.
 type IPContainerProxyDetails struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       Prefix    Prefix         `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       Prefix    fib_types.Prefix               `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
 }
 
 func (m *IPContainerProxyDetails) Reset()                        { *m = IPContainerProxyDetails{} }
@@ -1373,7 +709,7 @@ func (m *IPContainerProxyDetails) 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
@@ -1397,8 +733,8 @@ func (m *IPContainerProxyDetails) 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
@@ -1413,13 +749,13 @@ func (m *IPContainerProxyDetails) 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.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 = fib_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
@@ -1467,8 +803,8 @@ func (m *IPContainerProxyDump) Unmarshal(tmp []byte) error {
 
 // IPDetails represents VPP binary API message 'ip_details'.
 type IPDetails 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 *IPDetails) Reset()                        { *m = IPDetails{} }
@@ -1514,7 +850,7 @@ func (m *IPDetails) 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
@@ -1600,7 +936,7 @@ func (m *IPMrouteAddDel) Size() int {
        size += 4
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Af
-       size += 4
+       size += 1
        // field[3] m.Route.Prefix.GrpAddressLength
        size += 2
        // field[3] m.Route.Prefix.GrpAddress
@@ -1648,7 +984,7 @@ func (m *IPMrouteAddDel) Size() int {
                size += 1
                // field[4] s2.Path.LabelStack
                for j4 := 0; j4 < 16; j4++ {
-                       var s4 FibMplsLabel
+                       var s4 fib_types.FibMplsLabel
                        _ = s4
                        if j4 < len(s2.Path.LabelStack) {
                                s4 = s2.Path.LabelStack[j4]
@@ -1698,8 +1034,8 @@ func (m *IPMrouteAddDel) Marshal(b []byte) ([]byte, error) {
        pos += 4
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Af))
-       pos += 4
+       buf[pos] = uint8(m.Route.Prefix.Af)
+       pos += 1
        // field[3] m.Route.Prefix.GrpAddressLength
        o.PutUint16(buf[pos:pos+2], uint16(m.Route.Prefix.GrpAddressLength))
        pos += 2
@@ -1764,7 +1100,7 @@ func (m *IPMrouteAddDel) Marshal(b []byte) ([]byte, error) {
                pos += 1
                // field[4] v2.Path.LabelStack
                for j4 := 0; j4 < 16; j4++ {
-                       var v4 FibMplsLabel
+                       var v4 fib_types.FibMplsLabel
                        if j4 < len(v2.Path.LabelStack) {
                                v4 = v2.Path.LabelStack[j4]
                        }
@@ -1807,8 +1143,8 @@ func (m *IPMrouteAddDel) Unmarshal(tmp []byte) error {
        pos += 4
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Af
-       m.Route.Prefix.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Route.Prefix.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[3] m.Route.Prefix.GrpAddressLength
        m.Route.Prefix.GrpAddressLength = uint16(o.Uint16(tmp[pos : pos+2]))
        pos += 2
@@ -1844,13 +1180,13 @@ func (m *IPMrouteAddDel) Unmarshal(tmp []byte) error {
                m.Route.Paths[j2].Path.Preference = uint8(tmp[pos])
                pos += 1
                // field[4] m.Route.Paths[j2].Path.Type
-               m.Route.Paths[j2].Path.Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Path.Type = fib_types.FibPathType(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[4] m.Route.Paths[j2].Path.Flags
-               m.Route.Paths[j2].Path.Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Path.Flags = fib_types.FibPathFlags(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[4] m.Route.Paths[j2].Path.Proto
-               m.Route.Paths[j2].Path.Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Path.Proto = fib_types.FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[4] m.Route.Paths[j2].Path.Nh
                // field[5] m.Route.Paths[j2].Path.Nh.Address
@@ -1966,7 +1302,7 @@ func (m *IPMrouteDetails) Size() int {
        size += 4
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Af
-       size += 4
+       size += 1
        // field[3] m.Route.Prefix.GrpAddressLength
        size += 2
        // field[3] m.Route.Prefix.GrpAddress
@@ -2014,7 +1350,7 @@ func (m *IPMrouteDetails) Size() int {
                size += 1
                // field[4] s2.Path.LabelStack
                for j4 := 0; j4 < 16; j4++ {
-                       var s4 FibMplsLabel
+                       var s4 fib_types.FibMplsLabel
                        _ = s4
                        if j4 < len(s2.Path.LabelStack) {
                                s4 = s2.Path.LabelStack[j4]
@@ -2054,8 +1390,8 @@ func (m *IPMrouteDetails) Marshal(b []byte) ([]byte, error) {
        pos += 4
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Af))
-       pos += 4
+       buf[pos] = uint8(m.Route.Prefix.Af)
+       pos += 1
        // field[3] m.Route.Prefix.GrpAddressLength
        o.PutUint16(buf[pos:pos+2], uint16(m.Route.Prefix.GrpAddressLength))
        pos += 2
@@ -2120,7 +1456,7 @@ func (m *IPMrouteDetails) Marshal(b []byte) ([]byte, error) {
                pos += 1
                // field[4] v2.Path.LabelStack
                for j4 := 0; j4 < 16; j4++ {
-                       var v4 FibMplsLabel
+                       var v4 fib_types.FibMplsLabel
                        if j4 < len(v2.Path.LabelStack) {
                                v4 = v2.Path.LabelStack[j4]
                        }
@@ -2157,8 +1493,8 @@ func (m *IPMrouteDetails) Unmarshal(tmp []byte) error {
        pos += 4
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Af
-       m.Route.Prefix.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Route.Prefix.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[3] m.Route.Prefix.GrpAddressLength
        m.Route.Prefix.GrpAddressLength = uint16(o.Uint16(tmp[pos : pos+2]))
        pos += 2
@@ -2194,13 +1530,13 @@ func (m *IPMrouteDetails) Unmarshal(tmp []byte) error {
                m.Route.Paths[j2].Path.Preference = uint8(tmp[pos])
                pos += 1
                // field[4] m.Route.Paths[j2].Path.Type
-               m.Route.Paths[j2].Path.Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Path.Type = fib_types.FibPathType(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[4] m.Route.Paths[j2].Path.Flags
-               m.Route.Paths[j2].Path.Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Path.Flags = fib_types.FibPathFlags(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[4] m.Route.Paths[j2].Path.Proto
-               m.Route.Paths[j2].Path.Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Path.Proto = fib_types.FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[4] m.Route.Paths[j2].Path.Nh
                // field[5] m.Route.Paths[j2].Path.Nh.Address
@@ -2550,7 +1886,7 @@ func (m *IPPuntRedirect) Size() int {
        size += 4
        // field[2] m.Punt.Nh
        // field[3] m.Punt.Nh.Af
-       size += 4
+       size += 1
        // field[3] m.Punt.Nh.Un
        size += 16
        // field[1] m.IsAdd
@@ -2577,8 +1913,8 @@ func (m *IPPuntRedirect) Marshal(b []byte) ([]byte, error) {
        pos += 4
        // field[2] m.Punt.Nh
        // field[3] m.Punt.Nh.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.Nh.Af))
-       pos += 4
+       buf[pos] = uint8(m.Punt.Nh.Af)
+       pos += 1
        // field[3] m.Punt.Nh.Un
        copy(buf[pos:pos+16], m.Punt.Nh.Un.XXX_UnionData[:])
        pos += 16
@@ -2596,15 +1932,15 @@ func (m *IPPuntRedirect) Unmarshal(tmp []byte) error {
        _ = pos
        // field[1] m.Punt
        // field[2] m.Punt.RxSwIfIndex
-       m.Punt.RxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.Punt.RxSwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[2] m.Punt.TxSwIfIndex
-       m.Punt.TxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.Punt.TxSwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[2] m.Punt.Nh
        // field[3] m.Punt.Nh.Af
-       m.Punt.Nh.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Punt.Nh.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[3] m.Punt.Nh.Un
        copy(m.Punt.Nh.Un.XXX_UnionData[:], tmp[pos:pos+16])
        pos += 16
@@ -2636,7 +1972,7 @@ func (m *IPPuntRedirectDetails) Size() int {
        size += 4
        // field[2] m.Punt.Nh
        // field[3] m.Punt.Nh.Af
-       size += 4
+       size += 1
        // field[3] m.Punt.Nh.Un
        size += 16
        return size
@@ -2661,8 +1997,8 @@ func (m *IPPuntRedirectDetails) Marshal(b []byte) ([]byte, error) {
        pos += 4
        // field[2] m.Punt.Nh
        // field[3] m.Punt.Nh.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Punt.Nh.Af))
-       pos += 4
+       buf[pos] = uint8(m.Punt.Nh.Af)
+       pos += 1
        // field[3] m.Punt.Nh.Un
        copy(buf[pos:pos+16], m.Punt.Nh.Un.XXX_UnionData[:])
        pos += 16
@@ -2675,15 +2011,15 @@ func (m *IPPuntRedirectDetails) Unmarshal(tmp []byte) error {
        _ = pos
        // field[1] m.Punt
        // field[2] m.Punt.RxSwIfIndex
-       m.Punt.RxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.Punt.RxSwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[2] m.Punt.TxSwIfIndex
-       m.Punt.TxSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.Punt.TxSwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[2] m.Punt.Nh
        // field[3] m.Punt.Nh.Af
-       m.Punt.Nh.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Punt.Nh.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[3] m.Punt.Nh.Un
        copy(m.Punt.Nh.Un.XXX_UnionData[:], tmp[pos:pos+16])
        pos += 16
@@ -2692,8 +2028,8 @@ func (m *IPPuntRedirectDetails) Unmarshal(tmp []byte) error {
 
 // IPPuntRedirectDump represents VPP binary API message 'ip_punt_redirect_dump'.
 type IPPuntRedirectDump 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 *IPPuntRedirectDump) Reset()                        { *m = IPPuntRedirectDump{} }
@@ -2739,7 +2075,7 @@ func (m *IPPuntRedirectDump) 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
@@ -2795,10 +2131,10 @@ func (m *IPPuntRedirectReply) Unmarshal(tmp []byte) error {
 
 // IPReassemblyEnableDisable represents VPP binary API message 'ip_reassembly_enable_disable'.
 type IPReassemblyEnableDisable struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       EnableIP4 bool           `binapi:"bool,name=enable_ip4" json:"enable_ip4,omitempty"`
-       EnableIP6 bool           `binapi:"bool,name=enable_ip6" json:"enable_ip6,omitempty"`
-       Type      IPReassType    `binapi:"ip_reass_type,name=type" json:"type,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       EnableIP4 bool                           `binapi:"bool,name=enable_ip4" json:"enable_ip4,omitempty"`
+       EnableIP6 bool                           `binapi:"bool,name=enable_ip6" json:"enable_ip6,omitempty"`
+       Type      IPReassType                    `binapi:"ip_reass_type,name=type" json:"type,omitempty"`
 }
 
 func (m *IPReassemblyEnableDisable) Reset()                        { *m = IPReassemblyEnableDisable{} }
@@ -2856,7 +2192,7 @@ func (m *IPReassemblyEnableDisable) 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.EnableIP4
        m.EnableIP4 = tmp[pos] != 0
@@ -3236,7 +2572,7 @@ func (m *IPRouteAddDel) Size() int {
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Address
        // field[4] m.Route.Prefix.Address.Af
-       size += 4
+       size += 1
        // field[4] m.Route.Prefix.Address.Un
        size += 16
        // field[3] m.Route.Prefix.Len
@@ -3245,7 +2581,7 @@ func (m *IPRouteAddDel) Size() int {
        size += 1
        // field[2] m.Route.Paths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var s2 FibPath
+               var s2 fib_types.FibPath
                _ = s2
                if j2 < len(m.Route.Paths) {
                        s2 = m.Route.Paths[j2]
@@ -3279,7 +2615,7 @@ func (m *IPRouteAddDel) Size() int {
                size += 1
                // field[3] s2.LabelStack
                for j3 := 0; j3 < 16; j3++ {
-                       var s3 FibMplsLabel
+                       var s3 fib_types.FibMplsLabel
                        _ = s3
                        if j3 < len(s2.LabelStack) {
                                s3 = s2.LabelStack[j3]
@@ -3327,8 +2663,8 @@ func (m *IPRouteAddDel) Marshal(b []byte) ([]byte, error) {
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Address
        // field[4] m.Route.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Address.Af))
-       pos += 4
+       buf[pos] = uint8(m.Route.Prefix.Address.Af)
+       pos += 1
        // field[4] m.Route.Prefix.Address.Un
        copy(buf[pos:pos+16], m.Route.Prefix.Address.Un.XXX_UnionData[:])
        pos += 16
@@ -3340,7 +2676,7 @@ func (m *IPRouteAddDel) Marshal(b []byte) ([]byte, error) {
        pos += 1
        // field[2] m.Route.Paths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var v2 FibPath
+               var v2 fib_types.FibPath
                if j2 < len(m.Route.Paths) {
                        v2 = m.Route.Paths[j2]
                }
@@ -3386,7 +2722,7 @@ func (m *IPRouteAddDel) Marshal(b []byte) ([]byte, error) {
                pos += 1
                // field[3] v2.LabelStack
                for j3 := 0; j3 < 16; j3++ {
-                       var v3 FibMplsLabel
+                       var v3 fib_types.FibMplsLabel
                        if j3 < len(v2.LabelStack) {
                                v3 = v2.LabelStack[j3]
                        }
@@ -3427,8 +2763,8 @@ func (m *IPRouteAddDel) Unmarshal(tmp []byte) error {
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Address
        // field[4] m.Route.Prefix.Address.Af
-       m.Route.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Route.Prefix.Address.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[4] m.Route.Prefix.Address.Un
        copy(m.Route.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
        pos += 16
@@ -3439,7 +2775,7 @@ func (m *IPRouteAddDel) Unmarshal(tmp []byte) error {
        m.Route.NPaths = uint8(tmp[pos])
        pos += 1
        // field[2] m.Route.Paths
-       m.Route.Paths = make([]FibPath, int(m.Route.NPaths))
+       m.Route.Paths = make([]fib_types.FibPath, int(m.Route.NPaths))
        for j2 := 0; j2 < int(m.Route.NPaths); j2++ {
                // field[3] m.Route.Paths[j2].SwIfIndex
                m.Route.Paths[j2].SwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -3457,13 +2793,13 @@ func (m *IPRouteAddDel) Unmarshal(tmp []byte) error {
                m.Route.Paths[j2].Preference = uint8(tmp[pos])
                pos += 1
                // field[3] m.Route.Paths[j2].Type
-               m.Route.Paths[j2].Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Type = fib_types.FibPathType(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[3] m.Route.Paths[j2].Flags
-               m.Route.Paths[j2].Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Flags = fib_types.FibPathFlags(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[3] m.Route.Paths[j2].Proto
-               m.Route.Paths[j2].Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Proto = fib_types.FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[3] m.Route.Paths[j2].Nh
                // field[4] m.Route.Paths[j2].Nh.Address
@@ -3578,7 +2914,7 @@ func (m *IPRouteDetails) Size() int {
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Address
        // field[4] m.Route.Prefix.Address.Af
-       size += 4
+       size += 1
        // field[4] m.Route.Prefix.Address.Un
        size += 16
        // field[3] m.Route.Prefix.Len
@@ -3587,7 +2923,7 @@ func (m *IPRouteDetails) Size() int {
        size += 1
        // field[2] m.Route.Paths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var s2 FibPath
+               var s2 fib_types.FibPath
                _ = s2
                if j2 < len(m.Route.Paths) {
                        s2 = m.Route.Paths[j2]
@@ -3621,7 +2957,7 @@ func (m *IPRouteDetails) Size() int {
                size += 1
                // field[3] s2.LabelStack
                for j3 := 0; j3 < 16; j3++ {
-                       var s3 FibMplsLabel
+                       var s3 fib_types.FibMplsLabel
                        _ = s3
                        if j3 < len(s2.LabelStack) {
                                s3 = s2.LabelStack[j3]
@@ -3659,8 +2995,8 @@ func (m *IPRouteDetails) Marshal(b []byte) ([]byte, error) {
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Address
        // field[4] m.Route.Prefix.Address.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Route.Prefix.Address.Af))
-       pos += 4
+       buf[pos] = uint8(m.Route.Prefix.Address.Af)
+       pos += 1
        // field[4] m.Route.Prefix.Address.Un
        copy(buf[pos:pos+16], m.Route.Prefix.Address.Un.XXX_UnionData[:])
        pos += 16
@@ -3672,7 +3008,7 @@ func (m *IPRouteDetails) Marshal(b []byte) ([]byte, error) {
        pos += 1
        // field[2] m.Route.Paths
        for j2 := 0; j2 < len(m.Route.Paths); j2++ {
-               var v2 FibPath
+               var v2 fib_types.FibPath
                if j2 < len(m.Route.Paths) {
                        v2 = m.Route.Paths[j2]
                }
@@ -3718,7 +3054,7 @@ func (m *IPRouteDetails) Marshal(b []byte) ([]byte, error) {
                pos += 1
                // field[3] v2.LabelStack
                for j3 := 0; j3 < 16; j3++ {
-                       var v3 FibMplsLabel
+                       var v3 fib_types.FibMplsLabel
                        if j3 < len(v2.LabelStack) {
                                v3 = v2.LabelStack[j3]
                        }
@@ -3753,8 +3089,8 @@ func (m *IPRouteDetails) Unmarshal(tmp []byte) error {
        // field[2] m.Route.Prefix
        // field[3] m.Route.Prefix.Address
        // field[4] m.Route.Prefix.Address.Af
-       m.Route.Prefix.Address.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Route.Prefix.Address.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[4] m.Route.Prefix.Address.Un
        copy(m.Route.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
        pos += 16
@@ -3765,7 +3101,7 @@ func (m *IPRouteDetails) Unmarshal(tmp []byte) error {
        m.Route.NPaths = uint8(tmp[pos])
        pos += 1
        // field[2] m.Route.Paths
-       m.Route.Paths = make([]FibPath, int(m.Route.NPaths))
+       m.Route.Paths = make([]fib_types.FibPath, int(m.Route.NPaths))
        for j2 := 0; j2 < int(m.Route.NPaths); j2++ {
                // field[3] m.Route.Paths[j2].SwIfIndex
                m.Route.Paths[j2].SwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -3783,13 +3119,13 @@ func (m *IPRouteDetails) Unmarshal(tmp []byte) error {
                m.Route.Paths[j2].Preference = uint8(tmp[pos])
                pos += 1
                // field[3] m.Route.Paths[j2].Type
-               m.Route.Paths[j2].Type = FibPathType(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Type = fib_types.FibPathType(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[3] m.Route.Paths[j2].Flags
-               m.Route.Paths[j2].Flags = FibPathFlags(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Flags = fib_types.FibPathFlags(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[3] m.Route.Paths[j2].Proto
-               m.Route.Paths[j2].Proto = FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
+               m.Route.Paths[j2].Proto = fib_types.FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
                pos += 4
                // field[3] m.Route.Paths[j2].Nh
                // field[4] m.Route.Paths[j2].Nh.Address
@@ -3896,14 +3232,380 @@ func (m *IPRouteDump) Unmarshal(tmp []byte) error {
        return nil
 }
 
+// IPRouteLookup represents VPP binary API message 'ip_route_lookup'.
+type IPRouteLookup struct {
+       TableID uint32           `binapi:"u32,name=table_id" json:"table_id,omitempty"`
+       Exact   uint8            `binapi:"u8,name=exact" json:"exact,omitempty"`
+       Prefix  fib_types.Prefix `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
+}
+
+func (m *IPRouteLookup) Reset()                        { *m = IPRouteLookup{} }
+func (*IPRouteLookup) GetMessageName() string          { return "ip_route_lookup" }
+func (*IPRouteLookup) GetCrcString() string            { return "e2986185" }
+func (*IPRouteLookup) GetMessageType() api.MessageType { return api.RequestMessage }
+
+func (m *IPRouteLookup) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.TableID
+       size += 4
+       // field[1] m.Exact
+       size += 1
+       // field[1] m.Prefix
+       // field[2] m.Prefix.Address
+       // field[3] m.Prefix.Address.Af
+       size += 1
+       // field[3] m.Prefix.Address.Un
+       size += 16
+       // field[2] m.Prefix.Len
+       size += 1
+       return size
+}
+func (m *IPRouteLookup) 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.TableID
+       o.PutUint32(buf[pos:pos+4], uint32(m.TableID))
+       pos += 4
+       // field[1] m.Exact
+       buf[pos] = uint8(m.Exact)
+       pos += 1
+       // field[1] m.Prefix
+       // field[2] m.Prefix.Address
+       // field[3] m.Prefix.Address.Af
+       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
+       // field[2] m.Prefix.Len
+       buf[pos] = uint8(m.Prefix.Len)
+       pos += 1
+       return buf, nil
+}
+func (m *IPRouteLookup) Unmarshal(tmp []byte) error {
+       o := binary.BigEndian
+       _ = o
+       pos := 0
+       _ = pos
+       // field[1] m.TableID
+       m.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[1] m.Exact
+       m.Exact = uint8(tmp[pos])
+       pos += 1
+       // field[1] m.Prefix
+       // field[2] m.Prefix.Address
+       // field[3] m.Prefix.Address.Af
+       m.Prefix.Address.Af = fib_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
+       // field[2] m.Prefix.Len
+       m.Prefix.Len = uint8(tmp[pos])
+       pos += 1
+       return nil
+}
+
+// IPRouteLookupReply represents VPP binary API message 'ip_route_lookup_reply'.
+type IPRouteLookupReply struct {
+       Retval int32   `binapi:"i32,name=retval" json:"retval,omitempty"`
+       Route  IPRoute `binapi:"ip_route,name=route" json:"route,omitempty"`
+}
+
+func (m *IPRouteLookupReply) Reset()                        { *m = IPRouteLookupReply{} }
+func (*IPRouteLookupReply) GetMessageName() string          { return "ip_route_lookup_reply" }
+func (*IPRouteLookupReply) GetCrcString() string            { return "ae99de8e" }
+func (*IPRouteLookupReply) GetMessageType() api.MessageType { return api.ReplyMessage }
+
+func (m *IPRouteLookupReply) Size() int {
+       if m == nil {
+               return 0
+       }
+       var size int
+       // field[1] m.Retval
+       size += 4
+       // field[1] m.Route
+       // field[2] m.Route.TableID
+       size += 4
+       // field[2] m.Route.StatsIndex
+       size += 4
+       // field[2] m.Route.Prefix
+       // field[3] m.Route.Prefix.Address
+       // field[4] m.Route.Prefix.Address.Af
+       size += 1
+       // field[4] m.Route.Prefix.Address.Un
+       size += 16
+       // field[3] m.Route.Prefix.Len
+       size += 1
+       // field[2] m.Route.NPaths
+       size += 1
+       // field[2] m.Route.Paths
+       for j2 := 0; j2 < len(m.Route.Paths); j2++ {
+               var s2 fib_types.FibPath
+               _ = s2
+               if j2 < len(m.Route.Paths) {
+                       s2 = m.Route.Paths[j2]
+               }
+               // field[3] s2.SwIfIndex
+               size += 4
+               // field[3] s2.TableID
+               size += 4
+               // field[3] s2.RpfID
+               size += 4
+               // field[3] s2.Weight
+               size += 1
+               // field[3] s2.Preference
+               size += 1
+               // field[3] s2.Type
+               size += 4
+               // field[3] s2.Flags
+               size += 4
+               // field[3] s2.Proto
+               size += 4
+               // field[3] s2.Nh
+               // field[4] s2.Nh.Address
+               size += 16
+               // field[4] s2.Nh.ViaLabel
+               size += 4
+               // field[4] s2.Nh.ObjID
+               size += 4
+               // field[4] s2.Nh.ClassifyTableIndex
+               size += 4
+               // field[3] s2.NLabels
+               size += 1
+               // field[3] s2.LabelStack
+               for j3 := 0; j3 < 16; j3++ {
+                       var s3 fib_types.FibMplsLabel
+                       _ = s3
+                       if j3 < len(s2.LabelStack) {
+                               s3 = s2.LabelStack[j3]
+                       }
+                       // field[4] s3.IsUniform
+                       size += 1
+                       // field[4] s3.Label
+                       size += 4
+                       // field[4] s3.TTL
+                       size += 1
+                       // field[4] s3.Exp
+                       size += 1
+               }
+       }
+       return size
+}
+func (m *IPRouteLookupReply) 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
+       // field[1] m.Route
+       // field[2] m.Route.TableID
+       o.PutUint32(buf[pos:pos+4], uint32(m.Route.TableID))
+       pos += 4
+       // field[2] m.Route.StatsIndex
+       o.PutUint32(buf[pos:pos+4], uint32(m.Route.StatsIndex))
+       pos += 4
+       // field[2] m.Route.Prefix
+       // field[3] m.Route.Prefix.Address
+       // field[4] m.Route.Prefix.Address.Af
+       buf[pos] = uint8(m.Route.Prefix.Address.Af)
+       pos += 1
+       // field[4] m.Route.Prefix.Address.Un
+       copy(buf[pos:pos+16], m.Route.Prefix.Address.Un.XXX_UnionData[:])
+       pos += 16
+       // field[3] m.Route.Prefix.Len
+       buf[pos] = uint8(m.Route.Prefix.Len)
+       pos += 1
+       // field[2] m.Route.NPaths
+       buf[pos] = uint8(len(m.Route.Paths))
+       pos += 1
+       // field[2] m.Route.Paths
+       for j2 := 0; j2 < len(m.Route.Paths); j2++ {
+               var v2 fib_types.FibPath
+               if j2 < len(m.Route.Paths) {
+                       v2 = m.Route.Paths[j2]
+               }
+               // field[3] v2.SwIfIndex
+               o.PutUint32(buf[pos:pos+4], uint32(v2.SwIfIndex))
+               pos += 4
+               // field[3] v2.TableID
+               o.PutUint32(buf[pos:pos+4], uint32(v2.TableID))
+               pos += 4
+               // field[3] v2.RpfID
+               o.PutUint32(buf[pos:pos+4], uint32(v2.RpfID))
+               pos += 4
+               // field[3] v2.Weight
+               buf[pos] = uint8(v2.Weight)
+               pos += 1
+               // field[3] v2.Preference
+               buf[pos] = uint8(v2.Preference)
+               pos += 1
+               // field[3] v2.Type
+               o.PutUint32(buf[pos:pos+4], uint32(v2.Type))
+               pos += 4
+               // field[3] v2.Flags
+               o.PutUint32(buf[pos:pos+4], uint32(v2.Flags))
+               pos += 4
+               // field[3] v2.Proto
+               o.PutUint32(buf[pos:pos+4], uint32(v2.Proto))
+               pos += 4
+               // field[3] v2.Nh
+               // field[4] v2.Nh.Address
+               copy(buf[pos:pos+16], v2.Nh.Address.XXX_UnionData[:])
+               pos += 16
+               // field[4] v2.Nh.ViaLabel
+               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ViaLabel))
+               pos += 4
+               // field[4] v2.Nh.ObjID
+               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ObjID))
+               pos += 4
+               // field[4] v2.Nh.ClassifyTableIndex
+               o.PutUint32(buf[pos:pos+4], uint32(v2.Nh.ClassifyTableIndex))
+               pos += 4
+               // field[3] v2.NLabels
+               buf[pos] = uint8(v2.NLabels)
+               pos += 1
+               // field[3] v2.LabelStack
+               for j3 := 0; j3 < 16; j3++ {
+                       var v3 fib_types.FibMplsLabel
+                       if j3 < len(v2.LabelStack) {
+                               v3 = v2.LabelStack[j3]
+                       }
+                       // field[4] v3.IsUniform
+                       buf[pos] = uint8(v3.IsUniform)
+                       pos += 1
+                       // field[4] v3.Label
+                       o.PutUint32(buf[pos:pos+4], uint32(v3.Label))
+                       pos += 4
+                       // field[4] v3.TTL
+                       buf[pos] = uint8(v3.TTL)
+                       pos += 1
+                       // field[4] v3.Exp
+                       buf[pos] = uint8(v3.Exp)
+                       pos += 1
+               }
+       }
+       return buf, nil
+}
+func (m *IPRouteLookupReply) 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
+       // field[1] m.Route
+       // field[2] m.Route.TableID
+       m.Route.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[2] m.Route.StatsIndex
+       m.Route.StatsIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+       pos += 4
+       // field[2] m.Route.Prefix
+       // field[3] m.Route.Prefix.Address
+       // field[4] m.Route.Prefix.Address.Af
+       m.Route.Prefix.Address.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
+       // field[4] m.Route.Prefix.Address.Un
+       copy(m.Route.Prefix.Address.Un.XXX_UnionData[:], tmp[pos:pos+16])
+       pos += 16
+       // field[3] m.Route.Prefix.Len
+       m.Route.Prefix.Len = uint8(tmp[pos])
+       pos += 1
+       // field[2] m.Route.NPaths
+       m.Route.NPaths = uint8(tmp[pos])
+       pos += 1
+       // field[2] m.Route.Paths
+       m.Route.Paths = make([]fib_types.FibPath, int(m.Route.NPaths))
+       for j2 := 0; j2 < int(m.Route.NPaths); j2++ {
+               // field[3] m.Route.Paths[j2].SwIfIndex
+               m.Route.Paths[j2].SwIfIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[3] m.Route.Paths[j2].TableID
+               m.Route.Paths[j2].TableID = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[3] m.Route.Paths[j2].RpfID
+               m.Route.Paths[j2].RpfID = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[3] m.Route.Paths[j2].Weight
+               m.Route.Paths[j2].Weight = uint8(tmp[pos])
+               pos += 1
+               // field[3] m.Route.Paths[j2].Preference
+               m.Route.Paths[j2].Preference = uint8(tmp[pos])
+               pos += 1
+               // field[3] m.Route.Paths[j2].Type
+               m.Route.Paths[j2].Type = fib_types.FibPathType(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[3] m.Route.Paths[j2].Flags
+               m.Route.Paths[j2].Flags = fib_types.FibPathFlags(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[3] m.Route.Paths[j2].Proto
+               m.Route.Paths[j2].Proto = fib_types.FibPathNhProto(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[3] m.Route.Paths[j2].Nh
+               // field[4] m.Route.Paths[j2].Nh.Address
+               copy(m.Route.Paths[j2].Nh.Address.XXX_UnionData[:], tmp[pos:pos+16])
+               pos += 16
+               // field[4] m.Route.Paths[j2].Nh.ViaLabel
+               m.Route.Paths[j2].Nh.ViaLabel = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[4] m.Route.Paths[j2].Nh.ObjID
+               m.Route.Paths[j2].Nh.ObjID = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[4] m.Route.Paths[j2].Nh.ClassifyTableIndex
+               m.Route.Paths[j2].Nh.ClassifyTableIndex = uint32(o.Uint32(tmp[pos : pos+4]))
+               pos += 4
+               // field[3] m.Route.Paths[j2].NLabels
+               m.Route.Paths[j2].NLabels = uint8(tmp[pos])
+               pos += 1
+               // field[3] m.Route.Paths[j2].LabelStack
+               for j3 := 0; j3 < 16; j3++ {
+                       // field[4] m.Route.Paths[j2].LabelStack[j3].IsUniform
+                       m.Route.Paths[j2].LabelStack[j3].IsUniform = uint8(tmp[pos])
+                       pos += 1
+                       // field[4] m.Route.Paths[j2].LabelStack[j3].Label
+                       m.Route.Paths[j2].LabelStack[j3].Label = uint32(o.Uint32(tmp[pos : pos+4]))
+                       pos += 4
+                       // field[4] m.Route.Paths[j2].LabelStack[j3].TTL
+                       m.Route.Paths[j2].LabelStack[j3].TTL = uint8(tmp[pos])
+                       pos += 1
+                       // field[4] m.Route.Paths[j2].LabelStack[j3].Exp
+                       m.Route.Paths[j2].LabelStack[j3].Exp = uint8(tmp[pos])
+                       pos += 1
+               }
+       }
+       return nil
+}
+
 // IPSourceAndPortRangeCheckAddDel represents VPP binary API message 'ip_source_and_port_range_check_add_del'.
 type IPSourceAndPortRangeCheckAddDel struct {
-       IsAdd          bool     `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
-       Prefix         Prefix   `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
-       NumberOfRanges uint8    `binapi:"u8,name=number_of_ranges" json:"number_of_ranges,omitempty"`
-       LowPorts       []uint16 `binapi:"u16[32],name=low_ports" json:"low_ports,omitempty" struc:"[32]uint16"`
-       HighPorts      []uint16 `binapi:"u16[32],name=high_ports" json:"high_ports,omitempty" struc:"[32]uint16"`
-       VrfID          uint32   `binapi:"u32,name=vrf_id" json:"vrf_id,omitempty"`
+       IsAdd          bool             `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
+       Prefix         fib_types.Prefix `binapi:"prefix,name=prefix" json:"prefix,omitempty"`
+       NumberOfRanges uint8            `binapi:"u8,name=number_of_ranges" json:"number_of_ranges,omitempty"`
+       LowPorts       []uint16         `binapi:"u16[32],name=low_ports" json:"low_ports,omitempty" struc:"[32]uint16"`
+       HighPorts      []uint16         `binapi:"u16[32],name=high_ports" json:"high_ports,omitempty" struc:"[32]uint16"`
+       VrfID          uint32           `binapi:"u32,name=vrf_id" json:"vrf_id,omitempty"`
 }
 
 func (m *IPSourceAndPortRangeCheckAddDel) Reset() { *m = IPSourceAndPortRangeCheckAddDel{} }
@@ -3923,7 +3625,7 @@ func (m *IPSourceAndPortRangeCheckAddDel) 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
@@ -3957,8 +3659,8 @@ func (m *IPSourceAndPortRangeCheckAddDel) 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
@@ -4002,8 +3704,8 @@ func (m *IPSourceAndPortRangeCheckAddDel) 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 = fib_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
@@ -4083,12 +3785,12 @@ func (m *IPSourceAndPortRangeCheckAddDelReply) Unmarshal(tmp []byte) error {
 
 // IPSourceAndPortRangeCheckInterfaceAddDel represents VPP binary API message 'ip_source_and_port_range_check_interface_add_del'.
 type IPSourceAndPortRangeCheckInterfaceAddDel struct {
-       IsAdd       bool           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
-       SwIfIndex   InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       TCPInVrfID  uint32         `binapi:"u32,name=tcp_in_vrf_id" json:"tcp_in_vrf_id,omitempty"`
-       TCPOutVrfID uint32         `binapi:"u32,name=tcp_out_vrf_id" json:"tcp_out_vrf_id,omitempty"`
-       UDPInVrfID  uint32         `binapi:"u32,name=udp_in_vrf_id" json:"udp_in_vrf_id,omitempty"`
-       UDPOutVrfID uint32         `binapi:"u32,name=udp_out_vrf_id" json:"udp_out_vrf_id,omitempty"`
+       IsAdd       bool                           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
+       SwIfIndex   interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       TCPInVrfID  uint32                         `binapi:"u32,name=tcp_in_vrf_id" json:"tcp_in_vrf_id,omitempty"`
+       TCPOutVrfID uint32                         `binapi:"u32,name=tcp_out_vrf_id" json:"tcp_out_vrf_id,omitempty"`
+       UDPInVrfID  uint32                         `binapi:"u32,name=udp_in_vrf_id" json:"udp_in_vrf_id,omitempty"`
+       UDPOutVrfID uint32                         `binapi:"u32,name=udp_out_vrf_id" json:"udp_out_vrf_id,omitempty"`
 }
 
 func (m *IPSourceAndPortRangeCheckInterfaceAddDel) Reset() {
@@ -4163,7 +3865,7 @@ func (m *IPSourceAndPortRangeCheckInterfaceAddDel) 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.TCPInVrfID
        m.TCPInVrfID = uint32(o.Uint32(tmp[pos : pos+4]))
@@ -4232,124 +3934,6 @@ func (m *IPSourceAndPortRangeCheckInterfaceAddDelReply) Unmarshal(tmp []byte) er
        return nil
 }
 
-// IPSourceCheckInterfaceAddDel represents VPP binary API message 'ip_source_check_interface_add_del'.
-type IPSourceCheckInterfaceAddDel struct {
-       IsAdd     bool           `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
-       Loose     bool           `binapi:"bool,name=loose" json:"loose,omitempty"`
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-}
-
-func (m *IPSourceCheckInterfaceAddDel) Reset() { *m = IPSourceCheckInterfaceAddDel{} }
-func (*IPSourceCheckInterfaceAddDel) GetMessageName() string {
-       return "ip_source_check_interface_add_del"
-}
-func (*IPSourceCheckInterfaceAddDel) GetCrcString() string            { return "6612356b" }
-func (*IPSourceCheckInterfaceAddDel) GetMessageType() api.MessageType { return api.RequestMessage }
-
-func (m *IPSourceCheckInterfaceAddDel) Size() int {
-       if m == nil {
-               return 0
-       }
-       var size int
-       // field[1] m.IsAdd
-       size += 1
-       // field[1] m.Loose
-       size += 1
-       // field[1] m.SwIfIndex
-       size += 4
-       return size
-}
-func (m *IPSourceCheckInterfaceAddDel) 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.IsAdd
-       if m.IsAdd {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.Loose
-       if m.Loose {
-               buf[pos] = 1
-       }
-       pos += 1
-       // field[1] m.SwIfIndex
-       o.PutUint32(buf[pos:pos+4], uint32(m.SwIfIndex))
-       pos += 4
-       return buf, nil
-}
-func (m *IPSourceCheckInterfaceAddDel) Unmarshal(tmp []byte) error {
-       o := binary.BigEndian
-       _ = o
-       pos := 0
-       _ = pos
-       // field[1] m.IsAdd
-       m.IsAdd = tmp[pos] != 0
-       pos += 1
-       // field[1] m.Loose
-       m.Loose = tmp[pos] != 0
-       pos += 1
-       // field[1] m.SwIfIndex
-       m.SwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
-       return nil
-}
-
-// IPSourceCheckInterfaceAddDelReply represents VPP binary API message 'ip_source_check_interface_add_del_reply'.
-type IPSourceCheckInterfaceAddDelReply struct {
-       Retval int32 `binapi:"i32,name=retval" json:"retval,omitempty"`
-}
-
-func (m *IPSourceCheckInterfaceAddDelReply) Reset() { *m = IPSourceCheckInterfaceAddDelReply{} }
-func (*IPSourceCheckInterfaceAddDelReply) GetMessageName() string {
-       return "ip_source_check_interface_add_del_reply"
-}
-func (*IPSourceCheckInterfaceAddDelReply) GetCrcString() string            { return "e8d4e804" }
-func (*IPSourceCheckInterfaceAddDelReply) GetMessageType() api.MessageType { return api.ReplyMessage }
-
-func (m *IPSourceCheckInterfaceAddDelReply) Size() int {
-       if m == nil {
-               return 0
-       }
-       var size int
-       // field[1] m.Retval
-       size += 4
-       return size
-}
-func (m *IPSourceCheckInterfaceAddDelReply) 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 *IPSourceCheckInterfaceAddDelReply) 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
-}
-
 // IPTableAddDel represents VPP binary API message 'ip_table_add_del'.
 type IPTableAddDel struct {
        IsAdd bool    `binapi:"bool,name=is_add,default=true" json:"is_add,omitempty"`
@@ -4933,8 +4517,8 @@ func (m *IPTableReplaceEndReply) Unmarshal(tmp []byte) error {
 
 // IPUnnumberedDetails represents VPP binary API message 'ip_unnumbered_details'.
 type IPUnnumberedDetails struct {
-       SwIfIndex   InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       IPSwIfIndex InterfaceIndex `binapi:"interface_index,name=ip_sw_if_index" json:"ip_sw_if_index,omitempty"`
+       SwIfIndex   interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       IPSwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=ip_sw_if_index" json:"ip_sw_if_index,omitempty"`
 }
 
 func (m *IPUnnumberedDetails) Reset()                        { *m = IPUnnumberedDetails{} }
@@ -4978,17 +4562,17 @@ func (m *IPUnnumberedDetails) 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.IPSwIfIndex
-       m.IPSwIfIndex = InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
+       m.IPSwIfIndex = interface_types.InterfaceIndex(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        return nil
 }
 
 // IPUnnumberedDump represents VPP binary API message 'ip_unnumbered_dump'.
 type IPUnnumberedDump 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,default=4.294967295e+09" json:"sw_if_index,omitempty"`
 }
 
 func (m *IPUnnumberedDump) Reset()                        { *m = IPUnnumberedDump{} }
@@ -5027,18 +4611,18 @@ func (m *IPUnnumberedDump) 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
 }
 
 // MfibSignalDetails represents VPP binary API message 'mfib_signal_details'.
 type MfibSignalDetails struct {
-       SwIfIndex    InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       TableID      uint32         `binapi:"u32,name=table_id" json:"table_id,omitempty"`
-       Prefix       Mprefix        `binapi:"mprefix,name=prefix" json:"prefix,omitempty"`
-       IPPacketLen  uint16         `binapi:"u16,name=ip_packet_len" json:"ip_packet_len,omitempty"`
-       IPPacketData []byte         `binapi:"u8[256],name=ip_packet_data" json:"ip_packet_data,omitempty" struc:"[256]byte"`
+       SwIfIndex    interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       TableID      uint32                         `binapi:"u32,name=table_id" json:"table_id,omitempty"`
+       Prefix       fib_types.Mprefix              `binapi:"mprefix,name=prefix" json:"prefix,omitempty"`
+       IPPacketLen  uint16                         `binapi:"u16,name=ip_packet_len" json:"ip_packet_len,omitempty"`
+       IPPacketData []byte                         `binapi:"u8[256],name=ip_packet_data" json:"ip_packet_data,omitempty" struc:"[256]byte"`
 }
 
 func (m *MfibSignalDetails) Reset()                        { *m = MfibSignalDetails{} }
@@ -5057,7 +4641,7 @@ func (m *MfibSignalDetails) Size() int {
        size += 4
        // field[1] m.Prefix
        // field[2] m.Prefix.Af
-       size += 4
+       size += 1
        // field[2] m.Prefix.GrpAddressLength
        size += 2
        // field[2] m.Prefix.GrpAddress
@@ -5089,8 +4673,8 @@ func (m *MfibSignalDetails) Marshal(b []byte) ([]byte, error) {
        pos += 4
        // field[1] m.Prefix
        // field[2] m.Prefix.Af
-       o.PutUint32(buf[pos:pos+4], uint32(m.Prefix.Af))
-       pos += 4
+       buf[pos] = uint8(m.Prefix.Af)
+       pos += 1
        // field[2] m.Prefix.GrpAddressLength
        o.PutUint16(buf[pos:pos+2], uint16(m.Prefix.GrpAddressLength))
        pos += 2
@@ -5120,15 +4704,15 @@ func (m *MfibSignalDetails) 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.TableID
        m.TableID = uint32(o.Uint32(tmp[pos : pos+4]))
        pos += 4
        // field[1] m.Prefix
        // field[2] m.Prefix.Af
-       m.Prefix.Af = AddressFamily(o.Uint32(tmp[pos : pos+4]))
-       pos += 4
+       m.Prefix.Af = fib_types.AddressFamily(tmp[pos])
+       pos += 1
        // field[2] m.Prefix.GrpAddressLength
        m.Prefix.GrpAddressLength = uint16(o.Uint16(tmp[pos : pos+2]))
        pos += 2
@@ -5368,8 +4952,8 @@ func (m *SetIPFlowHashReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceIP6EnableDisable represents VPP binary API message 'sw_interface_ip6_enable_disable'.
 type SwInterfaceIP6EnableDisable 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 *SwInterfaceIP6EnableDisable) Reset()                        { *m = SwInterfaceIP6EnableDisable{} }
@@ -5415,7 +4999,7 @@ func (m *SwInterfaceIP6EnableDisable) 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
@@ -5473,8 +5057,8 @@ func (m *SwInterfaceIP6EnableDisableReply) Unmarshal(tmp []byte) error {
 
 // SwInterfaceIP6SetLinkLocalAddress represents VPP binary API message 'sw_interface_ip6_set_link_local_address'.
 type SwInterfaceIP6SetLinkLocalAddress struct {
-       SwIfIndex InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
-       IP        IP6Address     `binapi:"ip6_address,name=ip" json:"ip,omitempty"`
+       SwIfIndex interface_types.InterfaceIndex `binapi:"interface_index,name=sw_if_index" json:"sw_if_index,omitempty"`
+       IP        fib_types.IP6Address           `binapi:"ip6_address,name=ip" json:"ip,omitempty"`
 }
 
 func (m *SwInterfaceIP6SetLinkLocalAddress) Reset() { *m = SwInterfaceIP6SetLinkLocalAddress{} }
@@ -5526,7 +5110,7 @@ func (m *SwInterfaceIP6SetLinkLocalAddress) 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.IP
        for i := 0; i < len(m.IP); i++ {
@@ -5624,12 +5208,12 @@ func file_ip_binapi_init() {
        api.RegisterMessage((*IPRouteAddDelReply)(nil), "ip.IPRouteAddDelReply")
        api.RegisterMessage((*IPRouteDetails)(nil), "ip.IPRouteDetails")
        api.RegisterMessage((*IPRouteDump)(nil), "ip.IPRouteDump")
+       api.RegisterMessage((*IPRouteLookup)(nil), "ip.IPRouteLookup")
+       api.RegisterMessage((*IPRouteLookupReply)(nil), "ip.IPRouteLookupReply")
        api.RegisterMessage((*IPSourceAndPortRangeCheckAddDel)(nil), "ip.IPSourceAndPortRangeCheckAddDel")
        api.RegisterMessage((*IPSourceAndPortRangeCheckAddDelReply)(nil), "ip.IPSourceAndPortRangeCheckAddDelReply")
        api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDel)(nil), "ip.IPSourceAndPortRangeCheckInterfaceAddDel")
        api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDelReply)(nil), "ip.IPSourceAndPortRangeCheckInterfaceAddDelReply")
-       api.RegisterMessage((*IPSourceCheckInterfaceAddDel)(nil), "ip.IPSourceCheckInterfaceAddDel")
-       api.RegisterMessage((*IPSourceCheckInterfaceAddDelReply)(nil), "ip.IPSourceCheckInterfaceAddDelReply")
        api.RegisterMessage((*IPTableAddDel)(nil), "ip.IPTableAddDel")
        api.RegisterMessage((*IPTableAddDelReply)(nil), "ip.IPTableAddDelReply")
        api.RegisterMessage((*IPTableDetails)(nil), "ip.IPTableDetails")
@@ -5689,12 +5273,12 @@ func AllMessages() []api.Message {
                (*IPRouteAddDelReply)(nil),
                (*IPRouteDetails)(nil),
                (*IPRouteDump)(nil),
+               (*IPRouteLookup)(nil),
+               (*IPRouteLookupReply)(nil),
                (*IPSourceAndPortRangeCheckAddDel)(nil),
                (*IPSourceAndPortRangeCheckAddDelReply)(nil),
                (*IPSourceAndPortRangeCheckInterfaceAddDel)(nil),
                (*IPSourceAndPortRangeCheckInterfaceAddDelReply)(nil),
-               (*IPSourceCheckInterfaceAddDel)(nil),
-               (*IPSourceCheckInterfaceAddDelReply)(nil),
                (*IPTableAddDel)(nil),
                (*IPTableAddDelReply)(nil),
                (*IPTableDetails)(nil),
@@ -5725,6 +5309,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