binapigen: added enumflags type 76/31076/4
authorVladimir Lavor <vlavor@cisco.com>
Mon, 1 Feb 2021 13:37:26 +0000 (14:37 +0100)
committerVladimir Lavor <vlavor@cisco.com>
Tue, 2 Feb 2021 13:40:06 +0000 (14:40 +0100)
Change-Id: I2f46504bd05862e415dab518fad349d08aedf919
Signed-off-by: Vladimir Lavor <vlavor@cisco.com>
binapigen/binapigen.go
binapigen/generate.go
binapigen/generate_test.go
binapigen/vppapi.go
binapigen/vppapi/api_schema.go
binapigen/vppapi/parse_json.go
binapigen/vppapi/testdata/ip.api.json
cmd/govpp/main.go

index de6a804..59aa84a 100644 (file)
@@ -71,7 +71,10 @@ func newFile(gen *Generator, apifile *vppapi.File, packageName GoPackageName, im
        }
 
        for _, enumType := range apifile.EnumTypes {
-               file.Enums = append(file.Enums, newEnum(gen, file, enumType))
+               file.Enums = append(file.Enums, newEnum(gen, file, enumType, false))
+       }
+       for _, enumflagType := range apifile.EnumflagTypes {
+               file.Enums = append(file.Enums, newEnum(gen, file, enumflagType, true))
        }
        for _, aliasType := range apifile.AliasTypes {
                file.Aliases = append(file.Aliases, newAlias(gen, file, aliasType))
@@ -167,15 +170,18 @@ type Enum struct {
        vppapi.EnumType
 
        GoIdent
+
+       IsFlag bool
 }
 
-func newEnum(gen *Generator, file *File, apitype vppapi.EnumType) *Enum {
+func newEnum(gen *Generator, file *File, apitype vppapi.EnumType, isFlag bool) *Enum {
        typ := &Enum{
                EnumType: apitype,
                GoIdent: GoIdent{
                        GoName:       camelCaseName(apitype.Name),
                        GoImportPath: file.GoImportPath,
                },
+               IsFlag: isFlag,
        }
        gen.enumsByName[typ.Name] = typ
        return typ
index bf6df81..a2f941a 100644 (file)
@@ -178,7 +178,7 @@ func genEnum(g *GenFile, enum *Enum) {
        g.P(")")
        g.P()
 
-       if isEnumFlag(enum) {
+       if enum.IsFlag || isEnumFlag(enum) {
                size := BaseTypeSizes[enum.Type] * 8
                g.P("func (x ", enum.GoName, ") String() string {")
                g.P("   s, ok := ", enum.GoName, "_name[", gotype, "(x)]")
index 2fa5dc6..b1d4d70 100644 (file)
@@ -47,7 +47,7 @@ func GenerateFromFile(file string, opts Options) error {
        return nil
 }
 
-func TestGenerateFromFile(t *testing.T) {
+func TestGenerateFromFileACL(t *testing.T) {
        RegisterTestingT(t)
 
        // remove directory created during test
@@ -62,6 +62,21 @@ func TestGenerateFromFile(t *testing.T) {
        Expect(fileInfo.Name()).To(BeEquivalentTo("acl.ba.go"))
 }
 
+func TestGenerateFromFileIP(t *testing.T) {
+       RegisterTestingT(t)
+
+       // remove directory created during test
+       defer os.RemoveAll(testOutputDir)
+
+       opts := Options{OutputDir: testOutputDir}
+       err := GenerateFromFile("vppapi/testdata/ip.api.json", opts)
+       Expect(err).ShouldNot(HaveOccurred())
+       fileInfo, err := os.Stat(testOutputDir + "/ip/ip.ba.go")
+       Expect(err).ShouldNot(HaveOccurred())
+       Expect(fileInfo.IsDir()).To(BeFalse())
+       Expect(fileInfo.Name()).To(BeEquivalentTo("ip.ba.go"))
+}
+
 func TestGenerateFromFileInputError(t *testing.T) {
        RegisterTestingT(t)
 
index 7388ad5..c18d7fb 100644 (file)
@@ -28,6 +28,9 @@ func SortFileObjectsByName(file *vppapi.File) {
        sort.SliceStable(file.EnumTypes, func(i, j int) bool {
                return file.EnumTypes[i].Name < file.EnumTypes[j].Name
        })
+       sort.SliceStable(file.EnumflagTypes, func(i, j int) bool {
+               return file.EnumflagTypes[i].Name < file.EnumflagTypes[j].Name
+       })
        sort.Slice(file.AliasTypes, func(i, j int) bool {
                return file.AliasTypes[i].Name < file.AliasTypes[j].Name
        })
@@ -151,6 +154,22 @@ func ListImportedTypes(apifiles []*vppapi.File, file *vppapi.File) []string {
                        }
                }
        }
+       for _, t := range file.EnumflagTypes {
+               var imported bool
+               for _, imp := range typeFiles {
+                       for _, at := range imp.EnumflagTypes {
+                               if at.Name != t.Name {
+                                       continue
+                               }
+                               importedTypes = append(importedTypes, t.Name)
+                               imported = true
+                               break
+                       }
+                       if imported {
+                               break
+                       }
+               }
+       }
        for _, t := range file.UnionTypes {
                var imported bool
                for _, imp := range typeFiles {
@@ -186,6 +205,12 @@ func RemoveImportedTypes(apifiles []*vppapi.File, apifile *vppapi.File) {
                        enums = append(enums, enumType)
                }
        }
+       var enumflags []vppapi.EnumType
+       for _, enumflagType := range apifile.EnumflagTypes {
+               if !isImportedType(enumflagType.Name) {
+                       enumflags = append(enumflags, enumflagType)
+               }
+       }
        var aliases []vppapi.AliasType
        for _, aliasType := range apifile.AliasTypes {
                if !isImportedType(aliasType.Name) {
@@ -205,6 +230,7 @@ func RemoveImportedTypes(apifiles []*vppapi.File, apifile *vppapi.File) {
                }
        }
        apifile.EnumTypes = enums
+       apifile.EnumflagTypes = enumflags
        apifile.AliasTypes = aliases
        apifile.StructTypes = structs
        apifile.UnionTypes = unions
index 7eceab3..e1c180e 100644 (file)
@@ -24,10 +24,11 @@ type (
                Options map[string]string `json:",omitempty"`
                Imports []string          `json:",omitempty"`
 
-               AliasTypes  []AliasType  `json:",omitempty"`
-               EnumTypes   []EnumType   `json:",omitempty"`
-               StructTypes []StructType `json:",omitempty"`
-               UnionTypes  []UnionType  `json:",omitempty"`
+               AliasTypes    []AliasType  `json:",omitempty"`
+               EnumTypes     []EnumType   `json:",omitempty"`
+               EnumflagTypes []EnumType   `json:",omitempty"`
+               StructTypes   []StructType `json:",omitempty"`
+               UnionTypes    []UnionType  `json:",omitempty"`
 
                Messages []Message `json:",omitempty"`
                Service  *Service  `json:",omitempty"`
index d14865c..a2ca257 100644 (file)
@@ -41,6 +41,7 @@ const (
        fileMessages   = "messages"
        fileUnions     = "unions"
        fileEnums      = "enums"
+       fileEnumflags  = "enumflags"
        fileAliases    = "aliases"
        fileServices   = "services"
        fileImports    = "imports"
@@ -129,6 +130,20 @@ func parseJSON(data []byte) (module *File, err error) {
                module.EnumTypes = append(module.EnumTypes, *enum)
        }
 
+       // parse enumflags types
+       enumflagsNode := jsonRoot.Map(fileEnumflags)
+       module.EnumflagTypes = make([]EnumType, 0)
+       for i := 0; i < enumflagsNode.Len(); i++ {
+               enumflag, err := parseEnum(enumflagsNode.At(i))
+               if err != nil {
+                       return nil, err
+               }
+               if exists(enumflag.Name) {
+                       continue
+               }
+               module.EnumflagTypes = append(module.EnumflagTypes, *enumflag)
+       }
+
        // parse alias types
        aliasesNode := jsonRoot.Map(fileAliases)
        if aliasesNode.GetType() == jsongo.TypeMap {
index 530b6d6..32be996 100644 (file)
 {
-    "services": [
-        {
-            "ip_source_and_port_range_check_add_del": {
-                "reply": "ip_source_and_port_range_check_add_del_reply"
-            }
-        },
-        {
-            "ip6_fib_dump": {
-                "reply": "ip6_fib_details",
-                "stream": true
-            }
-        },
-        {
-            "want_ip6_nd_events": {
-                "reply": "want_ip6_nd_events_reply"
-            }
-        },
-        {
-            "ip_punt_police": {
-                "reply": "ip_punt_police_reply"
-            }
-        },
-        {
-            "set_arp_neighbor_limit": {
-                "reply": "set_arp_neighbor_limit_reply"
-            }
-        },
-        {
-            "ip6nd_proxy_add_del": {
-                "reply": "ip6nd_proxy_add_del_reply"
-            }
-        },
-        {
-            "ioam_disable": {
-                "reply": "ioam_disable_reply"
-            }
-        },
-        {
-            "ip_table_add_del": {
-                "reply": "ip_table_add_del_reply"
-            }
-        },
-        {
-            "ip_neighbor_dump": {
-                "reply": "ip_neighbor_details",
-                "stream": true
-            }
-        },
-        {
-            "ip4_arp_event": {
-                "reply": null
+    "types": [
+        [
+            "address",
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "vl_api_address_union_t",
+                "un"
+            ]
+        ],
+        [
+            "prefix",
+            [
+                "vl_api_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "ip4_address_and_mask",
+            [
+                "vl_api_ip4_address_t",
+                "addr"
+            ],
+            [
+                "vl_api_ip4_address_t",
+                "mask"
+            ]
+        ],
+        [
+            "ip6_address_and_mask",
+            [
+                "vl_api_ip6_address_t",
+                "addr"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "mask"
+            ]
+        ],
+        [
+            "mprefix",
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "u16",
+                "grp_address_length"
+            ],
+            [
+                "vl_api_address_union_t",
+                "grp_address"
+            ],
+            [
+                "vl_api_address_union_t",
+                "src_address"
+            ]
+        ],
+        [
+            "ip6_prefix",
+            [
+                "vl_api_ip6_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "ip4_prefix",
+            [
+                "vl_api_ip4_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "prefix_matcher",
+            [
+                "u8",
+                "le"
+            ],
+            [
+                "u8",
+                "ge"
+            ]
+        ],
+        [
+            "fib_mpls_label",
+            [
+                "u8",
+                "is_uniform"
+            ],
+            [
+                "u32",
+                "label"
+            ],
+            [
+                "u8",
+                "ttl"
+            ],
+            [
+                "u8",
+                "exp"
+            ]
+        ],
+        [
+            "fib_path_nh",
+            [
+                "vl_api_address_union_t",
+                "address"
+            ],
+            [
+                "u32",
+                "via_label"
+            ],
+            [
+                "u32",
+                "obj_id"
+            ],
+            [
+                "u32",
+                "classify_table_index"
+            ]
+        ],
+        [
+            "fib_path",
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "u32",
+                "rpf_id"
+            ],
+            [
+                "u8",
+                "weight"
+            ],
+            [
+                "u8",
+                "preference"
+            ],
+            [
+                "vl_api_fib_path_type_t",
+                "type"
+            ],
+            [
+                "vl_api_fib_path_flags_t",
+                "flags"
+            ],
+            [
+                "vl_api_fib_path_nh_proto_t",
+                "proto"
+            ],
+            [
+                "vl_api_fib_path_nh_t",
+                "nh"
+            ],
+            [
+                "u8",
+                "n_labels"
+            ],
+            [
+                "vl_api_fib_mpls_label_t",
+                "label_stack",
+                16
+            ]
+        ],
+        [
+            "address",
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "vl_api_address_union_t",
+                "un"
+            ]
+        ],
+        [
+            "prefix",
+            [
+                "vl_api_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "ip4_address_and_mask",
+            [
+                "vl_api_ip4_address_t",
+                "addr"
+            ],
+            [
+                "vl_api_ip4_address_t",
+                "mask"
+            ]
+        ],
+        [
+            "ip6_address_and_mask",
+            [
+                "vl_api_ip6_address_t",
+                "addr"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "mask"
+            ]
+        ],
+        [
+            "mprefix",
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "u16",
+                "grp_address_length"
+            ],
+            [
+                "vl_api_address_union_t",
+                "grp_address"
+            ],
+            [
+                "vl_api_address_union_t",
+                "src_address"
+            ]
+        ],
+        [
+            "ip6_prefix",
+            [
+                "vl_api_ip6_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "ip4_prefix",
+            [
+                "vl_api_ip4_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "prefix_matcher",
+            [
+                "u8",
+                "le"
+            ],
+            [
+                "u8",
+                "ge"
+            ]
+        ],
+        [
+            "fib_mpls_label",
+            [
+                "u8",
+                "is_uniform"
+            ],
+            [
+                "u32",
+                "label"
+            ],
+            [
+                "u8",
+                "ttl"
+            ],
+            [
+                "u8",
+                "exp"
+            ]
+        ],
+        [
+            "fib_path_nh",
+            [
+                "vl_api_address_union_t",
+                "address"
+            ],
+            [
+                "u32",
+                "via_label"
+            ],
+            [
+                "u32",
+                "obj_id"
+            ],
+            [
+                "u32",
+                "classify_table_index"
+            ]
+        ],
+        [
+            "fib_path",
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "u32",
+                "rpf_id"
+            ],
+            [
+                "u8",
+                "weight"
+            ],
+            [
+                "u8",
+                "preference"
+            ],
+            [
+                "vl_api_fib_path_type_t",
+                "type"
+            ],
+            [
+                "vl_api_fib_path_flags_t",
+                "flags"
+            ],
+            [
+                "vl_api_fib_path_nh_proto_t",
+                "proto"
+            ],
+            [
+                "vl_api_fib_path_nh_t",
+                "nh"
+            ],
+            [
+                "u8",
+                "n_labels"
+            ],
+            [
+                "vl_api_fib_mpls_label_t",
+                "label_stack",
+                16
+            ]
+        ],
+        [
+            "address",
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "vl_api_address_union_t",
+                "un"
+            ]
+        ],
+        [
+            "prefix",
+            [
+                "vl_api_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "ip4_address_and_mask",
+            [
+                "vl_api_ip4_address_t",
+                "addr"
+            ],
+            [
+                "vl_api_ip4_address_t",
+                "mask"
+            ]
+        ],
+        [
+            "ip6_address_and_mask",
+            [
+                "vl_api_ip6_address_t",
+                "addr"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "mask"
+            ]
+        ],
+        [
+            "mprefix",
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "u16",
+                "grp_address_length"
+            ],
+            [
+                "vl_api_address_union_t",
+                "grp_address"
+            ],
+            [
+                "vl_api_address_union_t",
+                "src_address"
+            ]
+        ],
+        [
+            "ip6_prefix",
+            [
+                "vl_api_ip6_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "ip4_prefix",
+            [
+                "vl_api_ip4_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "len"
+            ]
+        ],
+        [
+            "prefix_matcher",
+            [
+                "u8",
+                "le"
+            ],
+            [
+                "u8",
+                "ge"
+            ]
+        ],
+        [
+            "mfib_path",
+            [
+                "vl_api_mfib_itf_flags_t",
+                "itf_flags"
+            ],
+            [
+                "vl_api_fib_path_t",
+                "path"
+            ]
+        ],
+        [
+            "ip_table",
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "bool",
+                "is_ip6"
+            ],
+            [
+                "string",
+                "name",
+                64
+            ]
+        ],
+        [
+            "ip_route",
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "u32",
+                "stats_index"
+            ],
+            [
+                "vl_api_prefix_t",
+                "prefix"
+            ],
+            [
+                "u8",
+                "n_paths"
+            ],
+            [
+                "vl_api_fib_path_t",
+                "paths",
+                0,
+                "n_paths"
+            ]
+        ],
+        [
+            "ip_mroute",
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "vl_api_mfib_entry_flags_t",
+                "entry_flags"
+            ],
+            [
+                "u32",
+                "rpf_id"
+            ],
+            [
+                "vl_api_mprefix_t",
+                "prefix"
+            ],
+            [
+                "u8",
+                "n_paths"
+            ],
+            [
+                "vl_api_mfib_path_t",
+                "paths",
+                0,
+                "n_paths"
+            ]
+        ],
+        [
+            "punt_redirect",
+            [
+                "vl_api_interface_index_t",
+                "rx_sw_if_index"
+            ],
+            [
+                "vl_api_interface_index_t",
+                "tx_sw_if_index"
+            ],
+            [
+                "vl_api_address_t",
+                "nh"
+            ]
+        ]
+    ],
+    "messages": [
+        [
+            "ip_table_add_del",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
+            ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
+            {
+                "crc": "0x0ffdaec0"
             }
-        },
-        {
-            "ip_punt_redirect": {
-                "reply": "ip_punt_redirect_reply"
+        ],
+        [
+            "ip_table_add_del_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "sw_interface_ip6nd_ra_prefix": {
-                "reply": "sw_interface_ip6nd_ra_prefix_reply"
+        ],
+        [
+            "ip_table_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
             }
-        },
-        {
-            "reset_fib": {
-                "reply": "reset_fib_reply"
+        ],
+        [
+            "ip_table_replace_begin",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
+            {
+                "crc": "0xb9d2e09e"
             }
-        },
-        {
-            "ip6_mfib_dump": {
-                "reply": "ip6_mfib_details",
-                "stream": true
+        ],
+        [
+            "ip_table_replace_begin_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "sw_interface_ip6nd_ra_config": {
-                "reply": "sw_interface_ip6nd_ra_config_reply"
+        ],
+        [
+            "ip_table_replace_end",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
+            {
+                "crc": "0xb9d2e09e"
             }
-        },
-        {
-            "sw_interface_ip6_enable_disable": {
-                "reply": "sw_interface_ip6_enable_disable_reply"
+        ],
+        [
+            "ip_table_replace_end_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "sw_interface_ip6_set_link_local_address": {
-                "reply": "sw_interface_ip6_set_link_local_address_reply"
+        ],
+        [
+            "ip_table_flush",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
+            {
+                "crc": "0xb9d2e09e"
             }
-        },
-        {
-            "mfib_signal_dump": {
-                "reply": "mfib_signal_details",
-                "stream": true
+        ],
+        [
+            "ip_table_flush_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "ip_container_proxy_add_del": {
-                "reply": "ip_container_proxy_add_del_reply"
+        ],
+        [
+            "ip_table_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
+            {
+                "crc": "0xc79fca0f"
             }
-        },
-        {
-            "ip_mfib_dump": {
-                "reply": "ip_mfib_details",
-                "stream": true
+        ],
+        [
+            "ip_route_add_del",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
+            ],
+            [
+                "bool",
+                "is_multipath"
+            ],
+            [
+                "vl_api_ip_route_t",
+                "route"
+            ],
+            {
+                "crc": "0xc1ff832d"
             }
-        },
-        {
-            "ip_address_dump": {
-                "reply": "ip_address_details",
-                "stream": true
+        ],
+        [
+            "ip_route_add_del_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u32",
+                "stats_index"
+            ],
+            {
+                "crc": "0x1992deab"
             }
-        },
-        {
-            "ip_dump": {
-                "reply": "ip_details",
-                "stream": true
+        ],
+        [
+            "ip_route_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
+            {
+                "crc": "0xb9d2e09e"
             }
-        },
-        {
-            "ip_neighbor_add_del": {
-                "reply": "ip_neighbor_add_del_reply"
+        ],
+        [
+            "ip_route_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip_route_t",
+                "route"
+            ],
+            {
+                "crc": "0xd1ffaae1"
             }
-        },
-        {
-            "proxy_arp_intfc_enable_disable": {
-                "reply": "proxy_arp_intfc_enable_disable_reply"
+        ],
+        [
+            "ip_route_lookup",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "u8",
+                "exact"
+            ],
+            [
+                "vl_api_prefix_t",
+                "prefix"
+            ],
+            {
+                "crc": "0xe2986185"
             }
-        },
-        {
-            "proxy_arp_add_del": {
-                "reply": "proxy_arp_add_del_reply"
+        ],
+        [
+            "ip_route_lookup_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "vl_api_ip_route_t",
+                "route"
+            ],
+            {
+                "crc": "0xae99de8e"
             }
-        },
-        {
-            "ip_add_del_route": {
-                "reply": "ip_add_del_route_reply"
+        ],
+        [
+            "set_ip_flow_hash",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "vrf_id"
+            ],
+            [
+                "bool",
+                "is_ipv6"
+            ],
+            [
+                "bool",
+                "src"
+            ],
+            [
+                "bool",
+                "dst"
+            ],
+            [
+                "bool",
+                "sport"
+            ],
+            [
+                "bool",
+                "dport"
+            ],
+            [
+                "bool",
+                "proto"
+            ],
+            [
+                "bool",
+                "reverse"
+            ],
+            [
+                "bool",
+                "symmetric"
+            ],
+            {
+                "crc": "0x084ee09e"
             }
-        },
-        {
-            "ip6nd_proxy_dump": {
-                "reply": "ip6nd_proxy_details",
-                "stream": true
+        ],
+        [
+            "set_ip_flow_hash_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "ip_fib_dump": {
-                "reply": "ip_fib_details",
-                "stream": true
+        ],
+        [
+            "set_ip_flow_hash_v2",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "vl_api_ip_flow_hash_config_t",
+                "flow_hash_config"
+            ],
+            {
+                "crc": "0x6d132100"
             }
-        },
-        {
-            "want_ip4_arp_events": {
-                "reply": "want_ip4_arp_events_reply"
+        ],
+        [
+            "set_ip_flow_hash_v2_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "ioam_enable": {
-                "reply": "ioam_enable_reply"
+        ],
+        [
+            "set_ip_flow_hash_router_id",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "router_id"
+            ],
+            {
+                "crc": "0x03e4f48e"
             }
-        },
-        {
-            "ip6_nd_event": {
-                "reply": null
+        ],
+        [
+            "set_ip_flow_hash_router_id_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "ip_mroute_add_del": {
-                "reply": "ip_mroute_add_del_reply"
+        ],
+        [
+            "sw_interface_ip6_enable_disable",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_interface_index_t",
+                "sw_if_index"
+            ],
+            [
+                "bool",
+                "enable"
+            ],
+            {
+                "crc": "0xae6cfcfb"
             }
-        },
-        {
-            "ip_source_and_port_range_check_interface_add_del": {
-                "reply": "ip_source_and_port_range_check_interface_add_del_reply"
+        ],
+        [
+            "sw_interface_ip6_enable_disable_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
             }
-        },
-        {
-            "set_ip_flow_hash": {
-                "reply": "set_ip_flow_hash_reply"
+        ],
+        [
+            "ip_mtable_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
             }
-        }
-    ],
-    "vl_api_version": "0xb395c625",
-    "enums": [],
-    "messages": [
+        ],
         [
-            "ip_table_add_del",
+            "ip_mtable_details",
             [
                 "u16",
                 "_vl_msg_id"
                 "u32",
                 "context"
             ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
+            {
+                "crc": "0xb9d2e09e"
+            }
+        ],
+        [
+            "ip_mroute_add_del",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
             [
                 "u32",
-                "table_id"
+                "client_index"
             ],
             [
-                "u8",
-                "is_ipv6"
+                "u32",
+                "context"
             ],
             [
-                "u8",
-                "is_add"
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
             ],
             [
-                "u8",
-                "name",
-                64
+                "bool",
+                "is_multipath"
+            ],
+            [
+                "vl_api_ip_mroute_t",
+                "route"
             ],
             {
-                "crc": "0x0240c89d"
+                "crc": "0x0dd7e790"
             }
         ],
         [
-            "ip_table_add_del_reply",
+            "ip_mroute_add_del_reply",
             [
                 "u16",
                 "_vl_msg_id"
                 "i32",
                 "retval"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             {
-                "crc": "0xe8d4e804"
+                "crc": "0x1992deab"
             }
         ],
         [
-            "ip_fib_dump",
+            "ip_mroute_dump",
             [
                 "u16",
                 "_vl_msg_id"
                 "u32",
                 "context"
             ],
+            [
+                "vl_api_ip_table_t",
+                "table"
+            ],
             {
-                "crc": "0x51077d14"
+                "crc": "0xb9d2e09e"
+            }
+        ],
+        [
+            "ip_mroute_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip_mroute_t",
+                "route"
+            ],
+            {
+                "crc": "0xc5cb23fc"
             }
         ],
         [
-            "ip_fib_details",
+            "ip_address_details",
             [
                 "u16",
                 "_vl_msg_id"
                 "u32",
                 "context"
             ],
+            [
+                "vl_api_interface_index_t",
+                "sw_if_index"
+            ],
+            [
+                "vl_api_address_with_prefix_t",
+                "prefix"
+            ],
+            {
+                "crc": "0xb1199745"
+            }
+        ],
+        [
+            "ip_address_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
             [
                 "u32",
-                "table_id"
+                "client_index"
             ],
             [
-                "u8",
-                "table_name",
-                64
+                "u32",
+                "context"
             ],
             [
-                "u8",
-                "address_length"
+                "vl_api_interface_index_t",
+                "sw_if_index"
             ],
             [
-                "u8",
-                "address",
-                4
+                "bool",
+                "is_ipv6"
+            ],
+            {
+                "crc": "0x2d033de4"
+            }
+        ],
+        [
+            "ip_unnumbered_details",
+            [
+                "u16",
+                "_vl_msg_id"
             ],
             [
                 "u32",
-                "count"
+                "context"
             ],
             [
-                "vl_api_fib_path_t",
-                "path",
-                0,
-                "count"
+                "vl_api_interface_index_t",
+                "sw_if_index"
+            ],
+            [
+                "vl_api_interface_index_t",
+                "ip_sw_if_index"
+            ],
+            {
+                "crc": "0xaa12a483"
+            }
+        ],
+        [
+            "ip_unnumbered_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_interface_index_t",
+                "sw_if_index",
+                {
+                    "default": 4294967295
+                }
             ],
             {
-                "crc": "0x99dfd73b"
+                "crc": "0xf9e6675e"
             }
         ],
         [
-            "ip6_fib_dump",
+            "ip_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_interface_index_t",
+                "sw_if_index"
+            ],
+            [
+                "bool",
+                "is_ipv6"
+            ],
+            {
+                "crc": "0xeb152d07"
+            }
+        ],
+        [
+            "ip_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "is_ipv6"
+            ],
+            {
+                "crc": "0x98d231ca"
+            }
+        ],
+        [
+            "mfib_signal_dump",
             [
                 "u16",
                 "_vl_msg_id"
             }
         ],
         [
-            "ip6_fib_details",
+            "mfib_signal_details",
             [
                 "u16",
                 "_vl_msg_id"
                 "u32",
                 "context"
             ],
+            [
+                "vl_api_interface_index_t",
+                "sw_if_index"
+            ],
             [
                 "u32",
                 "table_id"
             ],
             [
-                "u8",
-                "table_name",
-                64
+                "vl_api_mprefix_t",
+                "prefix"
             ],
             [
-                "u8",
-                "address_length"
+                "u16",
+                "ip_packet_len"
             ],
             [
                 "u8",
-                "address",
-                16
+                "ip_packet_data",
+                256
+            ],
+            {
+                "crc": "0x64398a9a"
+            }
+        ],
+        [
+            "ip_punt_police",
+            [
+                "u16",
+                "_vl_msg_id"
             ],
             [
                 "u32",
-                "count"
+                "client_index"
             ],
             [
-                "vl_api_fib_path_t",
-                "path",
-                0,
-                "count"
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "policer_index"
+            ],
+            [
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
+            ],
+            [
+                "bool",
+                "is_ip6"
+            ],
+            {
+                "crc": "0xdb867cea"
+            }
+        ],
+        [
+            "ip_punt_police_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "ip_punt_redirect",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_punt_redirect_t",
+                "punt"
+            ],
+            [
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
+            ],
+            {
+                "crc": "0xa9a5592c"
+            }
+        ],
+        [
+            "ip_punt_redirect_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
             ],
             {
-                "crc": "0xabd0060e"
+                "crc": "0xe8d4e804"
             }
         ],
         [
-            "ip_neighbor_dump",
+            "ip_punt_redirect_dump",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
+                "vl_api_interface_index_t",
                 "sw_if_index"
             ],
             [
-                "u8",
+                "bool",
                 "is_ipv6"
             ],
             {
-                "crc": "0x6b7bcd0a"
+                "crc": "0x2d033de4"
             }
         ],
         [
-            "ip_neighbor_details",
+            "ip_punt_redirect_details",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
-                "sw_if_index"
-            ],
-            [
-                "u8",
-                "is_static"
-            ],
-            [
-                "u8",
-                "is_ipv6"
-            ],
-            [
-                "u8",
-                "mac_address",
-                6
-            ],
-            [
-                "u8",
-                "ip_address",
-                16
+                "vl_api_punt_redirect_t",
+                "punt"
             ],
             {
-                "crc": "0x85e32a72"
+                "crc": "0x3924f5d3"
             }
         ],
         [
-            "ip_neighbor_add_del",
+            "ip_container_proxy_add_del",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
+                "vl_api_prefix_t",
+                "pfx"
+            ],
+            [
+                "vl_api_interface_index_t",
                 "sw_if_index"
             ],
             [
-                "u8",
-                "is_add"
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
+            ],
+            {
+                "crc": "0x91189f40"
+            }
+        ],
+        [
+            "ip_container_proxy_add_del_reply",
+            [
+                "u16",
+                "_vl_msg_id"
             ],
             [
-                "u8",
-                "is_ipv6"
+                "u32",
+                "context"
             ],
             [
-                "u8",
-                "is_static"
+                "i32",
+                "retval"
             ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "ip_container_proxy_dump",
             [
-                "u8",
-                "is_no_adj_fib"
+                "u16",
+                "_vl_msg_id"
             ],
             [
-                "u8",
-                "mac_address",
-                6
+                "u32",
+                "client_index"
             ],
             [
-                "u8",
-                "dst_address",
-                16
+                "u32",
+                "context"
             ],
             {
-                "crc": "0x4711eb25"
+                "crc": "0x51077d14"
             }
         ],
         [
-            "ip_neighbor_add_del_reply",
+            "ip_container_proxy_details",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "i32",
-                "retval"
+                "vl_api_interface_index_t",
+                "sw_if_index"
+            ],
+            [
+                "vl_api_prefix_t",
+                "prefix"
             ],
             {
-                "crc": "0xe8d4e804"
+                "crc": "0x0ee460e8"
             }
         ],
         [
-            "set_ip_flow_hash",
+            "ip_source_and_port_range_check_add_del",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
-                "vrf_id"
-            ],
-            [
-                "u8",
-                "is_ipv6"
-            ],
-            [
-                "u8",
-                "src"
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
             ],
             [
-                "u8",
-                "dst"
+                "vl_api_prefix_t",
+                "prefix"
             ],
             [
                 "u8",
-                "sport"
+                "number_of_ranges"
             ],
             [
-                "u8",
-                "dport"
+                "u16",
+                "low_ports",
+                32
             ],
             [
-                "u8",
-                "proto"
+                "u16",
+                "high_ports",
+                32
             ],
             [
-                "u8",
-                "reverse"
+                "u32",
+                "vrf_id"
             ],
             {
-                "crc": "0x32ebf737"
+                "crc": "0x8bfc76f2"
             }
         ],
         [
-            "set_ip_flow_hash_reply",
+            "ip_source_and_port_range_check_add_del_reply",
             [
                 "u16",
                 "_vl_msg_id"
             }
         ],
         [
-            "sw_interface_ip6nd_ra_config",
+            "ip_source_and_port_range_check_interface_add_del",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
-                "sw_if_index"
-            ],
-            [
-                "u8",
-                "suppress"
-            ],
-            [
-                "u8",
-                "managed"
-            ],
-            [
-                "u8",
-                "other"
-            ],
-            [
-                "u8",
-                "ll_option"
-            ],
-            [
-                "u8",
-                "send_unicast"
-            ],
-            [
-                "u8",
-                "cease"
-            ],
-            [
-                "u8",
-                "is_no"
-            ],
-            [
-                "u8",
-                "default_router"
+                "bool",
+                "is_add",
+                {
+                    "default": "true"
+                }
             ],
             [
-                "u32",
-                "max_interval"
+                "vl_api_interface_index_t",
+                "sw_if_index"
             ],
             [
                 "u32",
-                "min_interval"
+                "tcp_in_vrf_id"
             ],
             [
                 "u32",
-                "lifetime"
+                "tcp_out_vrf_id"
             ],
             [
                 "u32",
-                "initial_count"
+                "udp_in_vrf_id"
             ],
             [
                 "u32",
-                "initial_interval"
+                "udp_out_vrf_id"
             ],
             {
-                "crc": "0xc3f02daa"
+                "crc": "0xe1ba8987"
             }
         ],
         [
-            "sw_interface_ip6nd_ra_config_reply",
+            "ip_source_and_port_range_check_interface_add_del_reply",
             [
                 "u16",
                 "_vl_msg_id"
             }
         ],
         [
-            "sw_interface_ip6nd_ra_prefix",
+            "sw_interface_ip6_set_link_local_address",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
+                "vl_api_interface_index_t",
                 "sw_if_index"
             ],
             [
-                "u8",
-                "address",
-                16
-            ],
-            [
-                "u8",
-                "address_length"
-            ],
-            [
-                "u8",
-                "use_default"
-            ],
-            [
-                "u8",
-                "no_advertise"
-            ],
-            [
-                "u8",
-                "off_link"
-            ],
-            [
-                "u8",
-                "no_autoconfig"
-            ],
-            [
-                "u8",
-                "no_onlink"
-            ],
-            [
-                "u8",
-                "is_no"
-            ],
-            [
-                "u32",
-                "val_lifetime"
-            ],
-            [
-                "u32",
-                "pref_lifetime"
+                "vl_api_ip6_address_t",
+                "ip"
             ],
             {
-                "crc": "0xca763c9a"
+                "crc": "0x2931d9fa"
             }
         ],
         [
-            "sw_interface_ip6nd_ra_prefix_reply",
+            "sw_interface_ip6_set_link_local_address_reply",
             [
                 "u16",
                 "_vl_msg_id"
             }
         ],
         [
-            "ip6nd_proxy_add_del",
+            "sw_interface_ip6_get_link_local_address",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
+                "vl_api_interface_index_t",
                 "sw_if_index"
             ],
-            [
-                "u8",
-                "is_del"
-            ],
-            [
-                "u8",
-                "address",
-                16
-            ],
             {
-                "crc": "0xd95f0fa0"
+                "crc": "0xf9e6675e"
             }
         ],
         [
-            "ip6nd_proxy_add_del_reply",
+            "sw_interface_ip6_get_link_local_address_reply",
             [
                 "u16",
                 "_vl_msg_id"
                 "i32",
                 "retval"
             ],
+            [
+                "vl_api_ip6_address_t",
+                "ip"
+            ],
             {
-                "crc": "0xe8d4e804"
+                "crc": "0xd16b7130"
             }
         ],
         [
-            "ip6nd_proxy_details",
+            "ioam_enable",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
-                "sw_if_index"
+                "u16",
+                "id"
             ],
             [
-                "u8",
-                "address",
-                16
+                "bool",
+                "seqno"
+            ],
+            [
+                "bool",
+                "analyse"
+            ],
+            [
+                "bool",
+                "pot_enable"
+            ],
+            [
+                "bool",
+                "trace_enable"
+            ],
+            [
+                "u32",
+                "node_id"
             ],
             {
-                "crc": "0xd73bf1ab"
+                "crc": "0x51ccd868"
             }
         ],
         [
-            "ip6nd_proxy_dump",
+            "ioam_enable_reply",
             [
                 "u16",
                 "_vl_msg_id"
             ],
             [
                 "u32",
-                "client_index"
+                "context"
             ],
             [
-                "u32",
-                "context"
+                "i32",
+                "retval"
             ],
             {
-                "crc": "0x51077d14"
+                "crc": "0xe8d4e804"
             }
         ],
         [
-            "sw_interface_ip6_enable_disable",
+            "ioam_disable",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "u32",
-                "sw_if_index"
-            ],
-            [
-                "u8",
-                "enable"
+                "u16",
+                "id"
             ],
             {
-                "crc": "0xa36fadc0"
+                "crc": "0x6b16a45e"
             }
         ],
         [
-            "sw_interface_ip6_enable_disable_reply",
+            "ioam_disable_reply",
             [
                 "u16",
                 "_vl_msg_id"
             }
         ],
         [
-            "sw_interface_ip6_set_link_local_address",
+            "ip_reassembly_set",
             [
                 "u16",
                 "_vl_msg_id"
             ],
             [
                 "u32",
-                "sw_if_index"
+                "timeout_ms"
             ],
             [
-                "u8",
-                "address",
-                16
+                "u32",
+                "max_reassemblies"
+            ],
+            [
+                "u32",
+                "max_reassembly_length"
+            ],
+            [
+                "u32",
+                "expire_walk_interval_ms"
+            ],
+            [
+                "bool",
+                "is_ip6"
+            ],
+            [
+                "vl_api_ip_reass_type_t",
+                "type"
             ],
             {
-                "crc": "0xd73bf1ab"
+                "crc": "0x16467d25"
             }
         ],
         [
-            "sw_interface_ip6_set_link_local_address_reply",
+            "ip_reassembly_set_reply",
             [
                 "u16",
                 "_vl_msg_id"
             }
         ],
         [
-            "ip_add_del_route",
+            "ip_reassembly_get",
             [
                 "u16",
                 "_vl_msg_id"
                 "u32",
                 "context"
             ],
+            [
+                "bool",
+                "is_ip6"
+            ],
+            [
+                "vl_api_ip_reass_type_t",
+                "type"
+            ],
+            {
+                "crc": "0xea13ff63"
+            }
+        ],
+        [
+            "ip_reassembly_get_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
             [
                 "u32",
-                "next_hop_sw_if_index"
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
             ],
             [
                 "u32",
-                "table_id"
+                "timeout_ms"
             ],
             [
                 "u32",
-                "classify_table_index"
+                "max_reassemblies"
             ],
             [
                 "u32",
-                "next_hop_table_id"
+                "max_reassembly_length"
             ],
             [
                 "u32",
-                "next_hop_id"
+                "expire_walk_interval_ms"
             ],
             [
-                "u8",
-                "is_add"
+                "bool",
+                "is_ip6"
             ],
+            {
+                "crc": "0xd5eb8d34"
+            }
+        ],
+        [
+            "ip_reassembly_enable_disable",
             [
-                "u8",
-                "is_drop"
+                "u16",
+                "_vl_msg_id"
             ],
             [
-                "u8",
-                "is_unreach"
+                "u32",
+                "client_index"
             ],
             [
-                "u8",
-                "is_prohibit"
+                "u32",
+                "context"
             ],
             [
-                "u8",
-                "is_ipv6"
+                "vl_api_interface_index_t",
+                "sw_if_index"
             ],
             [
-                "u8",
-                "is_local"
+                "bool",
+                "enable_ip4"
             ],
             [
-                "u8",
-                "is_classify"
+                "bool",
+                "enable_ip6"
             ],
             [
-                "u8",
-                "is_multipath"
+                "vl_api_ip_reass_type_t",
+                "type"
             ],
+            {
+                "crc": "0x885c85a6"
+            }
+        ],
+        [
+            "ip_reassembly_enable_disable_reply",
             [
-                "u8",
-                "is_resolve_host"
+                "u16",
+                "_vl_msg_id"
             ],
             [
-                "u8",
-                "is_resolve_attached"
+                "u32",
+                "context"
             ],
             [
-                "u8",
-                "is_dvr"
+                "i32",
+                "retval"
             ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ]
+    ],
+    "unions": [
+        [
+            "address_union",
             [
-                "u8",
-                "is_source_lookup"
+                "vl_api_ip4_address_t",
+                "ip4"
             ],
             [
-                "u8",
-                "is_udp_encap"
-            ],
+                "vl_api_ip6_address_t",
+                "ip6"
+            ]
+        ],
+        [
+            "address_union",
             [
-                "u8",
-                "next_hop_weight"
+                "vl_api_ip4_address_t",
+                "ip4"
             ],
             [
-                "u8",
-                "next_hop_preference"
-            ],
+                "vl_api_ip6_address_t",
+                "ip6"
+            ]
+        ],
+        [
+            "address_union",
             [
-                "u8",
-                "next_hop_proto"
+                "vl_api_ip4_address_t",
+                "ip4"
             ],
             [
-                "u8",
-                "dst_address_length"
+                "vl_api_ip6_address_t",
+                "ip6"
+            ]
+        ]
+    ],
+    "enums": [
+        [
+            "if_status_flags",
+            [
+                "IF_STATUS_API_FLAG_ADMIN_UP",
+                1
             ],
             [
-                "u8",
-                "dst_address",
-                16
+                "IF_STATUS_API_FLAG_LINK_UP",
+                2
             ],
+            {
+                "enumtype": "u32"
+            }
+        ],
+        [
+            "mtu_proto",
             [
-                "u8",
-                "next_hop_address",
-                16
+                "MTU_PROTO_API_L3",
+                0
             ],
             [
-                "u8",
-                "next_hop_n_out_labels"
+                "MTU_PROTO_API_IP4",
+                1
             ],
             [
-                "u32",
-                "next_hop_via_label"
+                "MTU_PROTO_API_IP6",
+                2
             ],
             [
-                "u32",
-                "next_hop_out_label_stack",
-                0,
-                "next_hop_n_out_labels"
+                "MTU_PROTO_API_MPLS",
+                3
             ],
             {
-                "crc": "0xc85f8290"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_add_del_route_reply",
+            "link_duplex",
             [
-                "u16",
-                "_vl_msg_id"
+                "LINK_DUPLEX_API_UNKNOWN",
+                0
             ],
             [
-                "u32",
-                "context"
+                "LINK_DUPLEX_API_HALF",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "LINK_DUPLEX_API_FULL",
+                2
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_mroute_add_del",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "sub_if_flags",
             [
-                "u32",
-                "client_index"
+                "SUB_IF_API_FLAG_NO_TAGS",
+                1
             ],
             [
-                "u32",
-                "context"
+                "SUB_IF_API_FLAG_ONE_TAG",
+                2
             ],
             [
-                "u32",
-                "next_hop_sw_if_index"
+                "SUB_IF_API_FLAG_TWO_TAGS",
+                4
             ],
             [
-                "u32",
-                "table_id"
+                "SUB_IF_API_FLAG_DOT1AD",
+                8
             ],
             [
-                "u32",
-                "entry_flags"
+                "SUB_IF_API_FLAG_EXACT_MATCH",
+                16
             ],
             [
-                "u32",
-                "itf_flags"
+                "SUB_IF_API_FLAG_DEFAULT",
+                32
             ],
             [
-                "u32",
-                "rpf_id"
+                "SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY",
+                64
             ],
             [
-                "u32",
-                "bier_imp"
+                "SUB_IF_API_FLAG_INNER_VLAN_ID_ANY",
+                128
             ],
             [
-                "u16",
-                "grp_address_length"
+                "SUB_IF_API_FLAG_MASK_VNET",
+                254
             ],
             [
-                "u8",
-                "next_hop_afi"
+                "SUB_IF_API_FLAG_DOT1AH",
+                256
             ],
+            {
+                "enumtype": "u32"
+            }
+        ],
+        [
+            "rx_mode",
             [
-                "u8",
-                "is_add"
+                "RX_MODE_API_UNKNOWN",
+                0
             ],
             [
-                "u8",
-                "is_ipv6"
+                "RX_MODE_API_POLLING",
+                1
             ],
             [
-                "u8",
-                "is_local"
+                "RX_MODE_API_INTERRUPT",
+                2
             ],
             [
-                "u8",
-                "grp_address",
-                16
+                "RX_MODE_API_ADAPTIVE",
+                3
             ],
             [
-                "u8",
-                "src_address",
-                16
+                "RX_MODE_API_DEFAULT",
+                4
             ],
             {
-                "crc": "0xc37112f7"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_mroute_add_del_reply",
+            "if_type",
             [
-                "u16",
-                "_vl_msg_id"
+                "IF_API_TYPE_HARDWARE",
+                0
             ],
             [
-                "u32",
-                "context"
+                "IF_API_TYPE_SUB",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "IF_API_TYPE_P2P",
+                2
+            ],
+            [
+                "IF_API_TYPE_PIPE",
+                3
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_mfib_dump",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "address_family",
             [
-                "u32",
-                "client_index"
+                "ADDRESS_IP4",
+                0
             ],
             [
-                "u32",
-                "context"
+                "ADDRESS_IP6",
+                1
             ],
             {
-                "crc": "0x51077d14"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip_mfib_details",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "ip_feature_location",
             [
-                "u32",
-                "context"
+                "IP_API_FEATURE_INPUT",
+                0
             ],
             [
-                "u32",
-                "table_id"
+                "IP_API_FEATURE_OUTPUT",
+                1
             ],
             [
-                "u32",
-                "entry_flags"
+                "IP_API_FEATURE_LOCAL",
+                2
             ],
             [
-                "u32",
-                "rpf_id"
+                "IP_API_FEATURE_PUNT",
+                3
             ],
             [
-                "u8",
-                "address_length"
+                "IP_API_FEATURE_DROP",
+                4
             ],
+            {
+                "enumtype": "u8"
+            }
+        ],
+        [
+            "ip_ecn",
             [
-                "u8",
-                "grp_address",
-                4
+                "IP_API_ECN_NONE",
+                0
             ],
             [
-                "u8",
-                "src_address",
-                4
+                "IP_API_ECN_ECT0",
+                1
             ],
             [
-                "u32",
-                "count"
+                "IP_API_ECN_ECT1",
+                2
             ],
             [
-                "vl_api_fib_path_t",
-                "path",
-                0,
-                "count"
+                "IP_API_ECN_CE",
+                3
             ],
             {
-                "crc": "0x5e530d5e"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip6_mfib_dump",
+            "ip_dscp",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_CS0",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_DSCP_CS1",
+                8
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_AF11",
+                10
             ],
-            {
-                "crc": "0x51077d14"
-            }
-        ],
-        [
-            "ip6_mfib_details",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_AF12",
+                12
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_AF13",
+                14
             ],
             [
-                "u32",
-                "table_id"
+                "IP_API_DSCP_CS2",
+                16
             ],
             [
-                "u8",
-                "address_length"
+                "IP_API_DSCP_AF21",
+                18
             ],
             [
-                "u8",
-                "grp_address",
-                16
+                "IP_API_DSCP_AF22",
+                20
             ],
             [
-                "u8",
-                "src_address",
-                16
+                "IP_API_DSCP_AF23",
+                22
             ],
             [
-                "u32",
-                "count"
+                "IP_API_DSCP_CS3",
+                24
             ],
             [
-                "vl_api_fib_path_t",
-                "path",
-                0,
-                "count"
+                "IP_API_DSCP_AF31",
+                26
             ],
-            {
-                "crc": "0xe02dcb4b"
-            }
-        ],
-        [
-            "ip_address_details",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_AF32",
+                28
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_DSCP_AF33",
+                30
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_CS4",
+                32
             ],
             [
-                "u8",
-                "ip",
-                16
+                "IP_API_DSCP_AF41",
+                34
             ],
             [
-                "u8",
-                "prefix_length"
+                "IP_API_DSCP_AF42",
+                36
             ],
             [
-                "u32",
-                "sw_if_index"
+                "IP_API_DSCP_AF43",
+                38
             ],
             [
-                "u8",
-                "is_ipv6"
+                "IP_API_DSCP_CS5",
+                40
+            ],
+            [
+                "IP_API_DSCP_EF",
+                46
+            ],
+            [
+                "IP_API_DSCP_CS6",
+                48
+            ],
+            [
+                "IP_API_DSCP_CS7",
+                50
             ],
             {
-                "crc": "0xbc7442f2"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip_address_dump",
+            "ip_proto",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_PROTO_HOPOPT",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_PROTO_ICMP",
+                1
             ],
             [
-                "u32",
-                "context"
+                "IP_API_PROTO_IGMP",
+                2
             ],
             [
-                "u32",
-                "sw_if_index"
+                "IP_API_PROTO_TCP",
+                6
             ],
             [
-                "u8",
-                "is_ipv6"
+                "IP_API_PROTO_UDP",
+                17
             ],
-            {
-                "crc": "0x6b7bcd0a"
-            }
-        ],
-        [
-            "ip_details",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_PROTO_GRE",
+                47
             ],
             [
-                "u32",
-                "sw_if_index"
+                "IP_API_PROTO_ESP",
+                50
             ],
             [
-                "u32",
-                "context"
+                "IP_API_PROTO_AH",
+                51
             ],
             [
-                "u8",
-                "is_ipv6"
+                "IP_API_PROTO_ICMP6",
+                58
+            ],
+            [
+                "IP_API_PROTO_EIGRP",
+                88
+            ],
+            [
+                "IP_API_PROTO_OSPF",
+                89
+            ],
+            [
+                "IP_API_PROTO_SCTP",
+                132
+            ],
+            [
+                "IP_API_PROTO_RESERVED",
+                255
             ],
             {
-                "crc": "0x452ffc5a"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip_dump",
+            "fib_path_nh_proto",
             [
-                "u16",
-                "_vl_msg_id"
+                "FIB_API_PATH_NH_PROTO_IP4",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "FIB_API_PATH_NH_PROTO_IP6",
+                1
             ],
             [
-                "u32",
-                "context"
+                "FIB_API_PATH_NH_PROTO_MPLS",
+                2
             ],
             [
-                "u8",
-                "is_ipv6"
+                "FIB_API_PATH_NH_PROTO_ETHERNET",
+                3
+            ],
+            [
+                "FIB_API_PATH_NH_PROTO_BIER",
+                4
             ],
             {
-                "crc": "0xde883da4"
+                "enumtype": "u32"
             }
         ],
         [
-            "mfib_signal_dump",
+            "fib_path_flags",
             [
-                "u16",
-                "_vl_msg_id"
+                "FIB_API_PATH_FLAG_NONE",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "FIB_API_PATH_FLAG_RESOLVE_VIA_ATTACHED",
+                1
             ],
             [
-                "u32",
-                "context"
+                "FIB_API_PATH_FLAG_RESOLVE_VIA_HOST",
+                2
+            ],
+            [
+                "FIB_API_PATH_FLAG_POP_PW_CW",
+                4
             ],
             {
-                "crc": "0x51077d14"
+                "enumtype": "u32"
             }
         ],
         [
-            "mfib_signal_details",
+            "fib_path_type",
             [
-                "u16",
-                "_vl_msg_id"
+                "FIB_API_PATH_TYPE_NORMAL",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "FIB_API_PATH_TYPE_LOCAL",
+                1
             ],
             [
-                "u32",
-                "context"
+                "FIB_API_PATH_TYPE_DROP",
+                2
             ],
             [
-                "u32",
-                "sw_if_index"
+                "FIB_API_PATH_TYPE_UDP_ENCAP",
+                3
             ],
             [
-                "u32",
-                "table_id"
+                "FIB_API_PATH_TYPE_BIER_IMP",
+                4
             ],
             [
-                "u16",
-                "grp_address_len"
+                "FIB_API_PATH_TYPE_ICMP_UNREACH",
+                5
             ],
             [
-                "u8",
-                "grp_address",
-                16
+                "FIB_API_PATH_TYPE_ICMP_PROHIBIT",
+                6
             ],
             [
-                "u8",
-                "src_address",
-                16
+                "FIB_API_PATH_TYPE_SOURCE_LOOKUP",
+                7
             ],
             [
-                "u16",
-                "ip_packet_len"
+                "FIB_API_PATH_TYPE_DVR",
+                8
             ],
             [
-                "u8",
-                "ip_packet_data",
-                256
+                "FIB_API_PATH_TYPE_INTERFACE_RX",
+                9
+            ],
+            [
+                "FIB_API_PATH_TYPE_CLASSIFY",
+                10
             ],
             {
-                "crc": "0x791bbeab"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_punt_police",
+            "address_family",
             [
-                "u16",
-                "_vl_msg_id"
+                "ADDRESS_IP4",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "ADDRESS_IP6",
+                1
             ],
+            {
+                "enumtype": "u8"
+            }
+        ],
+        [
+            "ip_feature_location",
             [
-                "u32",
-                "context"
+                "IP_API_FEATURE_INPUT",
+                0
             ],
             [
-                "u32",
-                "policer_index"
+                "IP_API_FEATURE_OUTPUT",
+                1
             ],
             [
-                "u8",
-                "is_add"
+                "IP_API_FEATURE_LOCAL",
+                2
             ],
             [
-                "u8",
-                "is_ip6"
+                "IP_API_FEATURE_PUNT",
+                3
+            ],
+            [
+                "IP_API_FEATURE_DROP",
+                4
             ],
             {
-                "crc": "0x38691592"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip_punt_police_reply",
+            "ip_ecn",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_ECN_NONE",
+                0
             ],
             [
-                "u32",
-                "context"
+                "IP_API_ECN_ECT0",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "IP_API_ECN_ECT1",
+                2
+            ],
+            [
+                "IP_API_ECN_CE",
+                3
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip_punt_redirect",
+            "ip_dscp",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_CS0",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_DSCP_CS1",
+                8
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_AF11",
+                10
             ],
             [
-                "u32",
-                "rx_sw_if_index"
+                "IP_API_DSCP_AF12",
+                12
             ],
             [
-                "u32",
-                "tx_sw_if_index"
+                "IP_API_DSCP_AF13",
+                14
             ],
             [
-                "u8",
-                "is_add"
+                "IP_API_DSCP_CS2",
+                16
             ],
             [
-                "u8",
-                "is_ip6"
+                "IP_API_DSCP_AF21",
+                18
             ],
             [
-                "u8",
-                "nh",
-                16
+                "IP_API_DSCP_AF22",
+                20
             ],
-            {
-                "crc": "0x996b6603"
-            }
-        ],
-        [
-            "ip_punt_redirect_reply",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_AF23",
+                22
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_CS3",
+                24
             ],
             [
-                "i32",
-                "retval"
+                "IP_API_DSCP_AF31",
+                26
             ],
-            {
-                "crc": "0xe8d4e804"
-            }
-        ],
-        [
-            "ip_container_proxy_add_del",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_AF32",
+                28
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_DSCP_AF33",
+                30
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_CS4",
+                32
             ],
             [
-                "u8",
-                "ip",
-                16
+                "IP_API_DSCP_AF41",
+                34
             ],
             [
-                "u8",
-                "is_ip4"
+                "IP_API_DSCP_AF42",
+                36
             ],
             [
-                "u8",
-                "plen"
+                "IP_API_DSCP_AF43",
+                38
             ],
             [
-                "u32",
-                "sw_if_index"
+                "IP_API_DSCP_CS5",
+                40
             ],
             [
-                "u8",
-                "is_add"
+                "IP_API_DSCP_EF",
+                46
+            ],
+            [
+                "IP_API_DSCP_CS6",
+                48
+            ],
+            [
+                "IP_API_DSCP_CS7",
+                50
             ],
             {
-                "crc": "0x0a355d39"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip_container_proxy_add_del_reply",
+            "ip_proto",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_PROTO_HOPOPT",
+                0
             ],
             [
-                "u32",
-                "context"
+                "IP_API_PROTO_ICMP",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "IP_API_PROTO_IGMP",
+                2
             ],
-            {
-                "crc": "0xe8d4e804"
-            }
-        ],
-        [
-            "ip_source_and_port_range_check_add_del",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_PROTO_TCP",
+                6
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_PROTO_UDP",
+                17
             ],
             [
-                "u32",
-                "context"
+                "IP_API_PROTO_GRE",
+                47
             ],
             [
-                "u8",
-                "is_ipv6"
+                "IP_API_PROTO_ESP",
+                50
             ],
             [
-                "u8",
-                "is_add"
+                "IP_API_PROTO_AH",
+                51
             ],
             [
-                "u8",
-                "mask_length"
+                "IP_API_PROTO_ICMP6",
+                58
             ],
             [
-                "u8",
-                "address",
-                16
+                "IP_API_PROTO_EIGRP",
+                88
             ],
             [
-                "u8",
-                "number_of_ranges"
+                "IP_API_PROTO_OSPF",
+                89
             ],
             [
-                "u16",
-                "low_ports",
-                32
+                "IP_API_PROTO_SCTP",
+                132
             ],
             [
-                "u16",
-                "high_ports",
-                32
+                "IP_API_PROTO_RESERVED",
+                255
+            ],
+            {
+                "enumtype": "u8"
+            }
+        ],
+        [
+            "fib_path_nh_proto",
+            [
+                "FIB_API_PATH_NH_PROTO_IP4",
+                0
             ],
             [
-                "u32",
-                "vrf_id"
+                "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
             ],
             {
-                "crc": "0x03d6b03a"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_source_and_port_range_check_add_del_reply",
+            "fib_path_flags",
             [
-                "u16",
-                "_vl_msg_id"
+                "FIB_API_PATH_FLAG_NONE",
+                0
             ],
             [
-                "u32",
-                "context"
+                "FIB_API_PATH_FLAG_RESOLVE_VIA_ATTACHED",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "FIB_API_PATH_FLAG_RESOLVE_VIA_HOST",
+                2
+            ],
+            [
+                "FIB_API_PATH_FLAG_POP_PW_CW",
+                4
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_source_and_port_range_check_interface_add_del",
+            "fib_path_type",
             [
-                "u16",
-                "_vl_msg_id"
+                "FIB_API_PATH_TYPE_NORMAL",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "FIB_API_PATH_TYPE_LOCAL",
+                1
             ],
             [
-                "u32",
-                "context"
+                "FIB_API_PATH_TYPE_DROP",
+                2
             ],
             [
-                "u8",
-                "is_add"
+                "FIB_API_PATH_TYPE_UDP_ENCAP",
+                3
             ],
             [
-                "u32",
-                "sw_if_index"
+                "FIB_API_PATH_TYPE_BIER_IMP",
+                4
             ],
             [
-                "u32",
-                "tcp_in_vrf_id"
+                "FIB_API_PATH_TYPE_ICMP_UNREACH",
+                5
             ],
             [
-                "u32",
-                "tcp_out_vrf_id"
+                "FIB_API_PATH_TYPE_ICMP_PROHIBIT",
+                6
             ],
             [
-                "u32",
-                "udp_in_vrf_id"
+                "FIB_API_PATH_TYPE_SOURCE_LOOKUP",
+                7
             ],
             [
-                "u32",
-                "udp_out_vrf_id"
+                "FIB_API_PATH_TYPE_DVR",
+                8
+            ],
+            [
+                "FIB_API_PATH_TYPE_INTERFACE_RX",
+                9
+            ],
+            [
+                "FIB_API_PATH_TYPE_CLASSIFY",
+                10
             ],
             {
-                "crc": "0x6966bc44"
+                "enumtype": "u32"
             }
         ],
         [
-            "ip_source_and_port_range_check_interface_add_del_reply",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "address_family",
             [
-                "u32",
-                "context"
+                "ADDRESS_IP4",
+                0
             ],
             [
-                "i32",
-                "retval"
+                "ADDRESS_IP6",
+                1
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u8"
             }
         ],
         [
-            "want_ip4_arp_events",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "ip_feature_location",
             [
-                "u32",
-                "client_index"
+                "IP_API_FEATURE_INPUT",
+                0
             ],
             [
-                "u32",
-                "context"
+                "IP_API_FEATURE_OUTPUT",
+                1
             ],
             [
-                "u8",
-                "enable_disable"
+                "IP_API_FEATURE_LOCAL",
+                2
             ],
             [
-                "u32",
-                "pid"
+                "IP_API_FEATURE_PUNT",
+                3
             ],
             [
-                "u32",
-                "address"
+                "IP_API_FEATURE_DROP",
+                4
             ],
             {
-                "crc": "0x77e06379"
+                "enumtype": "u8"
             }
         ],
         [
-            "want_ip4_arp_events_reply",
+            "ip_ecn",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_ECN_NONE",
+                0
             ],
             [
-                "u32",
-                "context"
+                "IP_API_ECN_ECT0",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "IP_API_ECN_ECT1",
+                2
+            ],
+            [
+                "IP_API_ECN_CE",
+                3
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u8"
             }
         ],
         [
-            "ip4_arp_event",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
-            [
-                "u32",
-                "client_index"
-            ],
+            "ip_dscp",
             [
-                "u32",
-                "address"
+                "IP_API_DSCP_CS0",
+                0
             ],
             [
-                "u32",
-                "pid"
+                "IP_API_DSCP_CS1",
+                8
             ],
             [
-                "u32",
-                "sw_if_index"
+                "IP_API_DSCP_AF11",
+                10
             ],
             [
-                "u8",
-                "new_mac",
-                6
+                "IP_API_DSCP_AF12",
+                12
             ],
             [
-                "u8",
-                "mac_ip"
+                "IP_API_DSCP_AF13",
+                14
             ],
-            {
-                "crc": "0xef7235f7"
-            }
-        ],
-        [
-            "want_ip6_nd_events",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_CS2",
+                16
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_DSCP_AF21",
+                18
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_AF22",
+                20
             ],
             [
-                "u8",
-                "enable_disable"
+                "IP_API_DSCP_AF23",
+                22
             ],
             [
-                "u32",
-                "pid"
+                "IP_API_DSCP_CS3",
+                24
             ],
             [
-                "u8",
-                "address",
-                16
+                "IP_API_DSCP_AF31",
+                26
             ],
-            {
-                "crc": "0x1cf65fbb"
-            }
-        ],
-        [
-            "want_ip6_nd_events_reply",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_AF32",
+                28
             ],
             [
-                "u32",
-                "context"
+                "IP_API_DSCP_AF33",
+                30
             ],
             [
-                "i32",
-                "retval"
+                "IP_API_DSCP_CS4",
+                32
             ],
-            {
-                "crc": "0xe8d4e804"
-            }
-        ],
-        [
-            "ip6_nd_event",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_DSCP_AF41",
+                34
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_DSCP_AF42",
+                36
             ],
             [
-                "u32",
-                "pid"
+                "IP_API_DSCP_AF43",
+                38
             ],
             [
-                "u32",
-                "sw_if_index"
+                "IP_API_DSCP_CS5",
+                40
             ],
             [
-                "u8",
-                "address",
-                16
+                "IP_API_DSCP_EF",
+                46
             ],
             [
-                "u8",
-                "new_mac",
-                6
+                "IP_API_DSCP_CS6",
+                48
             ],
             [
-                "u8",
-                "mac_ip"
+                "IP_API_DSCP_CS7",
+                50
             ],
             {
-                "crc": "0x96ab2fdd"
+                "enumtype": "u8"
             }
         ],
         [
-            "proxy_arp_add_del",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "ip_proto",
             [
-                "u32",
-                "client_index"
-            ],
-            [
-                "u32",
-                "context"
+                "IP_API_PROTO_HOPOPT",
+                0
             ],
             [
-                "u32",
-                "vrf_id"
+                "IP_API_PROTO_ICMP",
+                1
             ],
             [
-                "u8",
-                "is_add"
+                "IP_API_PROTO_IGMP",
+                2
             ],
             [
-                "u8",
-                "low_address",
-                4
+                "IP_API_PROTO_TCP",
+                6
             ],
             [
-                "u8",
-                "hi_address",
-                4
+                "IP_API_PROTO_UDP",
+                17
             ],
-            {
-                "crc": "0xc2442918"
-            }
-        ],
-        [
-            "proxy_arp_add_del_reply",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_PROTO_GRE",
+                47
             ],
             [
-                "u32",
-                "context"
+                "IP_API_PROTO_ESP",
+                50
             ],
             [
-                "i32",
-                "retval"
+                "IP_API_PROTO_AH",
+                51
             ],
-            {
-                "crc": "0xe8d4e804"
-            }
-        ],
-        [
-            "proxy_arp_intfc_enable_disable",
             [
-                "u16",
-                "_vl_msg_id"
+                "IP_API_PROTO_ICMP6",
+                58
             ],
             [
-                "u32",
-                "client_index"
+                "IP_API_PROTO_EIGRP",
+                88
             ],
             [
-                "u32",
-                "context"
+                "IP_API_PROTO_OSPF",
+                89
             ],
             [
-                "u32",
-                "sw_if_index"
+                "IP_API_PROTO_SCTP",
+                132
             ],
             [
-                "u8",
-                "enable_disable"
+                "IP_API_PROTO_RESERVED",
+                255
             ],
             {
-                "crc": "0x69d24598"
+                "enumtype": "u8"
             }
         ],
         [
-            "proxy_arp_intfc_enable_disable_reply",
+            "mfib_entry_flags",
             [
-                "u16",
-                "_vl_msg_id"
+                "MFIB_API_ENTRY_FLAG_NONE",
+                0
             ],
             [
-                "u32",
-                "context"
+                "MFIB_API_ENTRY_FLAG_SIGNAL",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "MFIB_API_ENTRY_FLAG_DROP",
+                2
+            ],
+            [
+                "MFIB_API_ENTRY_FLAG_CONNECTED",
+                4
+            ],
+            [
+                "MFIB_API_ENTRY_FLAG_ACCEPT_ALL_ITF",
+                8
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ],
         [
-            "reset_fib",
+            "mfib_itf_flags",
             [
-                "u16",
-                "_vl_msg_id"
+                "MFIB_API_ITF_FLAG_NONE",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "MFIB_API_ITF_FLAG_NEGATE_SIGNAL",
+                1
             ],
             [
-                "u32",
-                "context"
+                "MFIB_API_ITF_FLAG_ACCEPT",
+                2
             ],
             [
-                "u32",
-                "vrf_id"
+                "MFIB_API_ITF_FLAG_FORWARD",
+                4
             ],
             [
-                "u8",
-                "is_ipv6"
+                "MFIB_API_ITF_FLAG_SIGNAL_PRESENT",
+                8
+            ],
+            [
+                "MFIB_API_ITF_FLAG_DONT_PRESERVE",
+                16
             ],
             {
-                "crc": "0x8553ebd9"
+                "enumtype": "u32"
             }
         ],
         [
-            "reset_fib_reply",
+            "if_status_flags",
             [
-                "u16",
-                "_vl_msg_id"
-            ],
-            [
-                "u32",
-                "context"
+                "IF_STATUS_API_FLAG_ADMIN_UP",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "IF_STATUS_API_FLAG_LINK_UP",
+                2
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ],
         [
-            "set_arp_neighbor_limit",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "mtu_proto",
             [
-                "u32",
-                "client_index"
+                "MTU_PROTO_API_L3",
+                0
             ],
             [
-                "u32",
-                "context"
+                "MTU_PROTO_API_IP4",
+                1
             ],
             [
-                "u8",
-                "is_ipv6"
+                "MTU_PROTO_API_IP6",
+                2
             ],
             [
-                "u32",
-                "arp_neighbor_limit"
+                "MTU_PROTO_API_MPLS",
+                3
             ],
             {
-                "crc": "0x97d01fd6"
+                "enumtype": "u32"
             }
         ],
         [
-            "set_arp_neighbor_limit_reply",
+            "link_duplex",
             [
-                "u16",
-                "_vl_msg_id"
+                "LINK_DUPLEX_API_UNKNOWN",
+                0
             ],
             [
-                "u32",
-                "context"
+                "LINK_DUPLEX_API_HALF",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "LINK_DUPLEX_API_FULL",
+                2
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ],
         [
-            "ioam_enable",
+            "sub_if_flags",
             [
-                "u16",
-                "_vl_msg_id"
+                "SUB_IF_API_FLAG_NO_TAGS",
+                1
             ],
             [
-                "u32",
-                "client_index"
+                "SUB_IF_API_FLAG_ONE_TAG",
+                2
             ],
             [
-                "u32",
-                "context"
+                "SUB_IF_API_FLAG_TWO_TAGS",
+                4
             ],
             [
-                "u16",
-                "id"
+                "SUB_IF_API_FLAG_DOT1AD",
+                8
             ],
             [
-                "u8",
-                "seqno"
+                "SUB_IF_API_FLAG_EXACT_MATCH",
+                16
             ],
             [
-                "u8",
-                "analyse"
+                "SUB_IF_API_FLAG_DEFAULT",
+                32
             ],
             [
-                "u8",
-                "pot_enable"
+                "SUB_IF_API_FLAG_OUTER_VLAN_ID_ANY",
+                64
             ],
             [
-                "u8",
-                "trace_enable"
+                "SUB_IF_API_FLAG_INNER_VLAN_ID_ANY",
+                128
             ],
             [
-                "u32",
-                "node_id"
+                "SUB_IF_API_FLAG_MASK_VNET",
+                254
+            ],
+            [
+                "SUB_IF_API_FLAG_DOT1AH",
+                256
             ],
             {
-                "crc": "0x9392e032"
+                "enumtype": "u32"
             }
         ],
         [
-            "ioam_enable_reply",
+            "rx_mode",
             [
-                "u16",
-                "_vl_msg_id"
+                "RX_MODE_API_UNKNOWN",
+                0
             ],
             [
-                "u32",
-                "context"
+                "RX_MODE_API_POLLING",
+                1
             ],
             [
-                "i32",
-                "retval"
+                "RX_MODE_API_INTERRUPT",
+                2
+            ],
+            [
+                "RX_MODE_API_ADAPTIVE",
+                3
+            ],
+            [
+                "RX_MODE_API_DEFAULT",
+                4
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ],
         [
-            "ioam_disable",
+            "if_type",
             [
-                "u16",
-                "_vl_msg_id"
+                "IF_API_TYPE_HARDWARE",
+                0
             ],
             [
-                "u32",
-                "client_index"
+                "IF_API_TYPE_SUB",
+                1
             ],
             [
-                "u32",
-                "context"
+                "IF_API_TYPE_P2P",
+                2
             ],
             [
-                "u16",
-                "id"
+                "IF_API_TYPE_PIPE",
+                3
             ],
             {
-                "crc": "0x6b16a45e"
+                "enumtype": "u32"
             }
         ],
         [
-            "ioam_disable_reply",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
+            "ip_reass_type",
             [
-                "u32",
-                "context"
+                "IP_REASS_TYPE_FULL",
+                0
             ],
             [
-                "i32",
-                "retval"
+                "IP_REASS_TYPE_SHALLOW_VIRTUAL",
+                1
             ],
             {
-                "crc": "0xe8d4e804"
+                "enumtype": "u32"
             }
         ]
     ],
-    "types": [
+    "enumflags": [
         [
-            "fib_path",
+            "ip_flow_hash_config",
             [
-                "u32",
-                "sw_if_index"
-            ],
-            [
-                "u32",
-                "table_id"
-            ],
-            [
-                "u8",
-                "weight"
+                "IP_API_FLOW_HASH_SRC_IP",
+                1
             ],
             [
-                "u8",
-                "preference"
+                "IP_API_FLOW_HASH_DST_IP",
+                2
             ],
             [
-                "u8",
-                "is_local"
+                "IP_API_FLOW_HASH_SRC_PORT",
+                4
             ],
             [
-                "u8",
-                "is_drop"
+                "IP_API_FLOW_HASH_DST_PORT",
+                8
             ],
             [
-                "u8",
-                "is_unreach"
+                "IP_API_FLOW_HASH_PROTO",
+                16
             ],
             [
-                "u8",
-                "is_prohibit"
+                "IP_API_FLOW_HASH_REVERSE",
+                32
             ],
             [
-                "u8",
-                "afi"
+                "IP_API_FLOW_HASH_SYMETRIC",
+                64
             ],
             [
-                "u8",
-                "next_hop",
-                16
+                "IP_API_FLOW_HASH_FLOW_LABEL",
+                128
             ],
             {
-                "crc": "0xcd899e0a"
+                "enumtype": "u32"
             }
         ]
-    ]
+    ],
+    "services": {
+        "ip_table_add_del": {
+            "reply": "ip_table_add_del_reply"
+        },
+        "ip_table_dump": {
+            "reply": "ip_table_details",
+            "stream": true
+        },
+        "ip_table_replace_begin": {
+            "reply": "ip_table_replace_begin_reply"
+        },
+        "ip_table_replace_end": {
+            "reply": "ip_table_replace_end_reply"
+        },
+        "ip_table_flush": {
+            "reply": "ip_table_flush_reply"
+        },
+        "ip_route_add_del": {
+            "reply": "ip_route_add_del_reply"
+        },
+        "ip_route_dump": {
+            "reply": "ip_route_details",
+            "stream": true
+        },
+        "ip_route_lookup": {
+            "reply": "ip_route_lookup_reply"
+        },
+        "set_ip_flow_hash": {
+            "reply": "set_ip_flow_hash_reply"
+        },
+        "set_ip_flow_hash_v2": {
+            "reply": "set_ip_flow_hash_v2_reply"
+        },
+        "set_ip_flow_hash_router_id": {
+            "reply": "set_ip_flow_hash_router_id_reply"
+        },
+        "sw_interface_ip6_enable_disable": {
+            "reply": "sw_interface_ip6_enable_disable_reply"
+        },
+        "ip_mtable_dump": {
+            "reply": "ip_mtable_details",
+            "stream": true
+        },
+        "ip_mroute_add_del": {
+            "reply": "ip_mroute_add_del_reply"
+        },
+        "ip_mroute_dump": {
+            "reply": "ip_mroute_details",
+            "stream": true
+        },
+        "ip_address_dump": {
+            "reply": "ip_address_details",
+            "stream": true
+        },
+        "ip_unnumbered_dump": {
+            "reply": "ip_unnumbered_details",
+            "stream": true
+        },
+        "ip_dump": {
+            "reply": "ip_details",
+            "stream": true
+        },
+        "mfib_signal_dump": {
+            "reply": "mfib_signal_details",
+            "stream": true
+        },
+        "ip_punt_police": {
+            "reply": "ip_punt_police_reply"
+        },
+        "ip_punt_redirect": {
+            "reply": "ip_punt_redirect_reply"
+        },
+        "ip_punt_redirect_dump": {
+            "reply": "ip_punt_redirect_details",
+            "stream": true
+        },
+        "ip_container_proxy_add_del": {
+            "reply": "ip_container_proxy_add_del_reply"
+        },
+        "ip_container_proxy_dump": {
+            "reply": "ip_container_proxy_details",
+            "stream": true
+        },
+        "ip_source_and_port_range_check_add_del": {
+            "reply": "ip_source_and_port_range_check_add_del_reply"
+        },
+        "ip_source_and_port_range_check_interface_add_del": {
+            "reply": "ip_source_and_port_range_check_interface_add_del_reply"
+        },
+        "sw_interface_ip6_set_link_local_address": {
+            "reply": "sw_interface_ip6_set_link_local_address_reply"
+        },
+        "sw_interface_ip6_get_link_local_address": {
+            "reply": "sw_interface_ip6_get_link_local_address_reply"
+        },
+        "ioam_enable": {
+            "reply": "ioam_enable_reply"
+        },
+        "ioam_disable": {
+            "reply": "ioam_disable_reply"
+        },
+        "ip_reassembly_set": {
+            "reply": "ip_reassembly_set_reply"
+        },
+        "ip_reassembly_get": {
+            "reply": "ip_reassembly_get_reply"
+        },
+        "ip_reassembly_enable_disable": {
+            "reply": "ip_reassembly_enable_disable_reply"
+        }
+    },
+    "options": {
+        "version": "3.0.3"
+    },
+    "aliases": {
+        "interface_index": {
+            "type": "u32"
+        },
+        "ip4_address": {
+            "type": "u8",
+            "length": 4
+        },
+        "ip6_address": {
+            "type": "u8",
+            "length": 16
+        },
+        "address_with_prefix": {
+            "type": "vl_api_prefix_t"
+        },
+        "ip4_address_with_prefix": {
+            "type": "vl_api_ip4_prefix_t"
+        },
+        "ip6_address_with_prefix": {
+            "type": "vl_api_ip6_prefix_t"
+        },
+        "mac_address": {
+            "type": "u8",
+            "length": 6
+        }
+    },
+    "vl_api_version": "0xf2f5f4e"
 }
index 98d5078..1c6b905 100644 (file)
@@ -122,8 +122,8 @@ func showVPPAPI(out io.Writer, apifiles []*vppapi.File) {
                }
                imports := fmt.Sprintf("%d apis, %2d types", len(apifile.Imports), len(importedTypes))
                path := strings.TrimPrefix(apifile.Path, vppapi.DefaultDir+"/")
-               types := fmt.Sprintf("%2d enum, %2d alias, %2d struct, %2d union, %2d msg",
-                       len(apifile.EnumTypes), len(apifile.AliasTypes), len(apifile.StructTypes), len(apifile.UnionTypes), len(apifile.Messages))
+               types := fmt.Sprintf("%2d enum, %2d enumflag, %2d alias, %2d struct, %2d union, %2d msg",
+                       len(apifile.EnumTypes), len(apifile.EnumflagTypes), len(apifile.AliasTypes), len(apifile.StructTypes), len(apifile.UnionTypes), len(apifile.Messages))
                fmt.Fprintf(w, " %s\t%s\t%s\t%s\t%v\t%s\t\n",
                        apifile.Name, strings.Join(options, " "), apifile.CRC, path, imports, types)
        }