Add support for aliases and boolean type 59/16459/1
authorOndrej Fabry <ofabry@cisco.com>
Thu, 13 Dec 2018 09:21:49 +0000 (10:21 +0100)
committerOndrej Fabry <ofabry@cisco.com>
Thu, 13 Dec 2018 09:21:49 +0000 (10:21 +0100)
- aliases are now generated as new types or arrays (if length > 0)
- bool is recognized as a boolean type and generated as Go bool
- comment with original JSON is now prepended for each object type
- interface Services is now generated at the top of the file to provide
  overview of what RPC services does the current module consists of
- dump services now correctly return slice of the particular details type

Change-Id: I788babc1c0f2de33e0febd87e5b200d54065b244
Signed-off-by: Ondrej Fabry <ofabry@cisco.com>
23 files changed:
cmd/binapi-generator/definitions.go
cmd/binapi-generator/generate.go
cmd/binapi-generator/objects.go
cmd/binapi-generator/parse.go
examples/bin_api/acl.api.json
examples/bin_api/acl/acl.ba.go
examples/bin_api/af_packet.api.json
examples/bin_api/af_packet/af_packet.ba.go
examples/bin_api/interface.api.json
examples/bin_api/interfaces/interfaces.ba.go
examples/bin_api/ip.api.json
examples/bin_api/ip/ip.ba.go
examples/bin_api/map.api.json [new file with mode: 0644]
examples/bin_api/maps/maps.ba.go [new file with mode: 0644]
examples/bin_api/memif.api.json
examples/bin_api/memif/memif.ba.go
examples/bin_api/stats.api.json
examples/bin_api/stats/stats.ba.go
examples/bin_api/tap.api.json
examples/bin_api/tap/tap.ba.go
examples/bin_api/vpe.api.json
examples/bin_api/vpe/vpe.ba.go
examples/cmd/union-example/union_example.go

index 3ad782f..0176278 100644 (file)
@@ -25,6 +25,8 @@ func getBinapiTypeSize(binapiType string) int {
                b, err := strconv.Atoi(strings.TrimLeft(binapiType, "uif"))
                if err == nil {
                        return b / 8
+               } else {
+                       return 1
                }
        }
        return -1
@@ -32,15 +34,16 @@ func getBinapiTypeSize(binapiType string) int {
 
 // binapiTypes is a set of types used VPP binary API for translation to Go types
 var binapiTypes = map[string]string{
-       "u8":  "uint8",
-       "i8":  "int8",
-       "u16": "uint16",
-       "i16": "int16",
-       "u32": "uint32",
-       "i32": "int32",
-       "u64": "uint64",
-       "i64": "int64",
-       "f64": "float64",
+       "bool": "bool",
+       "u8":   "uint8",
+       "i8":   "int8",
+       "u16":  "uint16",
+       "i16":  "int16",
+       "u32":  "uint32",
+       "i32":  "int32",
+       "u64":  "uint64",
+       "i64":  "int64",
+       "f64":  "float64",
 }
 
 func usesInitialism(s string) string {
index 7cfe338..22b4af6 100644 (file)
@@ -35,9 +35,7 @@ type context struct {
        inputFile  string // input file with VPP API in JSON
        outputFile string // output file with generated Go package
 
-       inputData []byte        // contents of the input file
-       inputBuff *bytes.Buffer // contents of the input file currently being read
-       inputLine int           // currently processed line in the input file
+       inputData []byte // contents of the input file
 
        moduleName  string // name of the source VPP module
        packageName string // name of the Go package being generated
@@ -87,28 +85,40 @@ func generatePackage(ctx *context, w *bufio.Writer) error {
 
        if *includeAPIVer {
                const APIVerConstName = "VlAPIVersion"
-               fmt.Fprintf(w, "// %s represents version of the API.\n", APIVerConstName)
+               fmt.Fprintf(w, "// %s represents version of the binary API module.\n", APIVerConstName)
                fmt.Fprintf(w, "const %s = %v\n", APIVerConstName, ctx.packageData.APIVersion)
                fmt.Fprintln(w)
        }
 
+       // generate services
+       if len(ctx.packageData.Services) > 0 {
+               generateServices(ctx, w, ctx.packageData.Services)
+       }
+
+       // TODO: generate implementation for Services interface
+
        // generate enums
        if len(ctx.packageData.Enums) > 0 {
                fmt.Fprintf(w, "/* Enums */\n\n")
 
-               ctx.inputBuff = bytes.NewBuffer(ctx.inputData)
-               ctx.inputLine = 0
                for _, enum := range ctx.packageData.Enums {
                        generateEnum(ctx, w, &enum)
                }
        }
 
+       // generate aliases
+       if len(ctx.packageData.Aliases) > 0 {
+               fmt.Fprintf(w, "/* Aliases */\n\n")
+
+               for _, alias := range ctx.packageData.Aliases {
+                       generateAlias(ctx, w, &alias)
+               }
+       }
+
        // generate types
        if len(ctx.packageData.Types) > 0 {
                fmt.Fprintf(w, "/* Types */\n\n")
 
-               ctx.inputBuff = bytes.NewBuffer(ctx.inputData)
-               ctx.inputLine = 0
                for _, typ := range ctx.packageData.Types {
                        generateType(ctx, w, &typ)
                }
@@ -118,8 +128,6 @@ func generatePackage(ctx *context, w *bufio.Writer) error {
        if len(ctx.packageData.Unions) > 0 {
                fmt.Fprintf(w, "/* Unions */\n\n")
 
-               ctx.inputBuff = bytes.NewBuffer(ctx.inputData)
-               ctx.inputLine = 0
                for _, union := range ctx.packageData.Unions {
                        generateUnion(ctx, w, &union)
                }
@@ -129,28 +137,11 @@ func generatePackage(ctx *context, w *bufio.Writer) error {
        if len(ctx.packageData.Messages) > 0 {
                fmt.Fprintf(w, "/* Messages */\n\n")
 
-               ctx.inputBuff = bytes.NewBuffer(ctx.inputData)
-               ctx.inputLine = 0
                for _, msg := range ctx.packageData.Messages {
                        generateMessage(ctx, w, &msg)
                }
        }
 
-       // generate services
-       if len(ctx.packageData.Services) > 0 {
-               fmt.Fprintf(w, "/* Services */\n\n")
-
-               ctx.inputBuff = bytes.NewBuffer(ctx.inputData)
-               ctx.inputLine = 0
-               fmt.Fprintf(w, "type %s interface {\n", "Services")
-               for _, svc := range ctx.packageData.Services {
-                       generateService(ctx, w, &svc)
-               }
-               fmt.Fprintln(w, "}")
-       }
-
-       // TODO: generate implementation for Services interface
-
        // generate message registrations
        fmt.Fprintln(w)
        fmt.Fprintln(w, "func init() {")
@@ -181,13 +172,18 @@ func generateHeader(ctx *context, w io.Writer) {
        var printObjNum = func(obj string, num int) {
                if num > 0 {
                        if num > 1 {
-                               obj += "s"
+                               if strings.HasSuffix(obj, "s") {
+                                       obj += "es"
+                               } else {
+                                       obj += "s"
+                               }
                        }
                        fmt.Fprintf(w, "\t%3d %s\n", num, obj)
                }
        }
        printObjNum("message", len(ctx.packageData.Messages))
        printObjNum("type", len(ctx.packageData.Types))
+       printObjNum("alias", len(ctx.packageData.Aliases))
        printObjNum("enum", len(ctx.packageData.Enums))
        printObjNum("union", len(ctx.packageData.Unions))
        printObjNum("service", len(ctx.packageData.Services))
@@ -213,44 +209,96 @@ func generateImports(ctx *context, w io.Writer) {
 
 // generateComment writes generated comment for the object into w
 func generateComment(ctx *context, w io.Writer, goName string, vppName string, objKind string) {
-       fmt.Fprintf(w, "// %s represents the VPP binary API %s '%s'.\n", goName, objKind, vppName)
+       if objKind == "service" {
+               fmt.Fprintf(w, "// %s represents VPP binary API services:\n", goName)
+       } else {
+               fmt.Fprintf(w, "// %s represents VPP binary API %s '%s':\n", goName, objKind, vppName)
+       }
 
        var isNotSpace = func(r rune) bool {
                return !unicode.IsSpace(r)
        }
 
        // print out the source of the generated object
+       mapType := false
        objFound := false
        objTitle := fmt.Sprintf(`"%s",`, vppName)
+       switch objKind {
+       case "alias", "service":
+               objTitle = fmt.Sprintf(`"%s": {`, vppName)
+               mapType = true
+       }
+
+       inputBuff := bytes.NewBuffer(ctx.inputData)
+       inputLine := 0
+
+       var trimIndent string
        var indent int
        for {
-               line, err := ctx.inputBuff.ReadString('\n')
+               line, err := inputBuff.ReadString('\n')
                if err != nil {
                        break
                }
-               ctx.inputLine++
+               inputLine++
 
+               noSpaceAt := strings.IndexFunc(line, isNotSpace)
                if !objFound {
                        indent = strings.Index(line, objTitle)
                        if indent == -1 {
                                continue
                        }
+                       trimIndent = line[:indent]
                        // If no other non-whitespace character then we are at the message header.
                        if trimmed := strings.TrimSpace(line); trimmed == objTitle {
                                objFound = true
                                fmt.Fprintln(w, "//")
                        }
-               } else {
-                       if strings.IndexFunc(line, isNotSpace) < indent {
-                               break // end of the object definition in JSON
-                       }
+               } else if noSpaceAt < indent {
+                       break // end of the definition in JSON for array types
+               } else if objFound && mapType && noSpaceAt <= indent {
+                       fmt.Fprintf(w, "//\t%s", strings.TrimPrefix(line, trimIndent))
+                       break // end of the definition in JSON for map types (aliases, services)
                }
-               fmt.Fprint(w, "//", line)
+               fmt.Fprintf(w, "//\t%s", strings.TrimPrefix(line, trimIndent))
        }
 
        fmt.Fprintln(w, "//")
 }
 
+// generateServices writes generated code for the Services interface into w
+func generateServices(ctx *context, w *bufio.Writer, services []Service) {
+       // generate services comment
+       generateComment(ctx, w, "Services", "services", "service")
+
+       // generate interface
+       fmt.Fprintf(w, "type %s interface {\n", "Services")
+       for _, svc := range ctx.packageData.Services {
+               generateService(ctx, w, &svc)
+       }
+       fmt.Fprintln(w, "}")
+
+       fmt.Fprintln(w)
+}
+
+// generateService writes generated code for the service into w
+func generateService(ctx *context, w io.Writer, svc *Service) {
+       reqTyp := camelCaseName(svc.RequestType)
+
+       // method name is same as parameter type name by default
+       method := svc.MethodName()
+       params := fmt.Sprintf("*%s", reqTyp)
+       returns := "error"
+       if replyType := camelCaseName(svc.ReplyType); replyType != "" {
+               repTyp := fmt.Sprintf("*%s", replyType)
+               if svc.Stream {
+                       repTyp = fmt.Sprintf("[]%s", repTyp)
+               }
+               returns = fmt.Sprintf("(%s, error)", repTyp)
+       }
+
+       fmt.Fprintf(w, "\t%s(%s) %s\n", method, params, returns)
+}
+
 // generateEnum writes generated code for the enum into w
 func generateEnum(ctx *context, w io.Writer, enum *Enum) {
        name := camelCaseName(enum.Name)
@@ -277,6 +325,28 @@ func generateEnum(ctx *context, w io.Writer, enum *Enum) {
        fmt.Fprintln(w)
 }
 
+// generateAlias writes generated code for the alias into w
+func generateAlias(ctx *context, w io.Writer, alias *Alias) {
+       name := camelCaseName(alias.Name)
+
+       logf(" writing type %q (%s), length: %d", alias.Name, name, alias.Length)
+
+       // generate struct comment
+       generateComment(ctx, w, name, alias.Name, "alias")
+
+       // generate struct definition
+       fmt.Fprintf(w, "type %s ", name)
+
+       if alias.Length > 0 {
+               fmt.Fprintf(w, "[%d]", alias.Length)
+       }
+
+       dataType := convertToGoType(ctx, alias.Type)
+       fmt.Fprintf(w, "%s\n", dataType)
+
+       fmt.Fprintln(w)
+}
+
 // generateType writes generated code for the type into w
 func generateType(ctx *context, w io.Writer, typ *Type) {
        name := camelCaseName(typ.Name)
@@ -494,21 +564,6 @@ func generateField(ctx *context, w io.Writer, fields []Field, i int) {
        fmt.Fprintln(w)
 }
 
-// generateService writes generated code for the service into w
-func generateService(ctx *context, w io.Writer, svc *Service) {
-       reqTyp := camelCaseName(svc.RequestType)
-
-       // method name is same as parameter type name by default
-       method := svc.MethodName()
-       params := fmt.Sprintf("*%s", reqTyp)
-       returns := "error"
-       if replyTyp := camelCaseName(svc.ReplyType); replyTyp != "" {
-               returns = fmt.Sprintf("(*%s, error)", replyTyp)
-       }
-
-       fmt.Fprintf(w, "\t%s(%s) %s\n", method, params, returns)
-}
-
 // generateMessageNameGetter generates getter for original VPP message name into the provider writer
 func generateMessageNameGetter(w io.Writer, structName, msgName string) {
        fmt.Fprintf(w, `func (*%s) GetMessageName() string {
index 2681085..97318cb 100644 (file)
@@ -8,6 +8,7 @@ type Package struct {
        Enums      []Enum
        Unions     []Union
        Types      []Type
+       Aliases    []Alias
        Messages   []Message
        Services   []Service
        RefMap     map[string]string
@@ -37,6 +38,13 @@ type Type struct {
        Fields []Field
 }
 
+// Alias represents VPP binary API alias
+type Alias struct {
+       Name   string
+       Type   string
+       Length int
+}
+
 // Union represents VPP binary API union
 type Union struct {
        Name   string
@@ -105,16 +113,3 @@ func (s Service) IsRequestService() bool {
        // some binapi messages might have `null` reply (for example: memclnt)
        return s.ReplyType != "" && s.ReplyType != "null" // not null
 }
-
-func getSizeOfType(typ *Type) (size int) {
-       for _, field := range typ.Fields {
-               if n := getBinapiTypeSize(field.Type); n > 0 {
-                       if field.Length > 0 {
-                               size += n * field.Length
-                       } else {
-                               size += n
-                       }
-               }
-       }
-       return size
-}
index 2d6fdd4..5dfbe91 100644 (file)
@@ -23,26 +23,6 @@ import (
        "github.com/bennyscetbun/jsongo"
 )
 
-func getTypeByRef(ctx *context, ref string) *Type {
-       for _, typ := range ctx.packageData.Types {
-               if ref == toApiType(typ.Name) {
-                       return &typ
-               }
-       }
-       return nil
-}
-
-func getUnionSize(ctx *context, union *Union) (maxSize int) {
-       for _, field := range union.Fields {
-               if typ := getTypeByRef(ctx, field.Type); typ != nil {
-                       if size := getSizeOfType(typ); size > maxSize {
-                               maxSize = size
-                       }
-               }
-       }
-       return
-}
-
 // toApiType returns name that is used as type reference in VPP binary API
 func toApiType(name string) string {
        return fmt.Sprintf("vl_api_%s_t", name)
@@ -50,13 +30,14 @@ func toApiType(name string) string {
 
 // parsePackage parses provided JSON data into objects prepared for code generation
 func parsePackage(ctx *context, jsonRoot *jsongo.JSONNode) (*Package, error) {
-       logf(" %s contains: %d services, %d messages, %d types, %d enums, %d unions (version: %s)",
+       logf(" %s contains: %d services, %d messages, %d types, %d enums, %d unions, %d aliases (version: %s)",
                ctx.packageName,
                jsonRoot.Map("services").Len(),
                jsonRoot.Map("messages").Len(),
                jsonRoot.Map("types").Len(),
                jsonRoot.Map("enums").Len(),
                jsonRoot.Map("unions").Len(),
+               jsonRoot.Map("aliases").Len(),
                jsonRoot.Map("vl_api_version").Get(),
        )
 
@@ -79,6 +60,22 @@ func parsePackage(ctx *context, jsonRoot *jsongo.JSONNode) (*Package, error) {
                pkg.RefMap[toApiType(enum.Name)] = enum.Name
        }
 
+       // parse aliases
+       aliases := jsonRoot.Map("aliases")
+       if aliases.GetType() == jsongo.TypeMap {
+               pkg.Aliases = make([]Alias, aliases.Len())
+               for i, key := range aliases.GetKeys() {
+                       aliasNode := aliases.At(key)
+
+                       alias, err := parseAlias(ctx, key.(string), aliasNode)
+                       if err != nil {
+                               return nil, err
+                       }
+                       pkg.Aliases[i] = *alias
+                       pkg.RefMap[toApiType(alias.Name)] = alias.Name
+               }
+       }
+
        // parse types
        types := jsonRoot.Map("types")
        pkg.Types = make([]Type, types.Len())
@@ -308,6 +305,42 @@ func parseType(ctx *context, typeNode *jsongo.JSONNode) (*Type, error) {
        return &typ, nil
 }
 
+const (
+       aliasesLength = "length"
+       aliasesType   = "type"
+)
+
+// parseAlias parses VPP binary API alias object from JSON node
+func parseAlias(ctx *context, aliasName string, aliasNode *jsongo.JSONNode) (*Alias, error) {
+       if aliasNode.Len() == 0 || aliasNode.At(aliasesType).GetType() != jsongo.TypeValue {
+               return nil, errors.New("invalid JSON for alias specified")
+       }
+
+       alias := Alias{
+               Name: aliasName,
+       }
+
+       if typeNode := aliasNode.At(aliasesType); typeNode.GetType() == jsongo.TypeValue {
+               typ, ok := typeNode.Get().(string)
+               if !ok {
+                       return nil, fmt.Errorf("alias type is %T, not a string", typeNode.Get())
+               }
+               if typ != "null" {
+                       alias.Type = typ
+               }
+       }
+
+       if lengthNode := aliasNode.At(aliasesLength); lengthNode.GetType() == jsongo.TypeValue {
+               length, ok := lengthNode.Get().(float64)
+               if !ok {
+                       return nil, fmt.Errorf("alias length is %T, not a float64", lengthNode.Get())
+               }
+               alias.Length = int(length)
+       }
+
+       return &alias, nil
+}
+
 // parseMessage parses VPP binary API message object from JSON node
 func parseMessage(ctx *context, msgNode *jsongo.JSONNode) (*Message, error) {
        if msgNode.Len() == 0 || msgNode.At(0).GetType() != jsongo.TypeValue {
@@ -364,7 +397,7 @@ func parseField(ctx *context, field *jsongo.JSONNode) (*Field, error) {
        if field.Len() >= 3 {
                fieldLength, ok = field.At(2).Get().(float64)
                if !ok {
-                       return nil, fmt.Errorf("field length is %T, not an int", field.At(2).Get())
+                       return nil, fmt.Errorf("field length is %T, not float64", field.At(2).Get())
                }
        }
        var fieldLengthFrom string
@@ -461,3 +494,62 @@ func convertToGoType(ctx *context, binapiType string) (typ string) {
        }
        return typ
 }
+
+func getSizeOfType(typ *Type) (size int) {
+       for _, field := range typ.Fields {
+               size += getSizeOfBinapiTypeLength(field.Type, field.Length)
+       }
+       return size
+}
+
+func getSizeOfBinapiTypeLength(typ string, length int) (size int) {
+       if n := getBinapiTypeSize(typ); n > 0 {
+               if length > 0 {
+                       return n * length
+               } else {
+                       return n
+               }
+       }
+       return
+}
+
+func getTypeByRef(ctx *context, ref string) *Type {
+       for _, typ := range ctx.packageData.Types {
+               if ref == toApiType(typ.Name) {
+                       return &typ
+               }
+       }
+       return nil
+}
+
+func getAliasByRef(ctx *context, ref string) *Alias {
+       for _, alias := range ctx.packageData.Aliases {
+               if ref == toApiType(alias.Name) {
+                       return &alias
+               }
+       }
+       return nil
+}
+
+func getUnionSize(ctx *context, union *Union) (maxSize int) {
+       for _, field := range union.Fields {
+               typ := getTypeByRef(ctx, field.Type)
+               if typ != nil {
+                       if size := getSizeOfType(typ); size > maxSize {
+                               maxSize = size
+                       }
+                       continue
+               }
+               alias := getAliasByRef(ctx, field.Type)
+               if alias != nil {
+                       if size := getSizeOfBinapiTypeLength(alias.Type, alias.Length); size > maxSize {
+                               maxSize = size
+                       }
+                       continue
+               } else {
+                       logf("no type or alias found for union %s field type %q", union.Name, field.Type)
+                       continue
+               }
+       }
+       return
+}
index 13b8665..1aa8285 100644 (file)
                 "crc": "0xf6b0b8ca"
             }
         ],
+        [
+            "acl_plugin_get_conn_table_max_entries",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "acl_plugin_get_conn_table_max_entries_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u64",
+                "conn_table_max_entries"
+            ],
+            {
+                "crc": "0x7a096d3d"
+            }
+        ],
         [
             "acl_add_replace",
             [
             }
         ]
     ],
-    "vl_api_version": "0x25a6e1e9",
+    "vl_api_version": "0x8ed22cb9",
     "unions": [],
     "services": {
         "acl_plugin_get_version": {
         "acl_del": {
             "reply": "acl_del_reply"
         },
+        "macip_acl_del": {
+            "reply": "macip_acl_del_reply"
+        },
         "acl_plugin_control_ping": {
             "reply": "acl_plugin_control_ping_reply"
         },
         "macip_acl_interface_add_del": {
             "reply": "macip_acl_interface_add_del_reply"
         },
-        "macip_acl_del": {
-            "reply": "macip_acl_del_reply"
+        "acl_add_replace": {
+            "reply": "acl_add_replace_reply"
         },
-        "macip_acl_add": {
-            "reply": "macip_acl_add_reply"
+        "acl_plugin_get_conn_table_max_entries": {
+            "reply": "acl_plugin_get_conn_table_max_entries_reply"
         },
         "acl_interface_list_dump": {
             "reply": "acl_interface_list_details",
         "acl_interface_set_acl_list": {
             "reply": "acl_interface_set_acl_list_reply"
         },
-        "acl_add_replace": {
-            "reply": "acl_add_replace_reply"
+        "macip_acl_add": {
+            "reply": "macip_acl_add_reply"
         },
         "acl_interface_set_etype_whitelist": {
             "reply": "acl_interface_set_etype_whitelist_reply"
                 "crc": "0x70589f1e"
             }
         ]
-    ]
+    ],
+    "aliases": {}
 }
index 47b79cf..eff85d4 100644 (file)
@@ -5,9 +5,9 @@
  Package acl is a generated from VPP binary API module 'acl'.
 
  It contains following objects:
-        34 messages
+        36 messages
          2 types
-        17 services
+        18 services
 
 */
 package acl
@@ -21,68 +21,153 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "acl_plugin_get_version": {
+//             "reply": "acl_plugin_get_version_reply"
+//         },
+//         "acl_dump": {
+//             "reply": "acl_details",
+//             "stream": true
+//         },
+//         "acl_interface_add_del": {
+//             "reply": "acl_interface_add_del_reply"
+//         },
+//         "acl_del": {
+//             "reply": "acl_del_reply"
+//         },
+//         "macip_acl_del": {
+//             "reply": "macip_acl_del_reply"
+//         },
+//         "acl_plugin_control_ping": {
+//             "reply": "acl_plugin_control_ping_reply"
+//         },
+//         "macip_acl_interface_get": {
+//             "reply": "macip_acl_interface_get_reply"
+//         },
+//         "acl_interface_etype_whitelist_dump": {
+//             "reply": "acl_interface_etype_whitelist_details",
+//             "stream": true
+//         },
+//         "macip_acl_interface_add_del": {
+//             "reply": "macip_acl_interface_add_del_reply"
+//         },
+//         "acl_add_replace": {
+//             "reply": "acl_add_replace_reply"
+//         },
+//         "acl_plugin_get_conn_table_max_entries": {
+//             "reply": "acl_plugin_get_conn_table_max_entries_reply"
+//         },
+//         "acl_interface_list_dump": {
+//             "reply": "acl_interface_list_details",
+//             "stream": true
+//         },
+//         "acl_interface_set_acl_list": {
+//             "reply": "acl_interface_set_acl_list_reply"
+//         },
+//         "macip_acl_add": {
+//             "reply": "macip_acl_add_reply"
+//         },
+//         "acl_interface_set_etype_whitelist": {
+//             "reply": "acl_interface_set_etype_whitelist_reply"
+//         },
+//         "macip_acl_add_replace": {
+//             "reply": "macip_acl_add_replace_reply"
+//         },
+//         "macip_acl_dump": {
+//             "reply": "macip_acl_details",
+//             "stream": true
+//         },
+//         "macip_acl_interface_list_dump": {
+//             "reply": "macip_acl_interface_list_details",
+//             "stream": true
+//         }
+//     },
+//
+type Services interface {
+       DumpACL(*ACLDump) ([]*ACLDetails, error)
+       DumpACLInterfaceEtypeWhitelist(*ACLInterfaceEtypeWhitelistDump) ([]*ACLInterfaceEtypeWhitelistDetails, error)
+       DumpACLInterfaceList(*ACLInterfaceListDump) ([]*ACLInterfaceListDetails, error)
+       DumpMacipACL(*MacipACLDump) ([]*MacipACLDetails, error)
+       DumpMacipACLInterfaceList(*MacipACLInterfaceListDump) ([]*MacipACLInterfaceListDetails, error)
+       ACLAddReplace(*ACLAddReplace) (*ACLAddReplaceReply, error)
+       ACLDel(*ACLDel) (*ACLDelReply, error)
+       ACLInterfaceAddDel(*ACLInterfaceAddDel) (*ACLInterfaceAddDelReply, error)
+       ACLInterfaceSetACLList(*ACLInterfaceSetACLList) (*ACLInterfaceSetACLListReply, error)
+       ACLInterfaceSetEtypeWhitelist(*ACLInterfaceSetEtypeWhitelist) (*ACLInterfaceSetEtypeWhitelistReply, error)
+       ACLPluginControlPing(*ACLPluginControlPing) (*ACLPluginControlPingReply, error)
+       ACLPluginGetConnTableMaxEntries(*ACLPluginGetConnTableMaxEntries) (*ACLPluginGetConnTableMaxEntriesReply, error)
+       ACLPluginGetVersion(*ACLPluginGetVersion) (*ACLPluginGetVersionReply, error)
+       MacipACLAdd(*MacipACLAdd) (*MacipACLAddReply, error)
+       MacipACLAddReplace(*MacipACLAddReplace) (*MacipACLAddReplaceReply, error)
+       MacipACLDel(*MacipACLDel) (*MacipACLDelReply, error)
+       MacipACLInterfaceAddDel(*MacipACLInterfaceAddDel) (*MacipACLInterfaceAddDelReply, error)
+       MacipACLInterfaceGet(*MacipACLInterfaceGet) (*MacipACLInterfaceGetReply, error)
+}
+
 /* Types */
 
-// ACLRule represents the VPP binary API type 'acl_rule'.
-//
-//            "acl_rule",
-//            [
-//                "u8",
-//                "is_permit"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "src_ip_addr",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "src_ip_prefix_len"
-//            ],
-//            [
-//                "u8",
-//                "dst_ip_addr",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "dst_ip_prefix_len"
-//            ],
-//            [
-//                "u8",
-//                "proto"
-//            ],
-//            [
-//                "u16",
-//                "srcport_or_icmptype_first"
-//            ],
-//            [
-//                "u16",
-//                "srcport_or_icmptype_last"
-//            ],
-//            [
-//                "u16",
-//                "dstport_or_icmpcode_first"
-//            ],
-//            [
-//                "u16",
-//                "dstport_or_icmpcode_last"
-//            ],
-//            [
-//                "u8",
-//                "tcp_flags_mask"
-//            ],
-//            [
-//                "u8",
-//                "tcp_flags_value"
-//            ],
-//            {
-//                "crc": "0x6f99bf4d"
-//            }
+// ACLRule represents VPP binary API type 'acl_rule':
+//
+//     "acl_rule",
+//     [
+//         "u8",
+//         "is_permit"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "src_ip_addr",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "src_ip_prefix_len"
+//     ],
+//     [
+//         "u8",
+//         "dst_ip_addr",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "dst_ip_prefix_len"
+//     ],
+//     [
+//         "u8",
+//         "proto"
+//     ],
+//     [
+//         "u16",
+//         "srcport_or_icmptype_first"
+//     ],
+//     [
+//         "u16",
+//         "srcport_or_icmptype_last"
+//     ],
+//     [
+//         "u16",
+//         "dstport_or_icmpcode_first"
+//     ],
+//     [
+//         "u16",
+//         "dstport_or_icmpcode_last"
+//     ],
+//     [
+//         "u8",
+//         "tcp_flags_mask"
+//     ],
+//     [
+//         "u8",
+//         "tcp_flags_value"
+//     ],
+//     {
+//         "crc": "0x6f99bf4d"
+//     }
 //
 type ACLRule struct {
        IsPermit               uint8
@@ -107,39 +192,39 @@ func (*ACLRule) GetCrcString() string {
        return "6f99bf4d"
 }
 
-// MacipACLRule represents the VPP binary API type 'macip_acl_rule'.
-//
-//            "macip_acl_rule",
-//            [
-//                "u8",
-//                "is_permit"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "src_mac",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "src_mac_mask",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "src_ip_addr",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "src_ip_prefix_len"
-//            ],
-//            {
-//                "crc": "0x70589f1e"
-//            }
+// MacipACLRule represents VPP binary API type 'macip_acl_rule':
+//
+//     "macip_acl_rule",
+//     [
+//         "u8",
+//         "is_permit"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "src_mac",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "src_mac_mask",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "src_ip_addr",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "src_ip_prefix_len"
+//     ],
+//     {
+//         "crc": "0x70589f1e"
+//     }
 //
 type MacipACLRule struct {
        IsPermit       uint8
@@ -159,24 +244,24 @@ func (*MacipACLRule) GetCrcString() string {
 
 /* Messages */
 
-// ACLPluginGetVersion represents the VPP binary API message 'acl_plugin_get_version'.
-//
-//            "acl_plugin_get_version",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// ACLPluginGetVersion represents VPP binary API message 'acl_plugin_get_version':
+//
+//     "acl_plugin_get_version",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type ACLPluginGetVersion struct{}
 
@@ -190,28 +275,28 @@ func (*ACLPluginGetVersion) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLPluginGetVersionReply represents the VPP binary API message 'acl_plugin_get_version_reply'.
-//
-//            "acl_plugin_get_version_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "major"
-//            ],
-//            [
-//                "u32",
-//                "minor"
-//            ],
-//            {
-//                "crc": "0x9b32cf86"
-//            }
+// ACLPluginGetVersionReply represents VPP binary API message 'acl_plugin_get_version_reply':
+//
+//     "acl_plugin_get_version_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "major"
+//     ],
+//     [
+//         "u32",
+//         "minor"
+//     ],
+//     {
+//         "crc": "0x9b32cf86"
+//     }
 //
 type ACLPluginGetVersionReply struct {
        Major uint32
@@ -228,24 +313,24 @@ func (*ACLPluginGetVersionReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLPluginControlPing represents the VPP binary API message 'acl_plugin_control_ping'.
-//
-//            "acl_plugin_control_ping",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// ACLPluginControlPing represents VPP binary API message 'acl_plugin_control_ping':
+//
+//     "acl_plugin_control_ping",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type ACLPluginControlPing struct{}
 
@@ -259,32 +344,32 @@ func (*ACLPluginControlPing) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLPluginControlPingReply represents the VPP binary API message 'acl_plugin_control_ping_reply'.
-//
-//            "acl_plugin_control_ping_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "vpe_pid"
-//            ],
-//            {
-//                "crc": "0xf6b0b8ca"
-//            }
+// ACLPluginControlPingReply represents VPP binary API message 'acl_plugin_control_ping_reply':
+//
+//     "acl_plugin_control_ping_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "vpe_pid"
+//     ],
+//     {
+//         "crc": "0xf6b0b8ca"
+//     }
 //
 type ACLPluginControlPingReply struct {
        Retval      int32
@@ -302,43 +387,107 @@ func (*ACLPluginControlPingReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLAddReplace represents the VPP binary API message 'acl_add_replace'.
-//
-//            "acl_add_replace",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_acl_rule_t",
-//                "r",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xe839997e"
-//            }
+// ACLPluginGetConnTableMaxEntries represents VPP binary API message 'acl_plugin_get_conn_table_max_entries':
+//
+//     "acl_plugin_get_conn_table_max_entries",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
+//
+type ACLPluginGetConnTableMaxEntries struct{}
+
+func (*ACLPluginGetConnTableMaxEntries) GetMessageName() string {
+       return "acl_plugin_get_conn_table_max_entries"
+}
+func (*ACLPluginGetConnTableMaxEntries) GetCrcString() string {
+       return "51077d14"
+}
+func (*ACLPluginGetConnTableMaxEntries) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// ACLPluginGetConnTableMaxEntriesReply represents VPP binary API message 'acl_plugin_get_conn_table_max_entries_reply':
+//
+//     "acl_plugin_get_conn_table_max_entries_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u64",
+//         "conn_table_max_entries"
+//     ],
+//     {
+//         "crc": "0x7a096d3d"
+//     }
+//
+type ACLPluginGetConnTableMaxEntriesReply struct {
+       ConnTableMaxEntries uint64
+}
+
+func (*ACLPluginGetConnTableMaxEntriesReply) GetMessageName() string {
+       return "acl_plugin_get_conn_table_max_entries_reply"
+}
+func (*ACLPluginGetConnTableMaxEntriesReply) GetCrcString() string {
+       return "7a096d3d"
+}
+func (*ACLPluginGetConnTableMaxEntriesReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// ACLAddReplace represents VPP binary API message 'acl_add_replace':
+//
+//     "acl_add_replace",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_acl_rule_t",
+//         "r",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xe839997e"
+//     }
 //
 type ACLAddReplace struct {
        ACLIndex uint32
@@ -357,28 +506,28 @@ func (*ACLAddReplace) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLAddReplaceReply represents the VPP binary API message 'acl_add_replace_reply'.
-//
-//            "acl_add_replace_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xac407b0c"
-//            }
+// ACLAddReplaceReply represents VPP binary API message 'acl_add_replace_reply':
+//
+//     "acl_add_replace_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xac407b0c"
+//     }
 //
 type ACLAddReplaceReply struct {
        ACLIndex uint32
@@ -395,28 +544,28 @@ func (*ACLAddReplaceReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLDel represents the VPP binary API message 'acl_del'.
-//
-//            "acl_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            {
-//                "crc": "0xef34fea4"
-//            }
+// ACLDel represents VPP binary API message 'acl_del':
+//
+//     "acl_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     {
+//         "crc": "0xef34fea4"
+//     }
 //
 type ACLDel struct {
        ACLIndex uint32
@@ -432,24 +581,24 @@ func (*ACLDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLDelReply represents the VPP binary API message 'acl_del_reply'.
-//
-//            "acl_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// ACLDelReply represents VPP binary API message 'acl_del_reply':
+//
+//     "acl_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type ACLDelReply struct {
        Retval int32
@@ -465,40 +614,40 @@ func (*ACLDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLInterfaceAddDel represents the VPP binary API message 'acl_interface_add_del'.
-//
-//            "acl_interface_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "is_input"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            {
-//                "crc": "0x0b2aedd1"
-//            }
+// ACLInterfaceAddDel represents VPP binary API message 'acl_interface_add_del':
+//
+//     "acl_interface_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "is_input"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     {
+//         "crc": "0x0b2aedd1"
+//     }
 //
 type ACLInterfaceAddDel struct {
        IsAdd     uint8
@@ -517,24 +666,24 @@ func (*ACLInterfaceAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLInterfaceAddDelReply represents the VPP binary API message 'acl_interface_add_del_reply'.
-//
-//            "acl_interface_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// ACLInterfaceAddDelReply represents VPP binary API message 'acl_interface_add_del_reply':
+//
+//     "acl_interface_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type ACLInterfaceAddDelReply struct {
        Retval int32
@@ -550,42 +699,42 @@ func (*ACLInterfaceAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLInterfaceSetACLList represents the VPP binary API message 'acl_interface_set_acl_list'.
-//
-//            "acl_interface_set_acl_list",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "count"
-//            ],
-//            [
-//                "u8",
-//                "n_input"
-//            ],
-//            [
-//                "u32",
-//                "acls",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x8baece38"
-//            }
+// ACLInterfaceSetACLList represents VPP binary API message 'acl_interface_set_acl_list':
+//
+//     "acl_interface_set_acl_list",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "count"
+//     ],
+//     [
+//         "u8",
+//         "n_input"
+//     ],
+//     [
+//         "u32",
+//         "acls",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x8baece38"
+//     }
 //
 type ACLInterfaceSetACLList struct {
        SwIfIndex uint32
@@ -604,24 +753,24 @@ func (*ACLInterfaceSetACLList) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLInterfaceSetACLListReply represents the VPP binary API message 'acl_interface_set_acl_list_reply'.
-//
-//            "acl_interface_set_acl_list_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// ACLInterfaceSetACLListReply represents VPP binary API message 'acl_interface_set_acl_list_reply':
+//
+//     "acl_interface_set_acl_list_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type ACLInterfaceSetACLListReply struct {
        Retval int32
@@ -637,28 +786,28 @@ func (*ACLInterfaceSetACLListReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLDump represents the VPP binary API message 'acl_dump'.
-//
-//            "acl_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            {
-//                "crc": "0xef34fea4"
-//            }
+// ACLDump represents VPP binary API message 'acl_dump':
+//
+//     "acl_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     {
+//         "crc": "0xef34fea4"
+//     }
 //
 type ACLDump struct {
        ACLIndex uint32
@@ -674,39 +823,39 @@ func (*ACLDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLDetails represents the VPP binary API message 'acl_details'.
-//
-//            "acl_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_acl_rule_t",
-//                "r",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x5bd895be"
-//            }
+// ACLDetails represents VPP binary API message 'acl_details':
+//
+//     "acl_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_acl_rule_t",
+//         "r",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x5bd895be"
+//     }
 //
 type ACLDetails struct {
        ACLIndex uint32
@@ -725,28 +874,28 @@ func (*ACLDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLInterfaceListDump represents the VPP binary API message 'acl_interface_list_dump'.
-//
-//            "acl_interface_list_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// ACLInterfaceListDump represents VPP binary API message 'acl_interface_list_dump':
+//
+//     "acl_interface_list_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type ACLInterfaceListDump struct {
        SwIfIndex uint32
@@ -762,38 +911,38 @@ func (*ACLInterfaceListDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLInterfaceListDetails represents the VPP binary API message 'acl_interface_list_details'.
-//
-//            "acl_interface_list_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "count"
-//            ],
-//            [
-//                "u8",
-//                "n_input"
-//            ],
-//            [
-//                "u32",
-//                "acls",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xd5e80809"
-//            }
+// ACLInterfaceListDetails represents VPP binary API message 'acl_interface_list_details':
+//
+//     "acl_interface_list_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "count"
+//     ],
+//     [
+//         "u8",
+//         "n_input"
+//     ],
+//     [
+//         "u32",
+//         "acls",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xd5e80809"
+//     }
 //
 type ACLInterfaceListDetails struct {
        SwIfIndex uint32
@@ -812,39 +961,39 @@ func (*ACLInterfaceListDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MacipACLAdd represents the VPP binary API message 'macip_acl_add'.
-//
-//            "macip_acl_add",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_macip_acl_rule_t",
-//                "r",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xb3d3d65a"
-//            }
+// MacipACLAdd represents VPP binary API message 'macip_acl_add':
+//
+//     "macip_acl_add",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_macip_acl_rule_t",
+//         "r",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xb3d3d65a"
+//     }
 //
 type MacipACLAdd struct {
        Tag   []byte `struc:"[64]byte"`
@@ -862,28 +1011,28 @@ func (*MacipACLAdd) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MacipACLAddReply represents the VPP binary API message 'macip_acl_add_reply'.
-//
-//            "macip_acl_add_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xac407b0c"
-//            }
+// MacipACLAddReply represents VPP binary API message 'macip_acl_add_reply':
+//
+//     "macip_acl_add_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xac407b0c"
+//     }
 //
 type MacipACLAddReply struct {
        ACLIndex uint32
@@ -900,43 +1049,43 @@ func (*MacipACLAddReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MacipACLAddReplace represents the VPP binary API message 'macip_acl_add_replace'.
-//
-//            "macip_acl_add_replace",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_macip_acl_rule_t",
-//                "r",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xa0e8c01b"
-//            }
+// MacipACLAddReplace represents VPP binary API message 'macip_acl_add_replace':
+//
+//     "macip_acl_add_replace",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_macip_acl_rule_t",
+//         "r",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xa0e8c01b"
+//     }
 //
 type MacipACLAddReplace struct {
        ACLIndex uint32
@@ -955,28 +1104,28 @@ func (*MacipACLAddReplace) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MacipACLAddReplaceReply represents the VPP binary API message 'macip_acl_add_replace_reply'.
-//
-//            "macip_acl_add_replace_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xac407b0c"
-//            }
+// MacipACLAddReplaceReply represents VPP binary API message 'macip_acl_add_replace_reply':
+//
+//     "macip_acl_add_replace_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xac407b0c"
+//     }
 //
 type MacipACLAddReplaceReply struct {
        ACLIndex uint32
@@ -993,28 +1142,28 @@ func (*MacipACLAddReplaceReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MacipACLDel represents the VPP binary API message 'macip_acl_del'.
-//
-//            "macip_acl_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            {
-//                "crc": "0xef34fea4"
-//            }
+// MacipACLDel represents VPP binary API message 'macip_acl_del':
+//
+//     "macip_acl_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     {
+//         "crc": "0xef34fea4"
+//     }
 //
 type MacipACLDel struct {
        ACLIndex uint32
@@ -1030,24 +1179,24 @@ func (*MacipACLDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MacipACLDelReply represents the VPP binary API message 'macip_acl_del_reply'.
-//
-//            "macip_acl_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// MacipACLDelReply represents VPP binary API message 'macip_acl_del_reply':
+//
+//     "macip_acl_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type MacipACLDelReply struct {
        Retval int32
@@ -1063,36 +1212,36 @@ func (*MacipACLDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MacipACLInterfaceAddDel represents the VPP binary API message 'macip_acl_interface_add_del'.
-//
-//            "macip_acl_interface_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            {
-//                "crc": "0x6a6be97c"
-//            }
+// MacipACLInterfaceAddDel represents VPP binary API message 'macip_acl_interface_add_del':
+//
+//     "macip_acl_interface_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     {
+//         "crc": "0x6a6be97c"
+//     }
 //
 type MacipACLInterfaceAddDel struct {
        IsAdd     uint8
@@ -1110,24 +1259,24 @@ func (*MacipACLInterfaceAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MacipACLInterfaceAddDelReply represents the VPP binary API message 'macip_acl_interface_add_del_reply'.
-//
-//            "macip_acl_interface_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// MacipACLInterfaceAddDelReply represents VPP binary API message 'macip_acl_interface_add_del_reply':
+//
+//     "macip_acl_interface_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type MacipACLInterfaceAddDelReply struct {
        Retval int32
@@ -1143,28 +1292,28 @@ func (*MacipACLInterfaceAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MacipACLDump represents the VPP binary API message 'macip_acl_dump'.
-//
-//            "macip_acl_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            {
-//                "crc": "0xef34fea4"
-//            }
+// MacipACLDump represents VPP binary API message 'macip_acl_dump':
+//
+//     "macip_acl_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     {
+//         "crc": "0xef34fea4"
+//     }
 //
 type MacipACLDump struct {
        ACLIndex uint32
@@ -1180,39 +1329,39 @@ func (*MacipACLDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MacipACLDetails represents the VPP binary API message 'macip_acl_details'.
-//
-//            "macip_acl_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "acl_index"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_macip_acl_rule_t",
-//                "r",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xdd2b55ba"
-//            }
+// MacipACLDetails represents VPP binary API message 'macip_acl_details':
+//
+//     "macip_acl_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "acl_index"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_macip_acl_rule_t",
+//         "r",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xdd2b55ba"
+//     }
 //
 type MacipACLDetails struct {
        ACLIndex uint32
@@ -1231,24 +1380,24 @@ func (*MacipACLDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MacipACLInterfaceGet represents the VPP binary API message 'macip_acl_interface_get'.
-//
-//            "macip_acl_interface_get",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// MacipACLInterfaceGet represents VPP binary API message 'macip_acl_interface_get':
+//
+//     "macip_acl_interface_get",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type MacipACLInterfaceGet struct{}
 
@@ -1262,30 +1411,30 @@ func (*MacipACLInterfaceGet) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MacipACLInterfaceGetReply represents the VPP binary API message 'macip_acl_interface_get_reply'.
-//
-//            "macip_acl_interface_get_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "u32",
-//                "acls",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xaccf9b05"
-//            }
+// MacipACLInterfaceGetReply represents VPP binary API message 'macip_acl_interface_get_reply':
+//
+//     "macip_acl_interface_get_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "acls",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xaccf9b05"
+//     }
 //
 type MacipACLInterfaceGetReply struct {
        Count uint32 `struc:"sizeof=Acls"`
@@ -1302,28 +1451,28 @@ func (*MacipACLInterfaceGetReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MacipACLInterfaceListDump represents the VPP binary API message 'macip_acl_interface_list_dump'.
-//
-//            "macip_acl_interface_list_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// MacipACLInterfaceListDump represents VPP binary API message 'macip_acl_interface_list_dump':
+//
+//     "macip_acl_interface_list_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type MacipACLInterfaceListDump struct {
        SwIfIndex uint32
@@ -1339,34 +1488,34 @@ func (*MacipACLInterfaceListDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MacipACLInterfaceListDetails represents the VPP binary API message 'macip_acl_interface_list_details'.
-//
-//            "macip_acl_interface_list_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "count"
-//            ],
-//            [
-//                "u32",
-//                "acls",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x29783fa0"
-//            }
+// MacipACLInterfaceListDetails represents VPP binary API message 'macip_acl_interface_list_details':
+//
+//     "macip_acl_interface_list_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "acls",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x29783fa0"
+//     }
 //
 type MacipACLInterfaceListDetails struct {
        SwIfIndex uint32
@@ -1384,42 +1533,42 @@ func (*MacipACLInterfaceListDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLInterfaceSetEtypeWhitelist represents the VPP binary API message 'acl_interface_set_etype_whitelist'.
-//
-//            "acl_interface_set_etype_whitelist",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "count"
-//            ],
-//            [
-//                "u8",
-//                "n_input"
-//            ],
-//            [
-//                "u16",
-//                "whitelist",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xf515efc5"
-//            }
+// ACLInterfaceSetEtypeWhitelist represents VPP binary API message 'acl_interface_set_etype_whitelist':
+//
+//     "acl_interface_set_etype_whitelist",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "count"
+//     ],
+//     [
+//         "u8",
+//         "n_input"
+//     ],
+//     [
+//         "u16",
+//         "whitelist",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xf515efc5"
+//     }
 //
 type ACLInterfaceSetEtypeWhitelist struct {
        SwIfIndex uint32
@@ -1438,24 +1587,24 @@ func (*ACLInterfaceSetEtypeWhitelist) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLInterfaceSetEtypeWhitelistReply represents the VPP binary API message 'acl_interface_set_etype_whitelist_reply'.
-//
-//            "acl_interface_set_etype_whitelist_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// ACLInterfaceSetEtypeWhitelistReply represents VPP binary API message 'acl_interface_set_etype_whitelist_reply':
+//
+//     "acl_interface_set_etype_whitelist_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type ACLInterfaceSetEtypeWhitelistReply struct {
        Retval int32
@@ -1471,28 +1620,28 @@ func (*ACLInterfaceSetEtypeWhitelistReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ACLInterfaceEtypeWhitelistDump represents the VPP binary API message 'acl_interface_etype_whitelist_dump'.
-//
-//            "acl_interface_etype_whitelist_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// ACLInterfaceEtypeWhitelistDump represents VPP binary API message 'acl_interface_etype_whitelist_dump':
+//
+//     "acl_interface_etype_whitelist_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type ACLInterfaceEtypeWhitelistDump struct {
        SwIfIndex uint32
@@ -1508,38 +1657,38 @@ func (*ACLInterfaceEtypeWhitelistDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ACLInterfaceEtypeWhitelistDetails represents the VPP binary API message 'acl_interface_etype_whitelist_details'.
-//
-//            "acl_interface_etype_whitelist_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "count"
-//            ],
-//            [
-//                "u8",
-//                "n_input"
-//            ],
-//            [
-//                "u16",
-//                "whitelist",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x6a5d4e81"
-//            }
+// ACLInterfaceEtypeWhitelistDetails represents VPP binary API message 'acl_interface_etype_whitelist_details':
+//
+//     "acl_interface_etype_whitelist_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "count"
+//     ],
+//     [
+//         "u8",
+//         "n_input"
+//     ],
+//     [
+//         "u16",
+//         "whitelist",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x6a5d4e81"
+//     }
 //
 type ACLInterfaceEtypeWhitelistDetails struct {
        SwIfIndex uint32
@@ -1558,33 +1707,13 @@ func (*ACLInterfaceEtypeWhitelistDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-/* Services */
-
-type Services interface {
-       DumpACL(*ACLDump) (*ACLDetails, error)
-       DumpACLInterfaceEtypeWhitelist(*ACLInterfaceEtypeWhitelistDump) (*ACLInterfaceEtypeWhitelistDetails, error)
-       DumpACLInterfaceList(*ACLInterfaceListDump) (*ACLInterfaceListDetails, error)
-       DumpMacipACL(*MacipACLDump) (*MacipACLDetails, error)
-       DumpMacipACLInterfaceList(*MacipACLInterfaceListDump) (*MacipACLInterfaceListDetails, error)
-       ACLAddReplace(*ACLAddReplace) (*ACLAddReplaceReply, error)
-       ACLDel(*ACLDel) (*ACLDelReply, error)
-       ACLInterfaceAddDel(*ACLInterfaceAddDel) (*ACLInterfaceAddDelReply, error)
-       ACLInterfaceSetACLList(*ACLInterfaceSetACLList) (*ACLInterfaceSetACLListReply, error)
-       ACLInterfaceSetEtypeWhitelist(*ACLInterfaceSetEtypeWhitelist) (*ACLInterfaceSetEtypeWhitelistReply, error)
-       ACLPluginControlPing(*ACLPluginControlPing) (*ACLPluginControlPingReply, error)
-       ACLPluginGetVersion(*ACLPluginGetVersion) (*ACLPluginGetVersionReply, error)
-       MacipACLAdd(*MacipACLAdd) (*MacipACLAddReply, error)
-       MacipACLAddReplace(*MacipACLAddReplace) (*MacipACLAddReplaceReply, error)
-       MacipACLDel(*MacipACLDel) (*MacipACLDelReply, error)
-       MacipACLInterfaceAddDel(*MacipACLInterfaceAddDel) (*MacipACLInterfaceAddDelReply, error)
-       MacipACLInterfaceGet(*MacipACLInterfaceGet) (*MacipACLInterfaceGetReply, error)
-}
-
 func init() {
        api.RegisterMessage((*ACLPluginGetVersion)(nil), "acl.ACLPluginGetVersion")
        api.RegisterMessage((*ACLPluginGetVersionReply)(nil), "acl.ACLPluginGetVersionReply")
        api.RegisterMessage((*ACLPluginControlPing)(nil), "acl.ACLPluginControlPing")
        api.RegisterMessage((*ACLPluginControlPingReply)(nil), "acl.ACLPluginControlPingReply")
+       api.RegisterMessage((*ACLPluginGetConnTableMaxEntries)(nil), "acl.ACLPluginGetConnTableMaxEntries")
+       api.RegisterMessage((*ACLPluginGetConnTableMaxEntriesReply)(nil), "acl.ACLPluginGetConnTableMaxEntriesReply")
        api.RegisterMessage((*ACLAddReplace)(nil), "acl.ACLAddReplace")
        api.RegisterMessage((*ACLAddReplaceReply)(nil), "acl.ACLAddReplaceReply")
        api.RegisterMessage((*ACLDel)(nil), "acl.ACLDel")
index d28c5bb..0d57e38 100644 (file)
         }
     },
     "enums": [],
-    "types": []
+    "types": [],
+    "aliases": {}
 }
index 81c2b9d..93d5e58 100644 (file)
@@ -20,40 +20,65 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "af_packet_dump": {
+//             "reply": "af_packet_details",
+//             "stream": true
+//         },
+//         "af_packet_set_l4_cksum_offload": {
+//             "reply": "af_packet_set_l4_cksum_offload_reply"
+//         },
+//         "af_packet_delete": {
+//             "reply": "af_packet_delete_reply"
+//         },
+//         "af_packet_create": {
+//             "reply": "af_packet_create_reply"
+//         }
+//     },
+//
+type Services interface {
+       DumpAfPacket(*AfPacketDump) ([]*AfPacketDetails, error)
+       AfPacketCreate(*AfPacketCreate) (*AfPacketCreateReply, error)
+       AfPacketDelete(*AfPacketDelete) (*AfPacketDeleteReply, error)
+       AfPacketSetL4CksumOffload(*AfPacketSetL4CksumOffload) (*AfPacketSetL4CksumOffloadReply, error)
+}
+
 /* Messages */
 
-// AfPacketCreate represents the VPP binary API message 'af_packet_create'.
+// AfPacketCreate represents VPP binary API message 'af_packet_create':
 //
-//            "af_packet_create",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "host_if_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "hw_addr",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "use_random_hw_addr"
-//            ],
-//            {
-//                "crc": "0x6d5d30d6"
-//            }
+//     "af_packet_create",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "host_if_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "hw_addr",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "use_random_hw_addr"
+//     ],
+//     {
+//         "crc": "0x6d5d30d6"
+//     }
 //
 type AfPacketCreate struct {
        HostIfName      []byte `struc:"[64]byte"`
@@ -71,28 +96,28 @@ func (*AfPacketCreate) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// AfPacketCreateReply represents the VPP binary API message 'af_packet_create_reply'.
+// AfPacketCreateReply represents VPP binary API message 'af_packet_create_reply':
 //
-//            "af_packet_create_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+//     "af_packet_create_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type AfPacketCreateReply struct {
        Retval    int32
@@ -109,29 +134,29 @@ func (*AfPacketCreateReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// AfPacketDelete represents the VPP binary API message 'af_packet_delete'.
+// AfPacketDelete represents VPP binary API message 'af_packet_delete':
 //
-//            "af_packet_delete",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "host_if_name",
-//                64
-//            ],
-//            {
-//                "crc": "0x3efceda3"
-//            }
+//     "af_packet_delete",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "host_if_name",
+//         64
+//     ],
+//     {
+//         "crc": "0x3efceda3"
+//     }
 //
 type AfPacketDelete struct {
        HostIfName []byte `struc:"[64]byte"`
@@ -147,24 +172,24 @@ func (*AfPacketDelete) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// AfPacketDeleteReply represents the VPP binary API message 'af_packet_delete_reply'.
+// AfPacketDeleteReply represents VPP binary API message 'af_packet_delete_reply':
 //
-//            "af_packet_delete_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+//     "af_packet_delete_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type AfPacketDeleteReply struct {
        Retval int32
@@ -180,32 +205,32 @@ func (*AfPacketDeleteReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// AfPacketSetL4CksumOffload represents the VPP binary API message 'af_packet_set_l4_cksum_offload'.
+// AfPacketSetL4CksumOffload represents VPP binary API message 'af_packet_set_l4_cksum_offload':
 //
-//            "af_packet_set_l4_cksum_offload",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "set"
-//            ],
-//            {
-//                "crc": "0x86538585"
-//            }
+//     "af_packet_set_l4_cksum_offload",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "set"
+//     ],
+//     {
+//         "crc": "0x86538585"
+//     }
 //
 type AfPacketSetL4CksumOffload struct {
        SwIfIndex uint8
@@ -222,24 +247,24 @@ func (*AfPacketSetL4CksumOffload) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// AfPacketSetL4CksumOffloadReply represents the VPP binary API message 'af_packet_set_l4_cksum_offload_reply'.
+// AfPacketSetL4CksumOffloadReply represents VPP binary API message 'af_packet_set_l4_cksum_offload_reply':
 //
-//            "af_packet_set_l4_cksum_offload_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+//     "af_packet_set_l4_cksum_offload_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type AfPacketSetL4CksumOffloadReply struct {
        Retval int32
@@ -255,24 +280,24 @@ func (*AfPacketSetL4CksumOffloadReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// AfPacketDump represents the VPP binary API message 'af_packet_dump'.
+// AfPacketDump represents VPP binary API message 'af_packet_dump':
 //
-//            "af_packet_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+//     "af_packet_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type AfPacketDump struct{}
 
@@ -286,29 +311,29 @@ func (*AfPacketDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// AfPacketDetails represents the VPP binary API message 'af_packet_details'.
+// AfPacketDetails represents VPP binary API message 'af_packet_details':
 //
-//            "af_packet_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "host_if_name",
-//                64
-//            ],
-//            {
-//                "crc": "0x057205fa"
-//            }
+//     "af_packet_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "host_if_name",
+//         64
+//     ],
+//     {
+//         "crc": "0x057205fa"
+//     }
 //
 type AfPacketDetails struct {
        SwIfIndex  uint32
@@ -325,15 +350,6 @@ func (*AfPacketDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-/* Services */
-
-type Services interface {
-       DumpAfPacket(*AfPacketDump) (*AfPacketDetails, error)
-       AfPacketCreate(*AfPacketCreate) (*AfPacketCreateReply, error)
-       AfPacketDelete(*AfPacketDelete) (*AfPacketDeleteReply, error)
-       AfPacketSetL4CksumOffload(*AfPacketSetL4CksumOffload) (*AfPacketSetL4CksumOffloadReply, error)
-}
-
 func init() {
        api.RegisterMessage((*AfPacketCreate)(nil), "af_packet.AfPacketCreate")
        api.RegisterMessage((*AfPacketCreateReply)(nil), "af_packet.AfPacketCreateReply")
index 87c9358..db255aa 100644 (file)
                 "crc": "0xe8d4e804"
             }
         ],
+        [
+            "sw_interface_set_ip_directed_broadcast",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            [
+                "u8",
+                "enable"
+            ],
+            {
+                "crc": "0xa36fadc0"
+            }
+        ],
+        [
+            "sw_interface_set_ip_directed_broadcast_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
         [
             "sw_interface_event",
             [
                 "link_duplex"
             ],
             [
-                "u8",
+                "u32",
                 "link_speed"
             ],
             [
                 "i_sid"
             ],
             {
-                "crc": "0x09b4b510"
+                "crc": "0xe4ee7eb6"
             }
         ],
         [
                 "crc": "0xe8d4e804"
             }
         ],
+        [
+            "sw_interface_set_rx_placement",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            [
+                "u32",
+                "queue_id"
+            ],
+            [
+                "u32",
+                "worker_id"
+            ],
+            [
+                "u8",
+                "is_main"
+            ],
+            {
+                "crc": "0x4ef4377d"
+            }
+        ],
+        [
+            "sw_interface_set_rx_placement_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "sw_interface_rx_placement_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            {
+                "crc": "0x529cb13f"
+            }
+        ],
+        [
+            "sw_interface_rx_placement_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            [
+                "u32",
+                "queue_id"
+            ],
+            [
+                "u32",
+                "worker_id"
+            ],
+            [
+                "u8",
+                "mode"
+            ],
+            {
+                "crc": "0x0e9e33f4"
+            }
+        ],
         [
             "interface_name_renumber",
             [
             }
         ]
     ],
-    "vl_api_version": "0x6a38a271",
+    "vl_api_version": "0x1ec8c073",
     "unions": [],
     "services": {
         "create_subif": {
             "reply": "create_subif_reply"
         },
+        "sw_interface_set_ip_directed_broadcast": {
+            "reply": "sw_interface_set_ip_directed_broadcast_reply"
+        },
         "delete_subif": {
             "reply": "delete_subif_reply"
         },
+        "sw_interface_get_mac_address": {
+            "reply": "sw_interface_get_mac_address_reply"
+        },
         "sw_interface_tag_add_del": {
             "reply": "sw_interface_tag_add_del_reply"
         },
             "reply": "sw_interface_details",
             "stream": true
         },
+        "sw_interface_set_rx_placement": {
+            "reply": "sw_interface_set_rx_placement_reply"
+        },
         "sw_interface_add_del_address": {
             "reply": "sw_interface_add_del_address_reply"
         },
         "create_loopback_instance": {
             "reply": "create_loopback_instance_reply"
         },
-        "sw_interface_get_mac_address": {
-            "reply": "sw_interface_get_mac_address_reply"
+        "sw_interface_set_mtu": {
+            "reply": "sw_interface_set_mtu_reply"
         },
         "want_interface_events": {
             "reply": "want_interface_events_reply",
         "sw_interface_set_mac_address": {
             "reply": "sw_interface_set_mac_address_reply"
         },
-        "sw_interface_set_table": {
-            "reply": "sw_interface_set_table_reply"
+        "sw_interface_set_unnumbered": {
+            "reply": "sw_interface_set_unnumbered_reply"
         },
-        "sw_interface_set_mtu": {
-            "reply": "sw_interface_set_mtu_reply"
+        "sw_interface_rx_placement_dump": {
+            "reply": "sw_interface_rx_placement_details",
+            "stream": true
         },
         "sw_interface_set_flags": {
             "reply": "sw_interface_set_flags_reply"
         "create_vlan_subif": {
             "reply": "create_vlan_subif_reply"
         },
-        "sw_interface_set_unnumbered": {
-            "reply": "sw_interface_set_unnumbered_reply"
+        "sw_interface_set_table": {
+            "reply": "sw_interface_set_table_reply"
         }
     },
     "enums": [],
                 "crc": "0x8bd65e2d"
             }
         ]
-    ]
+    ],
+    "aliases": {
+        "interface_index": {
+            "type": "u32"
+        }
+    }
 }
index 6ab79d3..68a8b44 100644 (file)
@@ -5,9 +5,10 @@
  Package interfaces is a generated from VPP binary API module 'interface'.
 
  It contains following objects:
-        45 messages
+        51 messages
          3 types
-        22 services
+         1 alias
+        25 services
 
 */
 package interfaces
@@ -21,22 +22,145 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "create_subif": {
+//             "reply": "create_subif_reply"
+//         },
+//         "sw_interface_set_ip_directed_broadcast": {
+//             "reply": "sw_interface_set_ip_directed_broadcast_reply"
+//         },
+//         "delete_subif": {
+//             "reply": "delete_subif_reply"
+//         },
+//         "sw_interface_get_mac_address": {
+//             "reply": "sw_interface_get_mac_address_reply"
+//         },
+//         "sw_interface_tag_add_del": {
+//             "reply": "sw_interface_tag_add_del_reply"
+//         },
+//         "collect_detailed_interface_stats": {
+//             "reply": "collect_detailed_interface_stats_reply"
+//         },
+//         "sw_interface_dump": {
+//             "reply": "sw_interface_details",
+//             "stream": true
+//         },
+//         "sw_interface_set_rx_placement": {
+//             "reply": "sw_interface_set_rx_placement_reply"
+//         },
+//         "sw_interface_add_del_address": {
+//             "reply": "sw_interface_add_del_address_reply"
+//         },
+//         "sw_interface_get_table": {
+//             "reply": "sw_interface_get_table_reply"
+//         },
+//         "interface_name_renumber": {
+//             "reply": "interface_name_renumber_reply"
+//         },
+//         "create_loopback_instance": {
+//             "reply": "create_loopback_instance_reply"
+//         },
+//         "sw_interface_set_mtu": {
+//             "reply": "sw_interface_set_mtu_reply"
+//         },
+//         "want_interface_events": {
+//             "reply": "want_interface_events_reply",
+//             "events": [
+//                 "sw_interface_event"
+//             ]
+//         },
+//         "create_loopback": {
+//             "reply": "create_loopback_reply"
+//         },
+//         "sw_interface_clear_stats": {
+//             "reply": "sw_interface_clear_stats_reply"
+//         },
+//         "hw_interface_set_mtu": {
+//             "reply": "hw_interface_set_mtu_reply"
+//         },
+//         "sw_interface_set_mac_address": {
+//             "reply": "sw_interface_set_mac_address_reply"
+//         },
+//         "sw_interface_set_unnumbered": {
+//             "reply": "sw_interface_set_unnumbered_reply"
+//         },
+//         "sw_interface_rx_placement_dump": {
+//             "reply": "sw_interface_rx_placement_details",
+//             "stream": true
+//         },
+//         "sw_interface_set_flags": {
+//             "reply": "sw_interface_set_flags_reply"
+//         },
+//         "delete_loopback": {
+//             "reply": "delete_loopback_reply"
+//         },
+//         "sw_interface_set_rx_mode": {
+//             "reply": "sw_interface_set_rx_mode_reply"
+//         },
+//         "create_vlan_subif": {
+//             "reply": "create_vlan_subif_reply"
+//         },
+//         "sw_interface_set_table": {
+//             "reply": "sw_interface_set_table_reply"
+//         }
+//     },
+//
+type Services interface {
+       DumpSwInterface(*SwInterfaceDump) ([]*SwInterfaceDetails, error)
+       DumpSwInterfaceRxPlacement(*SwInterfaceRxPlacementDump) ([]*SwInterfaceRxPlacementDetails, error)
+       CollectDetailedInterfaceStats(*CollectDetailedInterfaceStats) (*CollectDetailedInterfaceStatsReply, error)
+       CreateLoopback(*CreateLoopback) (*CreateLoopbackReply, error)
+       CreateLoopbackInstance(*CreateLoopbackInstance) (*CreateLoopbackInstanceReply, error)
+       CreateSubif(*CreateSubif) (*CreateSubifReply, error)
+       CreateVlanSubif(*CreateVlanSubif) (*CreateVlanSubifReply, error)
+       DeleteLoopback(*DeleteLoopback) (*DeleteLoopbackReply, error)
+       DeleteSubif(*DeleteSubif) (*DeleteSubifReply, error)
+       HwInterfaceSetMtu(*HwInterfaceSetMtu) (*HwInterfaceSetMtuReply, error)
+       InterfaceNameRenumber(*InterfaceNameRenumber) (*InterfaceNameRenumberReply, error)
+       SwInterfaceAddDelAddress(*SwInterfaceAddDelAddress) (*SwInterfaceAddDelAddressReply, error)
+       SwInterfaceClearStats(*SwInterfaceClearStats) (*SwInterfaceClearStatsReply, error)
+       SwInterfaceGetMacAddress(*SwInterfaceGetMacAddress) (*SwInterfaceGetMacAddressReply, error)
+       SwInterfaceGetTable(*SwInterfaceGetTable) (*SwInterfaceGetTableReply, error)
+       SwInterfaceSetFlags(*SwInterfaceSetFlags) (*SwInterfaceSetFlagsReply, error)
+       SwInterfaceSetIPDirectedBroadcast(*SwInterfaceSetIPDirectedBroadcast) (*SwInterfaceSetIPDirectedBroadcastReply, error)
+       SwInterfaceSetMacAddress(*SwInterfaceSetMacAddress) (*SwInterfaceSetMacAddressReply, error)
+       SwInterfaceSetMtu(*SwInterfaceSetMtu) (*SwInterfaceSetMtuReply, error)
+       SwInterfaceSetRxMode(*SwInterfaceSetRxMode) (*SwInterfaceSetRxModeReply, error)
+       SwInterfaceSetRxPlacement(*SwInterfaceSetRxPlacement) (*SwInterfaceSetRxPlacementReply, error)
+       SwInterfaceSetTable(*SwInterfaceSetTable) (*SwInterfaceSetTableReply, error)
+       SwInterfaceSetUnnumbered(*SwInterfaceSetUnnumbered) (*SwInterfaceSetUnnumberedReply, error)
+       SwInterfaceTagAddDel(*SwInterfaceTagAddDel) (*SwInterfaceTagAddDelReply, error)
+       WantInterfaceEvents(*WantInterfaceEvents) (*WantInterfaceEventsReply, error)
+}
+
+/* Aliases */
+
+// InterfaceIndex represents VPP binary API alias 'interface_index':
+//
+//     "interface_index": {
+//         "type": "u32"
+//     }
+//
+type InterfaceIndex uint32
+
 /* Types */
 
-// VlibCounter represents the VPP binary API type 'vlib_counter'.
-//
-//            "vlib_counter",
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0xce2325a2"
-//            }
+// VlibCounter represents VPP binary API type 'vlib_counter':
+//
+//     "vlib_counter",
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0xce2325a2"
+//     }
 //
 type VlibCounter struct {
        Packets uint64
@@ -50,80 +174,80 @@ func (*VlibCounter) GetCrcString() string {
        return "ce2325a2"
 }
 
-// VnetCombinedCounter represents the VPP binary API type 'vnet_combined_counter'.
-//
-//            "vnet_combined_counter",
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u64",
-//                "rx_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_bytes"
-//            ],
-//            [
-//                "u64",
-//                "rx_unicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_unicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "rx_multicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_multicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "rx_broadcast_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_broadcast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_unicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_unicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_multicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_multicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_broadcast_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_broadcast_bytes"
-//            ],
-//            {
-//                "crc": "0x20905ca4"
-//            }
+// VnetCombinedCounter represents VPP binary API type 'vnet_combined_counter':
+//
+//     "vnet_combined_counter",
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u64",
+//         "rx_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_bytes"
+//     ],
+//     [
+//         "u64",
+//         "rx_unicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_unicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "rx_multicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_multicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "rx_broadcast_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_broadcast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_unicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_unicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_multicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_multicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_broadcast_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_broadcast_bytes"
+//     ],
+//     {
+//         "crc": "0x20905ca4"
+//     }
 //
 type VnetCombinedCounter struct {
        SwIfIndex          uint32
@@ -152,52 +276,52 @@ func (*VnetCombinedCounter) GetCrcString() string {
        return "20905ca4"
 }
 
-// VnetSimpleCounter represents the VPP binary API type 'vnet_simple_counter'.
-//
-//            "vnet_simple_counter",
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u64",
-//                "drop"
-//            ],
-//            [
-//                "u64",
-//                "punt"
-//            ],
-//            [
-//                "u64",
-//                "rx_ip4"
-//            ],
-//            [
-//                "u64",
-//                "rx_ip6"
-//            ],
-//            [
-//                "u64",
-//                "rx_no_buffer"
-//            ],
-//            [
-//                "u64",
-//                "rx_miss"
-//            ],
-//            [
-//                "u64",
-//                "rx_error"
-//            ],
-//            [
-//                "u64",
-//                "tx_error"
-//            ],
-//            [
-//                "u64",
-//                "rx_mpls"
-//            ],
-//            {
-//                "crc": "0x8bd65e2d"
-//            }
+// VnetSimpleCounter represents VPP binary API type 'vnet_simple_counter':
+//
+//     "vnet_simple_counter",
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u64",
+//         "drop"
+//     ],
+//     [
+//         "u64",
+//         "punt"
+//     ],
+//     [
+//         "u64",
+//         "rx_ip4"
+//     ],
+//     [
+//         "u64",
+//         "rx_ip6"
+//     ],
+//     [
+//         "u64",
+//         "rx_no_buffer"
+//     ],
+//     [
+//         "u64",
+//         "rx_miss"
+//     ],
+//     [
+//         "u64",
+//         "rx_error"
+//     ],
+//     [
+//         "u64",
+//         "tx_error"
+//     ],
+//     [
+//         "u64",
+//         "rx_mpls"
+//     ],
+//     {
+//         "crc": "0x8bd65e2d"
+//     }
 //
 type VnetSimpleCounter struct {
        SwIfIndex  uint32
@@ -221,32 +345,32 @@ func (*VnetSimpleCounter) GetCrcString() string {
 
 /* Messages */
 
-// SwInterfaceSetFlags represents the VPP binary API message 'sw_interface_set_flags'.
-//
-//            "sw_interface_set_flags",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "admin_up_down"
-//            ],
-//            {
-//                "crc": "0x555485f5"
-//            }
+// SwInterfaceSetFlags represents VPP binary API message 'sw_interface_set_flags':
+//
+//     "sw_interface_set_flags",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "admin_up_down"
+//     ],
+//     {
+//         "crc": "0x555485f5"
+//     }
 //
 type SwInterfaceSetFlags struct {
        SwIfIndex   uint32
@@ -263,24 +387,24 @@ func (*SwInterfaceSetFlags) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceSetFlagsReply represents the VPP binary API message 'sw_interface_set_flags_reply'.
-//
-//            "sw_interface_set_flags_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceSetFlagsReply represents VPP binary API message 'sw_interface_set_flags_reply':
+//
+//     "sw_interface_set_flags_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceSetFlagsReply struct {
        Retval int32
@@ -296,32 +420,32 @@ func (*SwInterfaceSetFlagsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// HwInterfaceSetMtu represents the VPP binary API message 'hw_interface_set_mtu'.
-//
-//            "hw_interface_set_mtu",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u16",
-//                "mtu"
-//            ],
-//            {
-//                "crc": "0x132da1e7"
-//            }
+// HwInterfaceSetMtu represents VPP binary API message 'hw_interface_set_mtu':
+//
+//     "hw_interface_set_mtu",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u16",
+//         "mtu"
+//     ],
+//     {
+//         "crc": "0x132da1e7"
+//     }
 //
 type HwInterfaceSetMtu struct {
        SwIfIndex uint32
@@ -338,24 +462,24 @@ func (*HwInterfaceSetMtu) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// HwInterfaceSetMtuReply represents the VPP binary API message 'hw_interface_set_mtu_reply'.
-//
-//            "hw_interface_set_mtu_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// HwInterfaceSetMtuReply represents VPP binary API message 'hw_interface_set_mtu_reply':
+//
+//     "hw_interface_set_mtu_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type HwInterfaceSetMtuReply struct {
        Retval int32
@@ -371,33 +495,33 @@ func (*HwInterfaceSetMtuReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceSetMtu represents the VPP binary API message 'sw_interface_set_mtu'.
-//
-//            "sw_interface_set_mtu",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "mtu",
-//                4
-//            ],
-//            {
-//                "crc": "0xd0008db8"
-//            }
+// SwInterfaceSetMtu represents VPP binary API message 'sw_interface_set_mtu':
+//
+//     "sw_interface_set_mtu",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "mtu",
+//         4
+//     ],
+//     {
+//         "crc": "0xd0008db8"
+//     }
 //
 type SwInterfaceSetMtu struct {
        SwIfIndex uint32
@@ -414,24 +538,24 @@ func (*SwInterfaceSetMtu) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceSetMtuReply represents the VPP binary API message 'sw_interface_set_mtu_reply'.
-//
-//            "sw_interface_set_mtu_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceSetMtuReply represents VPP binary API message 'sw_interface_set_mtu_reply':
+//
+//     "sw_interface_set_mtu_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceSetMtuReply struct {
        Retval int32
@@ -447,40 +571,115 @@ func (*SwInterfaceSetMtuReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceEvent represents the VPP binary API message 'sw_interface_event'.
-//
-//            "sw_interface_event",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "admin_up_down"
-//            ],
-//            [
-//                "u8",
-//                "link_up_down"
-//            ],
-//            [
-//                "u8",
-//                "deleted"
-//            ],
-//            {
-//                "crc": "0xbf9938e4"
-//            }
+// SwInterfaceSetIPDirectedBroadcast represents VPP binary API message 'sw_interface_set_ip_directed_broadcast':
+//
+//     "sw_interface_set_ip_directed_broadcast",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "enable"
+//     ],
+//     {
+//         "crc": "0xa36fadc0"
+//     }
+//
+type SwInterfaceSetIPDirectedBroadcast struct {
+       SwIfIndex uint32
+       Enable    uint8
+}
+
+func (*SwInterfaceSetIPDirectedBroadcast) GetMessageName() string {
+       return "sw_interface_set_ip_directed_broadcast"
+}
+func (*SwInterfaceSetIPDirectedBroadcast) GetCrcString() string {
+       return "a36fadc0"
+}
+func (*SwInterfaceSetIPDirectedBroadcast) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// SwInterfaceSetIPDirectedBroadcastReply represents VPP binary API message 'sw_interface_set_ip_directed_broadcast_reply':
+//
+//     "sw_interface_set_ip_directed_broadcast_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type SwInterfaceSetIPDirectedBroadcastReply struct {
+       Retval int32
+}
+
+func (*SwInterfaceSetIPDirectedBroadcastReply) GetMessageName() string {
+       return "sw_interface_set_ip_directed_broadcast_reply"
+}
+func (*SwInterfaceSetIPDirectedBroadcastReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*SwInterfaceSetIPDirectedBroadcastReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// SwInterfaceEvent represents VPP binary API message 'sw_interface_event':
+//
+//     "sw_interface_event",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "admin_up_down"
+//     ],
+//     [
+//         "u8",
+//         "link_up_down"
+//     ],
+//     [
+//         "u8",
+//         "deleted"
+//     ],
+//     {
+//         "crc": "0xbf9938e4"
+//     }
 //
 type SwInterfaceEvent struct {
        PID         uint32
@@ -500,32 +699,32 @@ func (*SwInterfaceEvent) GetMessageType() api.MessageType {
        return api.EventMessage
 }
 
-// WantInterfaceEvents represents the VPP binary API message 'want_interface_events'.
-//
-//            "want_interface_events",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantInterfaceEvents represents VPP binary API message 'want_interface_events':
+//
+//     "want_interface_events",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantInterfaceEvents struct {
        EnableDisable uint32
@@ -542,24 +741,24 @@ func (*WantInterfaceEvents) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantInterfaceEventsReply represents the VPP binary API message 'want_interface_events_reply'.
-//
-//            "want_interface_events_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantInterfaceEventsReply represents VPP binary API message 'want_interface_events_reply':
+//
+//     "want_interface_events_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantInterfaceEventsReply struct {
        Retval int32
@@ -575,150 +774,150 @@ func (*WantInterfaceEventsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceDetails represents the VPP binary API message 'sw_interface_details'.
-//
-//            "sw_interface_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "sup_sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "l2_address_length"
-//            ],
-//            [
-//                "u8",
-//                "l2_address",
-//                8
-//            ],
-//            [
-//                "u8",
-//                "interface_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "admin_up_down"
-//            ],
-//            [
-//                "u8",
-//                "link_up_down"
-//            ],
-//            [
-//                "u8",
-//                "link_duplex"
-//            ],
-//            [
-//                "u8",
-//                "link_speed"
-//            ],
-//            [
-//                "u16",
-//                "link_mtu"
-//            ],
-//            [
-//                "u32",
-//                "mtu",
-//                4
-//            ],
-//            [
-//                "u32",
-//                "sub_id"
-//            ],
-//            [
-//                "u8",
-//                "sub_dot1ad"
-//            ],
-//            [
-//                "u8",
-//                "sub_dot1ah"
-//            ],
-//            [
-//                "u8",
-//                "sub_number_of_tags"
-//            ],
-//            [
-//                "u16",
-//                "sub_outer_vlan_id"
-//            ],
-//            [
-//                "u16",
-//                "sub_inner_vlan_id"
-//            ],
-//            [
-//                "u8",
-//                "sub_exact_match"
-//            ],
-//            [
-//                "u8",
-//                "sub_default"
-//            ],
-//            [
-//                "u8",
-//                "sub_outer_vlan_id_any"
-//            ],
-//            [
-//                "u8",
-//                "sub_inner_vlan_id_any"
-//            ],
-//            [
-//                "u32",
-//                "vtr_op"
-//            ],
-//            [
-//                "u32",
-//                "vtr_push_dot1q"
-//            ],
-//            [
-//                "u32",
-//                "vtr_tag1"
-//            ],
-//            [
-//                "u32",
-//                "vtr_tag2"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            [
-//                "u16",
-//                "outer_tag"
-//            ],
-//            [
-//                "u8",
-//                "b_dmac",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "b_smac",
-//                6
-//            ],
-//            [
-//                "u16",
-//                "b_vlanid"
-//            ],
-//            [
-//                "u32",
-//                "i_sid"
-//            ],
-//            {
-//                "crc": "0x09b4b510"
-//            }
+// SwInterfaceDetails represents VPP binary API message 'sw_interface_details':
+//
+//     "sw_interface_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "sup_sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "l2_address_length"
+//     ],
+//     [
+//         "u8",
+//         "l2_address",
+//         8
+//     ],
+//     [
+//         "u8",
+//         "interface_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "admin_up_down"
+//     ],
+//     [
+//         "u8",
+//         "link_up_down"
+//     ],
+//     [
+//         "u8",
+//         "link_duplex"
+//     ],
+//     [
+//         "u32",
+//         "link_speed"
+//     ],
+//     [
+//         "u16",
+//         "link_mtu"
+//     ],
+//     [
+//         "u32",
+//         "mtu",
+//         4
+//     ],
+//     [
+//         "u32",
+//         "sub_id"
+//     ],
+//     [
+//         "u8",
+//         "sub_dot1ad"
+//     ],
+//     [
+//         "u8",
+//         "sub_dot1ah"
+//     ],
+//     [
+//         "u8",
+//         "sub_number_of_tags"
+//     ],
+//     [
+//         "u16",
+//         "sub_outer_vlan_id"
+//     ],
+//     [
+//         "u16",
+//         "sub_inner_vlan_id"
+//     ],
+//     [
+//         "u8",
+//         "sub_exact_match"
+//     ],
+//     [
+//         "u8",
+//         "sub_default"
+//     ],
+//     [
+//         "u8",
+//         "sub_outer_vlan_id_any"
+//     ],
+//     [
+//         "u8",
+//         "sub_inner_vlan_id_any"
+//     ],
+//     [
+//         "u32",
+//         "vtr_op"
+//     ],
+//     [
+//         "u32",
+//         "vtr_push_dot1q"
+//     ],
+//     [
+//         "u32",
+//         "vtr_tag1"
+//     ],
+//     [
+//         "u32",
+//         "vtr_tag2"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     [
+//         "u16",
+//         "outer_tag"
+//     ],
+//     [
+//         "u8",
+//         "b_dmac",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "b_smac",
+//         6
+//     ],
+//     [
+//         "u16",
+//         "b_vlanid"
+//     ],
+//     [
+//         "u32",
+//         "i_sid"
+//     ],
+//     {
+//         "crc": "0xe4ee7eb6"
+//     }
 //
 type SwInterfaceDetails struct {
        SwIfIndex         uint32
@@ -729,7 +928,7 @@ type SwInterfaceDetails struct {
        AdminUpDown       uint8
        LinkUpDown        uint8
        LinkDuplex        uint8
-       LinkSpeed         uint8
+       LinkSpeed         uint32
        LinkMtu           uint16
        Mtu               []uint32 `struc:"[4]uint32"`
        SubID             uint32
@@ -758,39 +957,39 @@ func (*SwInterfaceDetails) GetMessageName() string {
        return "sw_interface_details"
 }
 func (*SwInterfaceDetails) GetCrcString() string {
-       return "09b4b510"
+       return "e4ee7eb6"
 }
 func (*SwInterfaceDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceDump represents the VPP binary API message 'sw_interface_dump'.
-//
-//            "sw_interface_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "name_filter_valid"
-//            ],
-//            [
-//                "u8",
-//                "name_filter",
-//                49
-//            ],
-//            {
-//                "crc": "0x63f5e3b7"
-//            }
+// SwInterfaceDump represents VPP binary API message 'sw_interface_dump':
+//
+//     "sw_interface_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "name_filter_valid"
+//     ],
+//     [
+//         "u8",
+//         "name_filter",
+//         49
+//     ],
+//     {
+//         "crc": "0x63f5e3b7"
+//     }
 //
 type SwInterfaceDump struct {
        NameFilterValid uint8
@@ -807,49 +1006,49 @@ func (*SwInterfaceDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceAddDelAddress represents the VPP binary API message 'sw_interface_add_del_address'.
-//
-//            "sw_interface_add_del_address",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "del_all"
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            {
-//                "crc": "0x7b583179"
-//            }
+// SwInterfaceAddDelAddress represents VPP binary API message 'sw_interface_add_del_address':
+//
+//     "sw_interface_add_del_address",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "del_all"
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         16
+//     ],
+//     {
+//         "crc": "0x7b583179"
+//     }
 //
 type SwInterfaceAddDelAddress struct {
        SwIfIndex     uint32
@@ -870,24 +1069,24 @@ func (*SwInterfaceAddDelAddress) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceAddDelAddressReply represents the VPP binary API message 'sw_interface_add_del_address_reply'.
-//
-//            "sw_interface_add_del_address_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceAddDelAddressReply represents VPP binary API message 'sw_interface_add_del_address_reply':
+//
+//     "sw_interface_add_del_address_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceAddDelAddressReply struct {
        Retval int32
@@ -903,36 +1102,36 @@ func (*SwInterfaceAddDelAddressReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceSetTable represents the VPP binary API message 'sw_interface_set_table'.
-//
-//            "sw_interface_set_table",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            {
-//                "crc": "0xacb25d89"
-//            }
+// SwInterfaceSetTable represents VPP binary API message 'sw_interface_set_table':
+//
+//     "sw_interface_set_table",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     {
+//         "crc": "0xacb25d89"
+//     }
 //
 type SwInterfaceSetTable struct {
        SwIfIndex uint32
@@ -950,24 +1149,24 @@ func (*SwInterfaceSetTable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceSetTableReply represents the VPP binary API message 'sw_interface_set_table_reply'.
-//
-//            "sw_interface_set_table_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceSetTableReply represents VPP binary API message 'sw_interface_set_table_reply':
+//
+//     "sw_interface_set_table_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceSetTableReply struct {
        Retval int32
@@ -983,32 +1182,32 @@ func (*SwInterfaceSetTableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceGetTable represents the VPP binary API message 'sw_interface_get_table'.
-//
-//            "sw_interface_get_table",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0x6b7bcd0a"
-//            }
+// SwInterfaceGetTable represents VPP binary API message 'sw_interface_get_table':
+//
+//     "sw_interface_get_table",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x6b7bcd0a"
+//     }
 //
 type SwInterfaceGetTable struct {
        SwIfIndex uint32
@@ -1025,28 +1224,28 @@ func (*SwInterfaceGetTable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceGetTableReply represents the VPP binary API message 'sw_interface_get_table_reply'.
-//
-//            "sw_interface_get_table_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            {
-//                "crc": "0xa6eb0109"
-//            }
+// SwInterfaceGetTableReply represents VPP binary API message 'sw_interface_get_table_reply':
+//
+//     "sw_interface_get_table_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     {
+//         "crc": "0xa6eb0109"
+//     }
 //
 type SwInterfaceGetTableReply struct {
        Retval int32
@@ -1063,36 +1262,36 @@ func (*SwInterfaceGetTableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceSetUnnumbered represents the VPP binary API message 'sw_interface_set_unnumbered'.
-//
-//            "sw_interface_set_unnumbered",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "unnumbered_sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            {
-//                "crc": "0xa2c1bbda"
-//            }
+// SwInterfaceSetUnnumbered represents VPP binary API message 'sw_interface_set_unnumbered':
+//
+//     "sw_interface_set_unnumbered",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "unnumbered_sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     {
+//         "crc": "0xa2c1bbda"
+//     }
 //
 type SwInterfaceSetUnnumbered struct {
        SwIfIndex           uint32
@@ -1110,24 +1309,24 @@ func (*SwInterfaceSetUnnumbered) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceSetUnnumberedReply represents the VPP binary API message 'sw_interface_set_unnumbered_reply'.
-//
-//            "sw_interface_set_unnumbered_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceSetUnnumberedReply represents VPP binary API message 'sw_interface_set_unnumbered_reply':
+//
+//     "sw_interface_set_unnumbered_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceSetUnnumberedReply struct {
        Retval int32
@@ -1143,28 +1342,28 @@ func (*SwInterfaceSetUnnumberedReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceClearStats represents the VPP binary API message 'sw_interface_clear_stats'.
-//
-//            "sw_interface_clear_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// SwInterfaceClearStats represents VPP binary API message 'sw_interface_clear_stats':
+//
+//     "sw_interface_clear_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type SwInterfaceClearStats struct {
        SwIfIndex uint32
@@ -1180,24 +1379,24 @@ func (*SwInterfaceClearStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceClearStatsReply represents the VPP binary API message 'sw_interface_clear_stats_reply'.
-//
-//            "sw_interface_clear_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceClearStatsReply represents VPP binary API message 'sw_interface_clear_stats_reply':
+//
+//     "sw_interface_clear_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceClearStatsReply struct {
        Retval int32
@@ -1213,37 +1412,37 @@ func (*SwInterfaceClearStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceTagAddDel represents the VPP binary API message 'sw_interface_tag_add_del'.
-//
-//            "sw_interface_tag_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            {
-//                "crc": "0x14cc636c"
-//            }
+// SwInterfaceTagAddDel represents VPP binary API message 'sw_interface_tag_add_del':
+//
+//     "sw_interface_tag_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     {
+//         "crc": "0x14cc636c"
+//     }
 //
 type SwInterfaceTagAddDel struct {
        IsAdd     uint8
@@ -1261,24 +1460,24 @@ func (*SwInterfaceTagAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceTagAddDelReply represents the VPP binary API message 'sw_interface_tag_add_del_reply'.
-//
-//            "sw_interface_tag_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceTagAddDelReply represents VPP binary API message 'sw_interface_tag_add_del_reply':
+//
+//     "sw_interface_tag_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceTagAddDelReply struct {
        Retval int32
@@ -1294,33 +1493,33 @@ func (*SwInterfaceTagAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceSetMacAddress represents the VPP binary API message 'sw_interface_set_mac_address'.
-//
-//            "sw_interface_set_mac_address",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            {
-//                "crc": "0xeed5dfca"
-//            }
+// SwInterfaceSetMacAddress represents VPP binary API message 'sw_interface_set_mac_address':
+//
+//     "sw_interface_set_mac_address",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     {
+//         "crc": "0xeed5dfca"
+//     }
 //
 type SwInterfaceSetMacAddress struct {
        SwIfIndex  uint32
@@ -1337,24 +1536,24 @@ func (*SwInterfaceSetMacAddress) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceSetMacAddressReply represents the VPP binary API message 'sw_interface_set_mac_address_reply'.
-//
-//            "sw_interface_set_mac_address_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceSetMacAddressReply represents VPP binary API message 'sw_interface_set_mac_address_reply':
+//
+//     "sw_interface_set_mac_address_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceSetMacAddressReply struct {
        Retval int32
@@ -1370,28 +1569,28 @@ func (*SwInterfaceSetMacAddressReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceGetMacAddress represents the VPP binary API message 'sw_interface_get_mac_address'.
-//
-//            "sw_interface_get_mac_address",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// SwInterfaceGetMacAddress represents VPP binary API message 'sw_interface_get_mac_address':
+//
+//     "sw_interface_get_mac_address",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type SwInterfaceGetMacAddress struct {
        SwIfIndex uint32
@@ -1407,29 +1606,29 @@ func (*SwInterfaceGetMacAddress) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceGetMacAddressReply represents the VPP binary API message 'sw_interface_get_mac_address_reply'.
-//
-//            "sw_interface_get_mac_address_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            {
-//                "crc": "0x8ea538d3"
-//            }
+// SwInterfaceGetMacAddressReply represents VPP binary API message 'sw_interface_get_mac_address_reply':
+//
+//     "sw_interface_get_mac_address_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     {
+//         "crc": "0x8ea538d3"
+//     }
 //
 type SwInterfaceGetMacAddressReply struct {
        Retval     int32
@@ -1446,40 +1645,40 @@ func (*SwInterfaceGetMacAddressReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceSetRxMode represents the VPP binary API message 'sw_interface_set_rx_mode'.
-//
-//            "sw_interface_set_rx_mode",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "queue_id_valid"
-//            ],
-//            [
-//                "u32",
-//                "queue_id"
-//            ],
-//            [
-//                "u8",
-//                "mode"
-//            ],
-//            {
-//                "crc": "0x2a1cc58c"
-//            }
+// SwInterfaceSetRxMode represents VPP binary API message 'sw_interface_set_rx_mode':
+//
+//     "sw_interface_set_rx_mode",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "queue_id_valid"
+//     ],
+//     [
+//         "u32",
+//         "queue_id"
+//     ],
+//     [
+//         "u8",
+//         "mode"
+//     ],
+//     {
+//         "crc": "0x2a1cc58c"
+//     }
 //
 type SwInterfaceSetRxMode struct {
        SwIfIndex    uint32
@@ -1498,24 +1697,24 @@ func (*SwInterfaceSetRxMode) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceSetRxModeReply represents the VPP binary API message 'sw_interface_set_rx_mode_reply'.
-//
-//            "sw_interface_set_rx_mode_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceSetRxModeReply represents VPP binary API message 'sw_interface_set_rx_mode_reply':
+//
+//     "sw_interface_set_rx_mode_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceSetRxModeReply struct {
        Retval int32
@@ -1531,32 +1730,206 @@ func (*SwInterfaceSetRxModeReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// InterfaceNameRenumber represents the VPP binary API message 'interface_name_renumber'.
-//
-//            "interface_name_renumber",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "new_show_dev_instance"
-//            ],
-//            {
-//                "crc": "0x39194269"
-//            }
+// SwInterfaceSetRxPlacement represents VPP binary API message 'sw_interface_set_rx_placement':
+//
+//     "sw_interface_set_rx_placement",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "queue_id"
+//     ],
+//     [
+//         "u32",
+//         "worker_id"
+//     ],
+//     [
+//         "u8",
+//         "is_main"
+//     ],
+//     {
+//         "crc": "0x4ef4377d"
+//     }
+//
+type SwInterfaceSetRxPlacement struct {
+       SwIfIndex uint32
+       QueueID   uint32
+       WorkerID  uint32
+       IsMain    uint8
+}
+
+func (*SwInterfaceSetRxPlacement) GetMessageName() string {
+       return "sw_interface_set_rx_placement"
+}
+func (*SwInterfaceSetRxPlacement) GetCrcString() string {
+       return "4ef4377d"
+}
+func (*SwInterfaceSetRxPlacement) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// SwInterfaceSetRxPlacementReply represents VPP binary API message 'sw_interface_set_rx_placement_reply':
+//
+//     "sw_interface_set_rx_placement_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type SwInterfaceSetRxPlacementReply struct {
+       Retval int32
+}
+
+func (*SwInterfaceSetRxPlacementReply) GetMessageName() string {
+       return "sw_interface_set_rx_placement_reply"
+}
+func (*SwInterfaceSetRxPlacementReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*SwInterfaceSetRxPlacementReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// SwInterfaceRxPlacementDump represents VPP binary API message 'sw_interface_rx_placement_dump':
+//
+//     "sw_interface_rx_placement_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
+//
+type SwInterfaceRxPlacementDump struct {
+       SwIfIndex uint32
+}
+
+func (*SwInterfaceRxPlacementDump) GetMessageName() string {
+       return "sw_interface_rx_placement_dump"
+}
+func (*SwInterfaceRxPlacementDump) GetCrcString() string {
+       return "529cb13f"
+}
+func (*SwInterfaceRxPlacementDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// SwInterfaceRxPlacementDetails represents VPP binary API message 'sw_interface_rx_placement_details':
+//
+//     "sw_interface_rx_placement_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "queue_id"
+//     ],
+//     [
+//         "u32",
+//         "worker_id"
+//     ],
+//     [
+//         "u8",
+//         "mode"
+//     ],
+//     {
+//         "crc": "0x0e9e33f4"
+//     }
+//
+type SwInterfaceRxPlacementDetails struct {
+       SwIfIndex uint32
+       QueueID   uint32
+       WorkerID  uint32
+       Mode      uint8
+}
+
+func (*SwInterfaceRxPlacementDetails) GetMessageName() string {
+       return "sw_interface_rx_placement_details"
+}
+func (*SwInterfaceRxPlacementDetails) GetCrcString() string {
+       return "0e9e33f4"
+}
+func (*SwInterfaceRxPlacementDetails) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// InterfaceNameRenumber represents VPP binary API message 'interface_name_renumber':
+//
+//     "interface_name_renumber",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "new_show_dev_instance"
+//     ],
+//     {
+//         "crc": "0x39194269"
+//     }
 //
 type InterfaceNameRenumber struct {
        SwIfIndex          uint32
@@ -1573,24 +1946,24 @@ func (*InterfaceNameRenumber) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// InterfaceNameRenumberReply represents the VPP binary API message 'interface_name_renumber_reply'.
-//
-//            "interface_name_renumber_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// InterfaceNameRenumberReply represents VPP binary API message 'interface_name_renumber_reply':
+//
+//     "interface_name_renumber_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type InterfaceNameRenumberReply struct {
        Retval int32
@@ -1606,72 +1979,72 @@ func (*InterfaceNameRenumberReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// CreateSubif represents the VPP binary API message 'create_subif'.
-//
-//            "create_subif",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "sub_id"
-//            ],
-//            [
-//                "u8",
-//                "no_tags"
-//            ],
-//            [
-//                "u8",
-//                "one_tag"
-//            ],
-//            [
-//                "u8",
-//                "two_tags"
-//            ],
-//            [
-//                "u8",
-//                "dot1ad"
-//            ],
-//            [
-//                "u8",
-//                "exact_match"
-//            ],
-//            [
-//                "u8",
-//                "default_sub"
-//            ],
-//            [
-//                "u8",
-//                "outer_vlan_id_any"
-//            ],
-//            [
-//                "u8",
-//                "inner_vlan_id_any"
-//            ],
-//            [
-//                "u16",
-//                "outer_vlan_id"
-//            ],
-//            [
-//                "u16",
-//                "inner_vlan_id"
-//            ],
-//            {
-//                "crc": "0x86cfe408"
-//            }
+// CreateSubif represents VPP binary API message 'create_subif':
+//
+//     "create_subif",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "sub_id"
+//     ],
+//     [
+//         "u8",
+//         "no_tags"
+//     ],
+//     [
+//         "u8",
+//         "one_tag"
+//     ],
+//     [
+//         "u8",
+//         "two_tags"
+//     ],
+//     [
+//         "u8",
+//         "dot1ad"
+//     ],
+//     [
+//         "u8",
+//         "exact_match"
+//     ],
+//     [
+//         "u8",
+//         "default_sub"
+//     ],
+//     [
+//         "u8",
+//         "outer_vlan_id_any"
+//     ],
+//     [
+//         "u8",
+//         "inner_vlan_id_any"
+//     ],
+//     [
+//         "u16",
+//         "outer_vlan_id"
+//     ],
+//     [
+//         "u16",
+//         "inner_vlan_id"
+//     ],
+//     {
+//         "crc": "0x86cfe408"
+//     }
 //
 type CreateSubif struct {
        SwIfIndex      uint32
@@ -1698,28 +2071,28 @@ func (*CreateSubif) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// CreateSubifReply represents the VPP binary API message 'create_subif_reply'.
-//
-//            "create_subif_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+// CreateSubifReply represents VPP binary API message 'create_subif_reply':
+//
+//     "create_subif_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type CreateSubifReply struct {
        Retval    int32
@@ -1736,32 +2109,32 @@ func (*CreateSubifReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// CreateVlanSubif represents the VPP binary API message 'create_vlan_subif'.
-//
-//            "create_vlan_subif",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "vlan_id"
-//            ],
-//            {
-//                "crc": "0x70cadeda"
-//            }
+// CreateVlanSubif represents VPP binary API message 'create_vlan_subif':
+//
+//     "create_vlan_subif",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "vlan_id"
+//     ],
+//     {
+//         "crc": "0x70cadeda"
+//     }
 //
 type CreateVlanSubif struct {
        SwIfIndex uint32
@@ -1778,28 +2151,28 @@ func (*CreateVlanSubif) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// CreateVlanSubifReply represents the VPP binary API message 'create_vlan_subif_reply'.
-//
-//            "create_vlan_subif_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+// CreateVlanSubifReply represents VPP binary API message 'create_vlan_subif_reply':
+//
+//     "create_vlan_subif_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type CreateVlanSubifReply struct {
        Retval    int32
@@ -1816,28 +2189,28 @@ func (*CreateVlanSubifReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// DeleteSubif represents the VPP binary API message 'delete_subif'.
-//
-//            "delete_subif",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// DeleteSubif represents VPP binary API message 'delete_subif':
+//
+//     "delete_subif",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type DeleteSubif struct {
        SwIfIndex uint32
@@ -1853,24 +2226,24 @@ func (*DeleteSubif) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// DeleteSubifReply represents the VPP binary API message 'delete_subif_reply'.
-//
-//            "delete_subif_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// DeleteSubifReply represents VPP binary API message 'delete_subif_reply':
+//
+//     "delete_subif_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type DeleteSubifReply struct {
        Retval int32
@@ -1886,29 +2259,29 @@ func (*DeleteSubifReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// CreateLoopback represents the VPP binary API message 'create_loopback'.
-//
-//            "create_loopback",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            {
-//                "crc": "0x3b54129c"
-//            }
+// CreateLoopback represents VPP binary API message 'create_loopback':
+//
+//     "create_loopback",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     {
+//         "crc": "0x3b54129c"
+//     }
 //
 type CreateLoopback struct {
        MacAddress []byte `struc:"[6]byte"`
@@ -1924,28 +2297,28 @@ func (*CreateLoopback) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// CreateLoopbackReply represents the VPP binary API message 'create_loopback_reply'.
-//
-//            "create_loopback_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+// CreateLoopbackReply represents VPP binary API message 'create_loopback_reply':
+//
+//     "create_loopback_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type CreateLoopbackReply struct {
        Retval    int32
@@ -1962,37 +2335,37 @@ func (*CreateLoopbackReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// CreateLoopbackInstance represents the VPP binary API message 'create_loopback_instance'.
-//
-//            "create_loopback_instance",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "is_specified"
-//            ],
-//            [
-//                "u32",
-//                "user_instance"
-//            ],
-//            {
-//                "crc": "0x7bbd53b6"
-//            }
+// CreateLoopbackInstance represents VPP binary API message 'create_loopback_instance':
+//
+//     "create_loopback_instance",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "is_specified"
+//     ],
+//     [
+//         "u32",
+//         "user_instance"
+//     ],
+//     {
+//         "crc": "0x7bbd53b6"
+//     }
 //
 type CreateLoopbackInstance struct {
        MacAddress   []byte `struc:"[6]byte"`
@@ -2010,28 +2383,28 @@ func (*CreateLoopbackInstance) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// CreateLoopbackInstanceReply represents the VPP binary API message 'create_loopback_instance_reply'.
-//
-//            "create_loopback_instance_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+// CreateLoopbackInstanceReply represents VPP binary API message 'create_loopback_instance_reply':
+//
+//     "create_loopback_instance_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type CreateLoopbackInstanceReply struct {
        Retval    int32
@@ -2048,28 +2421,28 @@ func (*CreateLoopbackInstanceReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// DeleteLoopback represents the VPP binary API message 'delete_loopback'.
-//
-//            "delete_loopback",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// DeleteLoopback represents VPP binary API message 'delete_loopback':
+//
+//     "delete_loopback",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type DeleteLoopback struct {
        SwIfIndex uint32
@@ -2085,24 +2458,24 @@ func (*DeleteLoopback) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// DeleteLoopbackReply represents the VPP binary API message 'delete_loopback_reply'.
-//
-//            "delete_loopback_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// DeleteLoopbackReply represents VPP binary API message 'delete_loopback_reply':
+//
+//     "delete_loopback_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type DeleteLoopbackReply struct {
        Retval int32
@@ -2118,32 +2491,32 @@ func (*DeleteLoopbackReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// CollectDetailedInterfaceStats represents the VPP binary API message 'collect_detailed_interface_stats'.
-//
-//            "collect_detailed_interface_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "enable_disable"
-//            ],
-//            {
-//                "crc": "0x69d24598"
-//            }
+// CollectDetailedInterfaceStats represents VPP binary API message 'collect_detailed_interface_stats':
+//
+//     "collect_detailed_interface_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "enable_disable"
+//     ],
+//     {
+//         "crc": "0x69d24598"
+//     }
 //
 type CollectDetailedInterfaceStats struct {
        SwIfIndex     uint32
@@ -2160,24 +2533,24 @@ func (*CollectDetailedInterfaceStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// CollectDetailedInterfaceStatsReply represents the VPP binary API message 'collect_detailed_interface_stats_reply'.
-//
-//            "collect_detailed_interface_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// CollectDetailedInterfaceStatsReply represents VPP binary API message 'collect_detailed_interface_stats_reply':
+//
+//     "collect_detailed_interface_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type CollectDetailedInterfaceStatsReply struct {
        Retval int32
@@ -2193,33 +2566,6 @@ func (*CollectDetailedInterfaceStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-/* Services */
-
-type Services interface {
-       DumpSwInterface(*SwInterfaceDump) (*SwInterfaceDetails, error)
-       CollectDetailedInterfaceStats(*CollectDetailedInterfaceStats) (*CollectDetailedInterfaceStatsReply, error)
-       CreateLoopback(*CreateLoopback) (*CreateLoopbackReply, error)
-       CreateLoopbackInstance(*CreateLoopbackInstance) (*CreateLoopbackInstanceReply, error)
-       CreateSubif(*CreateSubif) (*CreateSubifReply, error)
-       CreateVlanSubif(*CreateVlanSubif) (*CreateVlanSubifReply, error)
-       DeleteLoopback(*DeleteLoopback) (*DeleteLoopbackReply, error)
-       DeleteSubif(*DeleteSubif) (*DeleteSubifReply, error)
-       HwInterfaceSetMtu(*HwInterfaceSetMtu) (*HwInterfaceSetMtuReply, error)
-       InterfaceNameRenumber(*InterfaceNameRenumber) (*InterfaceNameRenumberReply, error)
-       SwInterfaceAddDelAddress(*SwInterfaceAddDelAddress) (*SwInterfaceAddDelAddressReply, error)
-       SwInterfaceClearStats(*SwInterfaceClearStats) (*SwInterfaceClearStatsReply, error)
-       SwInterfaceGetMacAddress(*SwInterfaceGetMacAddress) (*SwInterfaceGetMacAddressReply, error)
-       SwInterfaceGetTable(*SwInterfaceGetTable) (*SwInterfaceGetTableReply, error)
-       SwInterfaceSetFlags(*SwInterfaceSetFlags) (*SwInterfaceSetFlagsReply, error)
-       SwInterfaceSetMacAddress(*SwInterfaceSetMacAddress) (*SwInterfaceSetMacAddressReply, error)
-       SwInterfaceSetMtu(*SwInterfaceSetMtu) (*SwInterfaceSetMtuReply, error)
-       SwInterfaceSetRxMode(*SwInterfaceSetRxMode) (*SwInterfaceSetRxModeReply, error)
-       SwInterfaceSetTable(*SwInterfaceSetTable) (*SwInterfaceSetTableReply, error)
-       SwInterfaceSetUnnumbered(*SwInterfaceSetUnnumbered) (*SwInterfaceSetUnnumberedReply, error)
-       SwInterfaceTagAddDel(*SwInterfaceTagAddDel) (*SwInterfaceTagAddDelReply, error)
-       WantInterfaceEvents(*WantInterfaceEvents) (*WantInterfaceEventsReply, error)
-}
-
 func init() {
        api.RegisterMessage((*SwInterfaceSetFlags)(nil), "interface.SwInterfaceSetFlags")
        api.RegisterMessage((*SwInterfaceSetFlagsReply)(nil), "interface.SwInterfaceSetFlagsReply")
@@ -2227,6 +2573,8 @@ func init() {
        api.RegisterMessage((*HwInterfaceSetMtuReply)(nil), "interface.HwInterfaceSetMtuReply")
        api.RegisterMessage((*SwInterfaceSetMtu)(nil), "interface.SwInterfaceSetMtu")
        api.RegisterMessage((*SwInterfaceSetMtuReply)(nil), "interface.SwInterfaceSetMtuReply")
+       api.RegisterMessage((*SwInterfaceSetIPDirectedBroadcast)(nil), "interface.SwInterfaceSetIPDirectedBroadcast")
+       api.RegisterMessage((*SwInterfaceSetIPDirectedBroadcastReply)(nil), "interface.SwInterfaceSetIPDirectedBroadcastReply")
        api.RegisterMessage((*SwInterfaceEvent)(nil), "interface.SwInterfaceEvent")
        api.RegisterMessage((*WantInterfaceEvents)(nil), "interface.WantInterfaceEvents")
        api.RegisterMessage((*WantInterfaceEventsReply)(nil), "interface.WantInterfaceEventsReply")
@@ -2250,6 +2598,10 @@ func init() {
        api.RegisterMessage((*SwInterfaceGetMacAddressReply)(nil), "interface.SwInterfaceGetMacAddressReply")
        api.RegisterMessage((*SwInterfaceSetRxMode)(nil), "interface.SwInterfaceSetRxMode")
        api.RegisterMessage((*SwInterfaceSetRxModeReply)(nil), "interface.SwInterfaceSetRxModeReply")
+       api.RegisterMessage((*SwInterfaceSetRxPlacement)(nil), "interface.SwInterfaceSetRxPlacement")
+       api.RegisterMessage((*SwInterfaceSetRxPlacementReply)(nil), "interface.SwInterfaceSetRxPlacementReply")
+       api.RegisterMessage((*SwInterfaceRxPlacementDump)(nil), "interface.SwInterfaceRxPlacementDump")
+       api.RegisterMessage((*SwInterfaceRxPlacementDetails)(nil), "interface.SwInterfaceRxPlacementDetails")
        api.RegisterMessage((*InterfaceNameRenumber)(nil), "interface.InterfaceNameRenumber")
        api.RegisterMessage((*InterfaceNameRenumberReply)(nil), "interface.InterfaceNameRenumberReply")
        api.RegisterMessage((*CreateSubif)(nil), "interface.CreateSubif")
index d9b4277..3983288 100644 (file)
                 "u32",
                 "count"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             [
                 "vl_api_fib_path_t",
                 "path",
                 "count"
             ],
             {
-                "crc": "0x99dfd73b"
+                "crc": "0xf6a2fab3"
             }
         ],
         [
                 "u32",
                 "count"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             [
                 "vl_api_fib_path_t",
                 "path",
                 "count"
             ],
             {
-                "crc": "0xabd0060e"
+                "crc": "0xef11e94d"
             }
         ],
         [
                 "u32",
                 "sw_if_index"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             [
                 "u8",
                 "is_static"
                 16
             ],
             {
-                "crc": "0x85e32a72"
+                "crc": "0xc7001770"
             }
         ],
         [
                 "i32",
                 "retval"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             {
-                "crc": "0xe8d4e804"
+                "crc": "0x1992deab"
             }
         ],
         [
                 "u8",
                 "reverse"
             ],
+            [
+                "u8",
+                "symmetric"
+            ],
             {
-                "crc": "0x32ebf737"
+                "crc": "0xa9084bfb"
             }
         ],
         [
                 "u16",
                 "_vl_msg_id"
             ],
-            [
-                "u32",
-                "client_index"
-            ],
             [
                 "u32",
                 "context"
                 16
             ],
             {
-                "crc": "0xd73bf1ab"
+                "crc": "0x6a47c974"
             }
         ],
         [
                 "crc": "0xe8d4e804"
             }
         ],
-        [
-            "sw_interface_ip6_set_link_local_address",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
-            [
-                "u32",
-                "client_index"
-            ],
-            [
-                "u32",
-                "context"
-            ],
-            [
-                "u32",
-                "sw_if_index"
-            ],
-            [
-                "u8",
-                "address",
-                16
-            ],
-            {
-                "crc": "0xd73bf1ab"
-            }
-        ],
-        [
-            "sw_interface_ip6_set_link_local_address_reply",
-            [
-                "u16",
-                "_vl_msg_id"
-            ],
-            [
-                "u32",
-                "context"
-            ],
-            [
-                "i32",
-                "retval"
-            ],
-            {
-                "crc": "0xe8d4e804"
-            }
-        ],
         [
             "ip_add_del_route",
             [
                 "i32",
                 "retval"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             {
-                "crc": "0xe8d4e804"
+                "crc": "0x1992deab"
             }
         ],
         [
                 "i32",
                 "retval"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             {
-                "crc": "0xe8d4e804"
+                "crc": "0x1992deab"
             }
         ],
         [
                 "u32",
                 "count"
             ],
+            [
+                "u32",
+                "stats_index"
+            ],
             [
                 "vl_api_fib_path_t",
                 "path",
                 "count"
             ],
             {
-                "crc": "0x5e530d5e"
+                "crc": "0x21329a12"
             }
         ],
         [
                 "u16",
                 "_vl_msg_id"
             ],
-            [
-                "u32",
-                "client_index"
-            ],
             [
                 "u32",
                 "context"
                 "is_ipv6"
             ],
             {
-                "crc": "0xbc7442f2"
+                "crc": "0x9bc25966"
             }
         ],
         [
                 "u16",
                 "_vl_msg_id"
             ],
-            [
-                "u32",
-                "client_index"
-            ],
             [
                 "u32",
                 "context"
                 "ip_sw_if_index"
             ],
             {
-                "crc": "0x05b717ca"
+                "crc": "0xae694cf4"
             }
         ],
         [
             ],
             [
                 "u32",
-                "sw_if_index"
+                "context"
             ],
             [
                 "u32",
-                "context"
+                "sw_if_index"
             ],
             [
                 "u8",
                 "is_ipv6"
             ],
             {
-                "crc": "0x452ffc5a"
+                "crc": "0x8bb37ec4"
             }
         ],
         [
                 "u16",
                 "_vl_msg_id"
             ],
-            [
-                "u32",
-                "client_index"
-            ],
             [
                 "u32",
                 "context"
                 256
             ],
             {
-                "crc": "0x791bbeab"
+                "crc": "0x3f5f03f5"
             }
         ],
         [
                 "u32",
                 "context"
             ],
+            [
+                "vl_api_punt_redirect_t",
+                "punt"
+            ],
+            [
+                "u8",
+                "is_add"
+            ],
+            {
+                "crc": "0xa953495b"
+            }
+        ],
+        [
+            "ip_punt_redirect_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
             [
                 "u32",
-                "rx_sw_if_index"
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "ip_punt_redirect_dump",
+            [
+                "u16",
+                "_vl_msg_id"
             ],
             [
                 "u32",
-                "tx_sw_if_index"
+                "client_index"
             ],
             [
-                "u8",
-                "is_add"
+                "u32",
+                "context"
             ],
             [
-                "u8",
-                "is_ip6"
+                "u32",
+                "sw_if_index"
             ],
             [
                 "u8",
-                "nh",
-                16
+                "is_ipv6"
             ],
             {
-                "crc": "0x996b6603"
+                "crc": "0x6b7bcd0a"
             }
         ],
         [
-            "ip_punt_redirect_reply",
+            "ip_punt_redirect_details",
             [
                 "u16",
                 "_vl_msg_id"
                 "context"
             ],
             [
-                "i32",
-                "retval"
+                "vl_api_punt_redirect_t",
+                "punt"
             ],
             {
-                "crc": "0xe8d4e804"
+                "crc": "0xa47f70da"
             }
         ],
         [
                 "crc": "0xe8d4e804"
             }
         ],
+        [
+            "ip_container_proxy_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "ip_container_proxy_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            [
+                "vl_api_prefix_t",
+                "prefix"
+            ],
+            {
+                "crc": "0xd528df63"
+            }
+        ],
         [
             "ip_source_and_port_range_check_add_del",
             [
                 "crc": "0xe8d4e804"
             }
         ],
+        [
+            "ip_source_check_interface_add_del",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u8",
+                "is_add"
+            ],
+            [
+                "u8",
+                "loose"
+            ],
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            {
+                "crc": "0x0a60152a"
+            }
+        ],
+        [
+            "ip_source_check_interface_add_del_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
         [
             "ip_scan_neighbor_enable_disable",
             [
                 "u16",
                 "_vl_msg_id"
             ],
-            [
-                "u32",
-                "client_index"
-            ],
             [
                 "u32",
                 "context"
                 "is_ip6"
             ],
             {
-                "crc": "0xd746fc57"
+                "crc": "0x1f90afd1"
             }
         ],
         [
             }
         ]
     ],
-    "vl_api_version": "0xff691c00",
+    "vl_api_version": "0x1eba4868",
     "unions": [
         [
             "address_union",
         ]
     ],
     "services": {
+        "ip_container_proxy_dump": {
+            "reply": "ip_container_proxy_details",
+            "stream": true
+        },
         "ip_address_dump": {
             "reply": "ip_address_details",
             "stream": true
         "ip6nd_send_router_solicitation": {
             "reply": "ip6nd_send_router_solicitation_reply"
         },
+        "ip_source_check_interface_add_del": {
+            "reply": "ip_source_check_interface_add_del_reply"
+        },
         "ip_table_add_del": {
             "reply": "ip_table_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"
-        },
         "mfib_signal_dump": {
             "reply": "mfib_signal_details",
             "stream": true
         },
+        "ip_punt_redirect_dump": {
+            "reply": "ip_punt_redirect_details",
+            "stream": true
+        },
         "ip_container_proxy_add_del": {
             "reply": "ip_container_proxy_add_del_reply"
         },
     ],
     "types": [
         [
-            "ip4_address",
+            "address",
             [
-                "u8",
-                "address",
-                4
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "vl_api_address_union_t",
+                "un"
             ],
             {
-                "crc": "0xfc4baa28"
+                "crc": "0x09f11671"
             }
         ],
         [
-            "ip6_address",
+            "prefix",
+            [
+                "vl_api_address_t",
+                "address"
+            ],
             [
                 "u8",
-                "address",
-                16
+                "address_length"
             ],
             {
-                "crc": "0xad99ccc2"
+                "crc": "0x0403aebc"
             }
         ],
         [
-            "address",
+            "mprefix",
             [
                 "vl_api_address_family_t",
                 "af"
             ],
+            [
+                "u16",
+                "grp_address_length"
+            ],
             [
                 "vl_api_address_union_t",
-                "un"
+                "grp_address"
+            ],
+            [
+                "vl_api_address_union_t",
+                "src_address"
             ],
             {
-                "crc": "0x09f11671"
+                "crc": "0x1c4cba05"
             }
         ],
         [
-            "prefix",
+            "ip6_prefix",
             [
-                "vl_api_address_t",
-                "address"
+                "vl_api_ip6_address_t",
+                "prefix"
             ],
             [
                 "u8",
-                "address_length"
+                "len"
             ],
             {
-                "crc": "0x0403aebc"
+                "crc": "0x779fd64f"
+            }
+        ],
+        [
+            "ip4_prefix",
+            [
+                "vl_api_ip4_address_t",
+                "prefix"
+            ],
+            [
+                "u8",
+                "len"
+            ],
+            {
+                "crc": "0xea8dc11d"
             }
         ],
         [
                 "crc": "0xabe483ef"
             }
         ],
+        [
+            "mac_address",
+            [
+                "u8",
+                "bytes",
+                6
+            ],
+            {
+                "crc": "0xefdbdddc"
+            }
+        ],
+        [
+            "punt_redirect",
+            [
+                "u32",
+                "rx_sw_if_index"
+            ],
+            [
+                "u32",
+                "tx_sw_if_index"
+            ],
+            [
+                "vl_api_address_t",
+                "nh"
+            ],
+            {
+                "crc": "0x3e7a801f"
+            }
+        ],
         [
             "ip6_ra_prefix_info",
             [
                 "crc": "0x6d88106e"
             }
         ]
-    ]
+    ],
+    "aliases": {
+        "ip6_address": {
+            "length": 16,
+            "type": "u8"
+        },
+        "ip4_address": {
+            "length": 4,
+            "type": "u8"
+        }
+    }
 }
index abbddb9..b4615b5 100644 (file)
@@ -5,11 +5,12 @@
  Package ip is a generated from VPP binary API module 'ip'.
 
  It contains following objects:
-        87 messages
-         8 types
+        91 messages
+        11 types
+         2 aliases
          1 enum
          1 union
-        42 services
+        44 services
 
 */
 package ip
@@ -23,22 +24,229 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "ip_container_proxy_dump": {
+//             "reply": "ip_container_proxy_details",
+//             "stream": true
+//         },
+//         "ip_address_dump": {
+//             "reply": "ip_address_details",
+//             "stream": true
+//         },
+//         "ip_source_and_port_range_check_add_del": {
+//             "reply": "ip_source_and_port_range_check_add_del_reply"
+//         },
+//         "reset_fib": {
+//             "reply": "reset_fib_reply"
+//         },
+//         "ip_probe_neighbor": {
+//             "reply": "ip_probe_neighbor_reply"
+//         },
+//         "want_ip6_nd_events": {
+//             "reply": "want_ip6_nd_events_reply",
+//             "events": [
+//                 "ip6_nd_event"
+//             ]
+//         },
+//         "ip_punt_police": {
+//             "reply": "ip_punt_police_reply"
+//         },
+//         "ip6nd_proxy_add_del": {
+//             "reply": "ip6nd_proxy_add_del_reply"
+//         },
+//         "set_arp_neighbor_limit": {
+//             "reply": "set_arp_neighbor_limit_reply"
+//         },
+//         "ip_reassembly_enable_disable": {
+//             "reply": "ip_reassembly_enable_disable_reply"
+//         },
+//         "ip6_fib_dump": {
+//             "reply": "ip6_fib_details",
+//             "stream": true
+//         },
+//         "ip6nd_send_router_solicitation": {
+//             "reply": "ip6nd_send_router_solicitation_reply"
+//         },
+//         "ip_source_check_interface_add_del": {
+//             "reply": "ip_source_check_interface_add_del_reply"
+//         },
+//         "ip_table_add_del": {
+//             "reply": "ip_table_add_del_reply"
+//         },
+//         "ip_neighbor_dump": {
+//             "reply": "ip_neighbor_details",
+//             "stream": true
+//         },
+//         "ip_punt_redirect": {
+//             "reply": "ip_punt_redirect_reply"
+//         },
+//         "sw_interface_ip6nd_ra_prefix": {
+//             "reply": "sw_interface_ip6nd_ra_prefix_reply"
+//         },
+//         "ip_reassembly_set": {
+//             "reply": "ip_reassembly_set_reply"
+//         },
+//         "ip6_mfib_dump": {
+//             "reply": "ip6_mfib_details",
+//             "stream": true
+//         },
+//         "sw_interface_ip6nd_ra_config": {
+//             "reply": "sw_interface_ip6nd_ra_config_reply"
+//         },
+//         "proxy_arp_dump": {
+//             "reply": "proxy_arp_details",
+//             "stream": true
+//         },
+//         "sw_interface_ip6_enable_disable": {
+//             "reply": "sw_interface_ip6_enable_disable_reply"
+//         },
+//         "ip_source_and_port_range_check_interface_add_del": {
+//             "reply": "ip_source_and_port_range_check_interface_add_del_reply"
+//         },
+//         "mfib_signal_dump": {
+//             "reply": "mfib_signal_details",
+//             "stream": true
+//         },
+//         "ip_punt_redirect_dump": {
+//             "reply": "ip_punt_redirect_details",
+//             "stream": true
+//         },
+//         "ip_container_proxy_add_del": {
+//             "reply": "ip_container_proxy_add_del_reply"
+//         },
+//         "ip_mfib_dump": {
+//             "reply": "ip_mfib_details",
+//             "stream": true
+//         },
+//         "ip_unnumbered_dump": {
+//             "reply": "ip_unnumbered_details",
+//             "stream": true
+//         },
+//         "ip_dump": {
+//             "reply": "ip_details",
+//             "stream": true
+//         },
+//         "ip_neighbor_add_del": {
+//             "reply": "ip_neighbor_add_del_reply"
+//         },
+//         "proxy_arp_intfc_enable_disable": {
+//             "reply": "proxy_arp_intfc_enable_disable_reply"
+//         },
+//         "proxy_arp_add_del": {
+//             "reply": "proxy_arp_add_del_reply"
+//         },
+//         "ip_add_del_route": {
+//             "reply": "ip_add_del_route_reply"
+//         },
+//         "ip6nd_proxy_dump": {
+//             "reply": "ip6nd_proxy_details",
+//             "stream": true
+//         },
+//         "want_ip6_ra_events": {
+//             "reply": "want_ip6_ra_events_reply",
+//             "events": [
+//                 "ip6_ra_event"
+//             ]
+//         },
+//         "ip_fib_dump": {
+//             "reply": "ip_fib_details",
+//             "stream": true
+//         },
+//         "ip_scan_neighbor_enable_disable": {
+//             "reply": "ip_scan_neighbor_enable_disable_reply"
+//         },
+//         "ioam_enable": {
+//             "reply": "ioam_enable_reply"
+//         },
+//         "ip_mroute_add_del": {
+//             "reply": "ip_mroute_add_del_reply"
+//         },
+//         "proxy_arp_intfc_dump": {
+//             "reply": "proxy_arp_intfc_details",
+//             "stream": true
+//         },
+//         "want_ip4_arp_events": {
+//             "reply": "want_ip4_arp_events_reply",
+//             "events": [
+//                 "ip4_arp_event"
+//             ]
+//         },
+//         "ip_reassembly_get": {
+//             "reply": "ip_reassembly_get_reply"
+//         },
+//         "set_ip_flow_hash": {
+//             "reply": "set_ip_flow_hash_reply"
+//         },
+//         "ioam_disable": {
+//             "reply": "ioam_disable_reply"
+//         }
+//     },
+//
+type Services interface {
+       DumpIP6Fib(*IP6FibDump) ([]*IP6FibDetails, error)
+       DumpIP6Mfib(*IP6MfibDump) ([]*IP6MfibDetails, error)
+       DumpIP6ndProxy(*IP6ndProxyDump) ([]*IP6ndProxyDetails, error)
+       DumpIPAddress(*IPAddressDump) ([]*IPAddressDetails, error)
+       DumpIPContainerProxy(*IPContainerProxyDump) ([]*IPContainerProxyDetails, error)
+       DumpIP(*IPDump) ([]*IPDetails, error)
+       DumpIPFib(*IPFibDump) ([]*IPFibDetails, error)
+       DumpIPMfib(*IPMfibDump) ([]*IPMfibDetails, error)
+       DumpIPNeighbor(*IPNeighborDump) ([]*IPNeighborDetails, error)
+       DumpIPPuntRedirect(*IPPuntRedirectDump) ([]*IPPuntRedirectDetails, error)
+       DumpIPUnnumbered(*IPUnnumberedDump) ([]*IPUnnumberedDetails, error)
+       DumpMfibSignal(*MfibSignalDump) ([]*MfibSignalDetails, error)
+       DumpProxyArp(*ProxyArpDump) ([]*ProxyArpDetails, error)
+       DumpProxyArpIntfc(*ProxyArpIntfcDump) ([]*ProxyArpIntfcDetails, error)
+       IoamDisable(*IoamDisable) (*IoamDisableReply, error)
+       IoamEnable(*IoamEnable) (*IoamEnableReply, error)
+       IP6ndProxyAddDel(*IP6ndProxyAddDel) (*IP6ndProxyAddDelReply, error)
+       IP6ndSendRouterSolicitation(*IP6ndSendRouterSolicitation) (*IP6ndSendRouterSolicitationReply, error)
+       IPAddDelRoute(*IPAddDelRoute) (*IPAddDelRouteReply, error)
+       IPContainerProxyAddDel(*IPContainerProxyAddDel) (*IPContainerProxyAddDelReply, error)
+       IPMrouteAddDel(*IPMrouteAddDel) (*IPMrouteAddDelReply, error)
+       IPNeighborAddDel(*IPNeighborAddDel) (*IPNeighborAddDelReply, error)
+       IPProbeNeighbor(*IPProbeNeighbor) (*IPProbeNeighborReply, error)
+       IPPuntPolice(*IPPuntPolice) (*IPPuntPoliceReply, error)
+       IPPuntRedirect(*IPPuntRedirect) (*IPPuntRedirectReply, error)
+       IPReassemblyEnableDisable(*IPReassemblyEnableDisable) (*IPReassemblyEnableDisableReply, error)
+       IPReassemblyGet(*IPReassemblyGet) (*IPReassemblyGetReply, error)
+       IPReassemblySet(*IPReassemblySet) (*IPReassemblySetReply, error)
+       IPScanNeighborEnableDisable(*IPScanNeighborEnableDisable) (*IPScanNeighborEnableDisableReply, error)
+       IPSourceAndPortRangeCheckAddDel(*IPSourceAndPortRangeCheckAddDel) (*IPSourceAndPortRangeCheckAddDelReply, error)
+       IPSourceAndPortRangeCheckInterfaceAddDel(*IPSourceAndPortRangeCheckInterfaceAddDel) (*IPSourceAndPortRangeCheckInterfaceAddDelReply, error)
+       IPSourceCheckInterfaceAddDel(*IPSourceCheckInterfaceAddDel) (*IPSourceCheckInterfaceAddDelReply, error)
+       IPTableAddDel(*IPTableAddDel) (*IPTableAddDelReply, error)
+       ProxyArpAddDel(*ProxyArpAddDel) (*ProxyArpAddDelReply, error)
+       ProxyArpIntfcEnableDisable(*ProxyArpIntfcEnableDisable) (*ProxyArpIntfcEnableDisableReply, error)
+       ResetFib(*ResetFib) (*ResetFibReply, error)
+       SetArpNeighborLimit(*SetArpNeighborLimit) (*SetArpNeighborLimitReply, error)
+       SetIPFlowHash(*SetIPFlowHash) (*SetIPFlowHashReply, error)
+       SwInterfaceIP6EnableDisable(*SwInterfaceIP6EnableDisable) (*SwInterfaceIP6EnableDisableReply, error)
+       SwInterfaceIP6ndRaConfig(*SwInterfaceIP6ndRaConfig) (*SwInterfaceIP6ndRaConfigReply, error)
+       SwInterfaceIP6ndRaPrefix(*SwInterfaceIP6ndRaPrefix) (*SwInterfaceIP6ndRaPrefixReply, error)
+       WantIP4ArpEvents(*WantIP4ArpEvents) (*WantIP4ArpEventsReply, error)
+       WantIP6NdEvents(*WantIP6NdEvents) (*WantIP6NdEventsReply, error)
+       WantIP6RaEvents(*WantIP6RaEvents) (*WantIP6RaEventsReply, error)
+}
+
 /* Enums */
 
-// AddressFamily represents the VPP binary API enum 'address_family'.
-//
-//            "address_family",
-//            [
-//                "ADDRESS_IP4",
-//                0
-//            ],
-//            [
-//                "ADDRESS_IP6",
-//                1
-//            ],
-//            {
-//                "enumtype": "u32"
-//            }
+// AddressFamily represents VPP binary API enum 'address_family':
+//
+//     "address_family",
+//     [
+//         "ADDRESS_IP4",
+//         0
+//     ],
+//     [
+//         "ADDRESS_IP6",
+//         1
+//     ],
+//     {
+//         "enumtype": "u32"
+//     }
 //
 type AddressFamily uint32
 
@@ -47,68 +255,32 @@ const (
        ADDRESS_IP6 AddressFamily = 1
 )
 
-/* Types */
+/* Aliases */
 
-// IP4Address represents the VPP binary API type 'ip4_address'.
+// IP4Address represents VPP binary API alias 'ip4_address':
 //
-//            "ip4_address",
-//            [
-//                "u8",
-//                "address",
-//                4
-//            ],
-//            {
-//                "crc": "0xfc4baa28"
-//            }
+//     "ip4_address": {
+//         "length": 4,
+//         "type": "u8"
+//     }
 //
-type IP4Address struct {
-       Address []byte `struc:"[4]byte"`
-}
+type IP4Address [4]uint8
 
-func (*IP4Address) GetTypeName() string {
-       return "ip4_address"
-}
-func (*IP4Address) GetCrcString() string {
-       return "fc4baa28"
-}
-
-// IP6Address represents the VPP binary API type 'ip6_address'.
+// IP6Address represents VPP binary API alias 'ip6_address':
 //
-//            "ip6_address",
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            {
-//                "crc": "0xad99ccc2"
-//            }
+//     "ip6_address": {
+//         "length": 16,
+//         "type": "u8"
+//     },
 //
-type IP6Address struct {
-       Address []byte `struc:"[16]byte"`
-}
+type IP6Address [16]uint8
 
-func (*IP6Address) GetTypeName() string {
-       return "ip6_address"
-}
-func (*IP6Address) GetCrcString() string {
-       return "ad99ccc2"
-}
+/* Types */
 
-// Address represents the VPP binary API type 'address'.
+// Address represents VPP binary API type 'address':
 //
-//            "address",
-//            [
-//                "vl_api_address_family_t",
-//                "af"
-//            ],
-//            [
-//                "vl_api_address_union_t",
-//                "un"
-//            ],
-//            {
-//                "crc": "0x09f11671"
-//            }
+//     "address",
+//     4
 //
 type Address struct {
        Af AddressFamily
@@ -122,20 +294,20 @@ func (*Address) GetCrcString() string {
        return "09f11671"
 }
 
-// Prefix represents the VPP binary API type 'prefix'.
+// Prefix represents VPP binary API type 'prefix':
 //
-//            "prefix",
-//            [
-//                "vl_api_address_t",
-//                "address"
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            {
-//                "crc": "0x0403aebc"
-//            }
+//     "prefix",
+//     [
+//         "vl_api_address_t",
+//         "address"
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     {
+//         "crc": "0x0403aebc"
+//     }
 //
 type Prefix struct {
        Address       Address
@@ -149,28 +321,119 @@ func (*Prefix) GetCrcString() string {
        return "0403aebc"
 }
 
-// FibMplsLabel represents the VPP binary API type 'fib_mpls_label'.
-//
-//            "fib_mpls_label",
-//            [
-//                "u8",
-//                "is_uniform"
-//            ],
-//            [
-//                "u32",
-//                "label"
-//            ],
-//            [
-//                "u8",
-//                "ttl"
-//            ],
-//            [
-//                "u8",
-//                "exp"
-//            ],
-//            {
-//                "crc": "0xc93bf35c"
-//            }
+// Mprefix represents VPP binary API type 'mprefix':
+//
+//     "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"
+//     ],
+//     {
+//         "crc": "0x1c4cba05"
+//     }
+//
+type Mprefix struct {
+       Af               AddressFamily
+       GrpAddressLength uint16
+       GrpAddress       AddressUnion
+       SrcAddress       AddressUnion
+}
+
+func (*Mprefix) GetTypeName() string {
+       return "mprefix"
+}
+func (*Mprefix) GetCrcString() string {
+       return "1c4cba05"
+}
+
+// IP6Prefix represents VPP binary API type 'ip6_prefix':
+//
+//     "ip6_prefix",
+//     [
+//         "vl_api_ip6_address_t",
+//         "prefix"
+//     ],
+//     [
+//         "u8",
+//         "len"
+//     ],
+//     {
+//         "crc": "0x779fd64f"
+//     }
+//
+type IP6Prefix struct {
+       Prefix IP6Address
+       Len    uint8
+}
+
+func (*IP6Prefix) GetTypeName() string {
+       return "ip6_prefix"
+}
+func (*IP6Prefix) GetCrcString() string {
+       return "779fd64f"
+}
+
+// IP4Prefix represents VPP binary API type 'ip4_prefix':
+//
+//     "ip4_prefix",
+//     [
+//         "vl_api_ip4_address_t",
+//         "prefix"
+//     ],
+//     [
+//         "u8",
+//         "len"
+//     ],
+//     {
+//         "crc": "0xea8dc11d"
+//     }
+//
+type IP4Prefix struct {
+       Prefix IP4Address
+       Len    uint8
+}
+
+func (*IP4Prefix) GetTypeName() string {
+       return "ip4_prefix"
+}
+func (*IP4Prefix) GetCrcString() string {
+       return "ea8dc11d"
+}
+
+// FibMplsLabel represents VPP binary API type 'fib_mpls_label':
+//
+//     "fib_mpls_label",
+//     [
+//         "u8",
+//         "is_uniform"
+//     ],
+//     [
+//         "u32",
+//         "label"
+//     ],
+//     [
+//         "u8",
+//         "ttl"
+//     ],
+//     [
+//         "u8",
+//         "exp"
+//     ],
+//     {
+//         "crc": "0xc93bf35c"
+//     }
 //
 type FibMplsLabel struct {
        IsUniform uint8
@@ -186,94 +449,94 @@ func (*FibMplsLabel) GetCrcString() string {
        return "c93bf35c"
 }
 
-// FibPath represents the VPP binary API type 'fib_path'.
-//
-//            "fib_path",
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u8",
-//                "weight"
-//            ],
-//            [
-//                "u8",
-//                "preference"
-//            ],
-//            [
-//                "u8",
-//                "is_local"
-//            ],
-//            [
-//                "u8",
-//                "is_drop"
-//            ],
-//            [
-//                "u8",
-//                "is_udp_encap"
-//            ],
-//            [
-//                "u8",
-//                "is_unreach"
-//            ],
-//            [
-//                "u8",
-//                "is_prohibit"
-//            ],
-//            [
-//                "u8",
-//                "is_resolve_host"
-//            ],
-//            [
-//                "u8",
-//                "is_resolve_attached"
-//            ],
-//            [
-//                "u8",
-//                "is_dvr"
-//            ],
-//            [
-//                "u8",
-//                "is_source_lookup"
-//            ],
-//            [
-//                "u8",
-//                "afi"
-//            ],
-//            [
-//                "u8",
-//                "next_hop",
-//                16
-//            ],
-//            [
-//                "u32",
-//                "next_hop_id"
-//            ],
-//            [
-//                "u32",
-//                "rpf_id"
-//            ],
-//            [
-//                "u32",
-//                "via_label"
-//            ],
-//            [
-//                "u8",
-//                "n_labels"
-//            ],
-//            [
-//                "vl_api_fib_mpls_label_t",
-//                "label_stack",
-//                16
-//            ],
-//            {
-//                "crc": "0xabe483ef"
-//            }
+// FibPath represents VPP binary API type 'fib_path':
+//
+//     "fib_path",
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u8",
+//         "weight"
+//     ],
+//     [
+//         "u8",
+//         "preference"
+//     ],
+//     [
+//         "u8",
+//         "is_local"
+//     ],
+//     [
+//         "u8",
+//         "is_drop"
+//     ],
+//     [
+//         "u8",
+//         "is_udp_encap"
+//     ],
+//     [
+//         "u8",
+//         "is_unreach"
+//     ],
+//     [
+//         "u8",
+//         "is_prohibit"
+//     ],
+//     [
+//         "u8",
+//         "is_resolve_host"
+//     ],
+//     [
+//         "u8",
+//         "is_resolve_attached"
+//     ],
+//     [
+//         "u8",
+//         "is_dvr"
+//     ],
+//     [
+//         "u8",
+//         "is_source_lookup"
+//     ],
+//     [
+//         "u8",
+//         "afi"
+//     ],
+//     [
+//         "u8",
+//         "next_hop",
+//         16
+//     ],
+//     [
+//         "u32",
+//         "next_hop_id"
+//     ],
+//     [
+//         "u32",
+//         "rpf_id"
+//     ],
+//     [
+//         "u32",
+//         "via_label"
+//     ],
+//     [
+//         "u8",
+//         "n_labels"
+//     ],
+//     [
+//         "vl_api_fib_mpls_label_t",
+//         "label_stack",
+//         16
+//     ],
+//     {
+//         "crc": "0xabe483ef"
+//     }
 //
 type FibPath struct {
        SwIfIndex         uint32
@@ -305,33 +568,81 @@ func (*FibPath) GetCrcString() string {
        return "abe483ef"
 }
 
-// IP6RaPrefixInfo represents the VPP binary API type 'ip6_ra_prefix_info'.
-//
-//            "ip6_ra_prefix_info",
-//            [
-//                "u8",
-//                "dst_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "dst_address_length"
-//            ],
-//            [
-//                "u8",
-//                "flags"
-//            ],
-//            [
-//                "u32",
-//                "valid_time"
-//            ],
-//            [
-//                "u32",
-//                "preferred_time"
-//            ],
-//            {
-//                "crc": "0x83d7c6e5"
-//            }
+// MacAddress represents VPP binary API type 'mac_address':
+//
+//     "mac_address",
+//     6
+//
+type MacAddress struct {
+       Bytes []byte `struc:"[6]byte"`
+}
+
+func (*MacAddress) GetTypeName() string {
+       return "mac_address"
+}
+func (*MacAddress) GetCrcString() string {
+       return "efdbdddc"
+}
+
+// PuntRedirect represents VPP binary API type 'punt_redirect':
+//
+//     "punt_redirect",
+//     [
+//         "u32",
+//         "rx_sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "tx_sw_if_index"
+//     ],
+//     [
+//         "vl_api_address_t",
+//         "nh"
+//     ],
+//     {
+//         "crc": "0x3e7a801f"
+//     }
+//
+type PuntRedirect struct {
+       RxSwIfIndex uint32
+       TxSwIfIndex uint32
+       Nh          Address
+}
+
+func (*PuntRedirect) GetTypeName() string {
+       return "punt_redirect"
+}
+func (*PuntRedirect) GetCrcString() string {
+       return "3e7a801f"
+}
+
+// IP6RaPrefixInfo represents VPP binary API type 'ip6_ra_prefix_info':
+//
+//     "ip6_ra_prefix_info",
+//     [
+//         "u8",
+//         "dst_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "dst_address_length"
+//     ],
+//     [
+//         "u8",
+//         "flags"
+//     ],
+//     [
+//         "u32",
+//         "valid_time"
+//     ],
+//     [
+//         "u32",
+//         "preferred_time"
+//     ],
+//     {
+//         "crc": "0x83d7c6e5"
+//     }
 //
 type IP6RaPrefixInfo struct {
        DstAddress       []byte `struc:"[16]byte"`
@@ -348,26 +659,26 @@ func (*IP6RaPrefixInfo) GetCrcString() string {
        return "83d7c6e5"
 }
 
-// ProxyArp represents the VPP binary API type 'proxy_arp'.
-//
-//            "proxy_arp",
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            [
-//                "u8",
-//                "low_address",
-//                4
-//            ],
-//            [
-//                "u8",
-//                "hi_address",
-//                4
-//            ],
-//            {
-//                "crc": "0x6d88106e"
-//            }
+// ProxyArp represents VPP binary API type 'proxy_arp':
+//
+//     "proxy_arp",
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     [
+//         "u8",
+//         "low_address",
+//         4
+//     ],
+//     [
+//         "u8",
+//         "hi_address",
+//         4
+//     ],
+//     {
+//         "crc": "0x6d88106e"
+//     }
 //
 type ProxyArp struct {
        VrfID      uint32
@@ -384,20 +695,20 @@ func (*ProxyArp) GetCrcString() string {
 
 /* Unions */
 
-// AddressUnion represents the VPP binary API union 'address_union'.
-//
-//            "address_union",
-//            [
-//                "vl_api_ip4_address_t",
-//                "ip4"
-//            ],
-//            [
-//                "vl_api_ip6_address_t",
-//                "ip6"
-//            ],
-//            {
-//                "crc": "0xd68a2fb4"
-//            }
+// AddressUnion represents VPP binary API union 'address_union':
+//
+//     "address_union",
+//     [
+//         "vl_api_ip4_address_t",
+//         "ip4"
+//     ],
+//     [
+//         "vl_api_ip6_address_t",
+//         "ip6"
+//     ],
+//     {
+//         "crc": "0xd68a2fb4"
+//     }
 //
 type AddressUnion struct {
        Union_data [16]byte
@@ -438,41 +749,41 @@ func (u *AddressUnion) GetIP6() (a IP6Address) {
 
 /* Messages */
 
-// IPTableAddDel represents the VPP binary API message 'ip_table_add_del'.
-//
-//            "ip_table_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "name",
-//                64
-//            ],
-//            {
-//                "crc": "0x0240c89d"
-//            }
+// IPTableAddDel represents VPP binary API message 'ip_table_add_del':
+//
+//     "ip_table_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "name",
+//         64
+//     ],
+//     {
+//         "crc": "0x0240c89d"
+//     }
 //
 type IPTableAddDel struct {
        TableID uint32
@@ -491,24 +802,24 @@ func (*IPTableAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPTableAddDelReply represents the VPP binary API message 'ip_table_add_del_reply'.
-//
-//            "ip_table_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPTableAddDelReply represents VPP binary API message 'ip_table_add_del_reply':
+//
+//     "ip_table_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPTableAddDelReply struct {
        Retval int32
@@ -524,24 +835,24 @@ func (*IPTableAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPFibDump represents the VPP binary API message 'ip_fib_dump'.
-//
-//            "ip_fib_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// IPFibDump represents VPP binary API message 'ip_fib_dump':
+//
+//     "ip_fib_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type IPFibDump struct{}
 
@@ -555,48 +866,52 @@ func (*IPFibDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPFibDetails represents the VPP binary API message 'ip_fib_details'.
-//
-//            "ip_fib_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u8",
-//                "table_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                4
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_fib_path_t",
-//                "path",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x99dfd73b"
-//            }
+// IPFibDetails represents VPP binary API message 'ip_fib_details':
+//
+//     "ip_fib_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u8",
+//         "table_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         4
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "stats_index"
+//     ],
+//     [
+//         "vl_api_fib_path_t",
+//         "path",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xf6a2fab3"
+//     }
 //
 type IPFibDetails struct {
        TableID       uint32
@@ -604,6 +919,7 @@ type IPFibDetails struct {
        AddressLength uint8
        Address       []byte `struc:"[4]byte"`
        Count         uint32 `struc:"sizeof=Path"`
+       StatsIndex    uint32
        Path          []FibPath
 }
 
@@ -611,30 +927,30 @@ func (*IPFibDetails) GetMessageName() string {
        return "ip_fib_details"
 }
 func (*IPFibDetails) GetCrcString() string {
-       return "99dfd73b"
+       return "f6a2fab3"
 }
 func (*IPFibDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IP6FibDump represents the VPP binary API message 'ip6_fib_dump'.
-//
-//            "ip6_fib_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// IP6FibDump represents VPP binary API message 'ip6_fib_dump':
+//
+//     "ip6_fib_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type IP6FibDump struct{}
 
@@ -648,48 +964,52 @@ func (*IP6FibDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IP6FibDetails represents the VPP binary API message 'ip6_fib_details'.
-//
-//            "ip6_fib_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u8",
-//                "table_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_fib_path_t",
-//                "path",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xabd0060e"
-//            }
+// IP6FibDetails represents VPP binary API message 'ip6_fib_details':
+//
+//     "ip6_fib_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u8",
+//         "table_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         16
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "stats_index"
+//     ],
+//     [
+//         "vl_api_fib_path_t",
+//         "path",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xef11e94d"
+//     }
 //
 type IP6FibDetails struct {
        TableID       uint32
@@ -697,6 +1017,7 @@ type IP6FibDetails struct {
        AddressLength uint8
        Address       []byte `struc:"[16]byte"`
        Count         uint32 `struc:"sizeof=Path"`
+       StatsIndex    uint32
        Path          []FibPath
 }
 
@@ -704,38 +1025,38 @@ func (*IP6FibDetails) GetMessageName() string {
        return "ip6_fib_details"
 }
 func (*IP6FibDetails) GetCrcString() string {
-       return "abd0060e"
+       return "ef11e94d"
 }
 func (*IP6FibDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPNeighborDump represents the VPP binary API message 'ip_neighbor_dump'.
-//
-//            "ip_neighbor_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0x6b7bcd0a"
-//            }
+// IPNeighborDump represents VPP binary API message 'ip_neighbor_dump':
+//
+//     "ip_neighbor_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x6b7bcd0a"
+//     }
 //
 type IPNeighborDump struct {
        SwIfIndex uint32
@@ -752,45 +1073,50 @@ func (*IPNeighborDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPNeighborDetails represents the VPP binary API message 'ip_neighbor_details'.
-//
-//            "ip_neighbor_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_static"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "ip_address",
-//                16
-//            ],
-//            {
-//                "crc": "0x85e32a72"
-//            }
+// IPNeighborDetails represents VPP binary API message 'ip_neighbor_details':
+//
+//     "ip_neighbor_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "stats_index"
+//     ],
+//     [
+//         "u8",
+//         "is_static"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "ip_address",
+//         16
+//     ],
+//     {
+//         "crc": "0xc7001770"
+//     }
 //
 type IPNeighborDetails struct {
        SwIfIndex  uint32
+       StatsIndex uint32
        IsStatic   uint8
        IsIPv6     uint8
        MacAddress []byte `struc:"[6]byte"`
@@ -801,60 +1127,60 @@ func (*IPNeighborDetails) GetMessageName() string {
        return "ip_neighbor_details"
 }
 func (*IPNeighborDetails) GetCrcString() string {
-       return "85e32a72"
+       return "c7001770"
 }
 func (*IPNeighborDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPNeighborAddDel represents the VPP binary API message 'ip_neighbor_add_del'.
-//
-//            "ip_neighbor_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "is_static"
-//            ],
-//            [
-//                "u8",
-//                "is_no_adj_fib"
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "dst_address",
-//                16
-//            ],
-//            {
-//                "crc": "0x4711eb25"
-//            }
+// IPNeighborAddDel represents VPP binary API message 'ip_neighbor_add_del':
+//
+//     "ip_neighbor_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "is_static"
+//     ],
+//     [
+//         "u8",
+//         "is_no_adj_fib"
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "dst_address",
+//         16
+//     ],
+//     {
+//         "crc": "0x4711eb25"
+//     }
 //
 type IPNeighborAddDel struct {
        SwIfIndex  uint32
@@ -876,129 +1202,139 @@ func (*IPNeighborAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPNeighborAddDelReply represents the VPP binary API message 'ip_neighbor_add_del_reply'.
-//
-//            "ip_neighbor_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPNeighborAddDelReply represents VPP binary API message 'ip_neighbor_add_del_reply':
+//
+//     "ip_neighbor_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "stats_index"
+//     ],
+//     {
+//         "crc": "0x1992deab"
+//     }
 //
 type IPNeighborAddDelReply struct {
-       Retval int32
+       Retval     int32
+       StatsIndex uint32
 }
 
 func (*IPNeighborAddDelReply) GetMessageName() string {
        return "ip_neighbor_add_del_reply"
 }
 func (*IPNeighborAddDelReply) GetCrcString() string {
-       return "e8d4e804"
+       return "1992deab"
 }
 func (*IPNeighborAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SetIPFlowHash represents the VPP binary API message 'set_ip_flow_hash'.
-//
-//            "set_ip_flow_hash",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "src"
-//            ],
-//            [
-//                "u8",
-//                "dst"
-//            ],
-//            [
-//                "u8",
-//                "sport"
-//            ],
-//            [
-//                "u8",
-//                "dport"
-//            ],
-//            [
-//                "u8",
-//                "proto"
-//            ],
-//            [
-//                "u8",
-//                "reverse"
-//            ],
-//            {
-//                "crc": "0x32ebf737"
-//            }
+// SetIPFlowHash represents VPP binary API message 'set_ip_flow_hash':
+//
+//     "set_ip_flow_hash",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "src"
+//     ],
+//     [
+//         "u8",
+//         "dst"
+//     ],
+//     [
+//         "u8",
+//         "sport"
+//     ],
+//     [
+//         "u8",
+//         "dport"
+//     ],
+//     [
+//         "u8",
+//         "proto"
+//     ],
+//     [
+//         "u8",
+//         "reverse"
+//     ],
+//     [
+//         "u8",
+//         "symmetric"
+//     ],
+//     {
+//         "crc": "0xa9084bfb"
+//     }
 //
 type SetIPFlowHash struct {
-       VrfID   uint32
-       IsIPv6  uint8
-       Src     uint8
-       Dst     uint8
-       Sport   uint8
-       Dport   uint8
-       Proto   uint8
-       Reverse uint8
+       VrfID     uint32
+       IsIPv6    uint8
+       Src       uint8
+       Dst       uint8
+       Sport     uint8
+       Dport     uint8
+       Proto     uint8
+       Reverse   uint8
+       Symmetric uint8
 }
 
 func (*SetIPFlowHash) GetMessageName() string {
        return "set_ip_flow_hash"
 }
 func (*SetIPFlowHash) GetCrcString() string {
-       return "32ebf737"
+       return "a9084bfb"
 }
 func (*SetIPFlowHash) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SetIPFlowHashReply represents the VPP binary API message 'set_ip_flow_hash_reply'.
-//
-//            "set_ip_flow_hash_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SetIPFlowHashReply represents VPP binary API message 'set_ip_flow_hash_reply':
+//
+//     "set_ip_flow_hash_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SetIPFlowHashReply struct {
        Retval int32
@@ -1014,80 +1350,80 @@ func (*SetIPFlowHashReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceIP6ndRaConfig represents the VPP binary API message 'sw_interface_ip6nd_ra_config'.
-//
-//            "sw_interface_ip6nd_ra_config",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "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"
-//            ],
-//            [
-//                "u32",
-//                "max_interval"
-//            ],
-//            [
-//                "u32",
-//                "min_interval"
-//            ],
-//            [
-//                "u32",
-//                "lifetime"
-//            ],
-//            [
-//                "u32",
-//                "initial_count"
-//            ],
-//            [
-//                "u32",
-//                "initial_interval"
-//            ],
-//            {
-//                "crc": "0xc3f02daa"
-//            }
+// SwInterfaceIP6ndRaConfig represents VPP binary API message 'sw_interface_ip6nd_ra_config':
+//
+//     "sw_interface_ip6nd_ra_config",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "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"
+//     ],
+//     [
+//         "u32",
+//         "max_interval"
+//     ],
+//     [
+//         "u32",
+//         "min_interval"
+//     ],
+//     [
+//         "u32",
+//         "lifetime"
+//     ],
+//     [
+//         "u32",
+//         "initial_count"
+//     ],
+//     [
+//         "u32",
+//         "initial_interval"
+//     ],
+//     {
+//         "crc": "0xc3f02daa"
+//     }
 //
 type SwInterfaceIP6ndRaConfig struct {
        SwIfIndex       uint32
@@ -1116,24 +1452,24 @@ func (*SwInterfaceIP6ndRaConfig) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceIP6ndRaConfigReply represents the VPP binary API message 'sw_interface_ip6nd_ra_config_reply'.
-//
-//            "sw_interface_ip6nd_ra_config_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceIP6ndRaConfigReply represents VPP binary API message 'sw_interface_ip6nd_ra_config_reply':
+//
+//     "sw_interface_ip6nd_ra_config_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceIP6ndRaConfigReply struct {
        Retval int32
@@ -1149,69 +1485,69 @@ func (*SwInterfaceIP6ndRaConfigReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceIP6ndRaPrefix represents the VPP binary API message 'sw_interface_ip6nd_ra_prefix'.
-//
-//            "sw_interface_ip6nd_ra_prefix",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "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"
-//            ],
-//            {
-//                "crc": "0xca763c9a"
-//            }
+// SwInterfaceIP6ndRaPrefix represents VPP binary API message 'sw_interface_ip6nd_ra_prefix':
+//
+//     "sw_interface_ip6nd_ra_prefix",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "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"
+//     ],
+//     {
+//         "crc": "0xca763c9a"
+//     }
 //
 type SwInterfaceIP6ndRaPrefix struct {
        SwIfIndex     uint32
@@ -1237,24 +1573,24 @@ func (*SwInterfaceIP6ndRaPrefix) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceIP6ndRaPrefixReply represents the VPP binary API message 'sw_interface_ip6nd_ra_prefix_reply'.
-//
-//            "sw_interface_ip6nd_ra_prefix_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceIP6ndRaPrefixReply represents VPP binary API message 'sw_interface_ip6nd_ra_prefix_reply':
+//
+//     "sw_interface_ip6nd_ra_prefix_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceIP6ndRaPrefixReply struct {
        Retval int32
@@ -1270,37 +1606,37 @@ func (*SwInterfaceIP6ndRaPrefixReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IP6ndProxyAddDel represents the VPP binary API message 'ip6nd_proxy_add_del'.
-//
-//            "ip6nd_proxy_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_del"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            {
-//                "crc": "0xd95f0fa0"
-//            }
+// IP6ndProxyAddDel represents VPP binary API message 'ip6nd_proxy_add_del':
+//
+//     "ip6nd_proxy_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_del"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         16
+//     ],
+//     {
+//         "crc": "0xd95f0fa0"
+//     }
 //
 type IP6ndProxyAddDel struct {
        SwIfIndex uint32
@@ -1318,24 +1654,24 @@ func (*IP6ndProxyAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IP6ndProxyAddDelReply represents the VPP binary API message 'ip6nd_proxy_add_del_reply'.
-//
-//            "ip6nd_proxy_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IP6ndProxyAddDelReply represents VPP binary API message 'ip6nd_proxy_add_del_reply':
+//
+//     "ip6nd_proxy_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IP6ndProxyAddDelReply struct {
        Retval int32
@@ -1351,33 +1687,29 @@ func (*IP6ndProxyAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IP6ndProxyDetails represents the VPP binary API message 'ip6nd_proxy_details'.
-//
-//            "ip6nd_proxy_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            {
-//                "crc": "0xd73bf1ab"
-//            }
+// IP6ndProxyDetails represents VPP binary API message 'ip6nd_proxy_details':
+//
+//     "ip6nd_proxy_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         16
+//     ],
+//     {
+//         "crc": "0x6a47c974"
+//     }
 //
 type IP6ndProxyDetails struct {
        SwIfIndex uint32
@@ -1388,30 +1720,30 @@ func (*IP6ndProxyDetails) GetMessageName() string {
        return "ip6nd_proxy_details"
 }
 func (*IP6ndProxyDetails) GetCrcString() string {
-       return "d73bf1ab"
+       return "6a47c974"
 }
 func (*IP6ndProxyDetails) GetMessageType() api.MessageType {
-       return api.RequestMessage
+       return api.ReplyMessage
 }
 
-// IP6ndProxyDump represents the VPP binary API message 'ip6nd_proxy_dump'.
-//
-//            "ip6nd_proxy_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// IP6ndProxyDump represents VPP binary API message 'ip6nd_proxy_dump':
+//
+//     "ip6nd_proxy_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type IP6ndProxyDump struct{}
 
@@ -1425,48 +1757,48 @@ func (*IP6ndProxyDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IP6ndSendRouterSolicitation represents the VPP binary API message 'ip6nd_send_router_solicitation'.
-//
-//            "ip6nd_send_router_solicitation",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "irt"
-//            ],
-//            [
-//                "u32",
-//                "mrt"
-//            ],
-//            [
-//                "u32",
-//                "mrc"
-//            ],
-//            [
-//                "u32",
-//                "mrd"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "stop"
-//            ],
-//            {
-//                "crc": "0xbd968917"
-//            }
+// IP6ndSendRouterSolicitation represents VPP binary API message 'ip6nd_send_router_solicitation':
+//
+//     "ip6nd_send_router_solicitation",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "irt"
+//     ],
+//     [
+//         "u32",
+//         "mrt"
+//     ],
+//     [
+//         "u32",
+//         "mrc"
+//     ],
+//     [
+//         "u32",
+//         "mrd"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "stop"
+//     ],
+//     {
+//         "crc": "0xbd968917"
+//     }
 //
 type IP6ndSendRouterSolicitation struct {
        Irt       uint32
@@ -1487,24 +1819,24 @@ func (*IP6ndSendRouterSolicitation) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IP6ndSendRouterSolicitationReply represents the VPP binary API message 'ip6nd_send_router_solicitation_reply'.
-//
-//            "ip6nd_send_router_solicitation_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IP6ndSendRouterSolicitationReply represents VPP binary API message 'ip6nd_send_router_solicitation_reply':
+//
+//     "ip6nd_send_router_solicitation_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IP6ndSendRouterSolicitationReply struct {
        Retval int32
@@ -1520,32 +1852,32 @@ func (*IP6ndSendRouterSolicitationReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceIP6EnableDisable represents the VPP binary API message 'sw_interface_ip6_enable_disable'.
-//
-//            "sw_interface_ip6_enable_disable",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "enable"
-//            ],
-//            {
-//                "crc": "0xa36fadc0"
-//            }
+// SwInterfaceIP6EnableDisable represents VPP binary API message 'sw_interface_ip6_enable_disable':
+//
+//     "sw_interface_ip6_enable_disable",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "enable"
+//     ],
+//     {
+//         "crc": "0xa36fadc0"
+//     }
 //
 type SwInterfaceIP6EnableDisable struct {
        SwIfIndex uint32
@@ -1562,24 +1894,24 @@ func (*SwInterfaceIP6EnableDisable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceIP6EnableDisableReply represents the VPP binary API message 'sw_interface_ip6_enable_disable_reply'.
-//
-//            "sw_interface_ip6_enable_disable_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SwInterfaceIP6EnableDisableReply represents VPP binary API message 'sw_interface_ip6_enable_disable_reply':
+//
+//     "sw_interface_ip6_enable_disable_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SwInterfaceIP6EnableDisableReply struct {
        Retval int32
@@ -1595,212 +1927,136 @@ func (*SwInterfaceIP6EnableDisableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceIP6SetLinkLocalAddress represents the VPP binary API message 'sw_interface_ip6_set_link_local_address'.
-//
-//            "sw_interface_ip6_set_link_local_address",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            {
-//                "crc": "0xd73bf1ab"
-//            }
-//
-type SwInterfaceIP6SetLinkLocalAddress struct {
-       SwIfIndex uint32
-       Address   []byte `struc:"[16]byte"`
-}
-
-func (*SwInterfaceIP6SetLinkLocalAddress) GetMessageName() string {
-       return "sw_interface_ip6_set_link_local_address"
-}
-func (*SwInterfaceIP6SetLinkLocalAddress) GetCrcString() string {
-       return "d73bf1ab"
-}
-func (*SwInterfaceIP6SetLinkLocalAddress) GetMessageType() api.MessageType {
-       return api.RequestMessage
-}
-
-// SwInterfaceIP6SetLinkLocalAddressReply represents the VPP binary API message 'sw_interface_ip6_set_link_local_address_reply'.
-//
-//            "sw_interface_ip6_set_link_local_address_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
-//
-type SwInterfaceIP6SetLinkLocalAddressReply struct {
-       Retval int32
-}
-
-func (*SwInterfaceIP6SetLinkLocalAddressReply) GetMessageName() string {
-       return "sw_interface_ip6_set_link_local_address_reply"
-}
-func (*SwInterfaceIP6SetLinkLocalAddressReply) GetCrcString() string {
-       return "e8d4e804"
-}
-func (*SwInterfaceIP6SetLinkLocalAddressReply) GetMessageType() api.MessageType {
-       return api.ReplyMessage
-}
-
-// IPAddDelRoute represents the VPP binary API message 'ip_add_del_route'.
-//
-//            "ip_add_del_route",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "next_hop_sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u32",
-//                "classify_table_index"
-//            ],
-//            [
-//                "u32",
-//                "next_hop_table_id"
-//            ],
-//            [
-//                "u32",
-//                "next_hop_id"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "is_drop"
-//            ],
-//            [
-//                "u8",
-//                "is_unreach"
-//            ],
-//            [
-//                "u8",
-//                "is_prohibit"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "is_local"
-//            ],
-//            [
-//                "u8",
-//                "is_classify"
-//            ],
-//            [
-//                "u8",
-//                "is_multipath"
-//            ],
-//            [
-//                "u8",
-//                "is_resolve_host"
-//            ],
-//            [
-//                "u8",
-//                "is_resolve_attached"
-//            ],
-//            [
-//                "u8",
-//                "is_dvr"
-//            ],
-//            [
-//                "u8",
-//                "is_source_lookup"
-//            ],
-//            [
-//                "u8",
-//                "is_udp_encap"
-//            ],
-//            [
-//                "u8",
-//                "next_hop_weight"
-//            ],
-//            [
-//                "u8",
-//                "next_hop_preference"
-//            ],
-//            [
-//                "u8",
-//                "next_hop_proto"
-//            ],
-//            [
-//                "u8",
-//                "dst_address_length"
-//            ],
-//            [
-//                "u8",
-//                "dst_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "next_hop_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "next_hop_n_out_labels"
-//            ],
-//            [
-//                "u32",
-//                "next_hop_via_label"
-//            ],
-//            [
-//                "vl_api_fib_mpls_label_t",
-//                "next_hop_out_label_stack",
-//                0,
-//                "next_hop_n_out_labels"
-//            ],
-//            {
-//                "crc": "0x4219d62d"
-//            }
+// IPAddDelRoute represents VPP binary API message 'ip_add_del_route':
+//
+//     "ip_add_del_route",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "next_hop_sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u32",
+//         "classify_table_index"
+//     ],
+//     [
+//         "u32",
+//         "next_hop_table_id"
+//     ],
+//     [
+//         "u32",
+//         "next_hop_id"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "is_drop"
+//     ],
+//     [
+//         "u8",
+//         "is_unreach"
+//     ],
+//     [
+//         "u8",
+//         "is_prohibit"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "is_local"
+//     ],
+//     [
+//         "u8",
+//         "is_classify"
+//     ],
+//     [
+//         "u8",
+//         "is_multipath"
+//     ],
+//     [
+//         "u8",
+//         "is_resolve_host"
+//     ],
+//     [
+//         "u8",
+//         "is_resolve_attached"
+//     ],
+//     [
+//         "u8",
+//         "is_dvr"
+//     ],
+//     [
+//         "u8",
+//         "is_source_lookup"
+//     ],
+//     [
+//         "u8",
+//         "is_udp_encap"
+//     ],
+//     [
+//         "u8",
+//         "next_hop_weight"
+//     ],
+//     [
+//         "u8",
+//         "next_hop_preference"
+//     ],
+//     [
+//         "u8",
+//         "next_hop_proto"
+//     ],
+//     [
+//         "u8",
+//         "dst_address_length"
+//     ],
+//     [
+//         "u8",
+//         "dst_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "next_hop_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "next_hop_n_out_labels"
+//     ],
+//     [
+//         "u32",
+//         "next_hop_via_label"
+//     ],
+//     [
+//         "vl_api_fib_mpls_label_t",
+//         "next_hop_out_label_stack",
+//         0,
+//         "next_hop_n_out_labels"
+//     ],
+//     {
+//         "crc": "0x4219d62d"
+//     }
 //
 type IPAddDelRoute struct {
        NextHopSwIfIndex     uint32
@@ -1842,116 +2098,121 @@ func (*IPAddDelRoute) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPAddDelRouteReply represents the VPP binary API message 'ip_add_del_route_reply'.
-//
-//            "ip_add_del_route_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPAddDelRouteReply represents VPP binary API message 'ip_add_del_route_reply':
+//
+//     "ip_add_del_route_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "stats_index"
+//     ],
+//     {
+//         "crc": "0x1992deab"
+//     }
 //
 type IPAddDelRouteReply struct {
-       Retval int32
+       Retval     int32
+       StatsIndex uint32
 }
 
 func (*IPAddDelRouteReply) GetMessageName() string {
        return "ip_add_del_route_reply"
 }
 func (*IPAddDelRouteReply) GetCrcString() string {
-       return "e8d4e804"
+       return "1992deab"
 }
 func (*IPAddDelRouteReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPMrouteAddDel represents the VPP binary API message 'ip_mroute_add_del'.
-//
-//            "ip_mroute_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "next_hop_sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u32",
-//                "entry_flags"
-//            ],
-//            [
-//                "u32",
-//                "itf_flags"
-//            ],
-//            [
-//                "u32",
-//                "rpf_id"
-//            ],
-//            [
-//                "u32",
-//                "bier_imp"
-//            ],
-//            [
-//                "u16",
-//                "grp_address_length"
-//            ],
-//            [
-//                "u8",
-//                "next_hop_afi"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "is_local"
-//            ],
-//            [
-//                "u8",
-//                "grp_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "src_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "nh_address",
-//                16
-//            ],
-//            {
-//                "crc": "0xf44c17b1"
-//            }
+// IPMrouteAddDel represents VPP binary API message 'ip_mroute_add_del':
+//
+//     "ip_mroute_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "next_hop_sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u32",
+//         "entry_flags"
+//     ],
+//     [
+//         "u32",
+//         "itf_flags"
+//     ],
+//     [
+//         "u32",
+//         "rpf_id"
+//     ],
+//     [
+//         "u32",
+//         "bier_imp"
+//     ],
+//     [
+//         "u16",
+//         "grp_address_length"
+//     ],
+//     [
+//         "u8",
+//         "next_hop_afi"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "is_local"
+//     ],
+//     [
+//         "u8",
+//         "grp_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "src_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "nh_address",
+//         16
+//     ],
+//     {
+//         "crc": "0xf44c17b1"
+//     }
 //
 type IPMrouteAddDel struct {
        NextHopSwIfIndex uint32
@@ -1980,57 +2241,62 @@ func (*IPMrouteAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPMrouteAddDelReply represents the VPP binary API message 'ip_mroute_add_del_reply'.
-//
-//            "ip_mroute_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPMrouteAddDelReply represents VPP binary API message 'ip_mroute_add_del_reply':
+//
+//     "ip_mroute_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "stats_index"
+//     ],
+//     {
+//         "crc": "0x1992deab"
+//     }
 //
 type IPMrouteAddDelReply struct {
-       Retval int32
+       Retval     int32
+       StatsIndex uint32
 }
 
 func (*IPMrouteAddDelReply) GetMessageName() string {
        return "ip_mroute_add_del_reply"
 }
 func (*IPMrouteAddDelReply) GetCrcString() string {
-       return "e8d4e804"
+       return "1992deab"
 }
 func (*IPMrouteAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPMfibDump represents the VPP binary API message 'ip_mfib_dump'.
-//
-//            "ip_mfib_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// IPMfibDump represents VPP binary API message 'ip_mfib_dump':
+//
+//     "ip_mfib_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type IPMfibDump struct{}
 
@@ -2044,56 +2310,60 @@ func (*IPMfibDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPMfibDetails represents the VPP binary API message 'ip_mfib_details'.
-//
-//            "ip_mfib_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u32",
-//                "entry_flags"
-//            ],
-//            [
-//                "u32",
-//                "rpf_id"
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            [
-//                "u8",
-//                "grp_address",
-//                4
-//            ],
-//            [
-//                "u8",
-//                "src_address",
-//                4
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_fib_path_t",
-//                "path",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x5e530d5e"
-//            }
+// IPMfibDetails represents VPP binary API message 'ip_mfib_details':
+//
+//     "ip_mfib_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u32",
+//         "entry_flags"
+//     ],
+//     [
+//         "u32",
+//         "rpf_id"
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     [
+//         "u8",
+//         "grp_address",
+//         4
+//     ],
+//     [
+//         "u8",
+//         "src_address",
+//         4
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "stats_index"
+//     ],
+//     [
+//         "vl_api_fib_path_t",
+//         "path",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x21329a12"
+//     }
 //
 type IPMfibDetails struct {
        TableID       uint32
@@ -2103,6 +2373,7 @@ type IPMfibDetails struct {
        GrpAddress    []byte `struc:"[4]byte"`
        SrcAddress    []byte `struc:"[4]byte"`
        Count         uint32 `struc:"sizeof=Path"`
+       StatsIndex    uint32
        Path          []FibPath
 }
 
@@ -2110,30 +2381,30 @@ func (*IPMfibDetails) GetMessageName() string {
        return "ip_mfib_details"
 }
 func (*IPMfibDetails) GetCrcString() string {
-       return "5e530d5e"
+       return "21329a12"
 }
 func (*IPMfibDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IP6MfibDump represents the VPP binary API message 'ip6_mfib_dump'.
-//
-//            "ip6_mfib_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// IP6MfibDump represents VPP binary API message 'ip6_mfib_dump':
+//
+//     "ip6_mfib_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type IP6MfibDump struct{}
 
@@ -2147,48 +2418,48 @@ func (*IP6MfibDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IP6MfibDetails represents the VPP binary API message 'ip6_mfib_details'.
-//
-//            "ip6_mfib_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            [
-//                "u8",
-//                "grp_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "src_address",
-//                16
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_fib_path_t",
-//                "path",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xe02dcb4b"
-//            }
+// IP6MfibDetails represents VPP binary API message 'ip6_mfib_details':
+//
+//     "ip6_mfib_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     [
+//         "u8",
+//         "grp_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "src_address",
+//         16
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_fib_path_t",
+//         "path",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xe02dcb4b"
+//     }
 //
 type IP6MfibDetails struct {
        TableID       uint32
@@ -2209,41 +2480,37 @@ func (*IP6MfibDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPAddressDetails represents the VPP binary API message 'ip_address_details'.
-//
-//            "ip_address_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "ip",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "prefix_length"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0xbc7442f2"
-//            }
+// IPAddressDetails represents VPP binary API message 'ip_address_details':
+//
+//     "ip_address_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "ip",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "prefix_length"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x9bc25966"
+//     }
 //
 type IPAddressDetails struct {
        IP           []byte `struc:"[16]byte"`
@@ -2256,38 +2523,38 @@ func (*IPAddressDetails) GetMessageName() string {
        return "ip_address_details"
 }
 func (*IPAddressDetails) GetCrcString() string {
-       return "bc7442f2"
+       return "9bc25966"
 }
 func (*IPAddressDetails) GetMessageType() api.MessageType {
-       return api.RequestMessage
+       return api.ReplyMessage
 }
 
-// IPAddressDump represents the VPP binary API message 'ip_address_dump'.
-//
-//            "ip_address_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0x6b7bcd0a"
-//            }
+// IPAddressDump represents VPP binary API message 'ip_address_dump':
+//
+//     "ip_address_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x6b7bcd0a"
+//     }
 //
 type IPAddressDump struct {
        SwIfIndex uint32
@@ -2304,32 +2571,28 @@ func (*IPAddressDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPUnnumberedDetails represents the VPP binary API message 'ip_unnumbered_details'.
-//
-//            "ip_unnumbered_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "ip_sw_if_index"
-//            ],
-//            {
-//                "crc": "0x05b717ca"
-//            }
+// IPUnnumberedDetails represents VPP binary API message 'ip_unnumbered_details':
+//
+//     "ip_unnumbered_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "ip_sw_if_index"
+//     ],
+//     {
+//         "crc": "0xae694cf4"
+//     }
 //
 type IPUnnumberedDetails struct {
        SwIfIndex   uint32
@@ -2340,34 +2603,34 @@ func (*IPUnnumberedDetails) GetMessageName() string {
        return "ip_unnumbered_details"
 }
 func (*IPUnnumberedDetails) GetCrcString() string {
-       return "05b717ca"
+       return "ae694cf4"
 }
 func (*IPUnnumberedDetails) GetMessageType() api.MessageType {
-       return api.RequestMessage
+       return api.ReplyMessage
 }
 
-// IPUnnumberedDump represents the VPP binary API message 'ip_unnumbered_dump'.
-//
-//            "ip_unnumbered_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+// IPUnnumberedDump represents VPP binary API message 'ip_unnumbered_dump':
+//
+//     "ip_unnumbered_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type IPUnnumberedDump struct {
        SwIfIndex uint32
@@ -2383,32 +2646,31 @@ func (*IPUnnumberedDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPDetails represents the VPP binary API message 'ip_details'.
-//
-//            "ip_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0x452ffc5a"
-//            }
+// IPDetails represents VPP binary API message 'ip_details':
+//
+//     "ip_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x8bb37ec4"
+//     }
 //
 type IPDetails struct {
        SwIfIndex uint32
-       Context   uint32
        IsIPv6    uint8
 }
 
@@ -2416,34 +2678,34 @@ func (*IPDetails) GetMessageName() string {
        return "ip_details"
 }
 func (*IPDetails) GetCrcString() string {
-       return "452ffc5a"
+       return "8bb37ec4"
 }
 func (*IPDetails) GetMessageType() api.MessageType {
-       return api.OtherMessage
-}
-
-// IPDump represents the VPP binary API message 'ip_dump'.
-//
-//            "ip_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0xde883da4"
-//            }
+       return api.ReplyMessage
+}
+
+// IPDump represents VPP binary API message 'ip_dump':
+//
+//     "ip_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0xde883da4"
+//     }
 //
 type IPDump struct {
        IsIPv6 uint8
@@ -2459,24 +2721,24 @@ func (*IPDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MfibSignalDump represents the VPP binary API message 'mfib_signal_dump'.
-//
-//            "mfib_signal_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// MfibSignalDump represents VPP binary API message 'mfib_signal_dump':
+//
+//     "mfib_signal_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type MfibSignalDump struct{}
 
@@ -2490,55 +2752,51 @@ func (*MfibSignalDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MfibSignalDetails represents the VPP binary API message 'mfib_signal_details'.
-//
-//            "mfib_signal_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "table_id"
-//            ],
-//            [
-//                "u16",
-//                "grp_address_len"
-//            ],
-//            [
-//                "u8",
-//                "grp_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "src_address",
-//                16
-//            ],
-//            [
-//                "u16",
-//                "ip_packet_len"
-//            ],
-//            [
-//                "u8",
-//                "ip_packet_data",
-//                256
-//            ],
-//            {
-//                "crc": "0x791bbeab"
-//            }
+// MfibSignalDetails represents VPP binary API message 'mfib_signal_details':
+//
+//     "mfib_signal_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u16",
+//         "grp_address_len"
+//     ],
+//     [
+//         "u8",
+//         "grp_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "src_address",
+//         16
+//     ],
+//     [
+//         "u16",
+//         "ip_packet_len"
+//     ],
+//     [
+//         "u8",
+//         "ip_packet_data",
+//         256
+//     ],
+//     {
+//         "crc": "0x3f5f03f5"
+//     }
 //
 type MfibSignalDetails struct {
        SwIfIndex     uint32
@@ -2554,42 +2812,42 @@ func (*MfibSignalDetails) GetMessageName() string {
        return "mfib_signal_details"
 }
 func (*MfibSignalDetails) GetCrcString() string {
-       return "791bbeab"
+       return "3f5f03f5"
 }
 func (*MfibSignalDetails) GetMessageType() api.MessageType {
-       return api.RequestMessage
+       return api.ReplyMessage
 }
 
-// IPPuntPolice represents the VPP binary API message 'ip_punt_police'.
-//
-//            "ip_punt_police",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "policer_index"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "is_ip6"
-//            ],
-//            {
-//                "crc": "0x38691592"
-//            }
+// IPPuntPolice represents VPP binary API message 'ip_punt_police':
+//
+//     "ip_punt_police",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "policer_index"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "is_ip6"
+//     ],
+//     {
+//         "crc": "0x38691592"
+//     }
 //
 type IPPuntPolice struct {
        PolicerIndex uint32
@@ -2607,24 +2865,24 @@ func (*IPPuntPolice) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPPuntPoliceReply represents the VPP binary API message 'ip_punt_police_reply'.
-//
-//            "ip_punt_police_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPPuntPoliceReply represents VPP binary API message 'ip_punt_police_reply':
+//
+//     "ip_punt_police_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPPuntPoliceReply struct {
        Retval int32
@@ -2640,82 +2898,66 @@ func (*IPPuntPoliceReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPPuntRedirect represents the VPP binary API message 'ip_punt_redirect'.
-//
-//            "ip_punt_redirect",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "rx_sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "tx_sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "is_ip6"
-//            ],
-//            [
-//                "u8",
-//                "nh",
-//                16
-//            ],
-//            {
-//                "crc": "0x996b6603"
-//            }
+// IPPuntRedirect represents VPP binary API message 'ip_punt_redirect':
+//
+//     "ip_punt_redirect",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "vl_api_punt_redirect_t",
+//         "punt"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     {
+//         "crc": "0xa953495b"
+//     }
 //
 type IPPuntRedirect struct {
-       RxSwIfIndex uint32
-       TxSwIfIndex uint32
-       IsAdd       uint8
-       IsIP6       uint8
-       Nh          []byte `struc:"[16]byte"`
+       Punt  PuntRedirect
+       IsAdd uint8
 }
 
 func (*IPPuntRedirect) GetMessageName() string {
        return "ip_punt_redirect"
 }
 func (*IPPuntRedirect) GetCrcString() string {
-       return "996b6603"
+       return "a953495b"
 }
 func (*IPPuntRedirect) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPPuntRedirectReply represents the VPP binary API message 'ip_punt_redirect_reply'.
-//
-//            "ip_punt_redirect_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPPuntRedirectReply represents VPP binary API message 'ip_punt_redirect_reply':
+//
+//     "ip_punt_redirect_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPPuntRedirectReply struct {
        Retval int32
@@ -2731,45 +2973,120 @@ func (*IPPuntRedirectReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPContainerProxyAddDel represents the VPP binary API message 'ip_container_proxy_add_del'.
-//
-//            "ip_container_proxy_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "ip",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "is_ip4"
-//            ],
-//            [
-//                "u8",
-//                "plen"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            {
-//                "crc": "0x0a355d39"
-//            }
+// IPPuntRedirectDump represents VPP binary API message 'ip_punt_redirect_dump':
+//
+//     "ip_punt_redirect_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x6b7bcd0a"
+//     }
+//
+type IPPuntRedirectDump struct {
+       SwIfIndex uint32
+       IsIPv6    uint8
+}
+
+func (*IPPuntRedirectDump) GetMessageName() string {
+       return "ip_punt_redirect_dump"
+}
+func (*IPPuntRedirectDump) GetCrcString() string {
+       return "6b7bcd0a"
+}
+func (*IPPuntRedirectDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// IPPuntRedirectDetails represents VPP binary API message 'ip_punt_redirect_details':
+//
+//     "ip_punt_redirect_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "vl_api_punt_redirect_t",
+//         "punt"
+//     ],
+//     {
+//         "crc": "0xa47f70da"
+//     }
+//
+type IPPuntRedirectDetails struct {
+       Punt PuntRedirect
+}
+
+func (*IPPuntRedirectDetails) GetMessageName() string {
+       return "ip_punt_redirect_details"
+}
+func (*IPPuntRedirectDetails) GetCrcString() string {
+       return "a47f70da"
+}
+func (*IPPuntRedirectDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// IPContainerProxyAddDel represents VPP binary API message 'ip_container_proxy_add_del':
+//
+//     "ip_container_proxy_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "ip",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "is_ip4"
+//     ],
+//     [
+//         "u8",
+//         "plen"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     {
+//         "crc": "0x0a355d39"
+//     }
 //
 type IPContainerProxyAddDel struct {
        IP        []byte `struc:"[16]byte"`
@@ -2789,24 +3106,24 @@ func (*IPContainerProxyAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPContainerProxyAddDelReply represents the VPP binary API message 'ip_container_proxy_add_del_reply'.
-//
-//            "ip_container_proxy_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPContainerProxyAddDelReply represents VPP binary API message 'ip_container_proxy_add_del_reply':
+//
+//     "ip_container_proxy_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPContainerProxyAddDelReply struct {
        Retval int32
@@ -2822,59 +3139,128 @@ func (*IPContainerProxyAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPSourceAndPortRangeCheckAddDel represents the VPP binary API message 'ip_source_and_port_range_check_add_del'.
-//
-//            "ip_source_and_port_range_check_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u8",
-//                "mask_length"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "number_of_ranges"
-//            ],
-//            [
-//                "u16",
-//                "low_ports",
-//                32
-//            ],
-//            [
-//                "u16",
-//                "high_ports",
-//                32
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            {
-//                "crc": "0x03d6b03a"
-//            }
+// IPContainerProxyDump represents VPP binary API message 'ip_container_proxy_dump':
+//
+//     "ip_container_proxy_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
+//
+type IPContainerProxyDump struct{}
+
+func (*IPContainerProxyDump) GetMessageName() string {
+       return "ip_container_proxy_dump"
+}
+func (*IPContainerProxyDump) GetCrcString() string {
+       return "51077d14"
+}
+func (*IPContainerProxyDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// IPContainerProxyDetails represents VPP binary API message 'ip_container_proxy_details':
+//
+//     "ip_container_proxy_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "vl_api_prefix_t",
+//         "prefix"
+//     ],
+//     {
+//         "crc": "0xd528df63"
+//     }
+//
+type IPContainerProxyDetails struct {
+       SwIfIndex uint32
+       Prefix    Prefix
+}
+
+func (*IPContainerProxyDetails) GetMessageName() string {
+       return "ip_container_proxy_details"
+}
+func (*IPContainerProxyDetails) GetCrcString() string {
+       return "d528df63"
+}
+func (*IPContainerProxyDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// IPSourceAndPortRangeCheckAddDel represents VPP binary API message 'ip_source_and_port_range_check_add_del':
+//
+//     "ip_source_and_port_range_check_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "mask_length"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "number_of_ranges"
+//     ],
+//     [
+//         "u16",
+//         "low_ports",
+//         32
+//     ],
+//     [
+//         "u16",
+//         "high_ports",
+//         32
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     {
+//         "crc": "0x03d6b03a"
+//     }
 //
 type IPSourceAndPortRangeCheckAddDel struct {
        IsIPv6         uint8
@@ -2897,24 +3283,24 @@ func (*IPSourceAndPortRangeCheckAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPSourceAndPortRangeCheckAddDelReply represents the VPP binary API message 'ip_source_and_port_range_check_add_del_reply'.
-//
-//            "ip_source_and_port_range_check_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPSourceAndPortRangeCheckAddDelReply represents VPP binary API message 'ip_source_and_port_range_check_add_del_reply':
+//
+//     "ip_source_and_port_range_check_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPSourceAndPortRangeCheckAddDelReply struct {
        Retval int32
@@ -2930,48 +3316,48 @@ func (*IPSourceAndPortRangeCheckAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPSourceAndPortRangeCheckInterfaceAddDel represents the VPP binary API message 'ip_source_and_port_range_check_interface_add_del'.
-//
-//            "ip_source_and_port_range_check_interface_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "tcp_in_vrf_id"
-//            ],
-//            [
-//                "u32",
-//                "tcp_out_vrf_id"
-//            ],
-//            [
-//                "u32",
-//                "udp_in_vrf_id"
-//            ],
-//            [
-//                "u32",
-//                "udp_out_vrf_id"
-//            ],
-//            {
-//                "crc": "0x6966bc44"
-//            }
+// IPSourceAndPortRangeCheckInterfaceAddDel represents VPP binary API message 'ip_source_and_port_range_check_interface_add_del':
+//
+//     "ip_source_and_port_range_check_interface_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "tcp_in_vrf_id"
+//     ],
+//     [
+//         "u32",
+//         "tcp_out_vrf_id"
+//     ],
+//     [
+//         "u32",
+//         "udp_in_vrf_id"
+//     ],
+//     [
+//         "u32",
+//         "udp_out_vrf_id"
+//     ],
+//     {
+//         "crc": "0x6966bc44"
+//     }
 //
 type IPSourceAndPortRangeCheckInterfaceAddDel struct {
        IsAdd       uint8
@@ -2992,24 +3378,24 @@ func (*IPSourceAndPortRangeCheckInterfaceAddDel) GetMessageType() api.MessageTyp
        return api.RequestMessage
 }
 
-// IPSourceAndPortRangeCheckInterfaceAddDelReply represents the VPP binary API message 'ip_source_and_port_range_check_interface_add_del_reply'.
-//
-//            "ip_source_and_port_range_check_interface_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPSourceAndPortRangeCheckInterfaceAddDelReply represents VPP binary API message 'ip_source_and_port_range_check_interface_add_del_reply':
+//
+//     "ip_source_and_port_range_check_interface_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPSourceAndPortRangeCheckInterfaceAddDelReply struct {
        Retval int32
@@ -3025,48 +3411,128 @@ func (*IPSourceAndPortRangeCheckInterfaceAddDelReply) GetMessageType() api.Messa
        return api.ReplyMessage
 }
 
-// IPScanNeighborEnableDisable represents the VPP binary API message 'ip_scan_neighbor_enable_disable'.
-//
-//            "ip_scan_neighbor_enable_disable",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "mode"
-//            ],
-//            [
-//                "u8",
-//                "scan_interval"
-//            ],
-//            [
-//                "u8",
-//                "max_proc_time"
-//            ],
-//            [
-//                "u8",
-//                "max_update"
-//            ],
-//            [
-//                "u8",
-//                "scan_int_delay"
-//            ],
-//            [
-//                "u8",
-//                "stale_threshold"
-//            ],
-//            {
-//                "crc": "0x0a6bf57a"
-//            }
+// IPSourceCheckInterfaceAddDel represents VPP binary API message 'ip_source_check_interface_add_del':
+//
+//     "ip_source_check_interface_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u8",
+//         "loose"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x0a60152a"
+//     }
+//
+type IPSourceCheckInterfaceAddDel struct {
+       IsAdd     uint8
+       Loose     uint8
+       SwIfIndex uint32
+}
+
+func (*IPSourceCheckInterfaceAddDel) GetMessageName() string {
+       return "ip_source_check_interface_add_del"
+}
+func (*IPSourceCheckInterfaceAddDel) GetCrcString() string {
+       return "0a60152a"
+}
+func (*IPSourceCheckInterfaceAddDel) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// IPSourceCheckInterfaceAddDelReply represents VPP binary API message 'ip_source_check_interface_add_del_reply':
+//
+//     "ip_source_check_interface_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type IPSourceCheckInterfaceAddDelReply struct {
+       Retval int32
+}
+
+func (*IPSourceCheckInterfaceAddDelReply) GetMessageName() string {
+       return "ip_source_check_interface_add_del_reply"
+}
+func (*IPSourceCheckInterfaceAddDelReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*IPSourceCheckInterfaceAddDelReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// IPScanNeighborEnableDisable represents VPP binary API message 'ip_scan_neighbor_enable_disable':
+//
+//     "ip_scan_neighbor_enable_disable",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "mode"
+//     ],
+//     [
+//         "u8",
+//         "scan_interval"
+//     ],
+//     [
+//         "u8",
+//         "max_proc_time"
+//     ],
+//     [
+//         "u8",
+//         "max_update"
+//     ],
+//     [
+//         "u8",
+//         "scan_int_delay"
+//     ],
+//     [
+//         "u8",
+//         "stale_threshold"
+//     ],
+//     {
+//         "crc": "0x0a6bf57a"
+//     }
 //
 type IPScanNeighborEnableDisable struct {
        Mode           uint8
@@ -3087,24 +3553,24 @@ func (*IPScanNeighborEnableDisable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPScanNeighborEnableDisableReply represents the VPP binary API message 'ip_scan_neighbor_enable_disable_reply'.
-//
-//            "ip_scan_neighbor_enable_disable_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPScanNeighborEnableDisableReply represents VPP binary API message 'ip_scan_neighbor_enable_disable_reply':
+//
+//     "ip_scan_neighbor_enable_disable_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPScanNeighborEnableDisableReply struct {
        Retval int32
@@ -3120,37 +3586,37 @@ func (*IPScanNeighborEnableDisableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPProbeNeighbor represents the VPP binary API message 'ip_probe_neighbor'.
-//
-//            "ip_probe_neighbor",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "dst_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0x1e44bfd7"
-//            }
+// IPProbeNeighbor represents VPP binary API message 'ip_probe_neighbor':
+//
+//     "ip_probe_neighbor",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "dst_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x1e44bfd7"
+//     }
 //
 type IPProbeNeighbor struct {
        SwIfIndex  uint32
@@ -3168,24 +3634,24 @@ func (*IPProbeNeighbor) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPProbeNeighborReply represents the VPP binary API message 'ip_probe_neighbor_reply'.
-//
-//            "ip_probe_neighbor_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPProbeNeighborReply represents VPP binary API message 'ip_probe_neighbor_reply':
+//
+//     "ip_probe_neighbor_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPProbeNeighborReply struct {
        Retval int32
@@ -3201,36 +3667,36 @@ func (*IPProbeNeighborReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantIP4ArpEvents represents the VPP binary API message 'want_ip4_arp_events'.
-//
-//            "want_ip4_arp_events",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u32",
-//                "address"
-//            ],
-//            {
-//                "crc": "0x77e06379"
-//            }
+// WantIP4ArpEvents represents VPP binary API message 'want_ip4_arp_events':
+//
+//     "want_ip4_arp_events",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u32",
+//         "address"
+//     ],
+//     {
+//         "crc": "0x77e06379"
+//     }
 //
 type WantIP4ArpEvents struct {
        EnableDisable uint8
@@ -3248,24 +3714,24 @@ func (*WantIP4ArpEvents) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP4ArpEventsReply represents the VPP binary API message 'want_ip4_arp_events_reply'.
-//
-//            "want_ip4_arp_events_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP4ArpEventsReply represents VPP binary API message 'want_ip4_arp_events_reply':
+//
+//     "want_ip4_arp_events_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP4ArpEventsReply struct {
        Retval int32
@@ -3281,41 +3747,41 @@ func (*WantIP4ArpEventsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IP4ArpEvent represents the VPP binary API message 'ip4_arp_event'.
-//
-//            "ip4_arp_event",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "address"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "new_mac",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "mac_ip"
-//            ],
-//            {
-//                "crc": "0xef7235f7"
-//            }
+// IP4ArpEvent represents VPP binary API message 'ip4_arp_event':
+//
+//     "ip4_arp_event",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "address"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "new_mac",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "mac_ip"
+//     ],
+//     {
+//         "crc": "0xef7235f7"
+//     }
 //
 type IP4ArpEvent struct {
        Address   uint32
@@ -3335,37 +3801,37 @@ func (*IP4ArpEvent) GetMessageType() api.MessageType {
        return api.EventMessage
 }
 
-// WantIP6NdEvents represents the VPP binary API message 'want_ip6_nd_events'.
-//
-//            "want_ip6_nd_events",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            {
-//                "crc": "0x1cf65fbb"
-//            }
+// WantIP6NdEvents represents VPP binary API message 'want_ip6_nd_events':
+//
+//     "want_ip6_nd_events",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         16
+//     ],
+//     {
+//         "crc": "0x1cf65fbb"
+//     }
 //
 type WantIP6NdEvents struct {
        EnableDisable uint8
@@ -3383,24 +3849,24 @@ func (*WantIP6NdEvents) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP6NdEventsReply represents the VPP binary API message 'want_ip6_nd_events_reply'.
-//
-//            "want_ip6_nd_events_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP6NdEventsReply represents VPP binary API message 'want_ip6_nd_events_reply':
+//
+//     "want_ip6_nd_events_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP6NdEventsReply struct {
        Retval int32
@@ -3416,42 +3882,42 @@ func (*WantIP6NdEventsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IP6NdEvent represents the VPP binary API message 'ip6_nd_event'.
-//
-//            "ip6_nd_event",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "new_mac",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "mac_ip"
-//            ],
-//            {
-//                "crc": "0x96ab2fdd"
-//            }
+// IP6NdEvent represents VPP binary API message 'ip6_nd_event':
+//
+//     "ip6_nd_event",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "new_mac",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "mac_ip"
+//     ],
+//     {
+//         "crc": "0x96ab2fdd"
+//     }
 //
 type IP6NdEvent struct {
        PID       uint32
@@ -3471,32 +3937,32 @@ func (*IP6NdEvent) GetMessageType() api.MessageType {
        return api.EventMessage
 }
 
-// WantIP6RaEvents represents the VPP binary API message 'want_ip6_ra_events'.
-//
-//            "want_ip6_ra_events",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x05b454b5"
-//            }
+// WantIP6RaEvents represents VPP binary API message 'want_ip6_ra_events':
+//
+//     "want_ip6_ra_events",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x05b454b5"
+//     }
 //
 type WantIP6RaEvents struct {
        EnableDisable uint8
@@ -3513,24 +3979,24 @@ func (*WantIP6RaEvents) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP6RaEventsReply represents the VPP binary API message 'want_ip6_ra_events_reply'.
-//
-//            "want_ip6_ra_events_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP6RaEventsReply represents VPP binary API message 'want_ip6_ra_events_reply':
+//
+//     "want_ip6_ra_events_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP6RaEventsReply struct {
        Retval int32
@@ -3546,63 +4012,63 @@ func (*WantIP6RaEventsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IP6RaEvent represents the VPP binary API message 'ip6_ra_event'.
-//
-//            "ip6_ra_event",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "router_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "current_hop_limit"
-//            ],
-//            [
-//                "u8",
-//                "flags"
-//            ],
-//            [
-//                "u16",
-//                "router_lifetime_in_sec"
-//            ],
-//            [
-//                "u32",
-//                "neighbor_reachable_time_in_msec"
-//            ],
-//            [
-//                "u32",
-//                "time_in_msec_between_retransmitted_neighbor_solicitations"
-//            ],
-//            [
-//                "u32",
-//                "n_prefixes"
-//            ],
-//            [
-//                "vl_api_ip6_ra_prefix_info_t",
-//                "prefixes",
-//                0,
-//                "n_prefixes"
-//            ],
-//            {
-//                "crc": "0xc5e54257"
-//            }
+// IP6RaEvent represents VPP binary API message 'ip6_ra_event':
+//
+//     "ip6_ra_event",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "router_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "current_hop_limit"
+//     ],
+//     [
+//         "u8",
+//         "flags"
+//     ],
+//     [
+//         "u16",
+//         "router_lifetime_in_sec"
+//     ],
+//     [
+//         "u32",
+//         "neighbor_reachable_time_in_msec"
+//     ],
+//     [
+//         "u32",
+//         "time_in_msec_between_retransmitted_neighbor_solicitations"
+//     ],
+//     [
+//         "u32",
+//         "n_prefixes"
+//     ],
+//     [
+//         "vl_api_ip6_ra_prefix_info_t",
+//         "prefixes",
+//         0,
+//         "n_prefixes"
+//     ],
+//     {
+//         "crc": "0xc5e54257"
+//     }
 //
 type IP6RaEvent struct {
        PID                                                 uint32
@@ -3627,32 +4093,32 @@ func (*IP6RaEvent) GetMessageType() api.MessageType {
        return api.EventMessage
 }
 
-// ProxyArpAddDel represents the VPP binary API message 'proxy_arp_add_del'.
-//
-//            "proxy_arp_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "vl_api_proxy_arp_t",
-//                "proxy"
-//            ],
-//            {
-//                "crc": "0x227988d9"
-//            }
+// ProxyArpAddDel represents VPP binary API message 'proxy_arp_add_del':
+//
+//     "proxy_arp_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "vl_api_proxy_arp_t",
+//         "proxy"
+//     ],
+//     {
+//         "crc": "0x227988d9"
+//     }
 //
 type ProxyArpAddDel struct {
        IsAdd uint8
@@ -3669,24 +4135,24 @@ func (*ProxyArpAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ProxyArpAddDelReply represents the VPP binary API message 'proxy_arp_add_del_reply'.
-//
-//            "proxy_arp_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// ProxyArpAddDelReply represents VPP binary API message 'proxy_arp_add_del_reply':
+//
+//     "proxy_arp_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type ProxyArpAddDelReply struct {
        Retval int32
@@ -3702,24 +4168,24 @@ func (*ProxyArpAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ProxyArpDump represents the VPP binary API message 'proxy_arp_dump'.
-//
-//            "proxy_arp_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// ProxyArpDump represents VPP binary API message 'proxy_arp_dump':
+//
+//     "proxy_arp_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type ProxyArpDump struct{}
 
@@ -3733,24 +4199,24 @@ func (*ProxyArpDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ProxyArpDetails represents the VPP binary API message 'proxy_arp_details'.
-//
-//            "proxy_arp_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "vl_api_proxy_arp_t",
-//                "proxy"
-//            ],
-//            {
-//                "crc": "0x9b707c77"
-//            }
+// ProxyArpDetails represents VPP binary API message 'proxy_arp_details':
+//
+//     "proxy_arp_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "vl_api_proxy_arp_t",
+//         "proxy"
+//     ],
+//     {
+//         "crc": "0x9b707c77"
+//     }
 //
 type ProxyArpDetails struct {
        Proxy ProxyArp
@@ -3766,32 +4232,32 @@ func (*ProxyArpDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ProxyArpIntfcEnableDisable represents the VPP binary API message 'proxy_arp_intfc_enable_disable'.
-//
-//            "proxy_arp_intfc_enable_disable",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "enable_disable"
-//            ],
-//            {
-//                "crc": "0x69d24598"
-//            }
+// ProxyArpIntfcEnableDisable represents VPP binary API message 'proxy_arp_intfc_enable_disable':
+//
+//     "proxy_arp_intfc_enable_disable",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "enable_disable"
+//     ],
+//     {
+//         "crc": "0x69d24598"
+//     }
 //
 type ProxyArpIntfcEnableDisable struct {
        SwIfIndex     uint32
@@ -3808,24 +4274,24 @@ func (*ProxyArpIntfcEnableDisable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ProxyArpIntfcEnableDisableReply represents the VPP binary API message 'proxy_arp_intfc_enable_disable_reply'.
-//
-//            "proxy_arp_intfc_enable_disable_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// ProxyArpIntfcEnableDisableReply represents VPP binary API message 'proxy_arp_intfc_enable_disable_reply':
+//
+//     "proxy_arp_intfc_enable_disable_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type ProxyArpIntfcEnableDisableReply struct {
        Retval int32
@@ -3841,24 +4307,24 @@ func (*ProxyArpIntfcEnableDisableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ProxyArpIntfcDump represents the VPP binary API message 'proxy_arp_intfc_dump'.
-//
-//            "proxy_arp_intfc_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// ProxyArpIntfcDump represents VPP binary API message 'proxy_arp_intfc_dump':
+//
+//     "proxy_arp_intfc_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type ProxyArpIntfcDump struct{}
 
@@ -3872,24 +4338,24 @@ func (*ProxyArpIntfcDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ProxyArpIntfcDetails represents the VPP binary API message 'proxy_arp_intfc_details'.
-//
-//            "proxy_arp_intfc_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xf6458e5f"
-//            }
+// ProxyArpIntfcDetails represents VPP binary API message 'proxy_arp_intfc_details':
+//
+//     "proxy_arp_intfc_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xf6458e5f"
+//     }
 //
 type ProxyArpIntfcDetails struct {
        SwIfIndex uint32
@@ -3905,32 +4371,32 @@ func (*ProxyArpIntfcDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ResetFib represents the VPP binary API message 'reset_fib'.
-//
-//            "reset_fib",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            {
-//                "crc": "0x8553ebd9"
-//            }
+// ResetFib represents VPP binary API message 'reset_fib':
+//
+//     "reset_fib",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     {
+//         "crc": "0x8553ebd9"
+//     }
 //
 type ResetFib struct {
        VrfID  uint32
@@ -3947,24 +4413,24 @@ func (*ResetFib) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ResetFibReply represents the VPP binary API message 'reset_fib_reply'.
-//
-//            "reset_fib_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// ResetFibReply represents VPP binary API message 'reset_fib_reply':
+//
+//     "reset_fib_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type ResetFibReply struct {
        Retval int32
@@ -3980,32 +4446,32 @@ func (*ResetFibReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SetArpNeighborLimit represents the VPP binary API message 'set_arp_neighbor_limit'.
-//
-//            "set_arp_neighbor_limit",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_ipv6"
-//            ],
-//            [
-//                "u32",
-//                "arp_neighbor_limit"
-//            ],
-//            {
-//                "crc": "0x97d01fd6"
-//            }
+// SetArpNeighborLimit represents VPP binary API message 'set_arp_neighbor_limit':
+//
+//     "set_arp_neighbor_limit",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_ipv6"
+//     ],
+//     [
+//         "u32",
+//         "arp_neighbor_limit"
+//     ],
+//     {
+//         "crc": "0x97d01fd6"
+//     }
 //
 type SetArpNeighborLimit struct {
        IsIPv6           uint8
@@ -4022,24 +4488,24 @@ func (*SetArpNeighborLimit) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SetArpNeighborLimitReply represents the VPP binary API message 'set_arp_neighbor_limit_reply'.
-//
-//            "set_arp_neighbor_limit_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// SetArpNeighborLimitReply represents VPP binary API message 'set_arp_neighbor_limit_reply':
+//
+//     "set_arp_neighbor_limit_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type SetArpNeighborLimitReply struct {
        Retval int32
@@ -4055,48 +4521,48 @@ func (*SetArpNeighborLimitReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IoamEnable represents the VPP binary API message 'ioam_enable'.
-//
-//            "ioam_enable",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u16",
-//                "id"
-//            ],
-//            [
-//                "u8",
-//                "seqno"
-//            ],
-//            [
-//                "u8",
-//                "analyse"
-//            ],
-//            [
-//                "u8",
-//                "pot_enable"
-//            ],
-//            [
-//                "u8",
-//                "trace_enable"
-//            ],
-//            [
-//                "u32",
-//                "node_id"
-//            ],
-//            {
-//                "crc": "0x9392e032"
-//            }
+// IoamEnable represents VPP binary API message 'ioam_enable':
+//
+//     "ioam_enable",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u16",
+//         "id"
+//     ],
+//     [
+//         "u8",
+//         "seqno"
+//     ],
+//     [
+//         "u8",
+//         "analyse"
+//     ],
+//     [
+//         "u8",
+//         "pot_enable"
+//     ],
+//     [
+//         "u8",
+//         "trace_enable"
+//     ],
+//     [
+//         "u32",
+//         "node_id"
+//     ],
+//     {
+//         "crc": "0x9392e032"
+//     }
 //
 type IoamEnable struct {
        ID          uint16
@@ -4117,24 +4583,24 @@ func (*IoamEnable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IoamEnableReply represents the VPP binary API message 'ioam_enable_reply'.
-//
-//            "ioam_enable_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IoamEnableReply represents VPP binary API message 'ioam_enable_reply':
+//
+//     "ioam_enable_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IoamEnableReply struct {
        Retval int32
@@ -4150,28 +4616,28 @@ func (*IoamEnableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IoamDisable represents the VPP binary API message 'ioam_disable'.
-//
-//            "ioam_disable",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u16",
-//                "id"
-//            ],
-//            {
-//                "crc": "0x6b16a45e"
-//            }
+// IoamDisable represents VPP binary API message 'ioam_disable':
+//
+//     "ioam_disable",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u16",
+//         "id"
+//     ],
+//     {
+//         "crc": "0x6b16a45e"
+//     }
 //
 type IoamDisable struct {
        ID uint16
@@ -4187,24 +4653,24 @@ func (*IoamDisable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IoamDisableReply represents the VPP binary API message 'ioam_disable_reply'.
-//
-//            "ioam_disable_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IoamDisableReply represents VPP binary API message 'ioam_disable_reply':
+//
+//     "ioam_disable_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IoamDisableReply struct {
        Retval int32
@@ -4220,40 +4686,40 @@ func (*IoamDisableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPReassemblySet represents the VPP binary API message 'ip_reassembly_set'.
-//
-//            "ip_reassembly_set",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "timeout_ms"
-//            ],
-//            [
-//                "u32",
-//                "max_reassemblies"
-//            ],
-//            [
-//                "u32",
-//                "expire_walk_interval_ms"
-//            ],
-//            [
-//                "u8",
-//                "is_ip6"
-//            ],
-//            {
-//                "crc": "0x1db184de"
-//            }
+// IPReassemblySet represents VPP binary API message 'ip_reassembly_set':
+//
+//     "ip_reassembly_set",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "timeout_ms"
+//     ],
+//     [
+//         "u32",
+//         "max_reassemblies"
+//     ],
+//     [
+//         "u32",
+//         "expire_walk_interval_ms"
+//     ],
+//     [
+//         "u8",
+//         "is_ip6"
+//     ],
+//     {
+//         "crc": "0x1db184de"
+//     }
 //
 type IPReassemblySet struct {
        TimeoutMs            uint32
@@ -4272,24 +4738,24 @@ func (*IPReassemblySet) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPReassemblySetReply represents the VPP binary API message 'ip_reassembly_set_reply'.
-//
-//            "ip_reassembly_set_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPReassemblySetReply represents VPP binary API message 'ip_reassembly_set_reply':
+//
+//     "ip_reassembly_set_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPReassemblySetReply struct {
        Retval int32
@@ -4305,28 +4771,28 @@ func (*IPReassemblySetReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// IPReassemblyGet represents the VPP binary API message 'ip_reassembly_get'.
-//
-//            "ip_reassembly_get",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_ip6"
-//            ],
-//            {
-//                "crc": "0x6fe91190"
-//            }
+// IPReassemblyGet represents VPP binary API message 'ip_reassembly_get':
+//
+//     "ip_reassembly_get",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_ip6"
+//     ],
+//     {
+//         "crc": "0x6fe91190"
+//     }
 //
 type IPReassemblyGet struct {
        IsIP6 uint8
@@ -4342,44 +4808,40 @@ func (*IPReassemblyGet) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPReassemblyGetReply represents the VPP binary API message 'ip_reassembly_get_reply'.
-//
-//            "ip_reassembly_get_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "timeout_ms"
-//            ],
-//            [
-//                "u32",
-//                "max_reassemblies"
-//            ],
-//            [
-//                "u32",
-//                "expire_walk_interval_ms"
-//            ],
-//            [
-//                "u8",
-//                "is_ip6"
-//            ],
-//            {
-//                "crc": "0xd746fc57"
-//            }
+// IPReassemblyGetReply represents VPP binary API message 'ip_reassembly_get_reply':
+//
+//     "ip_reassembly_get_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "timeout_ms"
+//     ],
+//     [
+//         "u32",
+//         "max_reassemblies"
+//     ],
+//     [
+//         "u32",
+//         "expire_walk_interval_ms"
+//     ],
+//     [
+//         "u8",
+//         "is_ip6"
+//     ],
+//     {
+//         "crc": "0x1f90afd1"
+//     }
 //
 type IPReassemblyGetReply struct {
        Retval               int32
@@ -4393,42 +4855,42 @@ func (*IPReassemblyGetReply) GetMessageName() string {
        return "ip_reassembly_get_reply"
 }
 func (*IPReassemblyGetReply) GetCrcString() string {
-       return "d746fc57"
+       return "1f90afd1"
 }
 func (*IPReassemblyGetReply) GetMessageType() api.MessageType {
-       return api.RequestMessage
+       return api.ReplyMessage
 }
 
-// IPReassemblyEnableDisable represents the VPP binary API message 'ip_reassembly_enable_disable'.
-//
-//            "ip_reassembly_enable_disable",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "enable_ip4"
-//            ],
-//            [
-//                "u8",
-//                "enable_ip6"
-//            ],
-//            {
-//                "crc": "0xbb8dc5d0"
-//            }
+// IPReassemblyEnableDisable represents VPP binary API message 'ip_reassembly_enable_disable':
+//
+//     "ip_reassembly_enable_disable",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "enable_ip4"
+//     ],
+//     [
+//         "u8",
+//         "enable_ip6"
+//     ],
+//     {
+//         "crc": "0xbb8dc5d0"
+//     }
 //
 type IPReassemblyEnableDisable struct {
        SwIfIndex uint32
@@ -4446,24 +4908,24 @@ func (*IPReassemblyEnableDisable) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// IPReassemblyEnableDisableReply represents the VPP binary API message 'ip_reassembly_enable_disable_reply'.
-//
-//            "ip_reassembly_enable_disable_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// IPReassemblyEnableDisableReply represents VPP binary API message 'ip_reassembly_enable_disable_reply':
+//
+//     "ip_reassembly_enable_disable_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type IPReassemblyEnableDisableReply struct {
        Retval int32
@@ -4479,53 +4941,6 @@ func (*IPReassemblyEnableDisableReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-/* Services */
-
-type Services interface {
-       DumpIP6Fib(*IP6FibDump) (*IP6FibDetails, error)
-       DumpIP6Mfib(*IP6MfibDump) (*IP6MfibDetails, error)
-       DumpIP6ndProxy(*IP6ndProxyDump) (*IP6ndProxyDetails, error)
-       DumpIPAddress(*IPAddressDump) (*IPAddressDetails, error)
-       DumpIP(*IPDump) (*IPDetails, error)
-       DumpIPFib(*IPFibDump) (*IPFibDetails, error)
-       DumpIPMfib(*IPMfibDump) (*IPMfibDetails, error)
-       DumpIPNeighbor(*IPNeighborDump) (*IPNeighborDetails, error)
-       DumpIPUnnumbered(*IPUnnumberedDump) (*IPUnnumberedDetails, error)
-       DumpMfibSignal(*MfibSignalDump) (*MfibSignalDetails, error)
-       DumpProxyArp(*ProxyArpDump) (*ProxyArpDetails, error)
-       DumpProxyArpIntfc(*ProxyArpIntfcDump) (*ProxyArpIntfcDetails, error)
-       IoamDisable(*IoamDisable) (*IoamDisableReply, error)
-       IoamEnable(*IoamEnable) (*IoamEnableReply, error)
-       IP6ndProxyAddDel(*IP6ndProxyAddDel) (*IP6ndProxyAddDelReply, error)
-       IP6ndSendRouterSolicitation(*IP6ndSendRouterSolicitation) (*IP6ndSendRouterSolicitationReply, error)
-       IPAddDelRoute(*IPAddDelRoute) (*IPAddDelRouteReply, error)
-       IPContainerProxyAddDel(*IPContainerProxyAddDel) (*IPContainerProxyAddDelReply, error)
-       IPMrouteAddDel(*IPMrouteAddDel) (*IPMrouteAddDelReply, error)
-       IPNeighborAddDel(*IPNeighborAddDel) (*IPNeighborAddDelReply, error)
-       IPProbeNeighbor(*IPProbeNeighbor) (*IPProbeNeighborReply, error)
-       IPPuntPolice(*IPPuntPolice) (*IPPuntPoliceReply, error)
-       IPPuntRedirect(*IPPuntRedirect) (*IPPuntRedirectReply, error)
-       IPReassemblyEnableDisable(*IPReassemblyEnableDisable) (*IPReassemblyEnableDisableReply, error)
-       IPReassemblyGet(*IPReassemblyGet) (*IPReassemblyGetReply, error)
-       IPReassemblySet(*IPReassemblySet) (*IPReassemblySetReply, error)
-       IPScanNeighborEnableDisable(*IPScanNeighborEnableDisable) (*IPScanNeighborEnableDisableReply, error)
-       IPSourceAndPortRangeCheckAddDel(*IPSourceAndPortRangeCheckAddDel) (*IPSourceAndPortRangeCheckAddDelReply, error)
-       IPSourceAndPortRangeCheckInterfaceAddDel(*IPSourceAndPortRangeCheckInterfaceAddDel) (*IPSourceAndPortRangeCheckInterfaceAddDelReply, error)
-       IPTableAddDel(*IPTableAddDel) (*IPTableAddDelReply, error)
-       ProxyArpAddDel(*ProxyArpAddDel) (*ProxyArpAddDelReply, error)
-       ProxyArpIntfcEnableDisable(*ProxyArpIntfcEnableDisable) (*ProxyArpIntfcEnableDisableReply, error)
-       ResetFib(*ResetFib) (*ResetFibReply, error)
-       SetArpNeighborLimit(*SetArpNeighborLimit) (*SetArpNeighborLimitReply, error)
-       SetIPFlowHash(*SetIPFlowHash) (*SetIPFlowHashReply, error)
-       SwInterfaceIP6EnableDisable(*SwInterfaceIP6EnableDisable) (*SwInterfaceIP6EnableDisableReply, error)
-       SwInterfaceIP6SetLinkLocalAddress(*SwInterfaceIP6SetLinkLocalAddress) (*SwInterfaceIP6SetLinkLocalAddressReply, error)
-       SwInterfaceIP6ndRaConfig(*SwInterfaceIP6ndRaConfig) (*SwInterfaceIP6ndRaConfigReply, error)
-       SwInterfaceIP6ndRaPrefix(*SwInterfaceIP6ndRaPrefix) (*SwInterfaceIP6ndRaPrefixReply, error)
-       WantIP4ArpEvents(*WantIP4ArpEvents) (*WantIP4ArpEventsReply, error)
-       WantIP6NdEvents(*WantIP6NdEvents) (*WantIP6NdEventsReply, error)
-       WantIP6RaEvents(*WantIP6RaEvents) (*WantIP6RaEventsReply, error)
-}
-
 func init() {
        api.RegisterMessage((*IPTableAddDel)(nil), "ip.IPTableAddDel")
        api.RegisterMessage((*IPTableAddDelReply)(nil), "ip.IPTableAddDelReply")
@@ -4551,8 +4966,6 @@ func init() {
        api.RegisterMessage((*IP6ndSendRouterSolicitationReply)(nil), "ip.IP6ndSendRouterSolicitationReply")
        api.RegisterMessage((*SwInterfaceIP6EnableDisable)(nil), "ip.SwInterfaceIP6EnableDisable")
        api.RegisterMessage((*SwInterfaceIP6EnableDisableReply)(nil), "ip.SwInterfaceIP6EnableDisableReply")
-       api.RegisterMessage((*SwInterfaceIP6SetLinkLocalAddress)(nil), "ip.SwInterfaceIP6SetLinkLocalAddress")
-       api.RegisterMessage((*SwInterfaceIP6SetLinkLocalAddressReply)(nil), "ip.SwInterfaceIP6SetLinkLocalAddressReply")
        api.RegisterMessage((*IPAddDelRoute)(nil), "ip.IPAddDelRoute")
        api.RegisterMessage((*IPAddDelRouteReply)(nil), "ip.IPAddDelRouteReply")
        api.RegisterMessage((*IPMrouteAddDel)(nil), "ip.IPMrouteAddDel")
@@ -4573,12 +4986,18 @@ func init() {
        api.RegisterMessage((*IPPuntPoliceReply)(nil), "ip.IPPuntPoliceReply")
        api.RegisterMessage((*IPPuntRedirect)(nil), "ip.IPPuntRedirect")
        api.RegisterMessage((*IPPuntRedirectReply)(nil), "ip.IPPuntRedirectReply")
+       api.RegisterMessage((*IPPuntRedirectDump)(nil), "ip.IPPuntRedirectDump")
+       api.RegisterMessage((*IPPuntRedirectDetails)(nil), "ip.IPPuntRedirectDetails")
        api.RegisterMessage((*IPContainerProxyAddDel)(nil), "ip.IPContainerProxyAddDel")
        api.RegisterMessage((*IPContainerProxyAddDelReply)(nil), "ip.IPContainerProxyAddDelReply")
+       api.RegisterMessage((*IPContainerProxyDump)(nil), "ip.IPContainerProxyDump")
+       api.RegisterMessage((*IPContainerProxyDetails)(nil), "ip.IPContainerProxyDetails")
        api.RegisterMessage((*IPSourceAndPortRangeCheckAddDel)(nil), "ip.IPSourceAndPortRangeCheckAddDel")
        api.RegisterMessage((*IPSourceAndPortRangeCheckAddDelReply)(nil), "ip.IPSourceAndPortRangeCheckAddDelReply")
        api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDel)(nil), "ip.IPSourceAndPortRangeCheckInterfaceAddDel")
        api.RegisterMessage((*IPSourceAndPortRangeCheckInterfaceAddDelReply)(nil), "ip.IPSourceAndPortRangeCheckInterfaceAddDelReply")
+       api.RegisterMessage((*IPSourceCheckInterfaceAddDel)(nil), "ip.IPSourceCheckInterfaceAddDel")
+       api.RegisterMessage((*IPSourceCheckInterfaceAddDelReply)(nil), "ip.IPSourceCheckInterfaceAddDelReply")
        api.RegisterMessage((*IPScanNeighborEnableDisable)(nil), "ip.IPScanNeighborEnableDisable")
        api.RegisterMessage((*IPScanNeighborEnableDisableReply)(nil), "ip.IPScanNeighborEnableDisableReply")
        api.RegisterMessage((*IPProbeNeighbor)(nil), "ip.IPProbeNeighbor")
diff --git a/examples/bin_api/map.api.json b/examples/bin_api/map.api.json
new file mode 100644 (file)
index 0000000..cb98202
--- /dev/null
@@ -0,0 +1,940 @@
+{
+    "messages": [
+        [
+            "map_add_domain",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip6_prefix_t",
+                "ip6_prefix"
+            ],
+            [
+                "vl_api_ip4_prefix_t",
+                "ip4_prefix"
+            ],
+            [
+                "vl_api_ip6_prefix_t",
+                "ip6_src"
+            ],
+            [
+                "u8",
+                "ea_bits_len"
+            ],
+            [
+                "u8",
+                "psid_offset"
+            ],
+            [
+                "u8",
+                "psid_length"
+            ],
+            [
+                "bool",
+                "is_translation"
+            ],
+            [
+                "bool",
+                "is_rfc6052"
+            ],
+            [
+                "u16",
+                "mtu"
+            ],
+            {
+                "crc": "0x7a64714e"
+            }
+        ],
+        [
+            "map_add_domain_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "index"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0x3e6d4e2c"
+            }
+        ],
+        [
+            "map_del_domain",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "index"
+            ],
+            {
+                "crc": "0x8ac76db6"
+            }
+        ],
+        [
+            "map_del_domain_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_add_del_rule",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "index"
+            ],
+            [
+                "bool",
+                "is_add"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "ip6_dst"
+            ],
+            [
+                "u16",
+                "psid"
+            ],
+            {
+                "crc": "0xe6132040"
+            }
+        ],
+        [
+            "map_add_del_rule_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_domain_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "map_domain_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "domain_index"
+            ],
+            [
+                "vl_api_ip6_prefix_t",
+                "ip6_prefix"
+            ],
+            [
+                "vl_api_ip4_prefix_t",
+                "ip4_prefix"
+            ],
+            [
+                "vl_api_ip6_prefix_t",
+                "ip6_src"
+            ],
+            [
+                "u8",
+                "ea_bits_len"
+            ],
+            [
+                "u8",
+                "psid_offset"
+            ],
+            [
+                "u8",
+                "psid_length"
+            ],
+            [
+                "u8",
+                "flags"
+            ],
+            [
+                "u16",
+                "mtu"
+            ],
+            [
+                "bool",
+                "is_translation"
+            ],
+            {
+                "crc": "0x7a986fe6"
+            }
+        ],
+        [
+            "map_rule_dump",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "domain_index"
+            ],
+            {
+                "crc": "0xe43e6ff6"
+            }
+        ],
+        [
+            "map_rule_details",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "ip6_dst"
+            ],
+            [
+                "u16",
+                "psid"
+            ],
+            {
+                "crc": "0x4f932665"
+            }
+        ],
+        [
+            "map_summary_stats",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "map_summary_stats_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u64",
+                "total_bindings"
+            ],
+            [
+                "u64",
+                "total_pkts",
+                2
+            ],
+            [
+                "u64",
+                "total_bytes",
+                2
+            ],
+            [
+                "u64",
+                "total_ip4_fragments"
+            ],
+            [
+                "u64",
+                "total_security_check",
+                2
+            ],
+            {
+                "crc": "0x0e4ace0e"
+            }
+        ],
+        [
+            "map_param_set_fragmentation",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "inner"
+            ],
+            [
+                "bool",
+                "ignore_df"
+            ],
+            {
+                "crc": "0x9ff54d90"
+            }
+        ],
+        [
+            "map_param_set_fragmentation_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_param_set_icmp",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "vl_api_ip4_address_t",
+                "ip4_err_relay_src"
+            ],
+            {
+                "crc": "0x4c0a4fd2"
+            }
+        ],
+        [
+            "map_param_set_icmp_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_param_set_icmp6",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "enable_unreachable"
+            ],
+            {
+                "crc": "0x5d01f8c1"
+            }
+        ],
+        [
+            "map_param_set_icmp6_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_param_add_del_pre_resolve",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "is_add"
+            ],
+            [
+                "vl_api_ip4_address_t",
+                "ip4_nh_address"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "ip6_nh_address"
+            ],
+            {
+                "crc": "0xea9a9a4a"
+            }
+        ],
+        [
+            "map_param_add_del_pre_resolve_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_param_set_reassembly",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "is_ip6"
+            ],
+            [
+                "u16",
+                "lifetime_ms"
+            ],
+            [
+                "u16",
+                "pool_size"
+            ],
+            [
+                "u32",
+                "buffers"
+            ],
+            [
+                "f64",
+                "ht_ratio"
+            ],
+            {
+                "crc": "0x54172b10"
+            }
+        ],
+        [
+            "map_param_set_reassembly_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_param_set_security_check",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "enable"
+            ],
+            [
+                "bool",
+                "fragments"
+            ],
+            {
+                "crc": "0x6abe9836"
+            }
+        ],
+        [
+            "map_param_set_security_check_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_param_set_traffic_class",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "bool",
+                "copy"
+            ],
+            [
+                "u8",
+                "class"
+            ],
+            {
+                "crc": "0x007ee563"
+            }
+        ],
+        [
+            "map_param_set_traffic_class_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "map_param_get",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "map_param_get_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u8",
+                "frag_inner"
+            ],
+            [
+                "u8",
+                "frag_ignore_df"
+            ],
+            [
+                "vl_api_ip4_address_t",
+                "icmp_ip4_err_relay_src"
+            ],
+            [
+                "bool",
+                "icmp6_enable_unreachable"
+            ],
+            [
+                "vl_api_ip4_address_t",
+                "ip4_nh_address"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "ip6_nh_address"
+            ],
+            [
+                "u16",
+                "ip4_lifetime_ms"
+            ],
+            [
+                "u16",
+                "ip4_pool_size"
+            ],
+            [
+                "u32",
+                "ip4_buffers"
+            ],
+            [
+                "f64",
+                "ip4_ht_ratio"
+            ],
+            [
+                "u16",
+                "ip6_lifetime_ms"
+            ],
+            [
+                "u16",
+                "ip6_pool_size"
+            ],
+            [
+                "u32",
+                "ip6_buffers"
+            ],
+            [
+                "f64",
+                "ip6_ht_ratio"
+            ],
+            [
+                "bool",
+                "sec_check_enable"
+            ],
+            [
+                "bool",
+                "sec_check_fragments"
+            ],
+            [
+                "bool",
+                "tc_copy"
+            ],
+            [
+                "u8",
+                "tc_class"
+            ],
+            {
+                "crc": "0xb40e9226"
+            }
+        ]
+    ],
+    "vl_api_version": "0x14b499d0",
+    "unions": [
+        [
+            "address_union",
+            [
+                "vl_api_ip4_address_t",
+                "ip4"
+            ],
+            [
+                "vl_api_ip6_address_t",
+                "ip6"
+            ],
+            {
+                "crc": "0xd68a2fb4"
+            }
+        ]
+    ],
+    "services": {
+        "map_param_set_fragmentation": {
+            "reply": "map_param_set_fragmentation_reply"
+        },
+        "map_param_add_del_pre_resolve": {
+            "reply": "map_param_add_del_pre_resolve_reply"
+        },
+        "map_rule_dump": {
+            "reply": "map_rule_details",
+            "stream": true
+        },
+        "map_param_set_icmp6": {
+            "reply": "map_param_set_icmp6_reply"
+        },
+        "map_add_del_rule": {
+            "reply": "map_add_del_rule_reply"
+        },
+        "map_domain_dump": {
+            "reply": "map_domain_details",
+            "stream": true
+        },
+        "map_param_get": {
+            "reply": "map_param_get_reply"
+        },
+        "map_param_set_icmp": {
+            "reply": "map_param_set_icmp_reply"
+        },
+        "map_add_domain": {
+            "reply": "map_add_domain_reply"
+        },
+        "map_summary_stats": {
+            "reply": "map_summary_stats_reply"
+        },
+        "map_param_set_traffic_class": {
+            "reply": "map_param_set_traffic_class_reply"
+        },
+        "map_del_domain": {
+            "reply": "map_del_domain_reply"
+        },
+        "map_param_set_reassembly": {
+            "reply": "map_param_set_reassembly_reply"
+        },
+        "map_param_set_security_check": {
+            "reply": "map_param_set_security_check_reply"
+        }
+    },
+    "enums": [
+        [
+            "address_family",
+            [
+                "ADDRESS_IP4",
+                0
+            ],
+            [
+                "ADDRESS_IP6",
+                1
+            ],
+            {
+                "enumtype": "u32"
+            }
+        ]
+    ],
+    "types": [
+        [
+            "address",
+            [
+                "vl_api_address_family_t",
+                "af"
+            ],
+            [
+                "vl_api_address_union_t",
+                "un"
+            ],
+            {
+                "crc": "0x09f11671"
+            }
+        ],
+        [
+            "prefix",
+            [
+                "vl_api_address_t",
+                "address"
+            ],
+            [
+                "u8",
+                "address_length"
+            ],
+            {
+                "crc": "0x0403aebc"
+            }
+        ],
+        [
+            "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"
+            ],
+            {
+                "crc": "0x1c4cba05"
+            }
+        ],
+        [
+            "ip6_prefix",
+            [
+                "vl_api_ip6_address_t",
+                "prefix"
+            ],
+            [
+                "u8",
+                "len"
+            ],
+            {
+                "crc": "0x779fd64f"
+            }
+        ],
+        [
+            "ip4_prefix",
+            [
+                "vl_api_ip4_address_t",
+                "prefix"
+            ],
+            [
+                "u8",
+                "len"
+            ],
+            {
+                "crc": "0xea8dc11d"
+            }
+        ]
+    ],
+    "aliases": {
+        "ip6_address": {
+            "length": 16,
+            "type": "u8"
+        },
+        "ip4_address": {
+            "length": 4,
+            "type": "u8"
+        }
+    }
+}
diff --git a/examples/bin_api/maps/maps.ba.go b/examples/bin_api/maps/maps.ba.go
new file mode 100644 (file)
index 0000000..8620c98
--- /dev/null
@@ -0,0 +1,1604 @@
+// Code generated by GoVPP binapi-generator. DO NOT EDIT.
+//  source: map.api.json
+
+/*
+ Package maps is a generated from VPP binary API module 'map'.
+
+ It contains following objects:
+        28 messages
+         5 types
+         2 aliases
+         1 enum
+         1 union
+        14 services
+
+*/
+package maps
+
+import "git.fd.io/govpp.git/api"
+import "github.com/lunixbochs/struc"
+import "bytes"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = api.RegisterMessage
+var _ = struc.Pack
+var _ = bytes.NewBuffer
+
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "map_param_set_fragmentation": {
+//             "reply": "map_param_set_fragmentation_reply"
+//         },
+//         "map_param_add_del_pre_resolve": {
+//             "reply": "map_param_add_del_pre_resolve_reply"
+//         },
+//         "map_rule_dump": {
+//             "reply": "map_rule_details",
+//             "stream": true
+//         },
+//         "map_param_set_icmp6": {
+//             "reply": "map_param_set_icmp6_reply"
+//         },
+//         "map_add_del_rule": {
+//             "reply": "map_add_del_rule_reply"
+//         },
+//         "map_domain_dump": {
+//             "reply": "map_domain_details",
+//             "stream": true
+//         },
+//         "map_param_get": {
+//             "reply": "map_param_get_reply"
+//         },
+//         "map_param_set_icmp": {
+//             "reply": "map_param_set_icmp_reply"
+//         },
+//         "map_add_domain": {
+//             "reply": "map_add_domain_reply"
+//         },
+//         "map_summary_stats": {
+//             "reply": "map_summary_stats_reply"
+//         },
+//         "map_param_set_traffic_class": {
+//             "reply": "map_param_set_traffic_class_reply"
+//         },
+//         "map_del_domain": {
+//             "reply": "map_del_domain_reply"
+//         },
+//         "map_param_set_reassembly": {
+//             "reply": "map_param_set_reassembly_reply"
+//         },
+//         "map_param_set_security_check": {
+//             "reply": "map_param_set_security_check_reply"
+//         }
+//     },
+//
+type Services interface {
+       DumpMapDomain(*MapDomainDump) ([]*MapDomainDetails, error)
+       DumpMapRule(*MapRuleDump) ([]*MapRuleDetails, error)
+       MapAddDelRule(*MapAddDelRule) (*MapAddDelRuleReply, error)
+       MapAddDomain(*MapAddDomain) (*MapAddDomainReply, error)
+       MapDelDomain(*MapDelDomain) (*MapDelDomainReply, error)
+       MapParamAddDelPreResolve(*MapParamAddDelPreResolve) (*MapParamAddDelPreResolveReply, error)
+       MapParamGet(*MapParamGet) (*MapParamGetReply, error)
+       MapParamSetFragmentation(*MapParamSetFragmentation) (*MapParamSetFragmentationReply, error)
+       MapParamSetICMP(*MapParamSetICMP) (*MapParamSetICMPReply, error)
+       MapParamSetICMP6(*MapParamSetICMP6) (*MapParamSetICMP6Reply, error)
+       MapParamSetReassembly(*MapParamSetReassembly) (*MapParamSetReassemblyReply, error)
+       MapParamSetSecurityCheck(*MapParamSetSecurityCheck) (*MapParamSetSecurityCheckReply, error)
+       MapParamSetTrafficClass(*MapParamSetTrafficClass) (*MapParamSetTrafficClassReply, error)
+       MapSummaryStats(*MapSummaryStats) (*MapSummaryStatsReply, error)
+}
+
+/* Enums */
+
+// AddressFamily represents VPP binary API enum 'address_family':
+//
+//     "address_family",
+//     [
+//         "ADDRESS_IP4",
+//         0
+//     ],
+//     [
+//         "ADDRESS_IP6",
+//         1
+//     ],
+//     {
+//         "enumtype": "u32"
+//     }
+//
+type AddressFamily uint32
+
+const (
+       ADDRESS_IP4 AddressFamily = 0
+       ADDRESS_IP6 AddressFamily = 1
+)
+
+/* Aliases */
+
+// IP4Address represents VPP binary API alias 'ip4_address':
+//
+//     "ip4_address": {
+//         "length": 4,
+//         "type": "u8"
+//     }
+//
+type IP4Address [4]uint8
+
+// IP6Address represents VPP binary API alias 'ip6_address':
+//
+//     "ip6_address": {
+//         "length": 16,
+//         "type": "u8"
+//     },
+//
+type IP6Address [16]uint8
+
+/* Types */
+
+// Address represents VPP binary API type 'address':
+//
+//     "address",
+//     [
+//         "vl_api_address_family_t",
+//         "af"
+//     ],
+//     [
+//         "vl_api_address_union_t",
+//         "un"
+//     ],
+//     {
+//         "crc": "0x09f11671"
+//     }
+//
+type Address struct {
+       Af AddressFamily
+       Un AddressUnion
+}
+
+func (*Address) GetTypeName() string {
+       return "address"
+}
+func (*Address) GetCrcString() string {
+       return "09f11671"
+}
+
+// Prefix represents VPP binary API type 'prefix':
+//
+//     "prefix",
+//     [
+//         "vl_api_address_t",
+//         "address"
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     {
+//         "crc": "0x0403aebc"
+//     }
+//
+type Prefix struct {
+       Address       Address
+       AddressLength uint8
+}
+
+func (*Prefix) GetTypeName() string {
+       return "prefix"
+}
+func (*Prefix) GetCrcString() string {
+       return "0403aebc"
+}
+
+// Mprefix represents VPP binary API type 'mprefix':
+//
+//     "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"
+//     ],
+//     {
+//         "crc": "0x1c4cba05"
+//     }
+//
+type Mprefix struct {
+       Af               AddressFamily
+       GrpAddressLength uint16
+       GrpAddress       AddressUnion
+       SrcAddress       AddressUnion
+}
+
+func (*Mprefix) GetTypeName() string {
+       return "mprefix"
+}
+func (*Mprefix) GetCrcString() string {
+       return "1c4cba05"
+}
+
+// IP6Prefix represents VPP binary API type 'ip6_prefix':
+//
+//     "ip6_prefix",
+//     [
+//         "vl_api_ip6_address_t",
+//         "prefix"
+//     ],
+//     [
+//         "u8",
+//         "len"
+//     ],
+//     {
+//         "crc": "0x779fd64f"
+//     }
+//
+type IP6Prefix struct {
+       Prefix IP6Address
+       Len    uint8
+}
+
+func (*IP6Prefix) GetTypeName() string {
+       return "ip6_prefix"
+}
+func (*IP6Prefix) GetCrcString() string {
+       return "779fd64f"
+}
+
+// IP4Prefix represents VPP binary API type 'ip4_prefix':
+//
+//     "ip4_prefix",
+//     [
+//         "vl_api_ip4_address_t",
+//         "prefix"
+//     ],
+//     [
+//         "u8",
+//         "len"
+//     ],
+//     {
+//         "crc": "0xea8dc11d"
+//     }
+//
+type IP4Prefix struct {
+       Prefix IP4Address
+       Len    uint8
+}
+
+func (*IP4Prefix) GetTypeName() string {
+       return "ip4_prefix"
+}
+func (*IP4Prefix) GetCrcString() string {
+       return "ea8dc11d"
+}
+
+/* Unions */
+
+// AddressUnion represents VPP binary API union 'address_union':
+//
+//     "address_union",
+//     [
+//         "vl_api_ip4_address_t",
+//         "ip4"
+//     ],
+//     [
+//         "vl_api_ip6_address_t",
+//         "ip6"
+//     ],
+//     {
+//         "crc": "0xd68a2fb4"
+//     }
+//
+type AddressUnion struct {
+       Union_data [16]byte
+}
+
+func (*AddressUnion) GetTypeName() string {
+       return "address_union"
+}
+func (*AddressUnion) GetCrcString() string {
+       return "d68a2fb4"
+}
+
+func (u *AddressUnion) SetIP4(a IP4Address) {
+       var b = new(bytes.Buffer)
+       if err := struc.Pack(b, &a); err != nil {
+               return
+       }
+       copy(u.Union_data[:], b.Bytes())
+}
+func (u *AddressUnion) GetIP4() (a IP4Address) {
+       var b = bytes.NewReader(u.Union_data[:])
+       struc.Unpack(b, &a)
+       return
+}
+
+func (u *AddressUnion) SetIP6(a IP6Address) {
+       var b = new(bytes.Buffer)
+       if err := struc.Pack(b, &a); err != nil {
+               return
+       }
+       copy(u.Union_data[:], b.Bytes())
+}
+func (u *AddressUnion) GetIP6() (a IP6Address) {
+       var b = bytes.NewReader(u.Union_data[:])
+       struc.Unpack(b, &a)
+       return
+}
+
+/* Messages */
+
+// MapAddDomain represents VPP binary API message 'map_add_domain':
+//
+//     "map_add_domain",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "vl_api_ip6_prefix_t",
+//         "ip6_prefix"
+//     ],
+//     [
+//         "vl_api_ip4_prefix_t",
+//         "ip4_prefix"
+//     ],
+//     [
+//         "vl_api_ip6_prefix_t",
+//         "ip6_src"
+//     ],
+//     [
+//         "u8",
+//         "ea_bits_len"
+//     ],
+//     [
+//         "u8",
+//         "psid_offset"
+//     ],
+//     [
+//         "u8",
+//         "psid_length"
+//     ],
+//     [
+//         "bool",
+//         "is_translation"
+//     ],
+//     [
+//         "bool",
+//         "is_rfc6052"
+//     ],
+//     [
+//         "u16",
+//         "mtu"
+//     ],
+//     {
+//         "crc": "0x7a64714e"
+//     }
+//
+type MapAddDomain struct {
+       IP6Prefix     IP6Prefix
+       IP4Prefix     IP4Prefix
+       IP6Src        IP6Prefix
+       EaBitsLen     uint8
+       PsidOffset    uint8
+       PsidLength    uint8
+       IsTranslation bool
+       IsRfc6052     bool
+       Mtu           uint16
+}
+
+func (*MapAddDomain) GetMessageName() string {
+       return "map_add_domain"
+}
+func (*MapAddDomain) GetCrcString() string {
+       return "7a64714e"
+}
+func (*MapAddDomain) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapAddDomainReply represents VPP binary API message 'map_add_domain_reply':
+//
+//     "map_add_domain_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "index"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0x3e6d4e2c"
+//     }
+//
+type MapAddDomainReply struct {
+       Index  uint32
+       Retval int32
+}
+
+func (*MapAddDomainReply) GetMessageName() string {
+       return "map_add_domain_reply"
+}
+func (*MapAddDomainReply) GetCrcString() string {
+       return "3e6d4e2c"
+}
+func (*MapAddDomainReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapDelDomain represents VPP binary API message 'map_del_domain':
+//
+//     "map_del_domain",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "index"
+//     ],
+//     {
+//         "crc": "0x8ac76db6"
+//     }
+//
+type MapDelDomain struct {
+       Index uint32
+}
+
+func (*MapDelDomain) GetMessageName() string {
+       return "map_del_domain"
+}
+func (*MapDelDomain) GetCrcString() string {
+       return "8ac76db6"
+}
+func (*MapDelDomain) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapDelDomainReply represents VPP binary API message 'map_del_domain_reply':
+//
+//     "map_del_domain_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapDelDomainReply struct {
+       Retval int32
+}
+
+func (*MapDelDomainReply) GetMessageName() string {
+       return "map_del_domain_reply"
+}
+func (*MapDelDomainReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapDelDomainReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapAddDelRule represents VPP binary API message 'map_add_del_rule':
+//
+//     "map_add_del_rule",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "index"
+//     ],
+//     [
+//         "bool",
+//         "is_add"
+//     ],
+//     [
+//         "vl_api_ip6_address_t",
+//         "ip6_dst"
+//     ],
+//     [
+//         "u16",
+//         "psid"
+//     ],
+//     {
+//         "crc": "0xe6132040"
+//     }
+//
+type MapAddDelRule struct {
+       Index  uint32
+       IsAdd  bool
+       IP6Dst IP6Address
+       Psid   uint16
+}
+
+func (*MapAddDelRule) GetMessageName() string {
+       return "map_add_del_rule"
+}
+func (*MapAddDelRule) GetCrcString() string {
+       return "e6132040"
+}
+func (*MapAddDelRule) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapAddDelRuleReply represents VPP binary API message 'map_add_del_rule_reply':
+//
+//     "map_add_del_rule_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapAddDelRuleReply struct {
+       Retval int32
+}
+
+func (*MapAddDelRuleReply) GetMessageName() string {
+       return "map_add_del_rule_reply"
+}
+func (*MapAddDelRuleReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapAddDelRuleReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapDomainDump represents VPP binary API message 'map_domain_dump':
+//
+//     "map_domain_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
+//
+type MapDomainDump struct{}
+
+func (*MapDomainDump) GetMessageName() string {
+       return "map_domain_dump"
+}
+func (*MapDomainDump) GetCrcString() string {
+       return "51077d14"
+}
+func (*MapDomainDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapDomainDetails represents VPP binary API message 'map_domain_details':
+//
+//     "map_domain_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "domain_index"
+//     ],
+//     [
+//         "vl_api_ip6_prefix_t",
+//         "ip6_prefix"
+//     ],
+//     [
+//         "vl_api_ip4_prefix_t",
+//         "ip4_prefix"
+//     ],
+//     [
+//         "vl_api_ip6_prefix_t",
+//         "ip6_src"
+//     ],
+//     [
+//         "u8",
+//         "ea_bits_len"
+//     ],
+//     [
+//         "u8",
+//         "psid_offset"
+//     ],
+//     [
+//         "u8",
+//         "psid_length"
+//     ],
+//     [
+//         "u8",
+//         "flags"
+//     ],
+//     [
+//         "u16",
+//         "mtu"
+//     ],
+//     [
+//         "bool",
+//         "is_translation"
+//     ],
+//     {
+//         "crc": "0x7a986fe6"
+//     }
+//
+type MapDomainDetails struct {
+       DomainIndex   uint32
+       IP6Prefix     IP6Prefix
+       IP4Prefix     IP4Prefix
+       IP6Src        IP6Prefix
+       EaBitsLen     uint8
+       PsidOffset    uint8
+       PsidLength    uint8
+       Flags         uint8
+       Mtu           uint16
+       IsTranslation bool
+}
+
+func (*MapDomainDetails) GetMessageName() string {
+       return "map_domain_details"
+}
+func (*MapDomainDetails) GetCrcString() string {
+       return "7a986fe6"
+}
+func (*MapDomainDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapRuleDump represents VPP binary API message 'map_rule_dump':
+//
+//     "map_rule_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "domain_index"
+//     ],
+//     {
+//         "crc": "0xe43e6ff6"
+//     }
+//
+type MapRuleDump struct {
+       DomainIndex uint32
+}
+
+func (*MapRuleDump) GetMessageName() string {
+       return "map_rule_dump"
+}
+func (*MapRuleDump) GetCrcString() string {
+       return "e43e6ff6"
+}
+func (*MapRuleDump) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapRuleDetails represents VPP binary API message 'map_rule_details':
+//
+//     "map_rule_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "vl_api_ip6_address_t",
+//         "ip6_dst"
+//     ],
+//     [
+//         "u16",
+//         "psid"
+//     ],
+//     {
+//         "crc": "0x4f932665"
+//     }
+//
+type MapRuleDetails struct {
+       IP6Dst IP6Address
+       Psid   uint16
+}
+
+func (*MapRuleDetails) GetMessageName() string {
+       return "map_rule_details"
+}
+func (*MapRuleDetails) GetCrcString() string {
+       return "4f932665"
+}
+func (*MapRuleDetails) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapSummaryStats represents VPP binary API message 'map_summary_stats':
+//
+//     "map_summary_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
+//
+type MapSummaryStats struct{}
+
+func (*MapSummaryStats) GetMessageName() string {
+       return "map_summary_stats"
+}
+func (*MapSummaryStats) GetCrcString() string {
+       return "51077d14"
+}
+func (*MapSummaryStats) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapSummaryStatsReply represents VPP binary API message 'map_summary_stats_reply':
+//
+//     "map_summary_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u64",
+//         "total_bindings"
+//     ],
+//     [
+//         "u64",
+//         "total_pkts",
+//         2
+//     ],
+//     [
+//         "u64",
+//         "total_bytes",
+//         2
+//     ],
+//     [
+//         "u64",
+//         "total_ip4_fragments"
+//     ],
+//     [
+//         "u64",
+//         "total_security_check",
+//         2
+//     ],
+//     {
+//         "crc": "0x0e4ace0e"
+//     }
+//
+type MapSummaryStatsReply struct {
+       Retval             int32
+       TotalBindings      uint64
+       TotalPkts          []uint64 `struc:"[2]uint64"`
+       TotalBytes         []uint64 `struc:"[2]uint64"`
+       TotalIP4Fragments  uint64
+       TotalSecurityCheck []uint64 `struc:"[2]uint64"`
+}
+
+func (*MapSummaryStatsReply) GetMessageName() string {
+       return "map_summary_stats_reply"
+}
+func (*MapSummaryStatsReply) GetCrcString() string {
+       return "0e4ace0e"
+}
+func (*MapSummaryStatsReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamSetFragmentation represents VPP binary API message 'map_param_set_fragmentation':
+//
+//     "map_param_set_fragmentation",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "bool",
+//         "inner"
+//     ],
+//     [
+//         "bool",
+//         "ignore_df"
+//     ],
+//     {
+//         "crc": "0x9ff54d90"
+//     }
+//
+type MapParamSetFragmentation struct {
+       Inner    bool
+       IgnoreDf bool
+}
+
+func (*MapParamSetFragmentation) GetMessageName() string {
+       return "map_param_set_fragmentation"
+}
+func (*MapParamSetFragmentation) GetCrcString() string {
+       return "9ff54d90"
+}
+func (*MapParamSetFragmentation) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamSetFragmentationReply represents VPP binary API message 'map_param_set_fragmentation_reply':
+//
+//     "map_param_set_fragmentation_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapParamSetFragmentationReply struct {
+       Retval int32
+}
+
+func (*MapParamSetFragmentationReply) GetMessageName() string {
+       return "map_param_set_fragmentation_reply"
+}
+func (*MapParamSetFragmentationReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapParamSetFragmentationReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamSetICMP represents VPP binary API message 'map_param_set_icmp':
+//
+//     "map_param_set_icmp",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "vl_api_ip4_address_t",
+//         "ip4_err_relay_src"
+//     ],
+//     {
+//         "crc": "0x4c0a4fd2"
+//     }
+//
+type MapParamSetICMP struct {
+       IP4ErrRelaySrc IP4Address
+}
+
+func (*MapParamSetICMP) GetMessageName() string {
+       return "map_param_set_icmp"
+}
+func (*MapParamSetICMP) GetCrcString() string {
+       return "4c0a4fd2"
+}
+func (*MapParamSetICMP) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamSetICMPReply represents VPP binary API message 'map_param_set_icmp_reply':
+//
+//     "map_param_set_icmp_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapParamSetICMPReply struct {
+       Retval int32
+}
+
+func (*MapParamSetICMPReply) GetMessageName() string {
+       return "map_param_set_icmp_reply"
+}
+func (*MapParamSetICMPReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapParamSetICMPReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamSetICMP6 represents VPP binary API message 'map_param_set_icmp6':
+//
+//     "map_param_set_icmp6",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "bool",
+//         "enable_unreachable"
+//     ],
+//     {
+//         "crc": "0x5d01f8c1"
+//     }
+//
+type MapParamSetICMP6 struct {
+       EnableUnreachable bool
+}
+
+func (*MapParamSetICMP6) GetMessageName() string {
+       return "map_param_set_icmp6"
+}
+func (*MapParamSetICMP6) GetCrcString() string {
+       return "5d01f8c1"
+}
+func (*MapParamSetICMP6) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamSetICMP6Reply represents VPP binary API message 'map_param_set_icmp6_reply':
+//
+//     "map_param_set_icmp6_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapParamSetICMP6Reply struct {
+       Retval int32
+}
+
+func (*MapParamSetICMP6Reply) GetMessageName() string {
+       return "map_param_set_icmp6_reply"
+}
+func (*MapParamSetICMP6Reply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapParamSetICMP6Reply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamAddDelPreResolve represents VPP binary API message 'map_param_add_del_pre_resolve':
+//
+//     "map_param_add_del_pre_resolve",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "bool",
+//         "is_add"
+//     ],
+//     [
+//         "vl_api_ip4_address_t",
+//         "ip4_nh_address"
+//     ],
+//     [
+//         "vl_api_ip6_address_t",
+//         "ip6_nh_address"
+//     ],
+//     {
+//         "crc": "0xea9a9a4a"
+//     }
+//
+type MapParamAddDelPreResolve struct {
+       IsAdd        bool
+       IP4NhAddress IP4Address
+       IP6NhAddress IP6Address
+}
+
+func (*MapParamAddDelPreResolve) GetMessageName() string {
+       return "map_param_add_del_pre_resolve"
+}
+func (*MapParamAddDelPreResolve) GetCrcString() string {
+       return "ea9a9a4a"
+}
+func (*MapParamAddDelPreResolve) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamAddDelPreResolveReply represents VPP binary API message 'map_param_add_del_pre_resolve_reply':
+//
+//     "map_param_add_del_pre_resolve_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapParamAddDelPreResolveReply struct {
+       Retval int32
+}
+
+func (*MapParamAddDelPreResolveReply) GetMessageName() string {
+       return "map_param_add_del_pre_resolve_reply"
+}
+func (*MapParamAddDelPreResolveReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapParamAddDelPreResolveReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamSetReassembly represents VPP binary API message 'map_param_set_reassembly':
+//
+//     "map_param_set_reassembly",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "bool",
+//         "is_ip6"
+//     ],
+//     [
+//         "u16",
+//         "lifetime_ms"
+//     ],
+//     [
+//         "u16",
+//         "pool_size"
+//     ],
+//     [
+//         "u32",
+//         "buffers"
+//     ],
+//     [
+//         "f64",
+//         "ht_ratio"
+//     ],
+//     {
+//         "crc": "0x54172b10"
+//     }
+//
+type MapParamSetReassembly struct {
+       IsIP6      bool
+       LifetimeMs uint16
+       PoolSize   uint16
+       Buffers    uint32
+       HtRatio    float64
+}
+
+func (*MapParamSetReassembly) GetMessageName() string {
+       return "map_param_set_reassembly"
+}
+func (*MapParamSetReassembly) GetCrcString() string {
+       return "54172b10"
+}
+func (*MapParamSetReassembly) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamSetReassemblyReply represents VPP binary API message 'map_param_set_reassembly_reply':
+//
+//     "map_param_set_reassembly_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapParamSetReassemblyReply struct {
+       Retval int32
+}
+
+func (*MapParamSetReassemblyReply) GetMessageName() string {
+       return "map_param_set_reassembly_reply"
+}
+func (*MapParamSetReassemblyReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapParamSetReassemblyReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamSetSecurityCheck represents VPP binary API message 'map_param_set_security_check':
+//
+//     "map_param_set_security_check",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "bool",
+//         "enable"
+//     ],
+//     [
+//         "bool",
+//         "fragments"
+//     ],
+//     {
+//         "crc": "0x6abe9836"
+//     }
+//
+type MapParamSetSecurityCheck struct {
+       Enable    bool
+       Fragments bool
+}
+
+func (*MapParamSetSecurityCheck) GetMessageName() string {
+       return "map_param_set_security_check"
+}
+func (*MapParamSetSecurityCheck) GetCrcString() string {
+       return "6abe9836"
+}
+func (*MapParamSetSecurityCheck) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamSetSecurityCheckReply represents VPP binary API message 'map_param_set_security_check_reply':
+//
+//     "map_param_set_security_check_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapParamSetSecurityCheckReply struct {
+       Retval int32
+}
+
+func (*MapParamSetSecurityCheckReply) GetMessageName() string {
+       return "map_param_set_security_check_reply"
+}
+func (*MapParamSetSecurityCheckReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapParamSetSecurityCheckReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamSetTrafficClass represents VPP binary API message 'map_param_set_traffic_class':
+//
+//     "map_param_set_traffic_class",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "bool",
+//         "copy"
+//     ],
+//     [
+//         "u8",
+//         "class"
+//     ],
+//     {
+//         "crc": "0x007ee563"
+//     }
+//
+type MapParamSetTrafficClass struct {
+       Copy  bool
+       Class uint8
+}
+
+func (*MapParamSetTrafficClass) GetMessageName() string {
+       return "map_param_set_traffic_class"
+}
+func (*MapParamSetTrafficClass) GetCrcString() string {
+       return "007ee563"
+}
+func (*MapParamSetTrafficClass) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamSetTrafficClassReply represents VPP binary API message 'map_param_set_traffic_class_reply':
+//
+//     "map_param_set_traffic_class_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type MapParamSetTrafficClassReply struct {
+       Retval int32
+}
+
+func (*MapParamSetTrafficClassReply) GetMessageName() string {
+       return "map_param_set_traffic_class_reply"
+}
+func (*MapParamSetTrafficClassReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*MapParamSetTrafficClassReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// MapParamGet represents VPP binary API message 'map_param_get':
+//
+//     "map_param_get",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
+//
+type MapParamGet struct{}
+
+func (*MapParamGet) GetMessageName() string {
+       return "map_param_get"
+}
+func (*MapParamGet) GetCrcString() string {
+       return "51077d14"
+}
+func (*MapParamGet) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// MapParamGetReply represents VPP binary API message 'map_param_get_reply':
+//
+//     "map_param_get_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u8",
+//         "frag_inner"
+//     ],
+//     [
+//         "u8",
+//         "frag_ignore_df"
+//     ],
+//     [
+//         "vl_api_ip4_address_t",
+//         "icmp_ip4_err_relay_src"
+//     ],
+//     [
+//         "bool",
+//         "icmp6_enable_unreachable"
+//     ],
+//     [
+//         "vl_api_ip4_address_t",
+//         "ip4_nh_address"
+//     ],
+//     [
+//         "vl_api_ip6_address_t",
+//         "ip6_nh_address"
+//     ],
+//     [
+//         "u16",
+//         "ip4_lifetime_ms"
+//     ],
+//     [
+//         "u16",
+//         "ip4_pool_size"
+//     ],
+//     [
+//         "u32",
+//         "ip4_buffers"
+//     ],
+//     [
+//         "f64",
+//         "ip4_ht_ratio"
+//     ],
+//     [
+//         "u16",
+//         "ip6_lifetime_ms"
+//     ],
+//     [
+//         "u16",
+//         "ip6_pool_size"
+//     ],
+//     [
+//         "u32",
+//         "ip6_buffers"
+//     ],
+//     [
+//         "f64",
+//         "ip6_ht_ratio"
+//     ],
+//     [
+//         "bool",
+//         "sec_check_enable"
+//     ],
+//     [
+//         "bool",
+//         "sec_check_fragments"
+//     ],
+//     [
+//         "bool",
+//         "tc_copy"
+//     ],
+//     [
+//         "u8",
+//         "tc_class"
+//     ],
+//     {
+//         "crc": "0xb40e9226"
+//     }
+//
+type MapParamGetReply struct {
+       Retval                 int32
+       FragInner              uint8
+       FragIgnoreDf           uint8
+       ICMPIP4ErrRelaySrc     IP4Address
+       ICMP6EnableUnreachable bool
+       IP4NhAddress           IP4Address
+       IP6NhAddress           IP6Address
+       IP4LifetimeMs          uint16
+       IP4PoolSize            uint16
+       IP4Buffers             uint32
+       IP4HtRatio             float64
+       IP6LifetimeMs          uint16
+       IP6PoolSize            uint16
+       IP6Buffers             uint32
+       IP6HtRatio             float64
+       SecCheckEnable         bool
+       SecCheckFragments      bool
+       TcCopy                 bool
+       TcClass                uint8
+}
+
+func (*MapParamGetReply) GetMessageName() string {
+       return "map_param_get_reply"
+}
+func (*MapParamGetReply) GetCrcString() string {
+       return "b40e9226"
+}
+func (*MapParamGetReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+func init() {
+       api.RegisterMessage((*MapAddDomain)(nil), "map.MapAddDomain")
+       api.RegisterMessage((*MapAddDomainReply)(nil), "map.MapAddDomainReply")
+       api.RegisterMessage((*MapDelDomain)(nil), "map.MapDelDomain")
+       api.RegisterMessage((*MapDelDomainReply)(nil), "map.MapDelDomainReply")
+       api.RegisterMessage((*MapAddDelRule)(nil), "map.MapAddDelRule")
+       api.RegisterMessage((*MapAddDelRuleReply)(nil), "map.MapAddDelRuleReply")
+       api.RegisterMessage((*MapDomainDump)(nil), "map.MapDomainDump")
+       api.RegisterMessage((*MapDomainDetails)(nil), "map.MapDomainDetails")
+       api.RegisterMessage((*MapRuleDump)(nil), "map.MapRuleDump")
+       api.RegisterMessage((*MapRuleDetails)(nil), "map.MapRuleDetails")
+       api.RegisterMessage((*MapSummaryStats)(nil), "map.MapSummaryStats")
+       api.RegisterMessage((*MapSummaryStatsReply)(nil), "map.MapSummaryStatsReply")
+       api.RegisterMessage((*MapParamSetFragmentation)(nil), "map.MapParamSetFragmentation")
+       api.RegisterMessage((*MapParamSetFragmentationReply)(nil), "map.MapParamSetFragmentationReply")
+       api.RegisterMessage((*MapParamSetICMP)(nil), "map.MapParamSetICMP")
+       api.RegisterMessage((*MapParamSetICMPReply)(nil), "map.MapParamSetICMPReply")
+       api.RegisterMessage((*MapParamSetICMP6)(nil), "map.MapParamSetICMP6")
+       api.RegisterMessage((*MapParamSetICMP6Reply)(nil), "map.MapParamSetICMP6Reply")
+       api.RegisterMessage((*MapParamAddDelPreResolve)(nil), "map.MapParamAddDelPreResolve")
+       api.RegisterMessage((*MapParamAddDelPreResolveReply)(nil), "map.MapParamAddDelPreResolveReply")
+       api.RegisterMessage((*MapParamSetReassembly)(nil), "map.MapParamSetReassembly")
+       api.RegisterMessage((*MapParamSetReassemblyReply)(nil), "map.MapParamSetReassemblyReply")
+       api.RegisterMessage((*MapParamSetSecurityCheck)(nil), "map.MapParamSetSecurityCheck")
+       api.RegisterMessage((*MapParamSetSecurityCheckReply)(nil), "map.MapParamSetSecurityCheckReply")
+       api.RegisterMessage((*MapParamSetTrafficClass)(nil), "map.MapParamSetTrafficClass")
+       api.RegisterMessage((*MapParamSetTrafficClassReply)(nil), "map.MapParamSetTrafficClassReply")
+       api.RegisterMessage((*MapParamGet)(nil), "map.MapParamGet")
+       api.RegisterMessage((*MapParamGetReply)(nil), "map.MapParamGetReply")
+}
index b0ff645..4399f1c 100644 (file)
         }
     },
     "enums": [],
-    "types": []
+    "types": [],
+    "aliases": {}
 }
index ce8c9c0..c28d2f5 100644 (file)
@@ -20,39 +20,69 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "memif_delete": {
+//             "reply": "memif_delete_reply"
+//         },
+//         "memif_socket_filename_add_del": {
+//             "reply": "memif_socket_filename_add_del_reply"
+//         },
+//         "memif_create": {
+//             "reply": "memif_create_reply"
+//         },
+//         "memif_socket_filename_dump": {
+//             "reply": "memif_socket_filename_details",
+//             "stream": true
+//         },
+//         "memif_dump": {
+//             "reply": "memif_details",
+//             "stream": true
+//         }
+//     },
+//
+type Services interface {
+       DumpMemif(*MemifDump) ([]*MemifDetails, error)
+       DumpMemifSocketFilename(*MemifSocketFilenameDump) ([]*MemifSocketFilenameDetails, error)
+       MemifCreate(*MemifCreate) (*MemifCreateReply, error)
+       MemifDelete(*MemifDelete) (*MemifDeleteReply, error)
+       MemifSocketFilenameAddDel(*MemifSocketFilenameAddDel) (*MemifSocketFilenameAddDelReply, error)
+}
+
 /* Messages */
 
-// MemifSocketFilenameAddDel represents the VPP binary API message 'memif_socket_filename_add_del'.
+// MemifSocketFilenameAddDel represents VPP binary API message 'memif_socket_filename_add_del':
 //
-//            "memif_socket_filename_add_del",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "is_add"
-//            ],
-//            [
-//                "u32",
-//                "socket_id"
-//            ],
-//            [
-//                "u8",
-//                "socket_filename",
-//                128
-//            ],
-//            {
-//                "crc": "0x30e3929d"
-//            }
+//     "memif_socket_filename_add_del",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "is_add"
+//     ],
+//     [
+//         "u32",
+//         "socket_id"
+//     ],
+//     [
+//         "u8",
+//         "socket_filename",
+//         128
+//     ],
+//     {
+//         "crc": "0x30e3929d"
+//     }
 //
 type MemifSocketFilenameAddDel struct {
        IsAdd          uint8
@@ -70,24 +100,24 @@ func (*MemifSocketFilenameAddDel) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MemifSocketFilenameAddDelReply represents the VPP binary API message 'memif_socket_filename_add_del_reply'.
+// MemifSocketFilenameAddDelReply represents VPP binary API message 'memif_socket_filename_add_del_reply':
 //
-//            "memif_socket_filename_add_del_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+//     "memif_socket_filename_add_del_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type MemifSocketFilenameAddDelReply struct {
        Retval int32
@@ -103,66 +133,66 @@ func (*MemifSocketFilenameAddDelReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MemifCreate represents the VPP binary API message 'memif_create'.
+// MemifCreate represents VPP binary API message 'memif_create':
 //
-//            "memif_create",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "role"
-//            ],
-//            [
-//                "u8",
-//                "mode"
-//            ],
-//            [
-//                "u8",
-//                "rx_queues"
-//            ],
-//            [
-//                "u8",
-//                "tx_queues"
-//            ],
-//            [
-//                "u32",
-//                "id"
-//            ],
-//            [
-//                "u32",
-//                "socket_id"
-//            ],
-//            [
-//                "u8",
-//                "secret",
-//                24
-//            ],
-//            [
-//                "u32",
-//                "ring_size"
-//            ],
-//            [
-//                "u16",
-//                "buffer_size"
-//            ],
-//            [
-//                "u8",
-//                "hw_addr",
-//                6
-//            ],
-//            {
-//                "crc": "0x6597cdb2"
-//            }
+//     "memif_create",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "role"
+//     ],
+//     [
+//         "u8",
+//         "mode"
+//     ],
+//     [
+//         "u8",
+//         "rx_queues"
+//     ],
+//     [
+//         "u8",
+//         "tx_queues"
+//     ],
+//     [
+//         "u32",
+//         "id"
+//     ],
+//     [
+//         "u32",
+//         "socket_id"
+//     ],
+//     [
+//         "u8",
+//         "secret",
+//         24
+//     ],
+//     [
+//         "u32",
+//         "ring_size"
+//     ],
+//     [
+//         "u16",
+//         "buffer_size"
+//     ],
+//     [
+//         "u8",
+//         "hw_addr",
+//         6
+//     ],
+//     {
+//         "crc": "0x6597cdb2"
+//     }
 //
 type MemifCreate struct {
        Role       uint8
@@ -187,28 +217,28 @@ func (*MemifCreate) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MemifCreateReply represents the VPP binary API message 'memif_create_reply'.
+// MemifCreateReply represents VPP binary API message 'memif_create_reply':
 //
-//            "memif_create_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+//     "memif_create_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type MemifCreateReply struct {
        Retval    int32
@@ -225,28 +255,28 @@ func (*MemifCreateReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MemifDelete represents the VPP binary API message 'memif_delete'.
+// MemifDelete represents VPP binary API message 'memif_delete':
 //
-//            "memif_delete",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+//     "memif_delete",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type MemifDelete struct {
        SwIfIndex uint32
@@ -262,24 +292,24 @@ func (*MemifDelete) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MemifDeleteReply represents the VPP binary API message 'memif_delete_reply'.
+// MemifDeleteReply represents VPP binary API message 'memif_delete_reply':
 //
-//            "memif_delete_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+//     "memif_delete_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type MemifDeleteReply struct {
        Retval int32
@@ -295,29 +325,29 @@ func (*MemifDeleteReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MemifSocketFilenameDetails represents the VPP binary API message 'memif_socket_filename_details'.
+// MemifSocketFilenameDetails represents VPP binary API message 'memif_socket_filename_details':
 //
-//            "memif_socket_filename_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "socket_id"
-//            ],
-//            [
-//                "u8",
-//                "socket_filename",
-//                128
-//            ],
-//            {
-//                "crc": "0xe347e32f"
-//            }
+//     "memif_socket_filename_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "socket_id"
+//     ],
+//     [
+//         "u8",
+//         "socket_filename",
+//         128
+//     ],
+//     {
+//         "crc": "0xe347e32f"
+//     }
 //
 type MemifSocketFilenameDetails struct {
        SocketID       uint32
@@ -334,24 +364,24 @@ func (*MemifSocketFilenameDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MemifSocketFilenameDump represents the VPP binary API message 'memif_socket_filename_dump'.
+// MemifSocketFilenameDump represents VPP binary API message 'memif_socket_filename_dump':
 //
-//            "memif_socket_filename_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+//     "memif_socket_filename_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type MemifSocketFilenameDump struct{}
 
@@ -365,66 +395,66 @@ func (*MemifSocketFilenameDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// MemifDetails represents the VPP binary API message 'memif_details'.
+// MemifDetails represents VPP binary API message 'memif_details':
 //
-//            "memif_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "if_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "hw_addr",
-//                6
-//            ],
-//            [
-//                "u32",
-//                "id"
-//            ],
-//            [
-//                "u8",
-//                "role"
-//            ],
-//            [
-//                "u8",
-//                "mode"
-//            ],
-//            [
-//                "u32",
-//                "socket_id"
-//            ],
-//            [
-//                "u32",
-//                "ring_size"
-//            ],
-//            [
-//                "u16",
-//                "buffer_size"
-//            ],
-//            [
-//                "u8",
-//                "admin_up_down"
-//            ],
-//            [
-//                "u8",
-//                "link_up_down"
-//            ],
-//            {
-//                "crc": "0x4f5a3397"
-//            }
+//     "memif_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "if_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "hw_addr",
+//         6
+//     ],
+//     [
+//         "u32",
+//         "id"
+//     ],
+//     [
+//         "u8",
+//         "role"
+//     ],
+//     [
+//         "u8",
+//         "mode"
+//     ],
+//     [
+//         "u32",
+//         "socket_id"
+//     ],
+//     [
+//         "u32",
+//         "ring_size"
+//     ],
+//     [
+//         "u16",
+//         "buffer_size"
+//     ],
+//     [
+//         "u8",
+//         "admin_up_down"
+//     ],
+//     [
+//         "u8",
+//         "link_up_down"
+//     ],
+//     {
+//         "crc": "0x4f5a3397"
+//     }
 //
 type MemifDetails struct {
        SwIfIndex   uint32
@@ -450,24 +480,24 @@ func (*MemifDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// MemifDump represents the VPP binary API message 'memif_dump'.
+// MemifDump represents VPP binary API message 'memif_dump':
 //
-//            "memif_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+//     "memif_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type MemifDump struct{}
 
@@ -481,16 +511,6 @@ func (*MemifDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-/* Services */
-
-type Services interface {
-       DumpMemif(*MemifDump) (*MemifDetails, error)
-       DumpMemifSocketFilename(*MemifSocketFilenameDump) (*MemifSocketFilenameDetails, error)
-       MemifCreate(*MemifCreate) (*MemifCreateReply, error)
-       MemifDelete(*MemifDelete) (*MemifDeleteReply, error)
-       MemifSocketFilenameAddDel(*MemifSocketFilenameAddDel) (*MemifSocketFilenameAddDelReply, error)
-}
-
 func init() {
        api.RegisterMessage((*MemifSocketFilenameAddDel)(nil), "memif.MemifSocketFilenameAddDel")
        api.RegisterMessage((*MemifSocketFilenameAddDelReply)(nil), "memif.MemifSocketFilenameAddDelReply")
index 9ac3640..31c957e 100644 (file)
             [
                 "u64",
                 "total_pkts",
-                2
+                8
             ],
             [
                 "u64",
                 "total_bytes",
-                2
+                8
             ],
             [
                 "f64",
                 "vector_rate"
             ],
             {
-                "crc": "0x32b87c56"
+                "crc": "0x82b5e46c"
             }
         ],
         [
             {
                 "crc": "0x1ab5e649"
             }
+        ],
+        [
+            "want_bier_neighbor_stats",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "u32",
+                "enable"
+            ],
+            [
+                "u32",
+                "pid"
+            ],
+            {
+                "crc": "0xcfaccc1f"
+            }
+        ],
+        [
+            "want_bier_neighbor_stats_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            {
+                "crc": "0xe8d4e804"
+            }
+        ],
+        [
+            "vnet_bier_neighbor_counters",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "timestamp"
+            ],
+            [
+                "u32",
+                "count"
+            ],
+            [
+                "vl_api_bier_neighbor_counter_t",
+                "c",
+                0,
+                "count"
+            ],
+            {
+                "crc": "0xee0481ce"
+            }
         ]
     ],
-    "vl_api_version": "0xfc484aa",
+    "vl_api_version": "0xd3b29d42",
     "unions": [],
     "services": {
         "want_ip4_fib_stats": {
         "vnet_get_summary_stats": {
             "reply": "vnet_get_summary_stats_reply"
         },
+        "want_bier_neighbor_stats": {
+            "reply": "want_bier_neighbor_stats_reply",
+            "events": [
+                "vnet_bier_neighbor_counters"
+            ]
+        },
         "want_udp_encap_stats": {
             "reply": "want_udp_encap_stats_reply",
             "events": [
                 "crc": "0x8bd65e2d"
             }
         ],
+        [
+            "fib_mpls_label",
+            [
+                "u8",
+                "is_uniform"
+            ],
+            [
+                "u32",
+                "label"
+            ],
+            [
+                "u8",
+                "ttl"
+            ],
+            [
+                "u8",
+                "exp"
+            ],
+            {
+                "crc": "0xc93bf35c"
+            }
+        ],
+        [
+            "fib_path",
+            [
+                "u32",
+                "sw_if_index"
+            ],
+            [
+                "u32",
+                "table_id"
+            ],
+            [
+                "u8",
+                "weight"
+            ],
+            [
+                "u8",
+                "preference"
+            ],
+            [
+                "u8",
+                "is_local"
+            ],
+            [
+                "u8",
+                "is_drop"
+            ],
+            [
+                "u8",
+                "is_udp_encap"
+            ],
+            [
+                "u8",
+                "is_unreach"
+            ],
+            [
+                "u8",
+                "is_prohibit"
+            ],
+            [
+                "u8",
+                "is_resolve_host"
+            ],
+            [
+                "u8",
+                "is_resolve_attached"
+            ],
+            [
+                "u8",
+                "is_dvr"
+            ],
+            [
+                "u8",
+                "is_source_lookup"
+            ],
+            [
+                "u8",
+                "afi"
+            ],
+            [
+                "u8",
+                "next_hop",
+                16
+            ],
+            [
+                "u32",
+                "next_hop_id"
+            ],
+            [
+                "u32",
+                "rpf_id"
+            ],
+            [
+                "u32",
+                "via_label"
+            ],
+            [
+                "u8",
+                "n_labels"
+            ],
+            [
+                "vl_api_fib_mpls_label_t",
+                "label_stack",
+                16
+            ],
+            {
+                "crc": "0xabe483ef"
+            }
+        ],
+        [
+            "bier_table_id",
+            [
+                "u8",
+                "bt_set"
+            ],
+            [
+                "u8",
+                "bt_sub_domain"
+            ],
+            [
+                "u8",
+                "bt_hdr_len_id"
+            ],
+            {
+                "crc": "0x435c691d"
+            }
+        ],
         [
             "ip4_fib_counter",
             [
             {
                 "crc": "0x7107035f"
             }
+        ],
+        [
+            "bier_neighbor_counter",
+            [
+                "vl_api_bier_table_id_t",
+                "tbl_id"
+            ],
+            [
+                "vl_api_fib_path_t",
+                "path"
+            ],
+            [
+                "u64",
+                "packets"
+            ],
+            [
+                "u64",
+                "bytes"
+            ],
+            {
+                "crc": "0x91fe1748"
+            }
         ]
-    ]
+    ],
+    "aliases": {
+        "interface_index": {
+            "type": "u32"
+        }
+    }
 }
index 58c178f..97a6e60 100644 (file)
@@ -5,9 +5,10 @@
  Package stats is a generated from VPP binary API module 'stats'.
 
  It contains following objects:
-        39 messages
-        10 types
-        14 services
+        42 messages
+        14 types
+         1 alias
+        15 services
 
 */
 package stats
@@ -21,22 +22,136 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "want_ip4_fib_stats": {
+//             "reply": "want_ip4_fib_stats_reply",
+//             "events": [
+//                 "vnet_ip4_fib_counters"
+//             ]
+//         },
+//         "want_ip6_fib_stats": {
+//             "reply": "want_ip6_fib_stats_reply",
+//             "events": [
+//                 "vnet_ip6_fib_counters"
+//             ]
+//         },
+//         "want_stats": {
+//             "reply": "want_stats_reply"
+//         },
+//         "want_interface_simple_stats": {
+//             "reply": "want_interface_simple_stats_reply",
+//             "events": [
+//                 "vnet_interface_simple_counters"
+//             ]
+//         },
+//         "stats_get_poller_delay": {
+//             "reply": "stats_get_poller_delay_reply"
+//         },
+//         "want_per_interface_combined_stats": {
+//             "reply": "want_per_interface_combined_stats_reply",
+//             "events": [
+//                 "vnet_per_interface_combined_counters"
+//             ]
+//         },
+//         "vnet_get_summary_stats": {
+//             "reply": "vnet_get_summary_stats_reply"
+//         },
+//         "want_bier_neighbor_stats": {
+//             "reply": "want_bier_neighbor_stats_reply",
+//             "events": [
+//                 "vnet_bier_neighbor_counters"
+//             ]
+//         },
+//         "want_udp_encap_stats": {
+//             "reply": "want_udp_encap_stats_reply",
+//             "events": [
+//                 "vnet_udp_encap_counters"
+//             ]
+//         },
+//         "want_ip6_nbr_stats": {
+//             "reply": "want_ip6_nbr_stats_reply",
+//             "events": [
+//                 "vnet_ip6_nbr_counters"
+//             ]
+//         },
+//         "want_ip4_mfib_stats": {
+//             "reply": "want_ip4_mfib_stats_reply",
+//             "events": [
+//                 "vnet_ip4_mfib_counters"
+//             ]
+//         },
+//         "want_ip6_mfib_stats": {
+//             "reply": "want_ip6_mfib_stats_reply",
+//             "events": [
+//                 "vnet_ip6_mfib_counters"
+//             ]
+//         },
+//         "want_per_interface_simple_stats": {
+//             "reply": "want_per_interface_simple_stats_reply",
+//             "events": [
+//                 "vnet_per_interface_simple_counters"
+//             ]
+//         },
+//         "want_interface_combined_stats": {
+//             "reply": "want_interface_combined_stats_reply",
+//             "events": [
+//                 "vnet_interface_combined_counters"
+//             ]
+//         },
+//         "want_ip4_nbr_stats": {
+//             "reply": "want_ip4_nbr_stats_reply",
+//             "events": [
+//                 "vnet_ip4_nbr_counters"
+//             ]
+//         }
+//     },
+//
+type Services interface {
+       StatsGetPollerDelay(*StatsGetPollerDelay) (*StatsGetPollerDelayReply, error)
+       VnetGetSummaryStats(*VnetGetSummaryStats) (*VnetGetSummaryStatsReply, error)
+       WantBierNeighborStats(*WantBierNeighborStats) (*WantBierNeighborStatsReply, error)
+       WantInterfaceCombinedStats(*WantInterfaceCombinedStats) (*WantInterfaceCombinedStatsReply, error)
+       WantInterfaceSimpleStats(*WantInterfaceSimpleStats) (*WantInterfaceSimpleStatsReply, error)
+       WantIP4FibStats(*WantIP4FibStats) (*WantIP4FibStatsReply, error)
+       WantIP4MfibStats(*WantIP4MfibStats) (*WantIP4MfibStatsReply, error)
+       WantIP4NbrStats(*WantIP4NbrStats) (*WantIP4NbrStatsReply, error)
+       WantIP6FibStats(*WantIP6FibStats) (*WantIP6FibStatsReply, error)
+       WantIP6MfibStats(*WantIP6MfibStats) (*WantIP6MfibStatsReply, error)
+       WantIP6NbrStats(*WantIP6NbrStats) (*WantIP6NbrStatsReply, error)
+       WantPerInterfaceCombinedStats(*WantPerInterfaceCombinedStats) (*WantPerInterfaceCombinedStatsReply, error)
+       WantPerInterfaceSimpleStats(*WantPerInterfaceSimpleStats) (*WantPerInterfaceSimpleStatsReply, error)
+       WantStats(*WantStats) (*WantStatsReply, error)
+       WantUDPEncapStats(*WantUDPEncapStats) (*WantUDPEncapStatsReply, error)
+}
+
+/* Aliases */
+
+// InterfaceIndex represents VPP binary API alias 'interface_index':
+//
+//     "interface_index": {
+//         "type": "u32"
+//     }
+//
+type InterfaceIndex uint32
+
 /* Types */
 
-// VlibCounter represents the VPP binary API type 'vlib_counter'.
-//
-//            "vlib_counter",
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0xce2325a2"
-//            }
+// VlibCounter represents VPP binary API type 'vlib_counter':
+//
+//     "vlib_counter",
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0xce2325a2"
+//     }
 //
 type VlibCounter struct {
        Packets uint64
@@ -50,80 +165,80 @@ func (*VlibCounter) GetCrcString() string {
        return "ce2325a2"
 }
 
-// VnetCombinedCounter represents the VPP binary API type 'vnet_combined_counter'.
-//
-//            "vnet_combined_counter",
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u64",
-//                "rx_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_bytes"
-//            ],
-//            [
-//                "u64",
-//                "rx_unicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_unicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "rx_multicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_multicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "rx_broadcast_packets"
-//            ],
-//            [
-//                "u64",
-//                "rx_broadcast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_unicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_unicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_multicast_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_multicast_bytes"
-//            ],
-//            [
-//                "u64",
-//                "tx_broadcast_packets"
-//            ],
-//            [
-//                "u64",
-//                "tx_broadcast_bytes"
-//            ],
-//            {
-//                "crc": "0x20905ca4"
-//            }
+// VnetCombinedCounter represents VPP binary API type 'vnet_combined_counter':
+//
+//     "vnet_combined_counter",
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u64",
+//         "rx_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_bytes"
+//     ],
+//     [
+//         "u64",
+//         "rx_unicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_unicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "rx_multicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_multicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "rx_broadcast_packets"
+//     ],
+//     [
+//         "u64",
+//         "rx_broadcast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_unicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_unicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_multicast_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_multicast_bytes"
+//     ],
+//     [
+//         "u64",
+//         "tx_broadcast_packets"
+//     ],
+//     [
+//         "u64",
+//         "tx_broadcast_bytes"
+//     ],
+//     {
+//         "crc": "0x20905ca4"
+//     }
 //
 type VnetCombinedCounter struct {
        SwIfIndex          uint32
@@ -152,52 +267,52 @@ func (*VnetCombinedCounter) GetCrcString() string {
        return "20905ca4"
 }
 
-// VnetSimpleCounter represents the VPP binary API type 'vnet_simple_counter'.
-//
-//            "vnet_simple_counter",
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u64",
-//                "drop"
-//            ],
-//            [
-//                "u64",
-//                "punt"
-//            ],
-//            [
-//                "u64",
-//                "rx_ip4"
-//            ],
-//            [
-//                "u64",
-//                "rx_ip6"
-//            ],
-//            [
-//                "u64",
-//                "rx_no_buffer"
-//            ],
-//            [
-//                "u64",
-//                "rx_miss"
-//            ],
-//            [
-//                "u64",
-//                "rx_error"
-//            ],
-//            [
-//                "u64",
-//                "tx_error"
-//            ],
-//            [
-//                "u64",
-//                "rx_mpls"
-//            ],
-//            {
-//                "crc": "0x8bd65e2d"
-//            }
+// VnetSimpleCounter represents VPP binary API type 'vnet_simple_counter':
+//
+//     "vnet_simple_counter",
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u64",
+//         "drop"
+//     ],
+//     [
+//         "u64",
+//         "punt"
+//     ],
+//     [
+//         "u64",
+//         "rx_ip4"
+//     ],
+//     [
+//         "u64",
+//         "rx_ip6"
+//     ],
+//     [
+//         "u64",
+//         "rx_no_buffer"
+//     ],
+//     [
+//         "u64",
+//         "rx_miss"
+//     ],
+//     [
+//         "u64",
+//         "rx_error"
+//     ],
+//     [
+//         "u64",
+//         "tx_error"
+//     ],
+//     [
+//         "u64",
+//         "rx_mpls"
+//     ],
+//     {
+//         "crc": "0x8bd65e2d"
+//     }
 //
 type VnetSimpleCounter struct {
        SwIfIndex  uint32
@@ -219,28 +334,216 @@ func (*VnetSimpleCounter) GetCrcString() string {
        return "8bd65e2d"
 }
 
-// IP4FibCounter represents the VPP binary API type 'ip4_fib_counter'.
-//
-//            "ip4_fib_counter",
-//            [
-//                "u32",
-//                "address"
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0xa6ceb0c9"
-//            }
+// FibMplsLabel represents VPP binary API type 'fib_mpls_label':
+//
+//     "fib_mpls_label",
+//     [
+//         "u8",
+//         "is_uniform"
+//     ],
+//     [
+//         "u32",
+//         "label"
+//     ],
+//     [
+//         "u8",
+//         "ttl"
+//     ],
+//     [
+//         "u8",
+//         "exp"
+//     ],
+//     {
+//         "crc": "0xc93bf35c"
+//     }
+//
+type FibMplsLabel struct {
+       IsUniform uint8
+       Label     uint32
+       TTL       uint8
+       Exp       uint8
+}
+
+func (*FibMplsLabel) GetTypeName() string {
+       return "fib_mpls_label"
+}
+func (*FibMplsLabel) GetCrcString() string {
+       return "c93bf35c"
+}
+
+// FibPath represents VPP binary API type 'fib_path':
+//
+//     "fib_path",
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "table_id"
+//     ],
+//     [
+//         "u8",
+//         "weight"
+//     ],
+//     [
+//         "u8",
+//         "preference"
+//     ],
+//     [
+//         "u8",
+//         "is_local"
+//     ],
+//     [
+//         "u8",
+//         "is_drop"
+//     ],
+//     [
+//         "u8",
+//         "is_udp_encap"
+//     ],
+//     [
+//         "u8",
+//         "is_unreach"
+//     ],
+//     [
+//         "u8",
+//         "is_prohibit"
+//     ],
+//     [
+//         "u8",
+//         "is_resolve_host"
+//     ],
+//     [
+//         "u8",
+//         "is_resolve_attached"
+//     ],
+//     [
+//         "u8",
+//         "is_dvr"
+//     ],
+//     [
+//         "u8",
+//         "is_source_lookup"
+//     ],
+//     [
+//         "u8",
+//         "afi"
+//     ],
+//     [
+//         "u8",
+//         "next_hop",
+//         16
+//     ],
+//     [
+//         "u32",
+//         "next_hop_id"
+//     ],
+//     [
+//         "u32",
+//         "rpf_id"
+//     ],
+//     [
+//         "u32",
+//         "via_label"
+//     ],
+//     [
+//         "u8",
+//         "n_labels"
+//     ],
+//     [
+//         "vl_api_fib_mpls_label_t",
+//         "label_stack",
+//         16
+//     ],
+//     {
+//         "crc": "0xabe483ef"
+//     }
+//
+type FibPath struct {
+       SwIfIndex         uint32
+       TableID           uint32
+       Weight            uint8
+       Preference        uint8
+       IsLocal           uint8
+       IsDrop            uint8
+       IsUDPEncap        uint8
+       IsUnreach         uint8
+       IsProhibit        uint8
+       IsResolveHost     uint8
+       IsResolveAttached uint8
+       IsDvr             uint8
+       IsSourceLookup    uint8
+       Afi               uint8
+       NextHop           []byte `struc:"[16]byte"`
+       NextHopID         uint32
+       RpfID             uint32
+       ViaLabel          uint32
+       NLabels           uint8
+       LabelStack        []FibMplsLabel `struc:"[16]FibMplsLabel"`
+}
+
+func (*FibPath) GetTypeName() string {
+       return "fib_path"
+}
+func (*FibPath) GetCrcString() string {
+       return "abe483ef"
+}
+
+// BierTableID represents VPP binary API type 'bier_table_id':
+//
+//     "bier_table_id",
+//     [
+//         "u8",
+//         "bt_set"
+//     ],
+//     [
+//         "u8",
+//         "bt_sub_domain"
+//     ],
+//     [
+//         "u8",
+//         "bt_hdr_len_id"
+//     ],
+//     {
+//         "crc": "0x435c691d"
+//     }
+//
+type BierTableID struct {
+       BtSet       uint8
+       BtSubDomain uint8
+       BtHdrLenID  uint8
+}
+
+func (*BierTableID) GetTypeName() string {
+       return "bier_table_id"
+}
+func (*BierTableID) GetCrcString() string {
+       return "435c691d"
+}
+
+// IP4FibCounter represents VPP binary API type 'ip4_fib_counter':
+//
+//     "ip4_fib_counter",
+//     [
+//         "u32",
+//         "address"
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0xa6ceb0c9"
+//     }
 //
 type IP4FibCounter struct {
        Address       uint32
@@ -256,34 +559,34 @@ func (*IP4FibCounter) GetCrcString() string {
        return "a6ceb0c9"
 }
 
-// IP4MfibCounter represents the VPP binary API type 'ip4_mfib_counter'.
-//
-//            "ip4_mfib_counter",
-//            [
-//                "u8",
-//                "source",
-//                4
-//            ],
-//            [
-//                "u8",
-//                "group",
-//                4
-//            ],
-//            [
-//                "u8",
-//                "group_length"
-//            ],
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0x2cee4721"
-//            }
+// IP4MfibCounter represents VPP binary API type 'ip4_mfib_counter':
+//
+//     "ip4_mfib_counter",
+//     [
+//         "u8",
+//         "source",
+//         4
+//     ],
+//     [
+//         "u8",
+//         "group",
+//         4
+//     ],
+//     [
+//         "u8",
+//         "group_length"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0x2cee4721"
+//     }
 //
 type IP4MfibCounter struct {
        Source      []byte `struc:"[4]byte"`
@@ -300,28 +603,28 @@ func (*IP4MfibCounter) GetCrcString() string {
        return "2cee4721"
 }
 
-// IP4NbrCounter represents the VPP binary API type 'ip4_nbr_counter'.
-//
-//            "ip4_nbr_counter",
-//            [
-//                "u32",
-//                "address"
-//            ],
-//            [
-//                "u8",
-//                "link_type"
-//            ],
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0xb9f974d6"
-//            }
+// IP4NbrCounter represents VPP binary API type 'ip4_nbr_counter':
+//
+//     "ip4_nbr_counter",
+//     [
+//         "u32",
+//         "address"
+//     ],
+//     [
+//         "u8",
+//         "link_type"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0xb9f974d6"
+//     }
 //
 type IP4NbrCounter struct {
        Address  uint32
@@ -337,29 +640,29 @@ func (*IP4NbrCounter) GetCrcString() string {
        return "b9f974d6"
 }
 
-// IP6FibCounter represents the VPP binary API type 'ip6_fib_counter'.
-//
-//            "ip6_fib_counter",
-//            [
-//                "u64",
-//                "address",
-//                2
-//            ],
-//            [
-//                "u8",
-//                "address_length"
-//            ],
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0xf1197efb"
-//            }
+// IP6FibCounter represents VPP binary API type 'ip6_fib_counter':
+//
+//     "ip6_fib_counter",
+//     [
+//         "u64",
+//         "address",
+//         2
+//     ],
+//     [
+//         "u8",
+//         "address_length"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0xf1197efb"
+//     }
 //
 type IP6FibCounter struct {
        Address       []uint64 `struc:"[2]uint64"`
@@ -375,34 +678,34 @@ func (*IP6FibCounter) GetCrcString() string {
        return "f1197efb"
 }
 
-// IP6MfibCounter represents the VPP binary API type 'ip6_mfib_counter'.
-//
-//            "ip6_mfib_counter",
-//            [
-//                "u8",
-//                "source",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "group",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "group_length"
-//            ],
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0x90a9590e"
-//            }
+// IP6MfibCounter represents VPP binary API type 'ip6_mfib_counter':
+//
+//     "ip6_mfib_counter",
+//     [
+//         "u8",
+//         "source",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "group",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "group_length"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0x90a9590e"
+//     }
 //
 type IP6MfibCounter struct {
        Source      []byte `struc:"[16]byte"`
@@ -419,29 +722,29 @@ func (*IP6MfibCounter) GetCrcString() string {
        return "90a9590e"
 }
 
-// IP6NbrCounter represents the VPP binary API type 'ip6_nbr_counter'.
-//
-//            "ip6_nbr_counter",
-//            [
-//                "u64",
-//                "address",
-//                2
-//            ],
-//            [
-//                "u8",
-//                "link_type"
-//            ],
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0x2d755474"
-//            }
+// IP6NbrCounter represents VPP binary API type 'ip6_nbr_counter':
+//
+//     "ip6_nbr_counter",
+//     [
+//         "u64",
+//         "address",
+//         2
+//     ],
+//     [
+//         "u8",
+//         "link_type"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0x2d755474"
+//     }
 //
 type IP6NbrCounter struct {
        Address  []uint64 `struc:"[2]uint64"`
@@ -457,24 +760,24 @@ func (*IP6NbrCounter) GetCrcString() string {
        return "2d755474"
 }
 
-// UDPEncapCounter represents the VPP binary API type 'udp_encap_counter'.
-//
-//            "udp_encap_counter",
-//            [
-//                "u32",
-//                "id"
-//            ],
-//            [
-//                "u64",
-//                "packets"
-//            ],
-//            [
-//                "u64",
-//                "bytes"
-//            ],
-//            {
-//                "crc": "0x7107035f"
-//            }
+// UDPEncapCounter represents VPP binary API type 'udp_encap_counter':
+//
+//     "udp_encap_counter",
+//     [
+//         "u32",
+//         "id"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0x7107035f"
+//     }
 //
 type UDPEncapCounter struct {
        ID      uint32
@@ -489,34 +792,71 @@ func (*UDPEncapCounter) GetCrcString() string {
        return "7107035f"
 }
 
+// BierNeighborCounter represents VPP binary API type 'bier_neighbor_counter':
+//
+//     "bier_neighbor_counter",
+//     [
+//         "vl_api_bier_table_id_t",
+//         "tbl_id"
+//     ],
+//     [
+//         "vl_api_fib_path_t",
+//         "path"
+//     ],
+//     [
+//         "u64",
+//         "packets"
+//     ],
+//     [
+//         "u64",
+//         "bytes"
+//     ],
+//     {
+//         "crc": "0x91fe1748"
+//     }
+//
+type BierNeighborCounter struct {
+       TblID   BierTableID
+       Path    FibPath
+       Packets uint64
+       Bytes   uint64
+}
+
+func (*BierNeighborCounter) GetTypeName() string {
+       return "bier_neighbor_counter"
+}
+func (*BierNeighborCounter) GetCrcString() string {
+       return "91fe1748"
+}
+
 /* Messages */
 
-// WantStats represents the VPP binary API message 'want_stats'.
-//
-//            "want_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantStats represents VPP binary API message 'want_stats':
+//
+//     "want_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantStats struct {
        EnableDisable uint32
@@ -533,24 +873,24 @@ func (*WantStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantStatsReply represents the VPP binary API message 'want_stats_reply'.
-//
-//            "want_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantStatsReply represents VPP binary API message 'want_stats_reply':
+//
+//     "want_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantStatsReply struct {
        Retval int32
@@ -566,32 +906,32 @@ func (*WantStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantInterfaceSimpleStats represents the VPP binary API message 'want_interface_simple_stats'.
-//
-//            "want_interface_simple_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantInterfaceSimpleStats represents VPP binary API message 'want_interface_simple_stats':
+//
+//     "want_interface_simple_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantInterfaceSimpleStats struct {
        EnableDisable uint32
@@ -608,24 +948,24 @@ func (*WantInterfaceSimpleStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantInterfaceSimpleStatsReply represents the VPP binary API message 'want_interface_simple_stats_reply'.
-//
-//            "want_interface_simple_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantInterfaceSimpleStatsReply represents VPP binary API message 'want_interface_simple_stats_reply':
+//
+//     "want_interface_simple_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantInterfaceSimpleStatsReply struct {
        Retval int32
@@ -641,42 +981,42 @@ func (*WantInterfaceSimpleStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantPerInterfaceSimpleStats represents the VPP binary API message 'want_per_interface_simple_stats'.
-//
-//            "want_per_interface_simple_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u32",
-//                "num"
-//            ],
-//            [
-//                "u32",
-//                "sw_ifs",
-//                0,
-//                "num"
-//            ],
-//            {
-//                "crc": "0x729d04f1"
-//            }
+// WantPerInterfaceSimpleStats represents VPP binary API message 'want_per_interface_simple_stats':
+//
+//     "want_per_interface_simple_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u32",
+//         "num"
+//     ],
+//     [
+//         "u32",
+//         "sw_ifs",
+//         0,
+//         "num"
+//     ],
+//     {
+//         "crc": "0x729d04f1"
+//     }
 //
 type WantPerInterfaceSimpleStats struct {
        EnableDisable uint32
@@ -695,24 +1035,24 @@ func (*WantPerInterfaceSimpleStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantPerInterfaceSimpleStatsReply represents the VPP binary API message 'want_per_interface_simple_stats_reply'.
-//
-//            "want_per_interface_simple_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantPerInterfaceSimpleStatsReply represents VPP binary API message 'want_per_interface_simple_stats_reply':
+//
+//     "want_per_interface_simple_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantPerInterfaceSimpleStatsReply struct {
        Retval int32
@@ -728,32 +1068,32 @@ func (*WantPerInterfaceSimpleStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantInterfaceCombinedStats represents the VPP binary API message 'want_interface_combined_stats'.
-//
-//            "want_interface_combined_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantInterfaceCombinedStats represents VPP binary API message 'want_interface_combined_stats':
+//
+//     "want_interface_combined_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantInterfaceCombinedStats struct {
        EnableDisable uint32
@@ -770,24 +1110,24 @@ func (*WantInterfaceCombinedStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantInterfaceCombinedStatsReply represents the VPP binary API message 'want_interface_combined_stats_reply'.
-//
-//            "want_interface_combined_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantInterfaceCombinedStatsReply represents VPP binary API message 'want_interface_combined_stats_reply':
+//
+//     "want_interface_combined_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantInterfaceCombinedStatsReply struct {
        Retval int32
@@ -803,42 +1143,42 @@ func (*WantInterfaceCombinedStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantPerInterfaceCombinedStats represents the VPP binary API message 'want_per_interface_combined_stats'.
-//
-//            "want_per_interface_combined_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            [
-//                "u32",
-//                "num"
-//            ],
-//            [
-//                "u32",
-//                "sw_ifs",
-//                0,
-//                "num"
-//            ],
-//            {
-//                "crc": "0x729d04f1"
-//            }
+// WantPerInterfaceCombinedStats represents VPP binary API message 'want_per_interface_combined_stats':
+//
+//     "want_per_interface_combined_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     [
+//         "u32",
+//         "num"
+//     ],
+//     [
+//         "u32",
+//         "sw_ifs",
+//         0,
+//         "num"
+//     ],
+//     {
+//         "crc": "0x729d04f1"
+//     }
 //
 type WantPerInterfaceCombinedStats struct {
        EnableDisable uint32
@@ -857,24 +1197,24 @@ func (*WantPerInterfaceCombinedStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantPerInterfaceCombinedStatsReply represents the VPP binary API message 'want_per_interface_combined_stats_reply'.
-//
-//            "want_per_interface_combined_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantPerInterfaceCombinedStatsReply represents VPP binary API message 'want_per_interface_combined_stats_reply':
+//
+//     "want_per_interface_combined_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantPerInterfaceCombinedStatsReply struct {
        Retval int32
@@ -890,32 +1230,32 @@ func (*WantPerInterfaceCombinedStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantIP4FibStats represents the VPP binary API message 'want_ip4_fib_stats'.
-//
-//            "want_ip4_fib_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantIP4FibStats represents VPP binary API message 'want_ip4_fib_stats':
+//
+//     "want_ip4_fib_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantIP4FibStats struct {
        EnableDisable uint32
@@ -932,24 +1272,24 @@ func (*WantIP4FibStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP4FibStatsReply represents the VPP binary API message 'want_ip4_fib_stats_reply'.
-//
-//            "want_ip4_fib_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP4FibStatsReply represents VPP binary API message 'want_ip4_fib_stats_reply':
+//
+//     "want_ip4_fib_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP4FibStatsReply struct {
        Retval int32
@@ -965,32 +1305,32 @@ func (*WantIP4FibStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantIP6FibStats represents the VPP binary API message 'want_ip6_fib_stats'.
-//
-//            "want_ip6_fib_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantIP6FibStats represents VPP binary API message 'want_ip6_fib_stats':
+//
+//     "want_ip6_fib_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantIP6FibStats struct {
        EnableDisable uint32
@@ -1007,24 +1347,24 @@ func (*WantIP6FibStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP6FibStatsReply represents the VPP binary API message 'want_ip6_fib_stats_reply'.
-//
-//            "want_ip6_fib_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP6FibStatsReply represents VPP binary API message 'want_ip6_fib_stats_reply':
+//
+//     "want_ip6_fib_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP6FibStatsReply struct {
        Retval int32
@@ -1040,32 +1380,32 @@ func (*WantIP6FibStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantIP4MfibStats represents the VPP binary API message 'want_ip4_mfib_stats'.
-//
-//            "want_ip4_mfib_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantIP4MfibStats represents VPP binary API message 'want_ip4_mfib_stats':
+//
+//     "want_ip4_mfib_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantIP4MfibStats struct {
        EnableDisable uint32
@@ -1082,24 +1422,24 @@ func (*WantIP4MfibStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP4MfibStatsReply represents the VPP binary API message 'want_ip4_mfib_stats_reply'.
-//
-//            "want_ip4_mfib_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP4MfibStatsReply represents VPP binary API message 'want_ip4_mfib_stats_reply':
+//
+//     "want_ip4_mfib_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP4MfibStatsReply struct {
        Retval int32
@@ -1115,32 +1455,32 @@ func (*WantIP4MfibStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantIP6MfibStats represents the VPP binary API message 'want_ip6_mfib_stats'.
-//
-//            "want_ip6_mfib_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantIP6MfibStats represents VPP binary API message 'want_ip6_mfib_stats':
+//
+//     "want_ip6_mfib_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantIP6MfibStats struct {
        EnableDisable uint32
@@ -1157,24 +1497,24 @@ func (*WantIP6MfibStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP6MfibStatsReply represents the VPP binary API message 'want_ip6_mfib_stats_reply'.
-//
-//            "want_ip6_mfib_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP6MfibStatsReply represents VPP binary API message 'want_ip6_mfib_stats_reply':
+//
+//     "want_ip6_mfib_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP6MfibStatsReply struct {
        Retval int32
@@ -1190,32 +1530,32 @@ func (*WantIP6MfibStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantIP4NbrStats represents the VPP binary API message 'want_ip4_nbr_stats'.
-//
-//            "want_ip4_nbr_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantIP4NbrStats represents VPP binary API message 'want_ip4_nbr_stats':
+//
+//     "want_ip4_nbr_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantIP4NbrStats struct {
        EnableDisable uint32
@@ -1232,24 +1572,24 @@ func (*WantIP4NbrStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP4NbrStatsReply represents the VPP binary API message 'want_ip4_nbr_stats_reply'.
-//
-//            "want_ip4_nbr_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP4NbrStatsReply represents VPP binary API message 'want_ip4_nbr_stats_reply':
+//
+//     "want_ip4_nbr_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP4NbrStatsReply struct {
        Retval int32
@@ -1265,32 +1605,32 @@ func (*WantIP4NbrStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantIP6NbrStats represents the VPP binary API message 'want_ip6_nbr_stats'.
-//
-//            "want_ip6_nbr_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable_disable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0x476f5a08"
-//            }
+// WantIP6NbrStats represents VPP binary API message 'want_ip6_nbr_stats':
+//
+//     "want_ip6_nbr_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable_disable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0x476f5a08"
+//     }
 //
 type WantIP6NbrStats struct {
        EnableDisable uint32
@@ -1307,24 +1647,24 @@ func (*WantIP6NbrStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantIP6NbrStatsReply represents the VPP binary API message 'want_ip6_nbr_stats_reply'.
-//
-//            "want_ip6_nbr_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantIP6NbrStatsReply represents VPP binary API message 'want_ip6_nbr_stats_reply':
+//
+//     "want_ip6_nbr_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantIP6NbrStatsReply struct {
        Retval int32
@@ -1340,30 +1680,30 @@ func (*WantIP6NbrStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// VnetIP4FibCounters represents the VPP binary API message 'vnet_ip4_fib_counters'.
-//
-//            "vnet_ip4_fib_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_ip4_fib_counter_t",
-//                "c",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x57e3feec"
-//            }
+// VnetIP4FibCounters represents VPP binary API message 'vnet_ip4_fib_counters':
+//
+//     "vnet_ip4_fib_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_ip4_fib_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x57e3feec"
+//     }
 //
 type VnetIP4FibCounters struct {
        VrfID uint32
@@ -1381,30 +1721,30 @@ func (*VnetIP4FibCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetIP4MfibCounters represents the VPP binary API message 'vnet_ip4_mfib_counters'.
-//
-//            "vnet_ip4_mfib_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_ip4_mfib_counter_t",
-//                "c",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x946eb588"
-//            }
+// VnetIP4MfibCounters represents VPP binary API message 'vnet_ip4_mfib_counters':
+//
+//     "vnet_ip4_mfib_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_ip4_mfib_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x946eb588"
+//     }
 //
 type VnetIP4MfibCounters struct {
        VrfID uint32
@@ -1422,34 +1762,34 @@ func (*VnetIP4MfibCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetIP4NbrCounters represents the VPP binary API message 'vnet_ip4_nbr_counters'.
-//
-//            "vnet_ip4_nbr_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "begin"
-//            ],
-//            [
-//                "vl_api_ip4_nbr_counter_t",
-//                "c",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x214c4811"
-//            }
+// VnetIP4NbrCounters represents VPP binary API message 'vnet_ip4_nbr_counters':
+//
+//     "vnet_ip4_nbr_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "begin"
+//     ],
+//     [
+//         "vl_api_ip4_nbr_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x214c4811"
+//     }
 //
 type VnetIP4NbrCounters struct {
        Count     uint32 `struc:"sizeof=C"`
@@ -1468,30 +1808,30 @@ func (*VnetIP4NbrCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetIP6FibCounters represents the VPP binary API message 'vnet_ip6_fib_counters'.
-//
-//            "vnet_ip6_fib_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_ip6_fib_counter_t",
-//                "c",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x13aed73d"
-//            }
+// VnetIP6FibCounters represents VPP binary API message 'vnet_ip6_fib_counters':
+//
+//     "vnet_ip6_fib_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_ip6_fib_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x13aed73d"
+//     }
 //
 type VnetIP6FibCounters struct {
        VrfID uint32
@@ -1509,30 +1849,30 @@ func (*VnetIP6FibCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetIP6MfibCounters represents the VPP binary API message 'vnet_ip6_mfib_counters'.
-//
-//            "vnet_ip6_mfib_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "vrf_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_ip6_mfib_counter_t",
-//                "c",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x65fe1ae3"
-//            }
+// VnetIP6MfibCounters represents VPP binary API message 'vnet_ip6_mfib_counters':
+//
+//     "vnet_ip6_mfib_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "vrf_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_ip6_mfib_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x65fe1ae3"
+//     }
 //
 type VnetIP6MfibCounters struct {
        VrfID uint32
@@ -1550,34 +1890,34 @@ func (*VnetIP6MfibCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetIP6NbrCounters represents the VPP binary API message 'vnet_ip6_nbr_counters'.
-//
-//            "vnet_ip6_nbr_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "begin"
-//            ],
-//            [
-//                "vl_api_ip6_nbr_counter_t",
-//                "c",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x650161c0"
-//            }
+// VnetIP6NbrCounters represents VPP binary API message 'vnet_ip6_nbr_counters':
+//
+//     "vnet_ip6_nbr_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "begin"
+//     ],
+//     [
+//         "vl_api_ip6_nbr_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x650161c0"
+//     }
 //
 type VnetIP6NbrCounters struct {
        Count     uint32 `struc:"sizeof=C"`
@@ -1596,34 +1936,34 @@ func (*VnetIP6NbrCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetInterfaceSimpleCounters represents the VPP binary API message 'vnet_interface_simple_counters'.
-//
-//            "vnet_interface_simple_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u8",
-//                "vnet_counter_type"
-//            ],
-//            [
-//                "u32",
-//                "first_sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "u64",
-//                "data",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x9bc4a808"
-//            }
+// VnetInterfaceSimpleCounters represents VPP binary API message 'vnet_interface_simple_counters':
+//
+//     "vnet_interface_simple_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u8",
+//         "vnet_counter_type"
+//     ],
+//     [
+//         "u32",
+//         "first_sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u64",
+//         "data",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x9bc4a808"
+//     }
 //
 type VnetInterfaceSimpleCounters struct {
        VnetCounterType uint8
@@ -1642,34 +1982,34 @@ func (*VnetInterfaceSimpleCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetInterfaceCombinedCounters represents the VPP binary API message 'vnet_interface_combined_counters'.
-//
-//            "vnet_interface_combined_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u8",
-//                "vnet_counter_type"
-//            ],
-//            [
-//                "u32",
-//                "first_sw_if_index"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_vlib_counter_t",
-//                "data",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x2c595002"
-//            }
+// VnetInterfaceCombinedCounters represents VPP binary API message 'vnet_interface_combined_counters':
+//
+//     "vnet_interface_combined_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u8",
+//         "vnet_counter_type"
+//     ],
+//     [
+//         "u32",
+//         "first_sw_if_index"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_vlib_counter_t",
+//         "data",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x2c595002"
+//     }
 //
 type VnetInterfaceCombinedCounters struct {
        VnetCounterType uint8
@@ -1688,30 +2028,30 @@ func (*VnetInterfaceCombinedCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetPerInterfaceSimpleCounters represents the VPP binary API message 'vnet_per_interface_simple_counters'.
-//
-//            "vnet_per_interface_simple_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "u32",
-//                "timestamp"
-//            ],
-//            [
-//                "vl_api_vnet_simple_counter_t",
-//                "data",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xd1fba9ba"
-//            }
+// VnetPerInterfaceSimpleCounters represents VPP binary API message 'vnet_per_interface_simple_counters':
+//
+//     "vnet_per_interface_simple_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "timestamp"
+//     ],
+//     [
+//         "vl_api_vnet_simple_counter_t",
+//         "data",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xd1fba9ba"
+//     }
 //
 type VnetPerInterfaceSimpleCounters struct {
        Count     uint32 `struc:"sizeof=Data"`
@@ -1729,30 +2069,30 @@ func (*VnetPerInterfaceSimpleCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetPerInterfaceCombinedCounters represents the VPP binary API message 'vnet_per_interface_combined_counters'.
-//
-//            "vnet_per_interface_combined_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "u32",
-//                "timestamp"
-//            ],
-//            [
-//                "vl_api_vnet_combined_counter_t",
-//                "data",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0xdc578375"
-//            }
+// VnetPerInterfaceCombinedCounters represents VPP binary API message 'vnet_per_interface_combined_counters':
+//
+//     "vnet_per_interface_combined_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "u32",
+//         "timestamp"
+//     ],
+//     [
+//         "vl_api_vnet_combined_counter_t",
+//         "data",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xdc578375"
+//     }
 //
 type VnetPerInterfaceCombinedCounters struct {
        Count     uint32 `struc:"sizeof=Data"`
@@ -1770,24 +2110,24 @@ func (*VnetPerInterfaceCombinedCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-// VnetGetSummaryStats represents the VPP binary API message 'vnet_get_summary_stats'.
-//
-//            "vnet_get_summary_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// VnetGetSummaryStats represents VPP binary API message 'vnet_get_summary_stats':
+//
+//     "vnet_get_summary_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type VnetGetSummaryStats struct{}
 
@@ -1801,43 +2141,43 @@ func (*VnetGetSummaryStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// VnetGetSummaryStatsReply represents the VPP binary API message 'vnet_get_summary_stats_reply'.
-//
-//            "vnet_get_summary_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u64",
-//                "total_pkts",
-//                2
-//            ],
-//            [
-//                "u64",
-//                "total_bytes",
-//                2
-//            ],
-//            [
-//                "f64",
-//                "vector_rate"
-//            ],
-//            {
-//                "crc": "0x32b87c56"
-//            }
+// VnetGetSummaryStatsReply represents VPP binary API message 'vnet_get_summary_stats_reply':
+//
+//     "vnet_get_summary_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u64",
+//         "total_pkts",
+//         8
+//     ],
+//     [
+//         "u64",
+//         "total_bytes",
+//         8
+//     ],
+//     [
+//         "f64",
+//         "vector_rate"
+//     ],
+//     {
+//         "crc": "0x82b5e46c"
+//     }
 //
 type VnetGetSummaryStatsReply struct {
        Retval     int32
-       TotalPkts  []uint64 `struc:"[2]uint64"`
-       TotalBytes []uint64 `struc:"[2]uint64"`
+       TotalPkts  []uint64 `struc:"[8]uint64"`
+       TotalBytes []uint64 `struc:"[8]uint64"`
        VectorRate float64
 }
 
@@ -1845,30 +2185,30 @@ func (*VnetGetSummaryStatsReply) GetMessageName() string {
        return "vnet_get_summary_stats_reply"
 }
 func (*VnetGetSummaryStatsReply) GetCrcString() string {
-       return "32b87c56"
+       return "82b5e46c"
 }
 func (*VnetGetSummaryStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// StatsGetPollerDelay represents the VPP binary API message 'stats_get_poller_delay'.
-//
-//            "stats_get_poller_delay",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// StatsGetPollerDelay represents VPP binary API message 'stats_get_poller_delay':
+//
+//     "stats_get_poller_delay",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type StatsGetPollerDelay struct{}
 
@@ -1882,28 +2222,28 @@ func (*StatsGetPollerDelay) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// StatsGetPollerDelayReply represents the VPP binary API message 'stats_get_poller_delay_reply'.
-//
-//            "stats_get_poller_delay_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "delay"
-//            ],
-//            {
-//                "crc": "0x8c445a33"
-//            }
+// StatsGetPollerDelayReply represents VPP binary API message 'stats_get_poller_delay_reply':
+//
+//     "stats_get_poller_delay_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "delay"
+//     ],
+//     {
+//         "crc": "0x8c445a33"
+//     }
 //
 type StatsGetPollerDelayReply struct {
        Retval int32
@@ -1920,32 +2260,32 @@ func (*StatsGetPollerDelayReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// WantUDPEncapStats represents the VPP binary API message 'want_udp_encap_stats'.
-//
-//            "want_udp_encap_stats",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "enable"
-//            ],
-//            [
-//                "u32",
-//                "pid"
-//            ],
-//            {
-//                "crc": "0xcfaccc1f"
-//            }
+// WantUDPEncapStats represents VPP binary API message 'want_udp_encap_stats':
+//
+//     "want_udp_encap_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0xcfaccc1f"
+//     }
 //
 type WantUDPEncapStats struct {
        Enable uint32
@@ -1962,24 +2302,24 @@ func (*WantUDPEncapStats) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// WantUDPEncapStatsReply represents the VPP binary API message 'want_udp_encap_stats_reply'.
-//
-//            "want_udp_encap_stats_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+// WantUDPEncapStatsReply represents VPP binary API message 'want_udp_encap_stats_reply':
+//
+//     "want_udp_encap_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type WantUDPEncapStatsReply struct {
        Retval int32
@@ -1995,30 +2335,30 @@ func (*WantUDPEncapStatsReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// VnetUDPEncapCounters represents the VPP binary API message 'vnet_udp_encap_counters'.
-//
-//            "vnet_udp_encap_counters",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "timestamp"
-//            ],
-//            [
-//                "u32",
-//                "count"
-//            ],
-//            [
-//                "vl_api_udp_encap_counter_t",
-//                "c",
-//                0,
-//                "count"
-//            ],
-//            {
-//                "crc": "0x1ab5e649"
-//            }
+// VnetUDPEncapCounters represents VPP binary API message 'vnet_udp_encap_counters':
+//
+//     "vnet_udp_encap_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "timestamp"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_udp_encap_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x1ab5e649"
+//     }
 //
 type VnetUDPEncapCounters struct {
        Timestamp uint32
@@ -2036,23 +2376,120 @@ func (*VnetUDPEncapCounters) GetMessageType() api.MessageType {
        return api.OtherMessage
 }
 
-/* Services */
+// WantBierNeighborStats represents VPP binary API message 'want_bier_neighbor_stats':
+//
+//     "want_bier_neighbor_stats",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "enable"
+//     ],
+//     [
+//         "u32",
+//         "pid"
+//     ],
+//     {
+//         "crc": "0xcfaccc1f"
+//     }
+//
+type WantBierNeighborStats struct {
+       Enable uint32
+       PID    uint32
+}
 
-type Services interface {
-       StatsGetPollerDelay(*StatsGetPollerDelay) (*StatsGetPollerDelayReply, error)
-       VnetGetSummaryStats(*VnetGetSummaryStats) (*VnetGetSummaryStatsReply, error)
-       WantInterfaceCombinedStats(*WantInterfaceCombinedStats) (*WantInterfaceCombinedStatsReply, error)
-       WantInterfaceSimpleStats(*WantInterfaceSimpleStats) (*WantInterfaceSimpleStatsReply, error)
-       WantIP4FibStats(*WantIP4FibStats) (*WantIP4FibStatsReply, error)
-       WantIP4MfibStats(*WantIP4MfibStats) (*WantIP4MfibStatsReply, error)
-       WantIP4NbrStats(*WantIP4NbrStats) (*WantIP4NbrStatsReply, error)
-       WantIP6FibStats(*WantIP6FibStats) (*WantIP6FibStatsReply, error)
-       WantIP6MfibStats(*WantIP6MfibStats) (*WantIP6MfibStatsReply, error)
-       WantIP6NbrStats(*WantIP6NbrStats) (*WantIP6NbrStatsReply, error)
-       WantPerInterfaceCombinedStats(*WantPerInterfaceCombinedStats) (*WantPerInterfaceCombinedStatsReply, error)
-       WantPerInterfaceSimpleStats(*WantPerInterfaceSimpleStats) (*WantPerInterfaceSimpleStatsReply, error)
-       WantStats(*WantStats) (*WantStatsReply, error)
-       WantUDPEncapStats(*WantUDPEncapStats) (*WantUDPEncapStatsReply, error)
+func (*WantBierNeighborStats) GetMessageName() string {
+       return "want_bier_neighbor_stats"
+}
+func (*WantBierNeighborStats) GetCrcString() string {
+       return "cfaccc1f"
+}
+func (*WantBierNeighborStats) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// WantBierNeighborStatsReply represents VPP binary API message 'want_bier_neighbor_stats_reply':
+//
+//     "want_bier_neighbor_stats_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
+//
+type WantBierNeighborStatsReply struct {
+       Retval int32
+}
+
+func (*WantBierNeighborStatsReply) GetMessageName() string {
+       return "want_bier_neighbor_stats_reply"
+}
+func (*WantBierNeighborStatsReply) GetCrcString() string {
+       return "e8d4e804"
+}
+func (*WantBierNeighborStatsReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// VnetBierNeighborCounters represents VPP binary API message 'vnet_bier_neighbor_counters':
+//
+//     "vnet_bier_neighbor_counters",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "timestamp"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_bier_neighbor_counter_t",
+//         "c",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0xee0481ce"
+//     }
+//
+type VnetBierNeighborCounters struct {
+       Timestamp uint32
+       Count     uint32 `struc:"sizeof=C"`
+       C         []BierNeighborCounter
+}
+
+func (*VnetBierNeighborCounters) GetMessageName() string {
+       return "vnet_bier_neighbor_counters"
+}
+func (*VnetBierNeighborCounters) GetCrcString() string {
+       return "ee0481ce"
+}
+func (*VnetBierNeighborCounters) GetMessageType() api.MessageType {
+       return api.OtherMessage
 }
 
 func init() {
@@ -2095,4 +2532,7 @@ func init() {
        api.RegisterMessage((*WantUDPEncapStats)(nil), "stats.WantUDPEncapStats")
        api.RegisterMessage((*WantUDPEncapStatsReply)(nil), "stats.WantUDPEncapStatsReply")
        api.RegisterMessage((*VnetUDPEncapCounters)(nil), "stats.VnetUDPEncapCounters")
+       api.RegisterMessage((*WantBierNeighborStats)(nil), "stats.WantBierNeighborStats")
+       api.RegisterMessage((*WantBierNeighborStatsReply)(nil), "stats.WantBierNeighborStatsReply")
+       api.RegisterMessage((*VnetBierNeighborCounters)(nil), "stats.VnetBierNeighborCounters")
 }
index 5a0ab74..45edc6a 100644 (file)
         }
     },
     "enums": [],
-    "types": []
+    "types": [],
+    "aliases": {}
 }
index d4daa1d..f94f7be 100644 (file)
@@ -20,79 +20,104 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "tap_delete": {
+//             "reply": "tap_delete_reply"
+//         },
+//         "sw_interface_tap_dump": {
+//             "reply": "sw_interface_tap_details",
+//             "stream": true
+//         },
+//         "tap_modify": {
+//             "reply": "tap_modify_reply"
+//         },
+//         "tap_connect": {
+//             "reply": "tap_connect_reply"
+//         }
+//     },
+//
+type Services interface {
+       DumpSwInterfaceTap(*SwInterfaceTapDump) ([]*SwInterfaceTapDetails, error)
+       TapConnect(*TapConnect) (*TapConnectReply, error)
+       TapDelete(*TapDelete) (*TapDeleteReply, error)
+       TapModify(*TapModify) (*TapModifyReply, error)
+}
+
 /* Messages */
 
-// TapConnect represents the VPP binary API message 'tap_connect'.
+// TapConnect represents VPP binary API message 'tap_connect':
 //
-//            "tap_connect",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "use_random_mac"
-//            ],
-//            [
-//                "u8",
-//                "tap_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "renumber"
-//            ],
-//            [
-//                "u32",
-//                "custom_dev_instance"
-//            ],
-//            [
-//                "u8",
-//                "ip4_address_set"
-//            ],
-//            [
-//                "u8",
-//                "ip4_address",
-//                4
-//            ],
-//            [
-//                "u8",
-//                "ip4_mask_width"
-//            ],
-//            [
-//                "u8",
-//                "ip6_address_set"
-//            ],
-//            [
-//                "u8",
-//                "ip6_address",
-//                16
-//            ],
-//            [
-//                "u8",
-//                "ip6_mask_width"
-//            ],
-//            [
-//                "u8",
-//                "tag",
-//                64
-//            ],
-//            {
-//                "crc": "0x9b9c396f"
-//            }
+//     "tap_connect",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "use_random_mac"
+//     ],
+//     [
+//         "u8",
+//         "tap_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "renumber"
+//     ],
+//     [
+//         "u32",
+//         "custom_dev_instance"
+//     ],
+//     [
+//         "u8",
+//         "ip4_address_set"
+//     ],
+//     [
+//         "u8",
+//         "ip4_address",
+//         4
+//     ],
+//     [
+//         "u8",
+//         "ip4_mask_width"
+//     ],
+//     [
+//         "u8",
+//         "ip6_address_set"
+//     ],
+//     [
+//         "u8",
+//         "ip6_address",
+//         16
+//     ],
+//     [
+//         "u8",
+//         "ip6_mask_width"
+//     ],
+//     [
+//         "u8",
+//         "tag",
+//         64
+//     ],
+//     {
+//         "crc": "0x9b9c396f"
+//     }
 //
 type TapConnect struct {
        UseRandomMac      uint8
@@ -119,28 +144,28 @@ func (*TapConnect) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// TapConnectReply represents the VPP binary API message 'tap_connect_reply'.
+// TapConnectReply represents VPP binary API message 'tap_connect_reply':
 //
-//            "tap_connect_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+//     "tap_connect_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type TapConnectReply struct {
        Retval    int32
@@ -157,50 +182,50 @@ func (*TapConnectReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// TapModify represents the VPP binary API message 'tap_modify'.
+// TapModify represents VPP binary API message 'tap_modify':
 //
-//            "tap_modify",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "use_random_mac"
-//            ],
-//            [
-//                "u8",
-//                "tap_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "mac_address",
-//                6
-//            ],
-//            [
-//                "u8",
-//                "renumber"
-//            ],
-//            [
-//                "u32",
-//                "custom_dev_instance"
-//            ],
-//            {
-//                "crc": "0x8047ae5c"
-//            }
+//     "tap_modify",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "use_random_mac"
+//     ],
+//     [
+//         "u8",
+//         "tap_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "mac_address",
+//         6
+//     ],
+//     [
+//         "u8",
+//         "renumber"
+//     ],
+//     [
+//         "u32",
+//         "custom_dev_instance"
+//     ],
+//     {
+//         "crc": "0x8047ae5c"
+//     }
 //
 type TapModify struct {
        SwIfIndex         uint32
@@ -221,28 +246,28 @@ func (*TapModify) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// TapModifyReply represents the VPP binary API message 'tap_modify_reply'.
+// TapModifyReply represents VPP binary API message 'tap_modify_reply':
 //
-//            "tap_modify_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0xfda5941f"
-//            }
+//     "tap_modify_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0xfda5941f"
+//     }
 //
 type TapModifyReply struct {
        Retval    int32
@@ -259,28 +284,28 @@ func (*TapModifyReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// TapDelete represents the VPP binary API message 'tap_delete'.
+// TapDelete represents VPP binary API message 'tap_delete':
 //
-//            "tap_delete",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            {
-//                "crc": "0x529cb13f"
-//            }
+//     "tap_delete",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     {
+//         "crc": "0x529cb13f"
+//     }
 //
 type TapDelete struct {
        SwIfIndex uint32
@@ -296,24 +321,24 @@ func (*TapDelete) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// TapDeleteReply represents the VPP binary API message 'tap_delete_reply'.
+// TapDeleteReply represents VPP binary API message 'tap_delete_reply':
 //
-//            "tap_delete_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            {
-//                "crc": "0xe8d4e804"
-//            }
+//     "tap_delete_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     {
+//         "crc": "0xe8d4e804"
+//     }
 //
 type TapDeleteReply struct {
        Retval int32
@@ -329,24 +354,24 @@ func (*TapDeleteReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// SwInterfaceTapDump represents the VPP binary API message 'sw_interface_tap_dump'.
+// SwInterfaceTapDump represents VPP binary API message 'sw_interface_tap_dump':
 //
-//            "sw_interface_tap_dump",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+//     "sw_interface_tap_dump",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type SwInterfaceTapDump struct{}
 
@@ -360,29 +385,29 @@ func (*SwInterfaceTapDump) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// SwInterfaceTapDetails represents the VPP binary API message 'sw_interface_tap_details'.
+// SwInterfaceTapDetails represents VPP binary API message 'sw_interface_tap_details':
 //
-//            "sw_interface_tap_details",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "sw_if_index"
-//            ],
-//            [
-//                "u8",
-//                "dev_name",
-//                64
-//            ],
-//            {
-//                "crc": "0x76229a57"
-//            }
+//     "sw_interface_tap_details",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "sw_if_index"
+//     ],
+//     [
+//         "u8",
+//         "dev_name",
+//         64
+//     ],
+//     {
+//         "crc": "0x76229a57"
+//     }
 //
 type SwInterfaceTapDetails struct {
        SwIfIndex uint32
@@ -399,15 +424,6 @@ func (*SwInterfaceTapDetails) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-/* Services */
-
-type Services interface {
-       DumpSwInterfaceTap(*SwInterfaceTapDump) (*SwInterfaceTapDetails, error)
-       TapConnect(*TapConnect) (*TapConnectReply, error)
-       TapDelete(*TapDelete) (*TapDeleteReply, error)
-       TapModify(*TapModify) (*TapModifyReply, error)
-}
-
 func init() {
        api.RegisterMessage((*TapConnect)(nil), "tap.TapConnect")
        api.RegisterMessage((*TapConnectReply)(nil), "tap.TapConnectReply")
index 9f973af..edefd20 100644 (file)
                 "crc": "0x8b5a13b4"
             }
         ],
+        [
+            "show_threads",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "client_index"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            {
+                "crc": "0x51077d14"
+            }
+        ],
+        [
+            "show_threads_reply",
+            [
+                "u16",
+                "_vl_msg_id"
+            ],
+            [
+                "u32",
+                "context"
+            ],
+            [
+                "i32",
+                "retval"
+            ],
+            [
+                "u32",
+                "count"
+            ],
+            [
+                "vl_api_thread_data_t",
+                "thread_data",
+                0,
+                "count"
+            ],
+            {
+                "crc": "0x6942fb35"
+            }
+        ],
         [
             "get_node_graph",
             [
             }
         ]
     ],
-    "vl_api_version": "0x9a1baa50",
+    "vl_api_version": "0x3ce489e",
     "unions": [],
     "services": {
         "cli_inband": {
         "get_next_index": {
             "reply": "get_next_index_reply"
         },
+        "show_threads": {
+            "reply": "show_threads_reply"
+        },
         "add_node_next": {
             "reply": "add_node_next_reply"
         },
         }
     },
     "enums": [],
-    "types": []
+    "types": [
+        [
+            "thread_data",
+            [
+                "u32",
+                "id"
+            ],
+            [
+                "u8",
+                "name",
+                64
+            ],
+            [
+                "u8",
+                "type",
+                64
+            ],
+            [
+                "u32",
+                "pid"
+            ],
+            [
+                "u32",
+                "cpu_id"
+            ],
+            [
+                "u32",
+                "core"
+            ],
+            [
+                "u32",
+                "cpu_socket"
+            ],
+            {
+                "crc": "0x0f57094e"
+            }
+        ]
+    ],
+    "aliases": {}
 }
index fe0fa03..48925ac 100644 (file)
@@ -5,8 +5,9 @@
  Package vpe is a generated from VPP binary API module 'vpe'.
 
  It contains following objects:
-        16 messages
-         8 services
+        18 messages
+         1 type
+         9 services
 
 */
 package vpe
@@ -20,26 +21,95 @@ var _ = api.RegisterMessage
 var _ = struc.Pack
 var _ = bytes.NewBuffer
 
+// Services represents VPP binary API services:
+//
+//     "services": {
+//         "cli_inband": {
+//             "reply": "cli_inband_reply"
+//         },
+//         "get_node_index": {
+//             "reply": "get_node_index_reply"
+//         },
+//         "cli": {
+//             "reply": "cli_reply"
+//         },
+//         "show_version": {
+//             "reply": "show_version_reply"
+//         },
+//         "get_node_graph": {
+//             "reply": "get_node_graph_reply"
+//         },
+//         "get_next_index": {
+//             "reply": "get_next_index_reply"
+//         },
+//         "show_threads": {
+//             "reply": "show_threads_reply"
+//         },
+//         "add_node_next": {
+//             "reply": "add_node_next_reply"
+//         },
+//         "control_ping": {
+//             "reply": "control_ping_reply"
+//         }
+//     },
+//
+type Services interface {
+       AddNodeNext(*AddNodeNext) (*AddNodeNextReply, error)
+       Cli(*Cli) (*CliReply, error)
+       CliInband(*CliInband) (*CliInbandReply, error)
+       ControlPing(*ControlPing) (*ControlPingReply, error)
+       GetNextIndex(*GetNextIndex) (*GetNextIndexReply, error)
+       GetNodeGraph(*GetNodeGraph) (*GetNodeGraphReply, error)
+       GetNodeIndex(*GetNodeIndex) (*GetNodeIndexReply, error)
+       ShowThreads(*ShowThreads) (*ShowThreadsReply, error)
+       ShowVersion(*ShowVersion) (*ShowVersionReply, error)
+}
+
+/* Types */
+
+// ThreadData represents VPP binary API type 'thread_data':
+//
+//     "thread_data",
+//     0,
+//     "count"
+//
+type ThreadData struct {
+       ID        uint32
+       Name      []byte `struc:"[64]byte"`
+       Type      []byte `struc:"[64]byte"`
+       PID       uint32
+       CPUID     uint32
+       Core      uint32
+       CPUSocket uint32
+}
+
+func (*ThreadData) GetTypeName() string {
+       return "thread_data"
+}
+func (*ThreadData) GetCrcString() string {
+       return "0f57094e"
+}
+
 /* Messages */
 
-// ControlPing represents the VPP binary API message 'control_ping'.
-//
-//            "control_ping",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// ControlPing represents VPP binary API message 'control_ping':
+//
+//     "control_ping",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type ControlPing struct{}
 
@@ -53,32 +123,32 @@ func (*ControlPing) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ControlPingReply represents the VPP binary API message 'control_ping_reply'.
-//
-//            "control_ping_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "vpe_pid"
-//            ],
-//            {
-//                "crc": "0xf6b0b8ca"
-//            }
+// ControlPingReply represents VPP binary API message 'control_ping_reply':
+//
+//     "control_ping_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "vpe_pid"
+//     ],
+//     {
+//         "crc": "0xf6b0b8ca"
+//     }
 //
 type ControlPingReply struct {
        Retval      int32
@@ -96,28 +166,28 @@ func (*ControlPingReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// Cli represents the VPP binary API message 'cli'.
-//
-//            "cli",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u64",
-//                "cmd_in_shmem"
-//            ],
-//            {
-//                "crc": "0x23bfbfff"
-//            }
+// Cli represents VPP binary API message 'cli':
+//
+//     "cli",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u64",
+//         "cmd_in_shmem"
+//     ],
+//     {
+//         "crc": "0x23bfbfff"
+//     }
 //
 type Cli struct {
        CmdInShmem uint64
@@ -133,34 +203,34 @@ func (*Cli) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// CliInband represents the VPP binary API message 'cli_inband'.
-//
-//            "cli_inband",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u32",
-//                "length"
-//            ],
-//            [
-//                "u8",
-//                "cmd",
-//                0,
-//                "length"
-//            ],
-//            {
-//                "crc": "0x74e00a49"
-//            }
+// CliInband represents VPP binary API message 'cli_inband':
+//
+//     "cli_inband",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u32",
+//         "length"
+//     ],
+//     [
+//         "u8",
+//         "cmd",
+//         0,
+//         "length"
+//     ],
+//     {
+//         "crc": "0x74e00a49"
+//     }
 //
 type CliInband struct {
        Length uint32 `struc:"sizeof=Cmd"`
@@ -177,28 +247,28 @@ func (*CliInband) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// CliReply represents the VPP binary API message 'cli_reply'.
-//
-//            "cli_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u64",
-//                "reply_in_shmem"
-//            ],
-//            {
-//                "crc": "0x06d68297"
-//            }
+// CliReply represents VPP binary API message 'cli_reply':
+//
+//     "cli_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u64",
+//         "reply_in_shmem"
+//     ],
+//     {
+//         "crc": "0x06d68297"
+//     }
 //
 type CliReply struct {
        Retval       int32
@@ -215,34 +285,34 @@ func (*CliReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// CliInbandReply represents the VPP binary API message 'cli_inband_reply'.
-//
-//            "cli_inband_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "length"
-//            ],
-//            [
-//                "u8",
-//                "reply",
-//                0,
-//                "length"
-//            ],
-//            {
-//                "crc": "0x1f22bbb8"
-//            }
+// CliInbandReply represents VPP binary API message 'cli_inband_reply':
+//
+//     "cli_inband_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "length"
+//     ],
+//     [
+//         "u8",
+//         "reply",
+//         0,
+//         "length"
+//     ],
+//     {
+//         "crc": "0x1f22bbb8"
+//     }
 //
 type CliInbandReply struct {
        Retval int32
@@ -260,29 +330,29 @@ func (*CliInbandReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// GetNodeIndex represents the VPP binary API message 'get_node_index'.
-//
-//            "get_node_index",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "node_name",
-//                64
-//            ],
-//            {
-//                "crc": "0x6c9a495d"
-//            }
+// GetNodeIndex represents VPP binary API message 'get_node_index':
+//
+//     "get_node_index",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "node_name",
+//         64
+//     ],
+//     {
+//         "crc": "0x6c9a495d"
+//     }
 //
 type GetNodeIndex struct {
        NodeName []byte `struc:"[64]byte"`
@@ -298,28 +368,28 @@ func (*GetNodeIndex) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// GetNodeIndexReply represents the VPP binary API message 'get_node_index_reply'.
-//
-//            "get_node_index_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "node_index"
-//            ],
-//            {
-//                "crc": "0xa8600b89"
-//            }
+// GetNodeIndexReply represents VPP binary API message 'get_node_index_reply':
+//
+//     "get_node_index_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "node_index"
+//     ],
+//     {
+//         "crc": "0xa8600b89"
+//     }
 //
 type GetNodeIndexReply struct {
        Retval    int32
@@ -336,34 +406,34 @@ func (*GetNodeIndexReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// AddNodeNext represents the VPP binary API message 'add_node_next'.
-//
-//            "add_node_next",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "node_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "next_name",
-//                64
-//            ],
-//            {
-//                "crc": "0x9ab92f7a"
-//            }
+// AddNodeNext represents VPP binary API message 'add_node_next':
+//
+//     "add_node_next",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "node_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "next_name",
+//         64
+//     ],
+//     {
+//         "crc": "0x9ab92f7a"
+//     }
 //
 type AddNodeNext struct {
        NodeName []byte `struc:"[64]byte"`
@@ -380,28 +450,28 @@ func (*AddNodeNext) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// AddNodeNextReply represents the VPP binary API message 'add_node_next_reply'.
-//
-//            "add_node_next_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "next_index"
-//            ],
-//            {
-//                "crc": "0x2ed75f32"
-//            }
+// AddNodeNextReply represents VPP binary API message 'add_node_next_reply':
+//
+//     "add_node_next_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "next_index"
+//     ],
+//     {
+//         "crc": "0x2ed75f32"
+//     }
 //
 type AddNodeNextReply struct {
        Retval    int32
@@ -418,24 +488,24 @@ func (*AddNodeNextReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// ShowVersion represents the VPP binary API message 'show_version'.
-//
-//            "show_version",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// ShowVersion represents VPP binary API message 'show_version':
+//
+//     "show_version",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type ShowVersion struct{}
 
@@ -449,44 +519,44 @@ func (*ShowVersion) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// ShowVersionReply represents the VPP binary API message 'show_version_reply'.
-//
-//            "show_version_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u8",
-//                "program",
-//                32
-//            ],
-//            [
-//                "u8",
-//                "version",
-//                32
-//            ],
-//            [
-//                "u8",
-//                "build_date",
-//                32
-//            ],
-//            [
-//                "u8",
-//                "build_directory",
-//                256
-//            ],
-//            {
-//                "crc": "0x8b5a13b4"
-//            }
+// ShowVersionReply represents VPP binary API message 'show_version_reply':
+//
+//     "show_version_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u8",
+//         "program",
+//         32
+//     ],
+//     [
+//         "u8",
+//         "version",
+//         32
+//     ],
+//     [
+//         "u8",
+//         "build_date",
+//         32
+//     ],
+//     [
+//         "u8",
+//         "build_directory",
+//         256
+//     ],
+//     {
+//         "crc": "0x8b5a13b4"
+//     }
 //
 type ShowVersionReply struct {
        Retval         int32
@@ -506,24 +576,100 @@ func (*ShowVersionReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// GetNodeGraph represents the VPP binary API message 'get_node_graph'.
-//
-//            "get_node_graph",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            {
-//                "crc": "0x51077d14"
-//            }
+// ShowThreads represents VPP binary API message 'show_threads':
+//
+//     "show_threads",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
+//
+type ShowThreads struct{}
+
+func (*ShowThreads) GetMessageName() string {
+       return "show_threads"
+}
+func (*ShowThreads) GetCrcString() string {
+       return "51077d14"
+}
+func (*ShowThreads) GetMessageType() api.MessageType {
+       return api.RequestMessage
+}
+
+// ShowThreadsReply represents VPP binary API message 'show_threads_reply':
+//
+//     "show_threads_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "count"
+//     ],
+//     [
+//         "vl_api_thread_data_t",
+//         "thread_data",
+//         0,
+//         "count"
+//     ],
+//     {
+//         "crc": "0x6942fb35"
+//     }
+//
+type ShowThreadsReply struct {
+       Retval     int32
+       Count      uint32 `struc:"sizeof=ThreadData"`
+       ThreadData []ThreadData
+}
+
+func (*ShowThreadsReply) GetMessageName() string {
+       return "show_threads_reply"
+}
+func (*ShowThreadsReply) GetCrcString() string {
+       return "6942fb35"
+}
+func (*ShowThreadsReply) GetMessageType() api.MessageType {
+       return api.ReplyMessage
+}
+
+// GetNodeGraph represents VPP binary API message 'get_node_graph':
+//
+//     "get_node_graph",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     {
+//         "crc": "0x51077d14"
+//     }
 //
 type GetNodeGraph struct{}
 
@@ -537,28 +683,28 @@ func (*GetNodeGraph) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// GetNodeGraphReply represents the VPP binary API message 'get_node_graph_reply'.
-//
-//            "get_node_graph_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u64",
-//                "reply_in_shmem"
-//            ],
-//            {
-//                "crc": "0x06d68297"
-//            }
+// GetNodeGraphReply represents VPP binary API message 'get_node_graph_reply':
+//
+//     "get_node_graph_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u64",
+//         "reply_in_shmem"
+//     ],
+//     {
+//         "crc": "0x06d68297"
+//     }
 //
 type GetNodeGraphReply struct {
        Retval       int32
@@ -575,34 +721,34 @@ func (*GetNodeGraphReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-// GetNextIndex represents the VPP binary API message 'get_next_index'.
-//
-//            "get_next_index",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "client_index"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "u8",
-//                "node_name",
-//                64
-//            ],
-//            [
-//                "u8",
-//                "next_name",
-//                64
-//            ],
-//            {
-//                "crc": "0x9ab92f7a"
-//            }
+// GetNextIndex represents VPP binary API message 'get_next_index':
+//
+//     "get_next_index",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "client_index"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "u8",
+//         "node_name",
+//         64
+//     ],
+//     [
+//         "u8",
+//         "next_name",
+//         64
+//     ],
+//     {
+//         "crc": "0x9ab92f7a"
+//     }
 //
 type GetNextIndex struct {
        NodeName []byte `struc:"[64]byte"`
@@ -619,28 +765,28 @@ func (*GetNextIndex) GetMessageType() api.MessageType {
        return api.RequestMessage
 }
 
-// GetNextIndexReply represents the VPP binary API message 'get_next_index_reply'.
-//
-//            "get_next_index_reply",
-//            [
-//                "u16",
-//                "_vl_msg_id"
-//            ],
-//            [
-//                "u32",
-//                "context"
-//            ],
-//            [
-//                "i32",
-//                "retval"
-//            ],
-//            [
-//                "u32",
-//                "next_index"
-//            ],
-//            {
-//                "crc": "0x2ed75f32"
-//            }
+// GetNextIndexReply represents VPP binary API message 'get_next_index_reply':
+//
+//     "get_next_index_reply",
+//     [
+//         "u16",
+//         "_vl_msg_id"
+//     ],
+//     [
+//         "u32",
+//         "context"
+//     ],
+//     [
+//         "i32",
+//         "retval"
+//     ],
+//     [
+//         "u32",
+//         "next_index"
+//     ],
+//     {
+//         "crc": "0x2ed75f32"
+//     }
 //
 type GetNextIndexReply struct {
        Retval    int32
@@ -657,19 +803,6 @@ func (*GetNextIndexReply) GetMessageType() api.MessageType {
        return api.ReplyMessage
 }
 
-/* Services */
-
-type Services interface {
-       AddNodeNext(*AddNodeNext) (*AddNodeNextReply, error)
-       Cli(*Cli) (*CliReply, error)
-       CliInband(*CliInband) (*CliInbandReply, error)
-       ControlPing(*ControlPing) (*ControlPingReply, error)
-       GetNextIndex(*GetNextIndex) (*GetNextIndexReply, error)
-       GetNodeGraph(*GetNodeGraph) (*GetNodeGraphReply, error)
-       GetNodeIndex(*GetNodeIndex) (*GetNodeIndexReply, error)
-       ShowVersion(*ShowVersion) (*ShowVersionReply, error)
-}
-
 func init() {
        api.RegisterMessage((*ControlPing)(nil), "vpe.ControlPing")
        api.RegisterMessage((*ControlPingReply)(nil), "vpe.ControlPingReply")
@@ -683,6 +816,8 @@ func init() {
        api.RegisterMessage((*AddNodeNextReply)(nil), "vpe.AddNodeNextReply")
        api.RegisterMessage((*ShowVersion)(nil), "vpe.ShowVersion")
        api.RegisterMessage((*ShowVersionReply)(nil), "vpe.ShowVersionReply")
+       api.RegisterMessage((*ShowThreads)(nil), "vpe.ShowThreads")
+       api.RegisterMessage((*ShowThreadsReply)(nil), "vpe.ShowThreadsReply")
        api.RegisterMessage((*GetNodeGraph)(nil), "vpe.GetNodeGraph")
        api.RegisterMessage((*GetNodeGraphReply)(nil), "vpe.GetNodeGraphReply")
        api.RegisterMessage((*GetNextIndex)(nil), "vpe.GetNextIndex")
index bb6c8a1..0f801d2 100644 (file)
@@ -26,7 +26,7 @@ import (
 func main() {
        // create union with IPv4 address
        var unionIP4 ip.AddressUnion
-       unionIP4.SetIP4(ip.IP4Address{Address: []byte{192, 168, 1, 10}})
+       unionIP4.SetIP4(ip.IP4Address{192, 168, 1, 10})
 
        // use it in the Address type
        addr := &ip.Address{