initial add - go fmt on grpc

Change-Id: Ib0afadd2fe5571d1456a091f94f5644458f7d3f4
diff --git a/vendor/github.com/golang/protobuf/AUTHORS b/vendor/github.com/golang/protobuf/AUTHORS
new file mode 100644
index 0000000..15167cd
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/AUTHORS
@@ -0,0 +1,3 @@
+# This source code refers to The Go Authors for copyright purposes.
+# The master list of authors is in the main Go distribution,
+# visible at http://tip.golang.org/AUTHORS.
diff --git a/vendor/github.com/golang/protobuf/CONTRIBUTORS b/vendor/github.com/golang/protobuf/CONTRIBUTORS
new file mode 100644
index 0000000..1c4577e
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/CONTRIBUTORS
@@ -0,0 +1,3 @@
+# This source code was written by the Go contributors.
+# The master list of contributors is in the main Go distribution,
+# visible at http://tip.golang.org/CONTRIBUTORS.
diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE
new file mode 100644
index 0000000..0f64693
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/LICENSE
@@ -0,0 +1,28 @@
+Copyright 2010 The Go Authors.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go
new file mode 100644
index 0000000..3cd3249
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/clone.go
@@ -0,0 +1,253 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2011 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Protocol buffer deep copy and merge.
+// TODO: RawMessage.
+
+package proto
+
+import (
+	"fmt"
+	"log"
+	"reflect"
+	"strings"
+)
+
+// Clone returns a deep copy of a protocol buffer.
+func Clone(src Message) Message {
+	in := reflect.ValueOf(src)
+	if in.IsNil() {
+		return src
+	}
+	out := reflect.New(in.Type().Elem())
+	dst := out.Interface().(Message)
+	Merge(dst, src)
+	return dst
+}
+
+// Merger is the interface representing objects that can merge messages of the same type.
+type Merger interface {
+	// Merge merges src into this message.
+	// Required and optional fields that are set in src will be set to that value in dst.
+	// Elements of repeated fields will be appended.
+	//
+	// Merge may panic if called with a different argument type than the receiver.
+	Merge(src Message)
+}
+
+// generatedMerger is the custom merge method that generated protos will have.
+// We must add this method since a generate Merge method will conflict with
+// many existing protos that have a Merge data field already defined.
+type generatedMerger interface {
+	XXX_Merge(src Message)
+}
+
+// Merge merges src into dst.
+// Required and optional fields that are set in src will be set to that value in dst.
+// Elements of repeated fields will be appended.
+// Merge panics if src and dst are not the same type, or if dst is nil.
+func Merge(dst, src Message) {
+	if m, ok := dst.(Merger); ok {
+		m.Merge(src)
+		return
+	}
+
+	in := reflect.ValueOf(src)
+	out := reflect.ValueOf(dst)
+	if out.IsNil() {
+		panic("proto: nil destination")
+	}
+	if in.Type() != out.Type() {
+		panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src))
+	}
+	if in.IsNil() {
+		return // Merge from nil src is a noop
+	}
+	if m, ok := dst.(generatedMerger); ok {
+		m.XXX_Merge(src)
+		return
+	}
+	mergeStruct(out.Elem(), in.Elem())
+}
+
+func mergeStruct(out, in reflect.Value) {
+	sprop := GetProperties(in.Type())
+	for i := 0; i < in.NumField(); i++ {
+		f := in.Type().Field(i)
+		if strings.HasPrefix(f.Name, "XXX_") {
+			continue
+		}
+		mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i])
+	}
+
+	if emIn, err := extendable(in.Addr().Interface()); err == nil {
+		emOut, _ := extendable(out.Addr().Interface())
+		mIn, muIn := emIn.extensionsRead()
+		if mIn != nil {
+			mOut := emOut.extensionsWrite()
+			muIn.Lock()
+			mergeExtension(mOut, mIn)
+			muIn.Unlock()
+		}
+	}
+
+	uf := in.FieldByName("XXX_unrecognized")
+	if !uf.IsValid() {
+		return
+	}
+	uin := uf.Bytes()
+	if len(uin) > 0 {
+		out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...))
+	}
+}
+
+// mergeAny performs a merge between two values of the same type.
+// viaPtr indicates whether the values were indirected through a pointer (implying proto2).
+// prop is set if this is a struct field (it may be nil).
+func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {
+	if in.Type() == protoMessageType {
+		if !in.IsNil() {
+			if out.IsNil() {
+				out.Set(reflect.ValueOf(Clone(in.Interface().(Message))))
+			} else {
+				Merge(out.Interface().(Message), in.Interface().(Message))
+			}
+		}
+		return
+	}
+	switch in.Kind() {
+	case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
+		reflect.String, reflect.Uint32, reflect.Uint64:
+		if !viaPtr && isProto3Zero(in) {
+			return
+		}
+		out.Set(in)
+	case reflect.Interface:
+		// Probably a oneof field; copy non-nil values.
+		if in.IsNil() {
+			return
+		}
+		// Allocate destination if it is not set, or set to a different type.
+		// Otherwise we will merge as normal.
+		if out.IsNil() || out.Elem().Type() != in.Elem().Type() {
+			out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T)
+		}
+		mergeAny(out.Elem(), in.Elem(), false, nil)
+	case reflect.Map:
+		if in.Len() == 0 {
+			return
+		}
+		if out.IsNil() {
+			out.Set(reflect.MakeMap(in.Type()))
+		}
+		// For maps with value types of *T or []byte we need to deep copy each value.
+		elemKind := in.Type().Elem().Kind()
+		for _, key := range in.MapKeys() {
+			var val reflect.Value
+			switch elemKind {
+			case reflect.Ptr:
+				val = reflect.New(in.Type().Elem().Elem())
+				mergeAny(val, in.MapIndex(key), false, nil)
+			case reflect.Slice:
+				val = in.MapIndex(key)
+				val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
+			default:
+				val = in.MapIndex(key)
+			}
+			out.SetMapIndex(key, val)
+		}
+	case reflect.Ptr:
+		if in.IsNil() {
+			return
+		}
+		if out.IsNil() {
+			out.Set(reflect.New(in.Elem().Type()))
+		}
+		mergeAny(out.Elem(), in.Elem(), true, nil)
+	case reflect.Slice:
+		if in.IsNil() {
+			return
+		}
+		if in.Type().Elem().Kind() == reflect.Uint8 {
+			// []byte is a scalar bytes field, not a repeated field.
+
+			// Edge case: if this is in a proto3 message, a zero length
+			// bytes field is considered the zero value, and should not
+			// be merged.
+			if prop != nil && prop.proto3 && in.Len() == 0 {
+				return
+			}
+
+			// Make a deep copy.
+			// Append to []byte{} instead of []byte(nil) so that we never end up
+			// with a nil result.
+			out.SetBytes(append([]byte{}, in.Bytes()...))
+			return
+		}
+		n := in.Len()
+		if out.IsNil() {
+			out.Set(reflect.MakeSlice(in.Type(), 0, n))
+		}
+		switch in.Type().Elem().Kind() {
+		case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,
+			reflect.String, reflect.Uint32, reflect.Uint64:
+			out.Set(reflect.AppendSlice(out, in))
+		default:
+			for i := 0; i < n; i++ {
+				x := reflect.Indirect(reflect.New(in.Type().Elem()))
+				mergeAny(x, in.Index(i), false, nil)
+				out.Set(reflect.Append(out, x))
+			}
+		}
+	case reflect.Struct:
+		mergeStruct(out, in)
+	default:
+		// unknown type, so not a protocol buffer
+		log.Printf("proto: don't know how to copy %v", in)
+	}
+}
+
+func mergeExtension(out, in map[int32]Extension) {
+	for extNum, eIn := range in {
+		eOut := Extension{desc: eIn.desc}
+		if eIn.value != nil {
+			v := reflect.New(reflect.TypeOf(eIn.value)).Elem()
+			mergeAny(v, reflect.ValueOf(eIn.value), false, nil)
+			eOut.value = v.Interface()
+		}
+		if eIn.enc != nil {
+			eOut.enc = make([]byte, len(eIn.enc))
+			copy(eOut.enc, eIn.enc)
+		}
+
+		out[extNum] = eOut
+	}
+}
diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go
new file mode 100644
index 0000000..63b0f08
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/decode.go
@@ -0,0 +1,427 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Routines for decoding protocol buffer data to construct in-memory representations.
+ */
+
+import (
+	"errors"
+	"fmt"
+	"io"
+)
+
+// errOverflow is returned when an integer is too large to be represented.
+var errOverflow = errors.New("proto: integer overflow")
+
+// ErrInternalBadWireType is returned by generated code when an incorrect
+// wire type is encountered. It does not get returned to user code.
+var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof")
+
+// DecodeVarint reads a varint-encoded integer from the slice.
+// It returns the integer and the number of bytes consumed, or
+// zero if there is not enough.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+func DecodeVarint(buf []byte) (x uint64, n int) {
+	for shift := uint(0); shift < 64; shift += 7 {
+		if n >= len(buf) {
+			return 0, 0
+		}
+		b := uint64(buf[n])
+		n++
+		x |= (b & 0x7F) << shift
+		if (b & 0x80) == 0 {
+			return x, n
+		}
+	}
+
+	// The number is too large to represent in a 64-bit value.
+	return 0, 0
+}
+
+func (p *Buffer) decodeVarintSlow() (x uint64, err error) {
+	i := p.index
+	l := len(p.buf)
+
+	for shift := uint(0); shift < 64; shift += 7 {
+		if i >= l {
+			err = io.ErrUnexpectedEOF
+			return
+		}
+		b := p.buf[i]
+		i++
+		x |= (uint64(b) & 0x7F) << shift
+		if b < 0x80 {
+			p.index = i
+			return
+		}
+	}
+
+	// The number is too large to represent in a 64-bit value.
+	err = errOverflow
+	return
+}
+
+// DecodeVarint reads a varint-encoded integer from the Buffer.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+func (p *Buffer) DecodeVarint() (x uint64, err error) {
+	i := p.index
+	buf := p.buf
+
+	if i >= len(buf) {
+		return 0, io.ErrUnexpectedEOF
+	} else if buf[i] < 0x80 {
+		p.index++
+		return uint64(buf[i]), nil
+	} else if len(buf)-i < 10 {
+		return p.decodeVarintSlow()
+	}
+
+	var b uint64
+	// we already checked the first byte
+	x = uint64(buf[i]) - 0x80
+	i++
+
+	b = uint64(buf[i])
+	i++
+	x += b << 7
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 7
+
+	b = uint64(buf[i])
+	i++
+	x += b << 14
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 14
+
+	b = uint64(buf[i])
+	i++
+	x += b << 21
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 21
+
+	b = uint64(buf[i])
+	i++
+	x += b << 28
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 28
+
+	b = uint64(buf[i])
+	i++
+	x += b << 35
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 35
+
+	b = uint64(buf[i])
+	i++
+	x += b << 42
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 42
+
+	b = uint64(buf[i])
+	i++
+	x += b << 49
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 49
+
+	b = uint64(buf[i])
+	i++
+	x += b << 56
+	if b&0x80 == 0 {
+		goto done
+	}
+	x -= 0x80 << 56
+
+	b = uint64(buf[i])
+	i++
+	x += b << 63
+	if b&0x80 == 0 {
+		goto done
+	}
+
+	return 0, errOverflow
+
+done:
+	p.index = i
+	return x, nil
+}
+
+// DecodeFixed64 reads a 64-bit integer from the Buffer.
+// This is the format for the
+// fixed64, sfixed64, and double protocol buffer types.
+func (p *Buffer) DecodeFixed64() (x uint64, err error) {
+	// x, err already 0
+	i := p.index + 8
+	if i < 0 || i > len(p.buf) {
+		err = io.ErrUnexpectedEOF
+		return
+	}
+	p.index = i
+
+	x = uint64(p.buf[i-8])
+	x |= uint64(p.buf[i-7]) << 8
+	x |= uint64(p.buf[i-6]) << 16
+	x |= uint64(p.buf[i-5]) << 24
+	x |= uint64(p.buf[i-4]) << 32
+	x |= uint64(p.buf[i-3]) << 40
+	x |= uint64(p.buf[i-2]) << 48
+	x |= uint64(p.buf[i-1]) << 56
+	return
+}
+
+// DecodeFixed32 reads a 32-bit integer from the Buffer.
+// This is the format for the
+// fixed32, sfixed32, and float protocol buffer types.
+func (p *Buffer) DecodeFixed32() (x uint64, err error) {
+	// x, err already 0
+	i := p.index + 4
+	if i < 0 || i > len(p.buf) {
+		err = io.ErrUnexpectedEOF
+		return
+	}
+	p.index = i
+
+	x = uint64(p.buf[i-4])
+	x |= uint64(p.buf[i-3]) << 8
+	x |= uint64(p.buf[i-2]) << 16
+	x |= uint64(p.buf[i-1]) << 24
+	return
+}
+
+// DecodeZigzag64 reads a zigzag-encoded 64-bit integer
+// from the Buffer.
+// This is the format used for the sint64 protocol buffer type.
+func (p *Buffer) DecodeZigzag64() (x uint64, err error) {
+	x, err = p.DecodeVarint()
+	if err != nil {
+		return
+	}
+	x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63)
+	return
+}
+
+// DecodeZigzag32 reads a zigzag-encoded 32-bit integer
+// from  the Buffer.
+// This is the format used for the sint32 protocol buffer type.
+func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
+	x, err = p.DecodeVarint()
+	if err != nil {
+		return
+	}
+	x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31))
+	return
+}
+
+// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.
+// This is the format used for the bytes protocol buffer
+// type and for embedded messages.
+func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {
+	n, err := p.DecodeVarint()
+	if err != nil {
+		return nil, err
+	}
+
+	nb := int(n)
+	if nb < 0 {
+		return nil, fmt.Errorf("proto: bad byte length %d", nb)
+	}
+	end := p.index + nb
+	if end < p.index || end > len(p.buf) {
+		return nil, io.ErrUnexpectedEOF
+	}
+
+	if !alloc {
+		// todo: check if can get more uses of alloc=false
+		buf = p.buf[p.index:end]
+		p.index += nb
+		return
+	}
+
+	buf = make([]byte, nb)
+	copy(buf, p.buf[p.index:])
+	p.index += nb
+	return
+}
+
+// DecodeStringBytes reads an encoded string from the Buffer.
+// This is the format used for the proto2 string type.
+func (p *Buffer) DecodeStringBytes() (s string, err error) {
+	buf, err := p.DecodeRawBytes(false)
+	if err != nil {
+		return
+	}
+	return string(buf), nil
+}
+
+// Unmarshaler is the interface representing objects that can
+// unmarshal themselves.  The argument points to data that may be
+// overwritten, so implementations should not keep references to the
+// buffer.
+// Unmarshal implementations should not clear the receiver.
+// Any unmarshaled data should be merged into the receiver.
+// Callers of Unmarshal that do not want to retain existing data
+// should Reset the receiver before calling Unmarshal.
+type Unmarshaler interface {
+	Unmarshal([]byte) error
+}
+
+// newUnmarshaler is the interface representing objects that can
+// unmarshal themselves. The semantics are identical to Unmarshaler.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newUnmarshaler interface {
+	XXX_Unmarshal([]byte) error
+}
+
+// Unmarshal parses the protocol buffer representation in buf and places the
+// decoded result in pb.  If the struct underlying pb does not match
+// the data in buf, the results can be unpredictable.
+//
+// Unmarshal resets pb before starting to unmarshal, so any
+// existing data in pb is always removed. Use UnmarshalMerge
+// to preserve and append to existing data.
+func Unmarshal(buf []byte, pb Message) error {
+	pb.Reset()
+	if u, ok := pb.(newUnmarshaler); ok {
+		return u.XXX_Unmarshal(buf)
+	}
+	if u, ok := pb.(Unmarshaler); ok {
+		return u.Unmarshal(buf)
+	}
+	return NewBuffer(buf).Unmarshal(pb)
+}
+
+// UnmarshalMerge parses the protocol buffer representation in buf and
+// writes the decoded result to pb.  If the struct underlying pb does not match
+// the data in buf, the results can be unpredictable.
+//
+// UnmarshalMerge merges into existing data in pb.
+// Most code should use Unmarshal instead.
+func UnmarshalMerge(buf []byte, pb Message) error {
+	if u, ok := pb.(newUnmarshaler); ok {
+		return u.XXX_Unmarshal(buf)
+	}
+	if u, ok := pb.(Unmarshaler); ok {
+		// NOTE: The history of proto have unfortunately been inconsistent
+		// whether Unmarshaler should or should not implicitly clear itself.
+		// Some implementations do, most do not.
+		// Thus, calling this here may or may not do what people want.
+		//
+		// See https://github.com/golang/protobuf/issues/424
+		return u.Unmarshal(buf)
+	}
+	return NewBuffer(buf).Unmarshal(pb)
+}
+
+// DecodeMessage reads a count-delimited message from the Buffer.
+func (p *Buffer) DecodeMessage(pb Message) error {
+	enc, err := p.DecodeRawBytes(false)
+	if err != nil {
+		return err
+	}
+	return NewBuffer(enc).Unmarshal(pb)
+}
+
+// DecodeGroup reads a tag-delimited group from the Buffer.
+// StartGroup tag is already consumed. This function consumes
+// EndGroup tag.
+func (p *Buffer) DecodeGroup(pb Message) error {
+	b := p.buf[p.index:]
+	x, y := findEndGroup(b)
+	if x < 0 {
+		return io.ErrUnexpectedEOF
+	}
+	err := Unmarshal(b[:x], pb)
+	p.index += y
+	return err
+}
+
+// Unmarshal parses the protocol buffer representation in the
+// Buffer and places the decoded result in pb.  If the struct
+// underlying pb does not match the data in the buffer, the results can be
+// unpredictable.
+//
+// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.
+func (p *Buffer) Unmarshal(pb Message) error {
+	// If the object can unmarshal itself, let it.
+	if u, ok := pb.(newUnmarshaler); ok {
+		err := u.XXX_Unmarshal(p.buf[p.index:])
+		p.index = len(p.buf)
+		return err
+	}
+	if u, ok := pb.(Unmarshaler); ok {
+		// NOTE: The history of proto have unfortunately been inconsistent
+		// whether Unmarshaler should or should not implicitly clear itself.
+		// Some implementations do, most do not.
+		// Thus, calling this here may or may not do what people want.
+		//
+		// See https://github.com/golang/protobuf/issues/424
+		err := u.Unmarshal(p.buf[p.index:])
+		p.index = len(p.buf)
+		return err
+	}
+
+	// Slow workaround for messages that aren't Unmarshalers.
+	// This includes some hand-coded .pb.go files and
+	// bootstrap protos.
+	// TODO: fix all of those and then add Unmarshal to
+	// the Message interface. Then:
+	// The cast above and code below can be deleted.
+	// The old unmarshaler can be deleted.
+	// Clients can call Unmarshal directly (can already do that, actually).
+	var info InternalMessageInfo
+	err := info.Unmarshal(pb, p.buf[p.index:])
+	p.index = len(p.buf)
+	return err
+}
diff --git a/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/golang/protobuf/proto/deprecated.go
new file mode 100644
index 0000000..35b882c
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/deprecated.go
@@ -0,0 +1,63 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2018 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import "errors"
+
+// Deprecated: do not use.
+type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 }
+
+// Deprecated: do not use.
+func GetStats() Stats { return Stats{} }
+
+// Deprecated: do not use.
+func MarshalMessageSet(interface{}) ([]byte, error) {
+	return nil, errors.New("proto: not implemented")
+}
+
+// Deprecated: do not use.
+func UnmarshalMessageSet([]byte, interface{}) error {
+	return errors.New("proto: not implemented")
+}
+
+// Deprecated: do not use.
+func MarshalMessageSetJSON(interface{}) ([]byte, error) {
+	return nil, errors.New("proto: not implemented")
+}
+
+// Deprecated: do not use.
+func UnmarshalMessageSetJSON([]byte, interface{}) error {
+	return errors.New("proto: not implemented")
+}
+
+// Deprecated: do not use.
+func RegisterMessageSetType(Message, int32, string) {}
diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go
new file mode 100644
index 0000000..dea2617
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/discard.go
@@ -0,0 +1,350 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2017 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+	"fmt"
+	"reflect"
+	"strings"
+	"sync"
+	"sync/atomic"
+)
+
+type generatedDiscarder interface {
+	XXX_DiscardUnknown()
+}
+
+// DiscardUnknown recursively discards all unknown fields from this message
+// and all embedded messages.
+//
+// When unmarshaling a message with unrecognized fields, the tags and values
+// of such fields are preserved in the Message. This allows a later call to
+// marshal to be able to produce a message that continues to have those
+// unrecognized fields. To avoid this, DiscardUnknown is used to
+// explicitly clear the unknown fields after unmarshaling.
+//
+// For proto2 messages, the unknown fields of message extensions are only
+// discarded from messages that have been accessed via GetExtension.
+func DiscardUnknown(m Message) {
+	if m, ok := m.(generatedDiscarder); ok {
+		m.XXX_DiscardUnknown()
+		return
+	}
+	// TODO: Dynamically populate a InternalMessageInfo for legacy messages,
+	// but the master branch has no implementation for InternalMessageInfo,
+	// so it would be more work to replicate that approach.
+	discardLegacy(m)
+}
+
+// DiscardUnknown recursively discards all unknown fields.
+func (a *InternalMessageInfo) DiscardUnknown(m Message) {
+	di := atomicLoadDiscardInfo(&a.discard)
+	if di == nil {
+		di = getDiscardInfo(reflect.TypeOf(m).Elem())
+		atomicStoreDiscardInfo(&a.discard, di)
+	}
+	di.discard(toPointer(&m))
+}
+
+type discardInfo struct {
+	typ reflect.Type
+
+	initialized int32 // 0: only typ is valid, 1: everything is valid
+	lock        sync.Mutex
+
+	fields       []discardFieldInfo
+	unrecognized field
+}
+
+type discardFieldInfo struct {
+	field   field // Offset of field, guaranteed to be valid
+	discard func(src pointer)
+}
+
+var (
+	discardInfoMap  = map[reflect.Type]*discardInfo{}
+	discardInfoLock sync.Mutex
+)
+
+func getDiscardInfo(t reflect.Type) *discardInfo {
+	discardInfoLock.Lock()
+	defer discardInfoLock.Unlock()
+	di := discardInfoMap[t]
+	if di == nil {
+		di = &discardInfo{typ: t}
+		discardInfoMap[t] = di
+	}
+	return di
+}
+
+func (di *discardInfo) discard(src pointer) {
+	if src.isNil() {
+		return // Nothing to do.
+	}
+
+	if atomic.LoadInt32(&di.initialized) == 0 {
+		di.computeDiscardInfo()
+	}
+
+	for _, fi := range di.fields {
+		sfp := src.offset(fi.field)
+		fi.discard(sfp)
+	}
+
+	// For proto2 messages, only discard unknown fields in message extensions
+	// that have been accessed via GetExtension.
+	if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil {
+		// Ignore lock since DiscardUnknown is not concurrency safe.
+		emm, _ := em.extensionsRead()
+		for _, mx := range emm {
+			if m, ok := mx.value.(Message); ok {
+				DiscardUnknown(m)
+			}
+		}
+	}
+
+	if di.unrecognized.IsValid() {
+		*src.offset(di.unrecognized).toBytes() = nil
+	}
+}
+
+func (di *discardInfo) computeDiscardInfo() {
+	di.lock.Lock()
+	defer di.lock.Unlock()
+	if di.initialized != 0 {
+		return
+	}
+	t := di.typ
+	n := t.NumField()
+
+	for i := 0; i < n; i++ {
+		f := t.Field(i)
+		if strings.HasPrefix(f.Name, "XXX_") {
+			continue
+		}
+
+		dfi := discardFieldInfo{field: toField(&f)}
+		tf := f.Type
+
+		// Unwrap tf to get its most basic type.
+		var isPointer, isSlice bool
+		if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+			isSlice = true
+			tf = tf.Elem()
+		}
+		if tf.Kind() == reflect.Ptr {
+			isPointer = true
+			tf = tf.Elem()
+		}
+		if isPointer && isSlice && tf.Kind() != reflect.Struct {
+			panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name))
+		}
+
+		switch tf.Kind() {
+		case reflect.Struct:
+			switch {
+			case !isPointer:
+				panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name))
+			case isSlice: // E.g., []*pb.T
+				di := getDiscardInfo(tf)
+				dfi.discard = func(src pointer) {
+					sps := src.getPointerSlice()
+					for _, sp := range sps {
+						if !sp.isNil() {
+							di.discard(sp)
+						}
+					}
+				}
+			default: // E.g., *pb.T
+				di := getDiscardInfo(tf)
+				dfi.discard = func(src pointer) {
+					sp := src.getPointer()
+					if !sp.isNil() {
+						di.discard(sp)
+					}
+				}
+			}
+		case reflect.Map:
+			switch {
+			case isPointer || isSlice:
+				panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name))
+			default: // E.g., map[K]V
+				if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)
+					dfi.discard = func(src pointer) {
+						sm := src.asPointerTo(tf).Elem()
+						if sm.Len() == 0 {
+							return
+						}
+						for _, key := range sm.MapKeys() {
+							val := sm.MapIndex(key)
+							DiscardUnknown(val.Interface().(Message))
+						}
+					}
+				} else {
+					dfi.discard = func(pointer) {} // Noop
+				}
+			}
+		case reflect.Interface:
+			// Must be oneof field.
+			switch {
+			case isPointer || isSlice:
+				panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name))
+			default: // E.g., interface{}
+				// TODO: Make this faster?
+				dfi.discard = func(src pointer) {
+					su := src.asPointerTo(tf).Elem()
+					if !su.IsNil() {
+						sv := su.Elem().Elem().Field(0)
+						if sv.Kind() == reflect.Ptr && sv.IsNil() {
+							return
+						}
+						switch sv.Type().Kind() {
+						case reflect.Ptr: // Proto struct (e.g., *T)
+							DiscardUnknown(sv.Interface().(Message))
+						}
+					}
+				}
+			}
+		default:
+			continue
+		}
+		di.fields = append(di.fields, dfi)
+	}
+
+	di.unrecognized = invalidField
+	if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+		if f.Type != reflect.TypeOf([]byte{}) {
+			panic("expected XXX_unrecognized to be of type []byte")
+		}
+		di.unrecognized = toField(&f)
+	}
+
+	atomic.StoreInt32(&di.initialized, 1)
+}
+
+func discardLegacy(m Message) {
+	v := reflect.ValueOf(m)
+	if v.Kind() != reflect.Ptr || v.IsNil() {
+		return
+	}
+	v = v.Elem()
+	if v.Kind() != reflect.Struct {
+		return
+	}
+	t := v.Type()
+
+	for i := 0; i < v.NumField(); i++ {
+		f := t.Field(i)
+		if strings.HasPrefix(f.Name, "XXX_") {
+			continue
+		}
+		vf := v.Field(i)
+		tf := f.Type
+
+		// Unwrap tf to get its most basic type.
+		var isPointer, isSlice bool
+		if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+			isSlice = true
+			tf = tf.Elem()
+		}
+		if tf.Kind() == reflect.Ptr {
+			isPointer = true
+			tf = tf.Elem()
+		}
+		if isPointer && isSlice && tf.Kind() != reflect.Struct {
+			panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name))
+		}
+
+		switch tf.Kind() {
+		case reflect.Struct:
+			switch {
+			case !isPointer:
+				panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name))
+			case isSlice: // E.g., []*pb.T
+				for j := 0; j < vf.Len(); j++ {
+					discardLegacy(vf.Index(j).Interface().(Message))
+				}
+			default: // E.g., *pb.T
+				discardLegacy(vf.Interface().(Message))
+			}
+		case reflect.Map:
+			switch {
+			case isPointer || isSlice:
+				panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name))
+			default: // E.g., map[K]V
+				tv := vf.Type().Elem()
+				if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)
+					for _, key := range vf.MapKeys() {
+						val := vf.MapIndex(key)
+						discardLegacy(val.Interface().(Message))
+					}
+				}
+			}
+		case reflect.Interface:
+			// Must be oneof field.
+			switch {
+			case isPointer || isSlice:
+				panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name))
+			default: // E.g., test_proto.isCommunique_Union interface
+				if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" {
+					vf = vf.Elem() // E.g., *test_proto.Communique_Msg
+					if !vf.IsNil() {
+						vf = vf.Elem()   // E.g., test_proto.Communique_Msg
+						vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value
+						if vf.Kind() == reflect.Ptr {
+							discardLegacy(vf.Interface().(Message))
+						}
+					}
+				}
+			}
+		}
+	}
+
+	if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() {
+		if vf.Type() != reflect.TypeOf([]byte{}) {
+			panic("expected XXX_unrecognized to be of type []byte")
+		}
+		vf.Set(reflect.ValueOf([]byte(nil)))
+	}
+
+	// For proto2 messages, only discard unknown fields in message extensions
+	// that have been accessed via GetExtension.
+	if em, err := extendable(m); err == nil {
+		// Ignore lock since discardLegacy is not concurrency safe.
+		emm, _ := em.extensionsRead()
+		for _, mx := range emm {
+			if m, ok := mx.value.(Message); ok {
+				discardLegacy(m)
+			}
+		}
+	}
+}
diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go
new file mode 100644
index 0000000..3abfed2
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/encode.go
@@ -0,0 +1,203 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Routines for encoding data into the wire format for protocol buffers.
+ */
+
+import (
+	"errors"
+	"reflect"
+)
+
+var (
+	// errRepeatedHasNil is the error returned if Marshal is called with
+	// a struct with a repeated field containing a nil element.
+	errRepeatedHasNil = errors.New("proto: repeated field has nil element")
+
+	// errOneofHasNil is the error returned if Marshal is called with
+	// a struct with a oneof field containing a nil element.
+	errOneofHasNil = errors.New("proto: oneof field has nil value")
+
+	// ErrNil is the error returned if Marshal is called with nil.
+	ErrNil = errors.New("proto: Marshal called with nil")
+
+	// ErrTooLarge is the error returned if Marshal is called with a
+	// message that encodes to >2GB.
+	ErrTooLarge = errors.New("proto: message encodes to over 2 GB")
+)
+
+// The fundamental encoders that put bytes on the wire.
+// Those that take integer types all accept uint64 and are
+// therefore of type valueEncoder.
+
+const maxVarintBytes = 10 // maximum length of a varint
+
+// EncodeVarint returns the varint encoding of x.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+// Not used by the package itself, but helpful to clients
+// wishing to use the same encoding.
+func EncodeVarint(x uint64) []byte {
+	var buf [maxVarintBytes]byte
+	var n int
+	for n = 0; x > 127; n++ {
+		buf[n] = 0x80 | uint8(x&0x7F)
+		x >>= 7
+	}
+	buf[n] = uint8(x)
+	n++
+	return buf[0:n]
+}
+
+// EncodeVarint writes a varint-encoded integer to the Buffer.
+// This is the format for the
+// int32, int64, uint32, uint64, bool, and enum
+// protocol buffer types.
+func (p *Buffer) EncodeVarint(x uint64) error {
+	for x >= 1<<7 {
+		p.buf = append(p.buf, uint8(x&0x7f|0x80))
+		x >>= 7
+	}
+	p.buf = append(p.buf, uint8(x))
+	return nil
+}
+
+// SizeVarint returns the varint encoding size of an integer.
+func SizeVarint(x uint64) int {
+	switch {
+	case x < 1<<7:
+		return 1
+	case x < 1<<14:
+		return 2
+	case x < 1<<21:
+		return 3
+	case x < 1<<28:
+		return 4
+	case x < 1<<35:
+		return 5
+	case x < 1<<42:
+		return 6
+	case x < 1<<49:
+		return 7
+	case x < 1<<56:
+		return 8
+	case x < 1<<63:
+		return 9
+	}
+	return 10
+}
+
+// EncodeFixed64 writes a 64-bit integer to the Buffer.
+// This is the format for the
+// fixed64, sfixed64, and double protocol buffer types.
+func (p *Buffer) EncodeFixed64(x uint64) error {
+	p.buf = append(p.buf,
+		uint8(x),
+		uint8(x>>8),
+		uint8(x>>16),
+		uint8(x>>24),
+		uint8(x>>32),
+		uint8(x>>40),
+		uint8(x>>48),
+		uint8(x>>56))
+	return nil
+}
+
+// EncodeFixed32 writes a 32-bit integer to the Buffer.
+// This is the format for the
+// fixed32, sfixed32, and float protocol buffer types.
+func (p *Buffer) EncodeFixed32(x uint64) error {
+	p.buf = append(p.buf,
+		uint8(x),
+		uint8(x>>8),
+		uint8(x>>16),
+		uint8(x>>24))
+	return nil
+}
+
+// EncodeZigzag64 writes a zigzag-encoded 64-bit integer
+// to the Buffer.
+// This is the format used for the sint64 protocol buffer type.
+func (p *Buffer) EncodeZigzag64(x uint64) error {
+	// use signed number to get arithmetic right shift.
+	return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+}
+
+// EncodeZigzag32 writes a zigzag-encoded 32-bit integer
+// to the Buffer.
+// This is the format used for the sint32 protocol buffer type.
+func (p *Buffer) EncodeZigzag32(x uint64) error {
+	// use signed number to get arithmetic right shift.
+	return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
+}
+
+// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.
+// This is the format used for the bytes protocol buffer
+// type and for embedded messages.
+func (p *Buffer) EncodeRawBytes(b []byte) error {
+	p.EncodeVarint(uint64(len(b)))
+	p.buf = append(p.buf, b...)
+	return nil
+}
+
+// EncodeStringBytes writes an encoded string to the Buffer.
+// This is the format used for the proto2 string type.
+func (p *Buffer) EncodeStringBytes(s string) error {
+	p.EncodeVarint(uint64(len(s)))
+	p.buf = append(p.buf, s...)
+	return nil
+}
+
+// Marshaler is the interface representing objects that can marshal themselves.
+type Marshaler interface {
+	Marshal() ([]byte, error)
+}
+
+// EncodeMessage writes the protocol buffer to the Buffer,
+// prefixed by a varint-encoded length.
+func (p *Buffer) EncodeMessage(pb Message) error {
+	siz := Size(pb)
+	p.EncodeVarint(uint64(siz))
+	return p.Marshal(pb)
+}
+
+// All protocol buffer fields are nillable, but be careful.
+func isNil(v reflect.Value) bool {
+	switch v.Kind() {
+	case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
+		return v.IsNil()
+	}
+	return false
+}
diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go
new file mode 100644
index 0000000..f9b6e41
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/equal.go
@@ -0,0 +1,301 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2011 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Protocol buffer comparison.
+
+package proto
+
+import (
+	"bytes"
+	"log"
+	"reflect"
+	"strings"
+)
+
+/*
+Equal returns true iff protocol buffers a and b are equal.
+The arguments must both be pointers to protocol buffer structs.
+
+Equality is defined in this way:
+  - Two messages are equal iff they are the same type,
+    corresponding fields are equal, unknown field sets
+    are equal, and extensions sets are equal.
+  - Two set scalar fields are equal iff their values are equal.
+    If the fields are of a floating-point type, remember that
+    NaN != x for all x, including NaN. If the message is defined
+    in a proto3 .proto file, fields are not "set"; specifically,
+    zero length proto3 "bytes" fields are equal (nil == {}).
+  - Two repeated fields are equal iff their lengths are the same,
+    and their corresponding elements are equal. Note a "bytes" field,
+    although represented by []byte, is not a repeated field and the
+    rule for the scalar fields described above applies.
+  - Two unset fields are equal.
+  - Two unknown field sets are equal if their current
+    encoded state is equal.
+  - Two extension sets are equal iff they have corresponding
+    elements that are pairwise equal.
+  - Two map fields are equal iff their lengths are the same,
+    and they contain the same set of elements. Zero-length map
+    fields are equal.
+  - Every other combination of things are not equal.
+
+The return value is undefined if a and b are not protocol buffers.
+*/
+func Equal(a, b Message) bool {
+	if a == nil || b == nil {
+		return a == b
+	}
+	v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b)
+	if v1.Type() != v2.Type() {
+		return false
+	}
+	if v1.Kind() == reflect.Ptr {
+		if v1.IsNil() {
+			return v2.IsNil()
+		}
+		if v2.IsNil() {
+			return false
+		}
+		v1, v2 = v1.Elem(), v2.Elem()
+	}
+	if v1.Kind() != reflect.Struct {
+		return false
+	}
+	return equalStruct(v1, v2)
+}
+
+// v1 and v2 are known to have the same type.
+func equalStruct(v1, v2 reflect.Value) bool {
+	sprop := GetProperties(v1.Type())
+	for i := 0; i < v1.NumField(); i++ {
+		f := v1.Type().Field(i)
+		if strings.HasPrefix(f.Name, "XXX_") {
+			continue
+		}
+		f1, f2 := v1.Field(i), v2.Field(i)
+		if f.Type.Kind() == reflect.Ptr {
+			if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 {
+				// both unset
+				continue
+			} else if n1 != n2 {
+				// set/unset mismatch
+				return false
+			}
+			f1, f2 = f1.Elem(), f2.Elem()
+		}
+		if !equalAny(f1, f2, sprop.Prop[i]) {
+			return false
+		}
+	}
+
+	if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() {
+		em2 := v2.FieldByName("XXX_InternalExtensions")
+		if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) {
+			return false
+		}
+	}
+
+	if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() {
+		em2 := v2.FieldByName("XXX_extensions")
+		if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) {
+			return false
+		}
+	}
+
+	uf := v1.FieldByName("XXX_unrecognized")
+	if !uf.IsValid() {
+		return true
+	}
+
+	u1 := uf.Bytes()
+	u2 := v2.FieldByName("XXX_unrecognized").Bytes()
+	return bytes.Equal(u1, u2)
+}
+
+// v1 and v2 are known to have the same type.
+// prop may be nil.
+func equalAny(v1, v2 reflect.Value, prop *Properties) bool {
+	if v1.Type() == protoMessageType {
+		m1, _ := v1.Interface().(Message)
+		m2, _ := v2.Interface().(Message)
+		return Equal(m1, m2)
+	}
+	switch v1.Kind() {
+	case reflect.Bool:
+		return v1.Bool() == v2.Bool()
+	case reflect.Float32, reflect.Float64:
+		return v1.Float() == v2.Float()
+	case reflect.Int32, reflect.Int64:
+		return v1.Int() == v2.Int()
+	case reflect.Interface:
+		// Probably a oneof field; compare the inner values.
+		n1, n2 := v1.IsNil(), v2.IsNil()
+		if n1 || n2 {
+			return n1 == n2
+		}
+		e1, e2 := v1.Elem(), v2.Elem()
+		if e1.Type() != e2.Type() {
+			return false
+		}
+		return equalAny(e1, e2, nil)
+	case reflect.Map:
+		if v1.Len() != v2.Len() {
+			return false
+		}
+		for _, key := range v1.MapKeys() {
+			val2 := v2.MapIndex(key)
+			if !val2.IsValid() {
+				// This key was not found in the second map.
+				return false
+			}
+			if !equalAny(v1.MapIndex(key), val2, nil) {
+				return false
+			}
+		}
+		return true
+	case reflect.Ptr:
+		// Maps may have nil values in them, so check for nil.
+		if v1.IsNil() && v2.IsNil() {
+			return true
+		}
+		if v1.IsNil() != v2.IsNil() {
+			return false
+		}
+		return equalAny(v1.Elem(), v2.Elem(), prop)
+	case reflect.Slice:
+		if v1.Type().Elem().Kind() == reflect.Uint8 {
+			// short circuit: []byte
+
+			// Edge case: if this is in a proto3 message, a zero length
+			// bytes field is considered the zero value.
+			if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 {
+				return true
+			}
+			if v1.IsNil() != v2.IsNil() {
+				return false
+			}
+			return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte))
+		}
+
+		if v1.Len() != v2.Len() {
+			return false
+		}
+		for i := 0; i < v1.Len(); i++ {
+			if !equalAny(v1.Index(i), v2.Index(i), prop) {
+				return false
+			}
+		}
+		return true
+	case reflect.String:
+		return v1.Interface().(string) == v2.Interface().(string)
+	case reflect.Struct:
+		return equalStruct(v1, v2)
+	case reflect.Uint32, reflect.Uint64:
+		return v1.Uint() == v2.Uint()
+	}
+
+	// unknown type, so not a protocol buffer
+	log.Printf("proto: don't know how to compare %v", v1)
+	return false
+}
+
+// base is the struct type that the extensions are based on.
+// x1 and x2 are InternalExtensions.
+func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool {
+	em1, _ := x1.extensionsRead()
+	em2, _ := x2.extensionsRead()
+	return equalExtMap(base, em1, em2)
+}
+
+func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
+	if len(em1) != len(em2) {
+		return false
+	}
+
+	for extNum, e1 := range em1 {
+		e2, ok := em2[extNum]
+		if !ok {
+			return false
+		}
+
+		m1 := extensionAsLegacyType(e1.value)
+		m2 := extensionAsLegacyType(e2.value)
+
+		if m1 == nil && m2 == nil {
+			// Both have only encoded form.
+			if bytes.Equal(e1.enc, e2.enc) {
+				continue
+			}
+			// The bytes are different, but the extensions might still be
+			// equal. We need to decode them to compare.
+		}
+
+		if m1 != nil && m2 != nil {
+			// Both are unencoded.
+			if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
+				return false
+			}
+			continue
+		}
+
+		// At least one is encoded. To do a semantically correct comparison
+		// we need to unmarshal them first.
+		var desc *ExtensionDesc
+		if m := extensionMaps[base]; m != nil {
+			desc = m[extNum]
+		}
+		if desc == nil {
+			// If both have only encoded form and the bytes are the same,
+			// it is handled above. We get here when the bytes are different.
+			// We don't know how to decode it, so just compare them as byte
+			// slices.
+			log.Printf("proto: don't know how to compare extension %d of %v", extNum, base)
+			return false
+		}
+		var err error
+		if m1 == nil {
+			m1, err = decodeExtension(e1.enc, desc)
+		}
+		if m2 == nil && err == nil {
+			m2, err = decodeExtension(e2.enc, desc)
+		}
+		if err != nil {
+			// The encoded form is invalid.
+			log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err)
+			return false
+		}
+		if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
+			return false
+		}
+	}
+
+	return true
+}
diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go
new file mode 100644
index 0000000..fa88add
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/extensions.go
@@ -0,0 +1,607 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Types and routines for supporting protocol buffer extensions.
+ */
+
+import (
+	"errors"
+	"fmt"
+	"io"
+	"reflect"
+	"strconv"
+	"sync"
+)
+
+// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message.
+var ErrMissingExtension = errors.New("proto: missing extension")
+
+// ExtensionRange represents a range of message extensions for a protocol buffer.
+// Used in code generated by the protocol compiler.
+type ExtensionRange struct {
+	Start, End int32 // both inclusive
+}
+
+// extendableProto is an interface implemented by any protocol buffer generated by the current
+// proto compiler that may be extended.
+type extendableProto interface {
+	Message
+	ExtensionRangeArray() []ExtensionRange
+	extensionsWrite() map[int32]Extension
+	extensionsRead() (map[int32]Extension, sync.Locker)
+}
+
+// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous
+// version of the proto compiler that may be extended.
+type extendableProtoV1 interface {
+	Message
+	ExtensionRangeArray() []ExtensionRange
+	ExtensionMap() map[int32]Extension
+}
+
+// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto.
+type extensionAdapter struct {
+	extendableProtoV1
+}
+
+func (e extensionAdapter) extensionsWrite() map[int32]Extension {
+	return e.ExtensionMap()
+}
+
+func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
+	return e.ExtensionMap(), notLocker{}
+}
+
+// notLocker is a sync.Locker whose Lock and Unlock methods are nops.
+type notLocker struct{}
+
+func (n notLocker) Lock()   {}
+func (n notLocker) Unlock() {}
+
+// extendable returns the extendableProto interface for the given generated proto message.
+// If the proto message has the old extension format, it returns a wrapper that implements
+// the extendableProto interface.
+func extendable(p interface{}) (extendableProto, error) {
+	switch p := p.(type) {
+	case extendableProto:
+		if isNilPtr(p) {
+			return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+		}
+		return p, nil
+	case extendableProtoV1:
+		if isNilPtr(p) {
+			return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+		}
+		return extensionAdapter{p}, nil
+	}
+	// Don't allocate a specific error containing %T:
+	// this is the hot path for Clone and MarshalText.
+	return nil, errNotExtendable
+}
+
+var errNotExtendable = errors.New("proto: not an extendable proto.Message")
+
+func isNilPtr(x interface{}) bool {
+	v := reflect.ValueOf(x)
+	return v.Kind() == reflect.Ptr && v.IsNil()
+}
+
+// XXX_InternalExtensions is an internal representation of proto extensions.
+//
+// Each generated message struct type embeds an anonymous XXX_InternalExtensions field,
+// thus gaining the unexported 'extensions' method, which can be called only from the proto package.
+//
+// The methods of XXX_InternalExtensions are not concurrency safe in general,
+// but calls to logically read-only methods such as has and get may be executed concurrently.
+type XXX_InternalExtensions struct {
+	// The struct must be indirect so that if a user inadvertently copies a
+	// generated message and its embedded XXX_InternalExtensions, they
+	// avoid the mayhem of a copied mutex.
+	//
+	// The mutex serializes all logically read-only operations to p.extensionMap.
+	// It is up to the client to ensure that write operations to p.extensionMap are
+	// mutually exclusive with other accesses.
+	p *struct {
+		mu           sync.Mutex
+		extensionMap map[int32]Extension
+	}
+}
+
+// extensionsWrite returns the extension map, creating it on first use.
+func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {
+	if e.p == nil {
+		e.p = new(struct {
+			mu           sync.Mutex
+			extensionMap map[int32]Extension
+		})
+		e.p.extensionMap = make(map[int32]Extension)
+	}
+	return e.p.extensionMap
+}
+
+// extensionsRead returns the extensions map for read-only use.  It may be nil.
+// The caller must hold the returned mutex's lock when accessing Elements within the map.
+func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) {
+	if e.p == nil {
+		return nil, nil
+	}
+	return e.p.extensionMap, &e.p.mu
+}
+
+// ExtensionDesc represents an extension specification.
+// Used in generated code from the protocol compiler.
+type ExtensionDesc struct {
+	ExtendedType  Message     // nil pointer to the type that is being extended
+	ExtensionType interface{} // nil pointer to the extension type
+	Field         int32       // field number
+	Name          string      // fully-qualified name of extension, for text formatting
+	Tag           string      // protobuf tag style
+	Filename      string      // name of the file in which the extension is defined
+}
+
+func (ed *ExtensionDesc) repeated() bool {
+	t := reflect.TypeOf(ed.ExtensionType)
+	return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8
+}
+
+// Extension represents an extension in a message.
+type Extension struct {
+	// When an extension is stored in a message using SetExtension
+	// only desc and value are set. When the message is marshaled
+	// enc will be set to the encoded form of the message.
+	//
+	// When a message is unmarshaled and contains extensions, each
+	// extension will have only enc set. When such an extension is
+	// accessed using GetExtension (or GetExtensions) desc and value
+	// will be set.
+	desc *ExtensionDesc
+
+	// value is a concrete value for the extension field. Let the type of
+	// desc.ExtensionType be the "API type" and the type of Extension.value
+	// be the "storage type". The API type and storage type are the same except:
+	//	* For scalars (except []byte), the API type uses *T,
+	//	while the storage type uses T.
+	//	* For repeated fields, the API type uses []T, while the storage type
+	//	uses *[]T.
+	//
+	// The reason for the divergence is so that the storage type more naturally
+	// matches what is expected of when retrieving the values through the
+	// protobuf reflection APIs.
+	//
+	// The value may only be populated if desc is also populated.
+	value interface{}
+
+	// enc is the raw bytes for the extension field.
+	enc []byte
+}
+
+// SetRawExtension is for testing only.
+func SetRawExtension(base Message, id int32, b []byte) {
+	epb, err := extendable(base)
+	if err != nil {
+		return
+	}
+	extmap := epb.extensionsWrite()
+	extmap[id] = Extension{enc: b}
+}
+
+// isExtensionField returns true iff the given field number is in an extension range.
+func isExtensionField(pb extendableProto, field int32) bool {
+	for _, er := range pb.ExtensionRangeArray() {
+		if er.Start <= field && field <= er.End {
+			return true
+		}
+	}
+	return false
+}
+
+// checkExtensionTypes checks that the given extension is valid for pb.
+func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {
+	var pbi interface{} = pb
+	// Check the extended type.
+	if ea, ok := pbi.(extensionAdapter); ok {
+		pbi = ea.extendableProtoV1
+	}
+	if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {
+		return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a)
+	}
+	// Check the range.
+	if !isExtensionField(pb, extension.Field) {
+		return errors.New("proto: bad extension number; not in declared ranges")
+	}
+	return nil
+}
+
+// extPropKey is sufficient to uniquely identify an extension.
+type extPropKey struct {
+	base  reflect.Type
+	field int32
+}
+
+var extProp = struct {
+	sync.RWMutex
+	m map[extPropKey]*Properties
+}{
+	m: make(map[extPropKey]*Properties),
+}
+
+func extensionProperties(ed *ExtensionDesc) *Properties {
+	key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field}
+
+	extProp.RLock()
+	if prop, ok := extProp.m[key]; ok {
+		extProp.RUnlock()
+		return prop
+	}
+	extProp.RUnlock()
+
+	extProp.Lock()
+	defer extProp.Unlock()
+	// Check again.
+	if prop, ok := extProp.m[key]; ok {
+		return prop
+	}
+
+	prop := new(Properties)
+	prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil)
+	extProp.m[key] = prop
+	return prop
+}
+
+// HasExtension returns whether the given extension is present in pb.
+func HasExtension(pb Message, extension *ExtensionDesc) bool {
+	// TODO: Check types, field numbers, etc.?
+	epb, err := extendable(pb)
+	if err != nil {
+		return false
+	}
+	extmap, mu := epb.extensionsRead()
+	if extmap == nil {
+		return false
+	}
+	mu.Lock()
+	_, ok := extmap[extension.Field]
+	mu.Unlock()
+	return ok
+}
+
+// ClearExtension removes the given extension from pb.
+func ClearExtension(pb Message, extension *ExtensionDesc) {
+	epb, err := extendable(pb)
+	if err != nil {
+		return
+	}
+	// TODO: Check types, field numbers, etc.?
+	extmap := epb.extensionsWrite()
+	delete(extmap, extension.Field)
+}
+
+// GetExtension retrieves a proto2 extended field from pb.
+//
+// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil),
+// then GetExtension parses the encoded field and returns a Go value of the specified type.
+// If the field is not present, then the default value is returned (if one is specified),
+// otherwise ErrMissingExtension is reported.
+//
+// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil),
+// then GetExtension returns the raw encoded bytes of the field extension.
+func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
+	epb, err := extendable(pb)
+	if err != nil {
+		return nil, err
+	}
+
+	if extension.ExtendedType != nil {
+		// can only check type if this is a complete descriptor
+		if err := checkExtensionTypes(epb, extension); err != nil {
+			return nil, err
+		}
+	}
+
+	emap, mu := epb.extensionsRead()
+	if emap == nil {
+		return defaultExtensionValue(extension)
+	}
+	mu.Lock()
+	defer mu.Unlock()
+	e, ok := emap[extension.Field]
+	if !ok {
+		// defaultExtensionValue returns the default value or
+		// ErrMissingExtension if there is no default.
+		return defaultExtensionValue(extension)
+	}
+
+	if e.value != nil {
+		// Already decoded. Check the descriptor, though.
+		if e.desc != extension {
+			// This shouldn't happen. If it does, it means that
+			// GetExtension was called twice with two different
+			// descriptors with the same field number.
+			return nil, errors.New("proto: descriptor conflict")
+		}
+		return extensionAsLegacyType(e.value), nil
+	}
+
+	if extension.ExtensionType == nil {
+		// incomplete descriptor
+		return e.enc, nil
+	}
+
+	v, err := decodeExtension(e.enc, extension)
+	if err != nil {
+		return nil, err
+	}
+
+	// Remember the decoded version and drop the encoded version.
+	// That way it is safe to mutate what we return.
+	e.value = extensionAsStorageType(v)
+	e.desc = extension
+	e.enc = nil
+	emap[extension.Field] = e
+	return extensionAsLegacyType(e.value), nil
+}
+
+// defaultExtensionValue returns the default value for extension.
+// If no default for an extension is defined ErrMissingExtension is returned.
+func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
+	if extension.ExtensionType == nil {
+		// incomplete descriptor, so no default
+		return nil, ErrMissingExtension
+	}
+
+	t := reflect.TypeOf(extension.ExtensionType)
+	props := extensionProperties(extension)
+
+	sf, _, err := fieldDefault(t, props)
+	if err != nil {
+		return nil, err
+	}
+
+	if sf == nil || sf.value == nil {
+		// There is no default value.
+		return nil, ErrMissingExtension
+	}
+
+	if t.Kind() != reflect.Ptr {
+		// We do not need to return a Ptr, we can directly return sf.value.
+		return sf.value, nil
+	}
+
+	// We need to return an interface{} that is a pointer to sf.value.
+	value := reflect.New(t).Elem()
+	value.Set(reflect.New(value.Type().Elem()))
+	if sf.kind == reflect.Int32 {
+		// We may have an int32 or an enum, but the underlying data is int32.
+		// Since we can't set an int32 into a non int32 reflect.value directly
+		// set it as a int32.
+		value.Elem().SetInt(int64(sf.value.(int32)))
+	} else {
+		value.Elem().Set(reflect.ValueOf(sf.value))
+	}
+	return value.Interface(), nil
+}
+
+// decodeExtension decodes an extension encoded in b.
+func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
+	t := reflect.TypeOf(extension.ExtensionType)
+	unmarshal := typeUnmarshaler(t, extension.Tag)
+
+	// t is a pointer to a struct, pointer to basic type or a slice.
+	// Allocate space to store the pointer/slice.
+	value := reflect.New(t).Elem()
+
+	var err error
+	for {
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		wire := int(x) & 7
+
+		b, err = unmarshal(b, valToPointer(value.Addr()), wire)
+		if err != nil {
+			return nil, err
+		}
+
+		if len(b) == 0 {
+			break
+		}
+	}
+	return value.Interface(), nil
+}
+
+// GetExtensions returns a slice of the extensions present in pb that are also listed in es.
+// The returned slice has the same length as es; missing extensions will appear as nil elements.
+func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {
+	epb, err := extendable(pb)
+	if err != nil {
+		return nil, err
+	}
+	extensions = make([]interface{}, len(es))
+	for i, e := range es {
+		extensions[i], err = GetExtension(epb, e)
+		if err == ErrMissingExtension {
+			err = nil
+		}
+		if err != nil {
+			return
+		}
+	}
+	return
+}
+
+// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order.
+// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing
+// just the Field field, which defines the extension's field number.
+func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
+	epb, err := extendable(pb)
+	if err != nil {
+		return nil, err
+	}
+	registeredExtensions := RegisteredExtensions(pb)
+
+	emap, mu := epb.extensionsRead()
+	if emap == nil {
+		return nil, nil
+	}
+	mu.Lock()
+	defer mu.Unlock()
+	extensions := make([]*ExtensionDesc, 0, len(emap))
+	for extid, e := range emap {
+		desc := e.desc
+		if desc == nil {
+			desc = registeredExtensions[extid]
+			if desc == nil {
+				desc = &ExtensionDesc{Field: extid}
+			}
+		}
+
+		extensions = append(extensions, desc)
+	}
+	return extensions, nil
+}
+
+// SetExtension sets the specified extension of pb to the specified value.
+func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {
+	epb, err := extendable(pb)
+	if err != nil {
+		return err
+	}
+	if err := checkExtensionTypes(epb, extension); err != nil {
+		return err
+	}
+	typ := reflect.TypeOf(extension.ExtensionType)
+	if typ != reflect.TypeOf(value) {
+		return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType)
+	}
+	// nil extension values need to be caught early, because the
+	// encoder can't distinguish an ErrNil due to a nil extension
+	// from an ErrNil due to a missing field. Extensions are
+	// always optional, so the encoder would just swallow the error
+	// and drop all the extensions from the encoded message.
+	if reflect.ValueOf(value).IsNil() {
+		return fmt.Errorf("proto: SetExtension called with nil value of type %T", value)
+	}
+
+	extmap := epb.extensionsWrite()
+	extmap[extension.Field] = Extension{desc: extension, value: extensionAsStorageType(value)}
+	return nil
+}
+
+// ClearAllExtensions clears all extensions from pb.
+func ClearAllExtensions(pb Message) {
+	epb, err := extendable(pb)
+	if err != nil {
+		return
+	}
+	m := epb.extensionsWrite()
+	for k := range m {
+		delete(m, k)
+	}
+}
+
+// A global registry of extensions.
+// The generated code will register the generated descriptors by calling RegisterExtension.
+
+var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc)
+
+// RegisterExtension is called from the generated code.
+func RegisterExtension(desc *ExtensionDesc) {
+	st := reflect.TypeOf(desc.ExtendedType).Elem()
+	m := extensionMaps[st]
+	if m == nil {
+		m = make(map[int32]*ExtensionDesc)
+		extensionMaps[st] = m
+	}
+	if _, ok := m[desc.Field]; ok {
+		panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field)))
+	}
+	m[desc.Field] = desc
+}
+
+// RegisteredExtensions returns a map of the registered extensions of a
+// protocol buffer struct, indexed by the extension number.
+// The argument pb should be a nil pointer to the struct type.
+func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {
+	return extensionMaps[reflect.TypeOf(pb).Elem()]
+}
+
+// extensionAsLegacyType converts an value in the storage type as the API type.
+// See Extension.value.
+func extensionAsLegacyType(v interface{}) interface{} {
+	switch rv := reflect.ValueOf(v); rv.Kind() {
+	case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:
+		// Represent primitive types as a pointer to the value.
+		rv2 := reflect.New(rv.Type())
+		rv2.Elem().Set(rv)
+		v = rv2.Interface()
+	case reflect.Ptr:
+		// Represent slice types as the value itself.
+		switch rv.Type().Elem().Kind() {
+		case reflect.Slice:
+			if rv.IsNil() {
+				v = reflect.Zero(rv.Type().Elem()).Interface()
+			} else {
+				v = rv.Elem().Interface()
+			}
+		}
+	}
+	return v
+}
+
+// extensionAsStorageType converts an value in the API type as the storage type.
+// See Extension.value.
+func extensionAsStorageType(v interface{}) interface{} {
+	switch rv := reflect.ValueOf(v); rv.Kind() {
+	case reflect.Ptr:
+		// Represent slice types as the value itself.
+		switch rv.Type().Elem().Kind() {
+		case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:
+			if rv.IsNil() {
+				v = reflect.Zero(rv.Type().Elem()).Interface()
+			} else {
+				v = rv.Elem().Interface()
+			}
+		}
+	case reflect.Slice:
+		// Represent slice types as a pointer to the value.
+		if rv.Type().Elem().Kind() != reflect.Uint8 {
+			rv2 := reflect.New(rv.Type())
+			rv2.Elem().Set(rv)
+			v = rv2.Interface()
+		}
+	}
+	return v
+}
diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go
new file mode 100644
index 0000000..fdd328b
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/lib.go
@@ -0,0 +1,965 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/*
+Package proto converts data structures to and from the wire format of
+protocol buffers.  It works in concert with the Go source code generated
+for .proto files by the protocol compiler.
+
+A summary of the properties of the protocol buffer interface
+for a protocol buffer variable v:
+
+  - Names are turned from camel_case to CamelCase for export.
+  - There are no methods on v to set fields; just treat
+	them as structure fields.
+  - There are getters that return a field's value if set,
+	and return the field's default value if unset.
+	The getters work even if the receiver is a nil message.
+  - The zero value for a struct is its correct initialization state.
+	All desired fields must be set before marshaling.
+  - A Reset() method will restore a protobuf struct to its zero state.
+  - Non-repeated fields are pointers to the values; nil means unset.
+	That is, optional or required field int32 f becomes F *int32.
+  - Repeated fields are slices.
+  - Helper functions are available to aid the setting of fields.
+	msg.Foo = proto.String("hello") // set field
+  - Constants are defined to hold the default values of all fields that
+	have them.  They have the form Default_StructName_FieldName.
+	Because the getter methods handle defaulted values,
+	direct use of these constants should be rare.
+  - Enums are given type names and maps from names to values.
+	Enum values are prefixed by the enclosing message's name, or by the
+	enum's type name if it is a top-level enum. Enum types have a String
+	method, and a Enum method to assist in message construction.
+  - Nested messages, groups and enums have type names prefixed with the name of
+	the surrounding message type.
+  - Extensions are given descriptor names that start with E_,
+	followed by an underscore-delimited list of the nested messages
+	that contain it (if any) followed by the CamelCased name of the
+	extension field itself.  HasExtension, ClearExtension, GetExtension
+	and SetExtension are functions for manipulating extensions.
+  - Oneof field sets are given a single field in their message,
+	with distinguished wrapper types for each possible field value.
+  - Marshal and Unmarshal are functions to encode and decode the wire format.
+
+When the .proto file specifies `syntax="proto3"`, there are some differences:
+
+  - Non-repeated fields of non-message type are values instead of pointers.
+  - Enum types do not get an Enum method.
+
+The simplest way to describe this is to see an example.
+Given file test.proto, containing
+
+	package example;
+
+	enum FOO { X = 17; }
+
+	message Test {
+	  required string label = 1;
+	  optional int32 type = 2 [default=77];
+	  repeated int64 reps = 3;
+	  optional group OptionalGroup = 4 {
+	    required string RequiredField = 5;
+	  }
+	  oneof union {
+	    int32 number = 6;
+	    string name = 7;
+	  }
+	}
+
+The resulting file, test.pb.go, is:
+
+	package example
+
+	import proto "github.com/golang/protobuf/proto"
+	import math "math"
+
+	type FOO int32
+	const (
+		FOO_X FOO = 17
+	)
+	var FOO_name = map[int32]string{
+		17: "X",
+	}
+	var FOO_value = map[string]int32{
+		"X": 17,
+	}
+
+	func (x FOO) Enum() *FOO {
+		p := new(FOO)
+		*p = x
+		return p
+	}
+	func (x FOO) String() string {
+		return proto.EnumName(FOO_name, int32(x))
+	}
+	func (x *FOO) UnmarshalJSON(data []byte) error {
+		value, err := proto.UnmarshalJSONEnum(FOO_value, data)
+		if err != nil {
+			return err
+		}
+		*x = FOO(value)
+		return nil
+	}
+
+	type Test struct {
+		Label         *string             `protobuf:"bytes,1,req,name=label" json:"label,omitempty"`
+		Type          *int32              `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"`
+		Reps          []int64             `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"`
+		Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"`
+		// Types that are valid to be assigned to Union:
+		//	*Test_Number
+		//	*Test_Name
+		Union            isTest_Union `protobuf_oneof:"union"`
+		XXX_unrecognized []byte       `json:"-"`
+	}
+	func (m *Test) Reset()         { *m = Test{} }
+	func (m *Test) String() string { return proto.CompactTextString(m) }
+	func (*Test) ProtoMessage() {}
+
+	type isTest_Union interface {
+		isTest_Union()
+	}
+
+	type Test_Number struct {
+		Number int32 `protobuf:"varint,6,opt,name=number"`
+	}
+	type Test_Name struct {
+		Name string `protobuf:"bytes,7,opt,name=name"`
+	}
+
+	func (*Test_Number) isTest_Union() {}
+	func (*Test_Name) isTest_Union()   {}
+
+	func (m *Test) GetUnion() isTest_Union {
+		if m != nil {
+			return m.Union
+		}
+		return nil
+	}
+	const Default_Test_Type int32 = 77
+
+	func (m *Test) GetLabel() string {
+		if m != nil && m.Label != nil {
+			return *m.Label
+		}
+		return ""
+	}
+
+	func (m *Test) GetType() int32 {
+		if m != nil && m.Type != nil {
+			return *m.Type
+		}
+		return Default_Test_Type
+	}
+
+	func (m *Test) GetOptionalgroup() *Test_OptionalGroup {
+		if m != nil {
+			return m.Optionalgroup
+		}
+		return nil
+	}
+
+	type Test_OptionalGroup struct {
+		RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"`
+	}
+	func (m *Test_OptionalGroup) Reset()         { *m = Test_OptionalGroup{} }
+	func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) }
+
+	func (m *Test_OptionalGroup) GetRequiredField() string {
+		if m != nil && m.RequiredField != nil {
+			return *m.RequiredField
+		}
+		return ""
+	}
+
+	func (m *Test) GetNumber() int32 {
+		if x, ok := m.GetUnion().(*Test_Number); ok {
+			return x.Number
+		}
+		return 0
+	}
+
+	func (m *Test) GetName() string {
+		if x, ok := m.GetUnion().(*Test_Name); ok {
+			return x.Name
+		}
+		return ""
+	}
+
+	func init() {
+		proto.RegisterEnum("example.FOO", FOO_name, FOO_value)
+	}
+
+To create and play with a Test object:
+
+	package main
+
+	import (
+		"log"
+
+		"github.com/golang/protobuf/proto"
+		pb "./example.pb"
+	)
+
+	func main() {
+		test := &pb.Test{
+			Label: proto.String("hello"),
+			Type:  proto.Int32(17),
+			Reps:  []int64{1, 2, 3},
+			Optionalgroup: &pb.Test_OptionalGroup{
+				RequiredField: proto.String("good bye"),
+			},
+			Union: &pb.Test_Name{"fred"},
+		}
+		data, err := proto.Marshal(test)
+		if err != nil {
+			log.Fatal("marshaling error: ", err)
+		}
+		newTest := &pb.Test{}
+		err = proto.Unmarshal(data, newTest)
+		if err != nil {
+			log.Fatal("unmarshaling error: ", err)
+		}
+		// Now test and newTest contain the same data.
+		if test.GetLabel() != newTest.GetLabel() {
+			log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
+		}
+		// Use a type switch to determine which oneof was set.
+		switch u := test.Union.(type) {
+		case *pb.Test_Number: // u.Number contains the number.
+		case *pb.Test_Name: // u.Name contains the string.
+		}
+		// etc.
+	}
+*/
+package proto
+
+import (
+	"encoding/json"
+	"fmt"
+	"log"
+	"reflect"
+	"sort"
+	"strconv"
+	"sync"
+)
+
+// RequiredNotSetError is an error type returned by either Marshal or Unmarshal.
+// Marshal reports this when a required field is not initialized.
+// Unmarshal reports this when a required field is missing from the wire data.
+type RequiredNotSetError struct{ field string }
+
+func (e *RequiredNotSetError) Error() string {
+	if e.field == "" {
+		return fmt.Sprintf("proto: required field not set")
+	}
+	return fmt.Sprintf("proto: required field %q not set", e.field)
+}
+func (e *RequiredNotSetError) RequiredNotSet() bool {
+	return true
+}
+
+type invalidUTF8Error struct{ field string }
+
+func (e *invalidUTF8Error) Error() string {
+	if e.field == "" {
+		return "proto: invalid UTF-8 detected"
+	}
+	return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field)
+}
+func (e *invalidUTF8Error) InvalidUTF8() bool {
+	return true
+}
+
+// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8.
+// This error should not be exposed to the external API as such errors should
+// be recreated with the field information.
+var errInvalidUTF8 = &invalidUTF8Error{}
+
+// isNonFatal reports whether the error is either a RequiredNotSet error
+// or a InvalidUTF8 error.
+func isNonFatal(err error) bool {
+	if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() {
+		return true
+	}
+	if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() {
+		return true
+	}
+	return false
+}
+
+type nonFatal struct{ E error }
+
+// Merge merges err into nf and reports whether it was successful.
+// Otherwise it returns false for any fatal non-nil errors.
+func (nf *nonFatal) Merge(err error) (ok bool) {
+	if err == nil {
+		return true // not an error
+	}
+	if !isNonFatal(err) {
+		return false // fatal error
+	}
+	if nf.E == nil {
+		nf.E = err // store first instance of non-fatal error
+	}
+	return true
+}
+
+// Message is implemented by generated protocol buffer messages.
+type Message interface {
+	Reset()
+	String() string
+	ProtoMessage()
+}
+
+// A Buffer is a buffer manager for marshaling and unmarshaling
+// protocol buffers.  It may be reused between invocations to
+// reduce memory usage.  It is not necessary to use a Buffer;
+// the global functions Marshal and Unmarshal create a
+// temporary Buffer and are fine for most applications.
+type Buffer struct {
+	buf   []byte // encode/decode byte stream
+	index int    // read point
+
+	deterministic bool
+}
+
+// NewBuffer allocates a new Buffer and initializes its internal data to
+// the contents of the argument slice.
+func NewBuffer(e []byte) *Buffer {
+	return &Buffer{buf: e}
+}
+
+// Reset resets the Buffer, ready for marshaling a new protocol buffer.
+func (p *Buffer) Reset() {
+	p.buf = p.buf[0:0] // for reading/writing
+	p.index = 0        // for reading
+}
+
+// SetBuf replaces the internal buffer with the slice,
+// ready for unmarshaling the contents of the slice.
+func (p *Buffer) SetBuf(s []byte) {
+	p.buf = s
+	p.index = 0
+}
+
+// Bytes returns the contents of the Buffer.
+func (p *Buffer) Bytes() []byte { return p.buf }
+
+// SetDeterministic sets whether to use deterministic serialization.
+//
+// Deterministic serialization guarantees that for a given binary, equal
+// messages will always be serialized to the same bytes. This implies:
+//
+//   - Repeated serialization of a message will return the same bytes.
+//   - Different processes of the same binary (which may be executing on
+//     different machines) will serialize equal messages to the same bytes.
+//
+// Note that the deterministic serialization is NOT canonical across
+// languages. It is not guaranteed to remain stable over time. It is unstable
+// across different builds with schema changes due to unknown fields.
+// Users who need canonical serialization (e.g., persistent storage in a
+// canonical form, fingerprinting, etc.) should define their own
+// canonicalization specification and implement their own serializer rather
+// than relying on this API.
+//
+// If deterministic serialization is requested, map entries will be sorted
+// by keys in lexographical order. This is an implementation detail and
+// subject to change.
+func (p *Buffer) SetDeterministic(deterministic bool) {
+	p.deterministic = deterministic
+}
+
+/*
+ * Helper routines for simplifying the creation of optional fields of basic type.
+ */
+
+// Bool is a helper routine that allocates a new bool value
+// to store v and returns a pointer to it.
+func Bool(v bool) *bool {
+	return &v
+}
+
+// Int32 is a helper routine that allocates a new int32 value
+// to store v and returns a pointer to it.
+func Int32(v int32) *int32 {
+	return &v
+}
+
+// Int is a helper routine that allocates a new int32 value
+// to store v and returns a pointer to it, but unlike Int32
+// its argument value is an int.
+func Int(v int) *int32 {
+	p := new(int32)
+	*p = int32(v)
+	return p
+}
+
+// Int64 is a helper routine that allocates a new int64 value
+// to store v and returns a pointer to it.
+func Int64(v int64) *int64 {
+	return &v
+}
+
+// Float32 is a helper routine that allocates a new float32 value
+// to store v and returns a pointer to it.
+func Float32(v float32) *float32 {
+	return &v
+}
+
+// Float64 is a helper routine that allocates a new float64 value
+// to store v and returns a pointer to it.
+func Float64(v float64) *float64 {
+	return &v
+}
+
+// Uint32 is a helper routine that allocates a new uint32 value
+// to store v and returns a pointer to it.
+func Uint32(v uint32) *uint32 {
+	return &v
+}
+
+// Uint64 is a helper routine that allocates a new uint64 value
+// to store v and returns a pointer to it.
+func Uint64(v uint64) *uint64 {
+	return &v
+}
+
+// String is a helper routine that allocates a new string value
+// to store v and returns a pointer to it.
+func String(v string) *string {
+	return &v
+}
+
+// EnumName is a helper function to simplify printing protocol buffer enums
+// by name.  Given an enum map and a value, it returns a useful string.
+func EnumName(m map[int32]string, v int32) string {
+	s, ok := m[v]
+	if ok {
+		return s
+	}
+	return strconv.Itoa(int(v))
+}
+
+// UnmarshalJSONEnum is a helper function to simplify recovering enum int values
+// from their JSON-encoded representation. Given a map from the enum's symbolic
+// names to its int values, and a byte buffer containing the JSON-encoded
+// value, it returns an int32 that can be cast to the enum type by the caller.
+//
+// The function can deal with both JSON representations, numeric and symbolic.
+func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) {
+	if data[0] == '"' {
+		// New style: enums are strings.
+		var repr string
+		if err := json.Unmarshal(data, &repr); err != nil {
+			return -1, err
+		}
+		val, ok := m[repr]
+		if !ok {
+			return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr)
+		}
+		return val, nil
+	}
+	// Old style: enums are ints.
+	var val int32
+	if err := json.Unmarshal(data, &val); err != nil {
+		return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName)
+	}
+	return val, nil
+}
+
+// DebugPrint dumps the encoded data in b in a debugging format with a header
+// including the string s. Used in testing but made available for general debugging.
+func (p *Buffer) DebugPrint(s string, b []byte) {
+	var u uint64
+
+	obuf := p.buf
+	index := p.index
+	p.buf = b
+	p.index = 0
+	depth := 0
+
+	fmt.Printf("\n--- %s ---\n", s)
+
+out:
+	for {
+		for i := 0; i < depth; i++ {
+			fmt.Print("  ")
+		}
+
+		index := p.index
+		if index == len(p.buf) {
+			break
+		}
+
+		op, err := p.DecodeVarint()
+		if err != nil {
+			fmt.Printf("%3d: fetching op err %v\n", index, err)
+			break out
+		}
+		tag := op >> 3
+		wire := op & 7
+
+		switch wire {
+		default:
+			fmt.Printf("%3d: t=%3d unknown wire=%d\n",
+				index, tag, wire)
+			break out
+
+		case WireBytes:
+			var r []byte
+
+			r, err = p.DecodeRawBytes(false)
+			if err != nil {
+				break out
+			}
+			fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r))
+			if len(r) <= 6 {
+				for i := 0; i < len(r); i++ {
+					fmt.Printf(" %.2x", r[i])
+				}
+			} else {
+				for i := 0; i < 3; i++ {
+					fmt.Printf(" %.2x", r[i])
+				}
+				fmt.Printf(" ..")
+				for i := len(r) - 3; i < len(r); i++ {
+					fmt.Printf(" %.2x", r[i])
+				}
+			}
+			fmt.Printf("\n")
+
+		case WireFixed32:
+			u, err = p.DecodeFixed32()
+			if err != nil {
+				fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err)
+				break out
+			}
+			fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u)
+
+		case WireFixed64:
+			u, err = p.DecodeFixed64()
+			if err != nil {
+				fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err)
+				break out
+			}
+			fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u)
+
+		case WireVarint:
+			u, err = p.DecodeVarint()
+			if err != nil {
+				fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err)
+				break out
+			}
+			fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u)
+
+		case WireStartGroup:
+			fmt.Printf("%3d: t=%3d start\n", index, tag)
+			depth++
+
+		case WireEndGroup:
+			depth--
+			fmt.Printf("%3d: t=%3d end\n", index, tag)
+		}
+	}
+
+	if depth != 0 {
+		fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth)
+	}
+	fmt.Printf("\n")
+
+	p.buf = obuf
+	p.index = index
+}
+
+// SetDefaults sets unset protocol buffer fields to their default values.
+// It only modifies fields that are both unset and have defined defaults.
+// It recursively sets default values in any non-nil sub-messages.
+func SetDefaults(pb Message) {
+	setDefaults(reflect.ValueOf(pb), true, false)
+}
+
+// v is a pointer to a struct.
+func setDefaults(v reflect.Value, recur, zeros bool) {
+	v = v.Elem()
+
+	defaultMu.RLock()
+	dm, ok := defaults[v.Type()]
+	defaultMu.RUnlock()
+	if !ok {
+		dm = buildDefaultMessage(v.Type())
+		defaultMu.Lock()
+		defaults[v.Type()] = dm
+		defaultMu.Unlock()
+	}
+
+	for _, sf := range dm.scalars {
+		f := v.Field(sf.index)
+		if !f.IsNil() {
+			// field already set
+			continue
+		}
+		dv := sf.value
+		if dv == nil && !zeros {
+			// no explicit default, and don't want to set zeros
+			continue
+		}
+		fptr := f.Addr().Interface() // **T
+		// TODO: Consider batching the allocations we do here.
+		switch sf.kind {
+		case reflect.Bool:
+			b := new(bool)
+			if dv != nil {
+				*b = dv.(bool)
+			}
+			*(fptr.(**bool)) = b
+		case reflect.Float32:
+			f := new(float32)
+			if dv != nil {
+				*f = dv.(float32)
+			}
+			*(fptr.(**float32)) = f
+		case reflect.Float64:
+			f := new(float64)
+			if dv != nil {
+				*f = dv.(float64)
+			}
+			*(fptr.(**float64)) = f
+		case reflect.Int32:
+			// might be an enum
+			if ft := f.Type(); ft != int32PtrType {
+				// enum
+				f.Set(reflect.New(ft.Elem()))
+				if dv != nil {
+					f.Elem().SetInt(int64(dv.(int32)))
+				}
+			} else {
+				// int32 field
+				i := new(int32)
+				if dv != nil {
+					*i = dv.(int32)
+				}
+				*(fptr.(**int32)) = i
+			}
+		case reflect.Int64:
+			i := new(int64)
+			if dv != nil {
+				*i = dv.(int64)
+			}
+			*(fptr.(**int64)) = i
+		case reflect.String:
+			s := new(string)
+			if dv != nil {
+				*s = dv.(string)
+			}
+			*(fptr.(**string)) = s
+		case reflect.Uint8:
+			// exceptional case: []byte
+			var b []byte
+			if dv != nil {
+				db := dv.([]byte)
+				b = make([]byte, len(db))
+				copy(b, db)
+			} else {
+				b = []byte{}
+			}
+			*(fptr.(*[]byte)) = b
+		case reflect.Uint32:
+			u := new(uint32)
+			if dv != nil {
+				*u = dv.(uint32)
+			}
+			*(fptr.(**uint32)) = u
+		case reflect.Uint64:
+			u := new(uint64)
+			if dv != nil {
+				*u = dv.(uint64)
+			}
+			*(fptr.(**uint64)) = u
+		default:
+			log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind)
+		}
+	}
+
+	for _, ni := range dm.nested {
+		f := v.Field(ni)
+		// f is *T or []*T or map[T]*T
+		switch f.Kind() {
+		case reflect.Ptr:
+			if f.IsNil() {
+				continue
+			}
+			setDefaults(f, recur, zeros)
+
+		case reflect.Slice:
+			for i := 0; i < f.Len(); i++ {
+				e := f.Index(i)
+				if e.IsNil() {
+					continue
+				}
+				setDefaults(e, recur, zeros)
+			}
+
+		case reflect.Map:
+			for _, k := range f.MapKeys() {
+				e := f.MapIndex(k)
+				if e.IsNil() {
+					continue
+				}
+				setDefaults(e, recur, zeros)
+			}
+		}
+	}
+}
+
+var (
+	// defaults maps a protocol buffer struct type to a slice of the fields,
+	// with its scalar fields set to their proto-declared non-zero default values.
+	defaultMu sync.RWMutex
+	defaults  = make(map[reflect.Type]defaultMessage)
+
+	int32PtrType = reflect.TypeOf((*int32)(nil))
+)
+
+// defaultMessage represents information about the default values of a message.
+type defaultMessage struct {
+	scalars []scalarField
+	nested  []int // struct field index of nested messages
+}
+
+type scalarField struct {
+	index int          // struct field index
+	kind  reflect.Kind // element type (the T in *T or []T)
+	value interface{}  // the proto-declared default value, or nil
+}
+
+// t is a struct type.
+func buildDefaultMessage(t reflect.Type) (dm defaultMessage) {
+	sprop := GetProperties(t)
+	for _, prop := range sprop.Prop {
+		fi, ok := sprop.decoderTags.get(prop.Tag)
+		if !ok {
+			// XXX_unrecognized
+			continue
+		}
+		ft := t.Field(fi).Type
+
+		sf, nested, err := fieldDefault(ft, prop)
+		switch {
+		case err != nil:
+			log.Print(err)
+		case nested:
+			dm.nested = append(dm.nested, fi)
+		case sf != nil:
+			sf.index = fi
+			dm.scalars = append(dm.scalars, *sf)
+		}
+	}
+
+	return dm
+}
+
+// fieldDefault returns the scalarField for field type ft.
+// sf will be nil if the field can not have a default.
+// nestedMessage will be true if this is a nested message.
+// Note that sf.index is not set on return.
+func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) {
+	var canHaveDefault bool
+	switch ft.Kind() {
+	case reflect.Ptr:
+		if ft.Elem().Kind() == reflect.Struct {
+			nestedMessage = true
+		} else {
+			canHaveDefault = true // proto2 scalar field
+		}
+
+	case reflect.Slice:
+		switch ft.Elem().Kind() {
+		case reflect.Ptr:
+			nestedMessage = true // repeated message
+		case reflect.Uint8:
+			canHaveDefault = true // bytes field
+		}
+
+	case reflect.Map:
+		if ft.Elem().Kind() == reflect.Ptr {
+			nestedMessage = true // map with message values
+		}
+	}
+
+	if !canHaveDefault {
+		if nestedMessage {
+			return nil, true, nil
+		}
+		return nil, false, nil
+	}
+
+	// We now know that ft is a pointer or slice.
+	sf = &scalarField{kind: ft.Elem().Kind()}
+
+	// scalar fields without defaults
+	if !prop.HasDefault {
+		return sf, false, nil
+	}
+
+	// a scalar field: either *T or []byte
+	switch ft.Elem().Kind() {
+	case reflect.Bool:
+		x, err := strconv.ParseBool(prop.Default)
+		if err != nil {
+			return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err)
+		}
+		sf.value = x
+	case reflect.Float32:
+		x, err := strconv.ParseFloat(prop.Default, 32)
+		if err != nil {
+			return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err)
+		}
+		sf.value = float32(x)
+	case reflect.Float64:
+		x, err := strconv.ParseFloat(prop.Default, 64)
+		if err != nil {
+			return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err)
+		}
+		sf.value = x
+	case reflect.Int32:
+		x, err := strconv.ParseInt(prop.Default, 10, 32)
+		if err != nil {
+			return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err)
+		}
+		sf.value = int32(x)
+	case reflect.Int64:
+		x, err := strconv.ParseInt(prop.Default, 10, 64)
+		if err != nil {
+			return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err)
+		}
+		sf.value = x
+	case reflect.String:
+		sf.value = prop.Default
+	case reflect.Uint8:
+		// []byte (not *uint8)
+		sf.value = []byte(prop.Default)
+	case reflect.Uint32:
+		x, err := strconv.ParseUint(prop.Default, 10, 32)
+		if err != nil {
+			return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err)
+		}
+		sf.value = uint32(x)
+	case reflect.Uint64:
+		x, err := strconv.ParseUint(prop.Default, 10, 64)
+		if err != nil {
+			return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err)
+		}
+		sf.value = x
+	default:
+		return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind())
+	}
+
+	return sf, false, nil
+}
+
+// mapKeys returns a sort.Interface to be used for sorting the map keys.
+// Map fields may have key types of non-float scalars, strings and enums.
+func mapKeys(vs []reflect.Value) sort.Interface {
+	s := mapKeySorter{vs: vs}
+
+	// Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps.
+	if len(vs) == 0 {
+		return s
+	}
+	switch vs[0].Kind() {
+	case reflect.Int32, reflect.Int64:
+		s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }
+	case reflect.Uint32, reflect.Uint64:
+		s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }
+	case reflect.Bool:
+		s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true
+	case reflect.String:
+		s.less = func(a, b reflect.Value) bool { return a.String() < b.String() }
+	default:
+		panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind()))
+	}
+
+	return s
+}
+
+type mapKeySorter struct {
+	vs   []reflect.Value
+	less func(a, b reflect.Value) bool
+}
+
+func (s mapKeySorter) Len() int      { return len(s.vs) }
+func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] }
+func (s mapKeySorter) Less(i, j int) bool {
+	return s.less(s.vs[i], s.vs[j])
+}
+
+// isProto3Zero reports whether v is a zero proto3 value.
+func isProto3Zero(v reflect.Value) bool {
+	switch v.Kind() {
+	case reflect.Bool:
+		return !v.Bool()
+	case reflect.Int32, reflect.Int64:
+		return v.Int() == 0
+	case reflect.Uint32, reflect.Uint64:
+		return v.Uint() == 0
+	case reflect.Float32, reflect.Float64:
+		return v.Float() == 0
+	case reflect.String:
+		return v.String() == ""
+	}
+	return false
+}
+
+const (
+	// ProtoPackageIsVersion3 is referenced from generated protocol buffer files
+	// to assert that that code is compatible with this version of the proto package.
+	ProtoPackageIsVersion3 = true
+
+	// ProtoPackageIsVersion2 is referenced from generated protocol buffer files
+	// to assert that that code is compatible with this version of the proto package.
+	ProtoPackageIsVersion2 = true
+
+	// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
+	// to assert that that code is compatible with this version of the proto package.
+	ProtoPackageIsVersion1 = true
+)
+
+// InternalMessageInfo is a type used internally by generated .pb.go files.
+// This type is not intended to be used by non-generated code.
+// This type is not subject to any compatibility guarantee.
+type InternalMessageInfo struct {
+	marshal   *marshalInfo
+	unmarshal *unmarshalInfo
+	merge     *mergeInfo
+	discard   *discardInfo
+}
diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go
new file mode 100644
index 0000000..f48a756
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/message_set.go
@@ -0,0 +1,181 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Support for message sets.
+ */
+
+import (
+	"errors"
+)
+
+// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
+// A message type ID is required for storing a protocol buffer in a message set.
+var errNoMessageTypeID = errors.New("proto does not have a message type ID")
+
+// The first two types (_MessageSet_Item and messageSet)
+// model what the protocol compiler produces for the following protocol message:
+//   message MessageSet {
+//     repeated group Item = 1 {
+//       required int32 type_id = 2;
+//       required string message = 3;
+//     };
+//   }
+// That is the MessageSet wire format. We can't use a proto to generate these
+// because that would introduce a circular dependency between it and this package.
+
+type _MessageSet_Item struct {
+	TypeId  *int32 `protobuf:"varint,2,req,name=type_id"`
+	Message []byte `protobuf:"bytes,3,req,name=message"`
+}
+
+type messageSet struct {
+	Item             []*_MessageSet_Item `protobuf:"group,1,rep"`
+	XXX_unrecognized []byte
+	// TODO: caching?
+}
+
+// Make sure messageSet is a Message.
+var _ Message = (*messageSet)(nil)
+
+// messageTypeIder is an interface satisfied by a protocol buffer type
+// that may be stored in a MessageSet.
+type messageTypeIder interface {
+	MessageTypeId() int32
+}
+
+func (ms *messageSet) find(pb Message) *_MessageSet_Item {
+	mti, ok := pb.(messageTypeIder)
+	if !ok {
+		return nil
+	}
+	id := mti.MessageTypeId()
+	for _, item := range ms.Item {
+		if *item.TypeId == id {
+			return item
+		}
+	}
+	return nil
+}
+
+func (ms *messageSet) Has(pb Message) bool {
+	return ms.find(pb) != nil
+}
+
+func (ms *messageSet) Unmarshal(pb Message) error {
+	if item := ms.find(pb); item != nil {
+		return Unmarshal(item.Message, pb)
+	}
+	if _, ok := pb.(messageTypeIder); !ok {
+		return errNoMessageTypeID
+	}
+	return nil // TODO: return error instead?
+}
+
+func (ms *messageSet) Marshal(pb Message) error {
+	msg, err := Marshal(pb)
+	if err != nil {
+		return err
+	}
+	if item := ms.find(pb); item != nil {
+		// reuse existing item
+		item.Message = msg
+		return nil
+	}
+
+	mti, ok := pb.(messageTypeIder)
+	if !ok {
+		return errNoMessageTypeID
+	}
+
+	mtid := mti.MessageTypeId()
+	ms.Item = append(ms.Item, &_MessageSet_Item{
+		TypeId:  &mtid,
+		Message: msg,
+	})
+	return nil
+}
+
+func (ms *messageSet) Reset()         { *ms = messageSet{} }
+func (ms *messageSet) String() string { return CompactTextString(ms) }
+func (*messageSet) ProtoMessage()     {}
+
+// Support for the message_set_wire_format message option.
+
+func skipVarint(buf []byte) []byte {
+	i := 0
+	for ; buf[i]&0x80 != 0; i++ {
+	}
+	return buf[i+1:]
+}
+
+// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
+// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
+func unmarshalMessageSet(buf []byte, exts interface{}) error {
+	var m map[int32]Extension
+	switch exts := exts.(type) {
+	case *XXX_InternalExtensions:
+		m = exts.extensionsWrite()
+	case map[int32]Extension:
+		m = exts
+	default:
+		return errors.New("proto: not an extension map")
+	}
+
+	ms := new(messageSet)
+	if err := Unmarshal(buf, ms); err != nil {
+		return err
+	}
+	for _, item := range ms.Item {
+		id := *item.TypeId
+		msg := item.Message
+
+		// Restore wire type and field number varint, plus length varint.
+		// Be careful to preserve duplicate items.
+		b := EncodeVarint(uint64(id)<<3 | WireBytes)
+		if ext, ok := m[id]; ok {
+			// Existing data; rip off the tag and length varint
+			// so we join the new data correctly.
+			// We can assume that ext.enc is set because we are unmarshaling.
+			o := ext.enc[len(b):]   // skip wire type and field number
+			_, n := DecodeVarint(o) // calculate length of length varint
+			o = o[n:]               // skip length varint
+			msg = append(o, msg...) // join old data and new data
+		}
+		b = append(b, EncodeVarint(uint64(len(msg)))...)
+		b = append(b, msg...)
+
+		m[id] = Extension{enc: b}
+	}
+	return nil
+}
diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
new file mode 100644
index 0000000..94fa919
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
@@ -0,0 +1,360 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2012 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// +build purego appengine js
+
+// This file contains an implementation of proto field accesses using package reflect.
+// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
+// be used on App Engine.
+
+package proto
+
+import (
+	"reflect"
+	"sync"
+)
+
+const unsafeAllowed = false
+
+// A field identifies a field in a struct, accessible from a pointer.
+// In this implementation, a field is identified by the sequence of field indices
+// passed to reflect's FieldByIndex.
+type field []int
+
+// toField returns a field equivalent to the given reflect field.
+func toField(f *reflect.StructField) field {
+	return f.Index
+}
+
+// invalidField is an invalid field identifier.
+var invalidField = field(nil)
+
+// zeroField is a noop when calling pointer.offset.
+var zeroField = field([]int{})
+
+// IsValid reports whether the field identifier is valid.
+func (f field) IsValid() bool { return f != nil }
+
+// The pointer type is for the table-driven decoder.
+// The implementation here uses a reflect.Value of pointer type to
+// create a generic pointer. In pointer_unsafe.go we use unsafe
+// instead of reflect to implement the same (but faster) interface.
+type pointer struct {
+	v reflect.Value
+}
+
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+	return pointer{v: reflect.ValueOf(*i)}
+}
+
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr, deref bool) pointer {
+	v := reflect.ValueOf(*i)
+	u := reflect.New(v.Type())
+	u.Elem().Set(v)
+	if deref {
+		u = u.Elem()
+	}
+	return pointer{v: u}
+}
+
+// valToPointer converts v to a pointer.  v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+	return pointer{v: v}
+}
+
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+	return pointer{v: p.v.Elem().FieldByIndex(f).Addr()}
+}
+
+func (p pointer) isNil() bool {
+	return p.v.IsNil()
+}
+
+// grow updates the slice s in place to make it one element longer.
+// s must be addressable.
+// Returns the (addressable) new element.
+func grow(s reflect.Value) reflect.Value {
+	n, m := s.Len(), s.Cap()
+	if n < m {
+		s.SetLen(n + 1)
+	} else {
+		s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem())))
+	}
+	return s.Index(n)
+}
+
+func (p pointer) toInt64() *int64 {
+	return p.v.Interface().(*int64)
+}
+func (p pointer) toInt64Ptr() **int64 {
+	return p.v.Interface().(**int64)
+}
+func (p pointer) toInt64Slice() *[]int64 {
+	return p.v.Interface().(*[]int64)
+}
+
+var int32ptr = reflect.TypeOf((*int32)(nil))
+
+func (p pointer) toInt32() *int32 {
+	return p.v.Convert(int32ptr).Interface().(*int32)
+}
+
+// The toInt32Ptr/Slice methods don't work because of enums.
+// Instead, we must use set/get methods for the int32ptr/slice case.
+/*
+	func (p pointer) toInt32Ptr() **int32 {
+		return p.v.Interface().(**int32)
+}
+	func (p pointer) toInt32Slice() *[]int32 {
+		return p.v.Interface().(*[]int32)
+}
+*/
+func (p pointer) getInt32Ptr() *int32 {
+	if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+		// raw int32 type
+		return p.v.Elem().Interface().(*int32)
+	}
+	// an enum
+	return p.v.Elem().Convert(int32PtrType).Interface().(*int32)
+}
+func (p pointer) setInt32Ptr(v int32) {
+	// Allocate value in a *int32. Possibly convert that to a *enum.
+	// Then assign it to a **int32 or **enum.
+	// Note: we can convert *int32 to *enum, but we can't convert
+	// **int32 to **enum!
+	p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem()))
+}
+
+// getInt32Slice copies []int32 from p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getInt32Slice() []int32 {
+	if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+		// raw int32 type
+		return p.v.Elem().Interface().([]int32)
+	}
+	// an enum
+	// Allocate a []int32, then assign []enum's values into it.
+	// Note: we can't convert []enum to []int32.
+	slice := p.v.Elem()
+	s := make([]int32, slice.Len())
+	for i := 0; i < slice.Len(); i++ {
+		s[i] = int32(slice.Index(i).Int())
+	}
+	return s
+}
+
+// setInt32Slice copies []int32 into p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setInt32Slice(v []int32) {
+	if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+		// raw int32 type
+		p.v.Elem().Set(reflect.ValueOf(v))
+		return
+	}
+	// an enum
+	// Allocate a []enum, then assign []int32's values into it.
+	// Note: we can't convert []enum to []int32.
+	slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v))
+	for i, x := range v {
+		slice.Index(i).SetInt(int64(x))
+	}
+	p.v.Elem().Set(slice)
+}
+func (p pointer) appendInt32Slice(v int32) {
+	grow(p.v.Elem()).SetInt(int64(v))
+}
+
+func (p pointer) toUint64() *uint64 {
+	return p.v.Interface().(*uint64)
+}
+func (p pointer) toUint64Ptr() **uint64 {
+	return p.v.Interface().(**uint64)
+}
+func (p pointer) toUint64Slice() *[]uint64 {
+	return p.v.Interface().(*[]uint64)
+}
+func (p pointer) toUint32() *uint32 {
+	return p.v.Interface().(*uint32)
+}
+func (p pointer) toUint32Ptr() **uint32 {
+	return p.v.Interface().(**uint32)
+}
+func (p pointer) toUint32Slice() *[]uint32 {
+	return p.v.Interface().(*[]uint32)
+}
+func (p pointer) toBool() *bool {
+	return p.v.Interface().(*bool)
+}
+func (p pointer) toBoolPtr() **bool {
+	return p.v.Interface().(**bool)
+}
+func (p pointer) toBoolSlice() *[]bool {
+	return p.v.Interface().(*[]bool)
+}
+func (p pointer) toFloat64() *float64 {
+	return p.v.Interface().(*float64)
+}
+func (p pointer) toFloat64Ptr() **float64 {
+	return p.v.Interface().(**float64)
+}
+func (p pointer) toFloat64Slice() *[]float64 {
+	return p.v.Interface().(*[]float64)
+}
+func (p pointer) toFloat32() *float32 {
+	return p.v.Interface().(*float32)
+}
+func (p pointer) toFloat32Ptr() **float32 {
+	return p.v.Interface().(**float32)
+}
+func (p pointer) toFloat32Slice() *[]float32 {
+	return p.v.Interface().(*[]float32)
+}
+func (p pointer) toString() *string {
+	return p.v.Interface().(*string)
+}
+func (p pointer) toStringPtr() **string {
+	return p.v.Interface().(**string)
+}
+func (p pointer) toStringSlice() *[]string {
+	return p.v.Interface().(*[]string)
+}
+func (p pointer) toBytes() *[]byte {
+	return p.v.Interface().(*[]byte)
+}
+func (p pointer) toBytesSlice() *[][]byte {
+	return p.v.Interface().(*[][]byte)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+	return p.v.Interface().(*XXX_InternalExtensions)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+	return p.v.Interface().(*map[int32]Extension)
+}
+func (p pointer) getPointer() pointer {
+	return pointer{v: p.v.Elem()}
+}
+func (p pointer) setPointer(q pointer) {
+	p.v.Elem().Set(q.v)
+}
+func (p pointer) appendPointer(q pointer) {
+	grow(p.v.Elem()).Set(q.v)
+}
+
+// getPointerSlice copies []*T from p as a new []pointer.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getPointerSlice() []pointer {
+	if p.v.IsNil() {
+		return nil
+	}
+	n := p.v.Elem().Len()
+	s := make([]pointer, n)
+	for i := 0; i < n; i++ {
+		s[i] = pointer{v: p.v.Elem().Index(i)}
+	}
+	return s
+}
+
+// setPointerSlice copies []pointer into p as a new []*T.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setPointerSlice(v []pointer) {
+	if v == nil {
+		p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem())
+		return
+	}
+	s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v))
+	for _, p := range v {
+		s = reflect.Append(s, p.v)
+	}
+	p.v.Elem().Set(s)
+}
+
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+	if p.v.Elem().IsNil() {
+		return pointer{v: p.v.Elem()}
+	}
+	return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct
+}
+
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+	// TODO: check that p.v.Type().Elem() == t?
+	return p.v
+}
+
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	return *p
+}
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	*p = v
+}
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	return *p
+}
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	*p = v
+}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	return *p
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	*p = v
+}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	return *p
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+	atomicLock.Lock()
+	defer atomicLock.Unlock()
+	*p = v
+}
+
+var atomicLock sync.Mutex
diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
new file mode 100644
index 0000000..dbfffe0
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
@@ -0,0 +1,313 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2012 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// +build !purego,!appengine,!js
+
+// This file contains the implementation of the proto field accesses using package unsafe.
+
+package proto
+
+import (
+	"reflect"
+	"sync/atomic"
+	"unsafe"
+)
+
+const unsafeAllowed = true
+
+// A field identifies a field in a struct, accessible from a pointer.
+// In this implementation, a field is identified by its byte offset from the start of the struct.
+type field uintptr
+
+// toField returns a field equivalent to the given reflect field.
+func toField(f *reflect.StructField) field {
+	return field(f.Offset)
+}
+
+// invalidField is an invalid field identifier.
+const invalidField = ^field(0)
+
+// zeroField is a noop when calling pointer.offset.
+const zeroField = field(0)
+
+// IsValid reports whether the field identifier is valid.
+func (f field) IsValid() bool {
+	return f != invalidField
+}
+
+// The pointer type below is for the new table-driven encoder/decoder.
+// The implementation here uses unsafe.Pointer to create a generic pointer.
+// In pointer_reflect.go we use reflect instead of unsafe to implement
+// the same (but slower) interface.
+type pointer struct {
+	p unsafe.Pointer
+}
+
+// size of pointer
+var ptrSize = unsafe.Sizeof(uintptr(0))
+
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+	// Super-tricky - read pointer out of data word of interface value.
+	// Saves ~25ns over the equivalent:
+	// return valToPointer(reflect.ValueOf(*i))
+	return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
+}
+
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr, deref bool) (p pointer) {
+	// Super-tricky - read or get the address of data word of interface value.
+	if isptr {
+		// The interface is of pointer type, thus it is a direct interface.
+		// The data word is the pointer data itself. We take its address.
+		p = pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
+	} else {
+		// The interface is not of pointer type. The data word is the pointer
+		// to the data.
+		p = pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
+	}
+	if deref {
+		p.p = *(*unsafe.Pointer)(p.p)
+	}
+	return p
+}
+
+// valToPointer converts v to a pointer. v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+	return pointer{p: unsafe.Pointer(v.Pointer())}
+}
+
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+	// For safety, we should panic if !f.IsValid, however calling panic causes
+	// this to no longer be inlineable, which is a serious performance cost.
+	/*
+		if !f.IsValid() {
+			panic("invalid field")
+		}
+	*/
+	return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}
+}
+
+func (p pointer) isNil() bool {
+	return p.p == nil
+}
+
+func (p pointer) toInt64() *int64 {
+	return (*int64)(p.p)
+}
+func (p pointer) toInt64Ptr() **int64 {
+	return (**int64)(p.p)
+}
+func (p pointer) toInt64Slice() *[]int64 {
+	return (*[]int64)(p.p)
+}
+func (p pointer) toInt32() *int32 {
+	return (*int32)(p.p)
+}
+
+// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist.
+/*
+	func (p pointer) toInt32Ptr() **int32 {
+		return (**int32)(p.p)
+	}
+	func (p pointer) toInt32Slice() *[]int32 {
+		return (*[]int32)(p.p)
+	}
+*/
+func (p pointer) getInt32Ptr() *int32 {
+	return *(**int32)(p.p)
+}
+func (p pointer) setInt32Ptr(v int32) {
+	*(**int32)(p.p) = &v
+}
+
+// getInt32Slice loads a []int32 from p.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getInt32Slice() []int32 {
+	return *(*[]int32)(p.p)
+}
+
+// setInt32Slice stores a []int32 to p.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setInt32Slice(v []int32) {
+	*(*[]int32)(p.p) = v
+}
+
+// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead?
+func (p pointer) appendInt32Slice(v int32) {
+	s := (*[]int32)(p.p)
+	*s = append(*s, v)
+}
+
+func (p pointer) toUint64() *uint64 {
+	return (*uint64)(p.p)
+}
+func (p pointer) toUint64Ptr() **uint64 {
+	return (**uint64)(p.p)
+}
+func (p pointer) toUint64Slice() *[]uint64 {
+	return (*[]uint64)(p.p)
+}
+func (p pointer) toUint32() *uint32 {
+	return (*uint32)(p.p)
+}
+func (p pointer) toUint32Ptr() **uint32 {
+	return (**uint32)(p.p)
+}
+func (p pointer) toUint32Slice() *[]uint32 {
+	return (*[]uint32)(p.p)
+}
+func (p pointer) toBool() *bool {
+	return (*bool)(p.p)
+}
+func (p pointer) toBoolPtr() **bool {
+	return (**bool)(p.p)
+}
+func (p pointer) toBoolSlice() *[]bool {
+	return (*[]bool)(p.p)
+}
+func (p pointer) toFloat64() *float64 {
+	return (*float64)(p.p)
+}
+func (p pointer) toFloat64Ptr() **float64 {
+	return (**float64)(p.p)
+}
+func (p pointer) toFloat64Slice() *[]float64 {
+	return (*[]float64)(p.p)
+}
+func (p pointer) toFloat32() *float32 {
+	return (*float32)(p.p)
+}
+func (p pointer) toFloat32Ptr() **float32 {
+	return (**float32)(p.p)
+}
+func (p pointer) toFloat32Slice() *[]float32 {
+	return (*[]float32)(p.p)
+}
+func (p pointer) toString() *string {
+	return (*string)(p.p)
+}
+func (p pointer) toStringPtr() **string {
+	return (**string)(p.p)
+}
+func (p pointer) toStringSlice() *[]string {
+	return (*[]string)(p.p)
+}
+func (p pointer) toBytes() *[]byte {
+	return (*[]byte)(p.p)
+}
+func (p pointer) toBytesSlice() *[][]byte {
+	return (*[][]byte)(p.p)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+	return (*XXX_InternalExtensions)(p.p)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+	return (*map[int32]Extension)(p.p)
+}
+
+// getPointerSlice loads []*T from p as a []pointer.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getPointerSlice() []pointer {
+	// Super-tricky - p should point to a []*T where T is a
+	// message type. We load it as []pointer.
+	return *(*[]pointer)(p.p)
+}
+
+// setPointerSlice stores []pointer into p as a []*T.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setPointerSlice(v []pointer) {
+	// Super-tricky - p should point to a []*T where T is a
+	// message type. We store it as []pointer.
+	*(*[]pointer)(p.p) = v
+}
+
+// getPointer loads the pointer at p and returns it.
+func (p pointer) getPointer() pointer {
+	return pointer{p: *(*unsafe.Pointer)(p.p)}
+}
+
+// setPointer stores the pointer q at p.
+func (p pointer) setPointer(q pointer) {
+	*(*unsafe.Pointer)(p.p) = q.p
+}
+
+// append q to the slice pointed to by p.
+func (p pointer) appendPointer(q pointer) {
+	s := (*[]unsafe.Pointer)(p.p)
+	*s = append(*s, q.p)
+}
+
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+	// Super-tricky - read pointer out of data word of interface value.
+	return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]}
+}
+
+// asPointerTo returns a reflect.Value that is a pointer to an
+// object of type t stored at p.
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+	return reflect.NewAt(t, p.p)
+}
+
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+	return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+	return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+	return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+	return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go
new file mode 100644
index 0000000..a4b8c0c
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/properties.go
@@ -0,0 +1,544 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+/*
+ * Routines for encoding data into the wire format for protocol buffers.
+ */
+
+import (
+	"fmt"
+	"log"
+	"reflect"
+	"sort"
+	"strconv"
+	"strings"
+	"sync"
+)
+
+const debug bool = false
+
+// Constants that identify the encoding of a value on the wire.
+const (
+	WireVarint     = 0
+	WireFixed64    = 1
+	WireBytes      = 2
+	WireStartGroup = 3
+	WireEndGroup   = 4
+	WireFixed32    = 5
+)
+
+// tagMap is an optimization over map[int]int for typical protocol buffer
+// use-cases. Encoded protocol buffers are often in tag order with small tag
+// numbers.
+type tagMap struct {
+	fastTags []int
+	slowTags map[int]int
+}
+
+// tagMapFastLimit is the upper bound on the tag number that will be stored in
+// the tagMap slice rather than its map.
+const tagMapFastLimit = 1024
+
+func (p *tagMap) get(t int) (int, bool) {
+	if t > 0 && t < tagMapFastLimit {
+		if t >= len(p.fastTags) {
+			return 0, false
+		}
+		fi := p.fastTags[t]
+		return fi, fi >= 0
+	}
+	fi, ok := p.slowTags[t]
+	return fi, ok
+}
+
+func (p *tagMap) put(t int, fi int) {
+	if t > 0 && t < tagMapFastLimit {
+		for len(p.fastTags) < t+1 {
+			p.fastTags = append(p.fastTags, -1)
+		}
+		p.fastTags[t] = fi
+		return
+	}
+	if p.slowTags == nil {
+		p.slowTags = make(map[int]int)
+	}
+	p.slowTags[t] = fi
+}
+
+// StructProperties represents properties for all the fields of a struct.
+// decoderTags and decoderOrigNames should only be used by the decoder.
+type StructProperties struct {
+	Prop             []*Properties  // properties for each field
+	reqCount         int            // required count
+	decoderTags      tagMap         // map from proto tag to struct field number
+	decoderOrigNames map[string]int // map from original name to struct field number
+	order            []int          // list of struct field numbers in tag order
+
+	// OneofTypes contains information about the oneof fields in this message.
+	// It is keyed by the original name of a field.
+	OneofTypes map[string]*OneofProperties
+}
+
+// OneofProperties represents information about a specific field in a oneof.
+type OneofProperties struct {
+	Type  reflect.Type // pointer to generated struct type for this oneof field
+	Field int          // struct field number of the containing oneof in the message
+	Prop  *Properties
+}
+
+// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec.
+// See encode.go, (*Buffer).enc_struct.
+
+func (sp *StructProperties) Len() int { return len(sp.order) }
+func (sp *StructProperties) Less(i, j int) bool {
+	return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag
+}
+func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] }
+
+// Properties represents the protocol-specific behavior of a single struct field.
+type Properties struct {
+	Name     string // name of the field, for error messages
+	OrigName string // original name before protocol compiler (always set)
+	JSONName string // name to use for JSON; determined by protoc
+	Wire     string
+	WireType int
+	Tag      int
+	Required bool
+	Optional bool
+	Repeated bool
+	Packed   bool   // relevant for repeated primitives only
+	Enum     string // set for enum types only
+	proto3   bool   // whether this is known to be a proto3 field
+	oneof    bool   // whether this is a oneof field
+
+	Default    string // default value
+	HasDefault bool   // whether an explicit default was provided
+
+	stype reflect.Type      // set for struct types only
+	sprop *StructProperties // set for struct types only
+
+	mtype      reflect.Type // set for map types only
+	MapKeyProp *Properties  // set for map types only
+	MapValProp *Properties  // set for map types only
+}
+
+// String formats the properties in the protobuf struct field tag style.
+func (p *Properties) String() string {
+	s := p.Wire
+	s += ","
+	s += strconv.Itoa(p.Tag)
+	if p.Required {
+		s += ",req"
+	}
+	if p.Optional {
+		s += ",opt"
+	}
+	if p.Repeated {
+		s += ",rep"
+	}
+	if p.Packed {
+		s += ",packed"
+	}
+	s += ",name=" + p.OrigName
+	if p.JSONName != p.OrigName {
+		s += ",json=" + p.JSONName
+	}
+	if p.proto3 {
+		s += ",proto3"
+	}
+	if p.oneof {
+		s += ",oneof"
+	}
+	if len(p.Enum) > 0 {
+		s += ",enum=" + p.Enum
+	}
+	if p.HasDefault {
+		s += ",def=" + p.Default
+	}
+	return s
+}
+
+// Parse populates p by parsing a string in the protobuf struct field tag style.
+func (p *Properties) Parse(s string) {
+	// "bytes,49,opt,name=foo,def=hello!"
+	fields := strings.Split(s, ",") // breaks def=, but handled below.
+	if len(fields) < 2 {
+		log.Printf("proto: tag has too few fields: %q", s)
+		return
+	}
+
+	p.Wire = fields[0]
+	switch p.Wire {
+	case "varint":
+		p.WireType = WireVarint
+	case "fixed32":
+		p.WireType = WireFixed32
+	case "fixed64":
+		p.WireType = WireFixed64
+	case "zigzag32":
+		p.WireType = WireVarint
+	case "zigzag64":
+		p.WireType = WireVarint
+	case "bytes", "group":
+		p.WireType = WireBytes
+		// no numeric converter for non-numeric types
+	default:
+		log.Printf("proto: tag has unknown wire type: %q", s)
+		return
+	}
+
+	var err error
+	p.Tag, err = strconv.Atoi(fields[1])
+	if err != nil {
+		return
+	}
+
+outer:
+	for i := 2; i < len(fields); i++ {
+		f := fields[i]
+		switch {
+		case f == "req":
+			p.Required = true
+		case f == "opt":
+			p.Optional = true
+		case f == "rep":
+			p.Repeated = true
+		case f == "packed":
+			p.Packed = true
+		case strings.HasPrefix(f, "name="):
+			p.OrigName = f[5:]
+		case strings.HasPrefix(f, "json="):
+			p.JSONName = f[5:]
+		case strings.HasPrefix(f, "enum="):
+			p.Enum = f[5:]
+		case f == "proto3":
+			p.proto3 = true
+		case f == "oneof":
+			p.oneof = true
+		case strings.HasPrefix(f, "def="):
+			p.HasDefault = true
+			p.Default = f[4:] // rest of string
+			if i+1 < len(fields) {
+				// Commas aren't escaped, and def is always last.
+				p.Default += "," + strings.Join(fields[i+1:], ",")
+				break outer
+			}
+		}
+	}
+}
+
+var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()
+
+// setFieldProps initializes the field properties for submessages and maps.
+func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
+	switch t1 := typ; t1.Kind() {
+	case reflect.Ptr:
+		if t1.Elem().Kind() == reflect.Struct {
+			p.stype = t1.Elem()
+		}
+
+	case reflect.Slice:
+		if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct {
+			p.stype = t2.Elem()
+		}
+
+	case reflect.Map:
+		p.mtype = t1
+		p.MapKeyProp = &Properties{}
+		p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
+		p.MapValProp = &Properties{}
+		vtype := p.mtype.Elem()
+		if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {
+			// The value type is not a message (*T) or bytes ([]byte),
+			// so we need encoders for the pointer to this type.
+			vtype = reflect.PtrTo(vtype)
+		}
+		p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
+	}
+
+	if p.stype != nil {
+		if lockGetProp {
+			p.sprop = GetProperties(p.stype)
+		} else {
+			p.sprop = getPropertiesLocked(p.stype)
+		}
+	}
+}
+
+var (
+	marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
+)
+
+// Init populates the properties from a protocol buffer struct tag.
+func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {
+	p.init(typ, name, tag, f, true)
+}
+
+func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) {
+	// "bytes,49,opt,def=hello!"
+	p.Name = name
+	p.OrigName = name
+	if tag == "" {
+		return
+	}
+	p.Parse(tag)
+	p.setFieldProps(typ, f, lockGetProp)
+}
+
+var (
+	propertiesMu  sync.RWMutex
+	propertiesMap = make(map[reflect.Type]*StructProperties)
+)
+
+// GetProperties returns the list of properties for the type represented by t.
+// t must represent a generated struct type of a protocol message.
+func GetProperties(t reflect.Type) *StructProperties {
+	if t.Kind() != reflect.Struct {
+		panic("proto: type must have kind struct")
+	}
+
+	// Most calls to GetProperties in a long-running program will be
+	// retrieving details for types we have seen before.
+	propertiesMu.RLock()
+	sprop, ok := propertiesMap[t]
+	propertiesMu.RUnlock()
+	if ok {
+		return sprop
+	}
+
+	propertiesMu.Lock()
+	sprop = getPropertiesLocked(t)
+	propertiesMu.Unlock()
+	return sprop
+}
+
+type (
+	oneofFuncsIface interface {
+		XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
+	}
+	oneofWrappersIface interface {
+		XXX_OneofWrappers() []interface{}
+	}
+)
+
+// getPropertiesLocked requires that propertiesMu is held.
+func getPropertiesLocked(t reflect.Type) *StructProperties {
+	if prop, ok := propertiesMap[t]; ok {
+		return prop
+	}
+
+	prop := new(StructProperties)
+	// in case of recursive protos, fill this in now.
+	propertiesMap[t] = prop
+
+	// build properties
+	prop.Prop = make([]*Properties, t.NumField())
+	prop.order = make([]int, t.NumField())
+
+	for i := 0; i < t.NumField(); i++ {
+		f := t.Field(i)
+		p := new(Properties)
+		name := f.Name
+		p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false)
+
+		oneof := f.Tag.Get("protobuf_oneof") // special case
+		if oneof != "" {
+			// Oneof fields don't use the traditional protobuf tag.
+			p.OrigName = oneof
+		}
+		prop.Prop[i] = p
+		prop.order[i] = i
+		if debug {
+			print(i, " ", f.Name, " ", t.String(), " ")
+			if p.Tag > 0 {
+				print(p.String())
+			}
+			print("\n")
+		}
+	}
+
+	// Re-order prop.order.
+	sort.Sort(prop)
+
+	var oots []interface{}
+	switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
+	case oneofFuncsIface:
+		_, _, _, oots = m.XXX_OneofFuncs()
+	case oneofWrappersIface:
+		oots = m.XXX_OneofWrappers()
+	}
+	if len(oots) > 0 {
+		// Interpret oneof metadata.
+		prop.OneofTypes = make(map[string]*OneofProperties)
+		for _, oot := range oots {
+			oop := &OneofProperties{
+				Type: reflect.ValueOf(oot).Type(), // *T
+				Prop: new(Properties),
+			}
+			sft := oop.Type.Elem().Field(0)
+			oop.Prop.Name = sft.Name
+			oop.Prop.Parse(sft.Tag.Get("protobuf"))
+			// There will be exactly one interface field that
+			// this new value is assignable to.
+			for i := 0; i < t.NumField(); i++ {
+				f := t.Field(i)
+				if f.Type.Kind() != reflect.Interface {
+					continue
+				}
+				if !oop.Type.AssignableTo(f.Type) {
+					continue
+				}
+				oop.Field = i
+				break
+			}
+			prop.OneofTypes[oop.Prop.OrigName] = oop
+		}
+	}
+
+	// build required counts
+	// build tags
+	reqCount := 0
+	prop.decoderOrigNames = make(map[string]int)
+	for i, p := range prop.Prop {
+		if strings.HasPrefix(p.Name, "XXX_") {
+			// Internal fields should not appear in tags/origNames maps.
+			// They are handled specially when encoding and decoding.
+			continue
+		}
+		if p.Required {
+			reqCount++
+		}
+		prop.decoderTags.put(p.Tag, i)
+		prop.decoderOrigNames[p.OrigName] = i
+	}
+	prop.reqCount = reqCount
+
+	return prop
+}
+
+// A global registry of enum types.
+// The generated code will register the generated maps by calling RegisterEnum.
+
+var enumValueMaps = make(map[string]map[string]int32)
+
+// RegisterEnum is called from the generated code to install the enum descriptor
+// maps into the global table to aid parsing text format protocol buffers.
+func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) {
+	if _, ok := enumValueMaps[typeName]; ok {
+		panic("proto: duplicate enum registered: " + typeName)
+	}
+	enumValueMaps[typeName] = valueMap
+}
+
+// EnumValueMap returns the mapping from names to integers of the
+// enum type enumType, or a nil if not found.
+func EnumValueMap(enumType string) map[string]int32 {
+	return enumValueMaps[enumType]
+}
+
+// A registry of all linked message types.
+// The string is a fully-qualified proto name ("pkg.Message").
+var (
+	protoTypedNils = make(map[string]Message)      // a map from proto names to typed nil pointers
+	protoMapTypes  = make(map[string]reflect.Type) // a map from proto names to map types
+	revProtoTypes  = make(map[reflect.Type]string)
+)
+
+// RegisterType is called from generated code and maps from the fully qualified
+// proto name to the type (pointer to struct) of the protocol buffer.
+func RegisterType(x Message, name string) {
+	if _, ok := protoTypedNils[name]; ok {
+		// TODO: Some day, make this a panic.
+		log.Printf("proto: duplicate proto type registered: %s", name)
+		return
+	}
+	t := reflect.TypeOf(x)
+	if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 {
+		// Generated code always calls RegisterType with nil x.
+		// This check is just for extra safety.
+		protoTypedNils[name] = x
+	} else {
+		protoTypedNils[name] = reflect.Zero(t).Interface().(Message)
+	}
+	revProtoTypes[t] = name
+}
+
+// RegisterMapType is called from generated code and maps from the fully qualified
+// proto name to the native map type of the proto map definition.
+func RegisterMapType(x interface{}, name string) {
+	if reflect.TypeOf(x).Kind() != reflect.Map {
+		panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name))
+	}
+	if _, ok := protoMapTypes[name]; ok {
+		log.Printf("proto: duplicate proto type registered: %s", name)
+		return
+	}
+	t := reflect.TypeOf(x)
+	protoMapTypes[name] = t
+	revProtoTypes[t] = name
+}
+
+// MessageName returns the fully-qualified proto name for the given message type.
+func MessageName(x Message) string {
+	type xname interface {
+		XXX_MessageName() string
+	}
+	if m, ok := x.(xname); ok {
+		return m.XXX_MessageName()
+	}
+	return revProtoTypes[reflect.TypeOf(x)]
+}
+
+// MessageType returns the message type (pointer to struct) for a named message.
+// The type is not guaranteed to implement proto.Message if the name refers to a
+// map entry.
+func MessageType(name string) reflect.Type {
+	if t, ok := protoTypedNils[name]; ok {
+		return reflect.TypeOf(t)
+	}
+	return protoMapTypes[name]
+}
+
+// A registry of all linked proto files.
+var (
+	protoFiles = make(map[string][]byte) // file name => fileDescriptor
+)
+
+// RegisterFile is called from generated code and maps from the
+// full file name of a .proto file to its compressed FileDescriptorProto.
+func RegisterFile(filename string, fileDescriptor []byte) {
+	protoFiles[filename] = fileDescriptor
+}
+
+// FileDescriptor returns the compressed FileDescriptorProto for a .proto file.
+func FileDescriptor(filename string) []byte { return protoFiles[filename] }
diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go
new file mode 100644
index 0000000..5cb11fa
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/table_marshal.go
@@ -0,0 +1,2776 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+	"errors"
+	"fmt"
+	"math"
+	"reflect"
+	"sort"
+	"strconv"
+	"strings"
+	"sync"
+	"sync/atomic"
+	"unicode/utf8"
+)
+
+// a sizer takes a pointer to a field and the size of its tag, computes the size of
+// the encoded data.
+type sizer func(pointer, int) int
+
+// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format),
+// marshals the field to the end of the slice, returns the slice and error (if any).
+type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)
+
+// marshalInfo is the information used for marshaling a message.
+type marshalInfo struct {
+	typ          reflect.Type
+	fields       []*marshalFieldInfo
+	unrecognized field                      // offset of XXX_unrecognized
+	extensions   field                      // offset of XXX_InternalExtensions
+	v1extensions field                      // offset of XXX_extensions
+	sizecache    field                      // offset of XXX_sizecache
+	initialized  int32                      // 0 -- only typ is set, 1 -- fully initialized
+	messageset   bool                       // uses message set wire format
+	hasmarshaler bool                       // has custom marshaler
+	sync.RWMutex                            // protect extElems map, also for initialization
+	extElems     map[int32]*marshalElemInfo // info of extension elements
+}
+
+// marshalFieldInfo is the information used for marshaling a field of a message.
+type marshalFieldInfo struct {
+	field      field
+	wiretag    uint64 // tag in wire format
+	tagsize    int    // size of tag in wire format
+	sizer      sizer
+	marshaler  marshaler
+	isPointer  bool
+	required   bool                              // field is required
+	name       string                            // name of the field, for error reporting
+	oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements
+}
+
+// marshalElemInfo is the information used for marshaling an extension or oneof element.
+type marshalElemInfo struct {
+	wiretag   uint64 // tag in wire format
+	tagsize   int    // size of tag in wire format
+	sizer     sizer
+	marshaler marshaler
+	isptr     bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)
+	deref     bool // dereference the pointer before operating on it; implies isptr
+}
+
+var (
+	marshalInfoMap  = map[reflect.Type]*marshalInfo{}
+	marshalInfoLock sync.Mutex
+)
+
+// getMarshalInfo returns the information to marshal a given type of message.
+// The info it returns may not necessarily initialized.
+// t is the type of the message (NOT the pointer to it).
+func getMarshalInfo(t reflect.Type) *marshalInfo {
+	marshalInfoLock.Lock()
+	u, ok := marshalInfoMap[t]
+	if !ok {
+		u = &marshalInfo{typ: t}
+		marshalInfoMap[t] = u
+	}
+	marshalInfoLock.Unlock()
+	return u
+}
+
+// Size is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It computes the size of encoded data of msg.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Size(msg Message) int {
+	u := getMessageMarshalInfo(msg, a)
+	ptr := toPointer(&msg)
+	if ptr.isNil() {
+		// We get here if msg is a typed nil ((*SomeMessage)(nil)),
+		// so it satisfies the interface, and msg == nil wouldn't
+		// catch it. We don't want crash in this case.
+		return 0
+	}
+	return u.size(ptr)
+}
+
+// Marshal is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It marshals msg to the end of b.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {
+	u := getMessageMarshalInfo(msg, a)
+	ptr := toPointer(&msg)
+	if ptr.isNil() {
+		// We get here if msg is a typed nil ((*SomeMessage)(nil)),
+		// so it satisfies the interface, and msg == nil wouldn't
+		// catch it. We don't want crash in this case.
+		return b, ErrNil
+	}
+	return u.marshal(b, ptr, deterministic)
+}
+
+func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {
+	// u := a.marshal, but atomically.
+	// We use an atomic here to ensure memory consistency.
+	u := atomicLoadMarshalInfo(&a.marshal)
+	if u == nil {
+		// Get marshal information from type of message.
+		t := reflect.ValueOf(msg).Type()
+		if t.Kind() != reflect.Ptr {
+			panic(fmt.Sprintf("cannot handle non-pointer message type %v", t))
+		}
+		u = getMarshalInfo(t.Elem())
+		// Store it in the cache for later users.
+		// a.marshal = u, but atomically.
+		atomicStoreMarshalInfo(&a.marshal, u)
+	}
+	return u
+}
+
+// size is the main function to compute the size of the encoded data of a message.
+// ptr is the pointer to the message.
+func (u *marshalInfo) size(ptr pointer) int {
+	if atomic.LoadInt32(&u.initialized) == 0 {
+		u.computeMarshalInfo()
+	}
+
+	// If the message can marshal itself, let it do it, for compatibility.
+	// NOTE: This is not efficient.
+	if u.hasmarshaler {
+		m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+		b, _ := m.Marshal()
+		return len(b)
+	}
+
+	n := 0
+	for _, f := range u.fields {
+		if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+			// nil pointer always marshals to nothing
+			continue
+		}
+		n += f.sizer(ptr.offset(f.field), f.tagsize)
+	}
+	if u.extensions.IsValid() {
+		e := ptr.offset(u.extensions).toExtensions()
+		if u.messageset {
+			n += u.sizeMessageSet(e)
+		} else {
+			n += u.sizeExtensions(e)
+		}
+	}
+	if u.v1extensions.IsValid() {
+		m := *ptr.offset(u.v1extensions).toOldExtensions()
+		n += u.sizeV1Extensions(m)
+	}
+	if u.unrecognized.IsValid() {
+		s := *ptr.offset(u.unrecognized).toBytes()
+		n += len(s)
+	}
+	// cache the result for use in marshal
+	if u.sizecache.IsValid() {
+		atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))
+	}
+	return n
+}
+
+// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated),
+// fall back to compute the size.
+func (u *marshalInfo) cachedsize(ptr pointer) int {
+	if u.sizecache.IsValid() {
+		return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))
+	}
+	return u.size(ptr)
+}
+
+// marshal is the main function to marshal a message. It takes a byte slice and appends
+// the encoded data to the end of the slice, returns the slice and error (if any).
+// ptr is the pointer to the message.
+// If deterministic is true, map is marshaled in deterministic order.
+func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {
+	if atomic.LoadInt32(&u.initialized) == 0 {
+		u.computeMarshalInfo()
+	}
+
+	// If the message can marshal itself, let it do it, for compatibility.
+	// NOTE: This is not efficient.
+	if u.hasmarshaler {
+		m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+		b1, err := m.Marshal()
+		b = append(b, b1...)
+		return b, err
+	}
+
+	var err, errLater error
+	// The old marshaler encodes extensions at beginning.
+	if u.extensions.IsValid() {
+		e := ptr.offset(u.extensions).toExtensions()
+		if u.messageset {
+			b, err = u.appendMessageSet(b, e, deterministic)
+		} else {
+			b, err = u.appendExtensions(b, e, deterministic)
+		}
+		if err != nil {
+			return b, err
+		}
+	}
+	if u.v1extensions.IsValid() {
+		m := *ptr.offset(u.v1extensions).toOldExtensions()
+		b, err = u.appendV1Extensions(b, m, deterministic)
+		if err != nil {
+			return b, err
+		}
+	}
+	for _, f := range u.fields {
+		if f.required {
+			if ptr.offset(f.field).getPointer().isNil() {
+				// Required field is not set.
+				// We record the error but keep going, to give a complete marshaling.
+				if errLater == nil {
+					errLater = &RequiredNotSetError{f.name}
+				}
+				continue
+			}
+		}
+		if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+			// nil pointer always marshals to nothing
+			continue
+		}
+		b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)
+		if err != nil {
+			if err1, ok := err.(*RequiredNotSetError); ok {
+				// Required field in submessage is not set.
+				// We record the error but keep going, to give a complete marshaling.
+				if errLater == nil {
+					errLater = &RequiredNotSetError{f.name + "." + err1.field}
+				}
+				continue
+			}
+			if err == errRepeatedHasNil {
+				err = errors.New("proto: repeated field " + f.name + " has nil element")
+			}
+			if err == errInvalidUTF8 {
+				if errLater == nil {
+					fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
+					errLater = &invalidUTF8Error{fullName}
+				}
+				continue
+			}
+			return b, err
+		}
+	}
+	if u.unrecognized.IsValid() {
+		s := *ptr.offset(u.unrecognized).toBytes()
+		b = append(b, s...)
+	}
+	return b, errLater
+}
+
+// computeMarshalInfo initializes the marshal info.
+func (u *marshalInfo) computeMarshalInfo() {
+	u.Lock()
+	defer u.Unlock()
+	if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock
+		return
+	}
+
+	t := u.typ
+	u.unrecognized = invalidField
+	u.extensions = invalidField
+	u.v1extensions = invalidField
+	u.sizecache = invalidField
+
+	// If the message can marshal itself, let it do it, for compatibility.
+	// NOTE: This is not efficient.
+	if reflect.PtrTo(t).Implements(marshalerType) {
+		u.hasmarshaler = true
+		atomic.StoreInt32(&u.initialized, 1)
+		return
+	}
+
+	// get oneof implementers
+	var oneofImplementers []interface{}
+	switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
+	case oneofFuncsIface:
+		_, _, _, oneofImplementers = m.XXX_OneofFuncs()
+	case oneofWrappersIface:
+		oneofImplementers = m.XXX_OneofWrappers()
+	}
+
+	n := t.NumField()
+
+	// deal with XXX fields first
+	for i := 0; i < t.NumField(); i++ {
+		f := t.Field(i)
+		if !strings.HasPrefix(f.Name, "XXX_") {
+			continue
+		}
+		switch f.Name {
+		case "XXX_sizecache":
+			u.sizecache = toField(&f)
+		case "XXX_unrecognized":
+			u.unrecognized = toField(&f)
+		case "XXX_InternalExtensions":
+			u.extensions = toField(&f)
+			u.messageset = f.Tag.Get("protobuf_messageset") == "1"
+		case "XXX_extensions":
+			u.v1extensions = toField(&f)
+		case "XXX_NoUnkeyedLiteral":
+			// nothing to do
+		default:
+			panic("unknown XXX field: " + f.Name)
+		}
+		n--
+	}
+
+	// normal fields
+	fields := make([]marshalFieldInfo, n) // batch allocation
+	u.fields = make([]*marshalFieldInfo, 0, n)
+	for i, j := 0, 0; i < t.NumField(); i++ {
+		f := t.Field(i)
+
+		if strings.HasPrefix(f.Name, "XXX_") {
+			continue
+		}
+		field := &fields[j]
+		j++
+		field.name = f.Name
+		u.fields = append(u.fields, field)
+		if f.Tag.Get("protobuf_oneof") != "" {
+			field.computeOneofFieldInfo(&f, oneofImplementers)
+			continue
+		}
+		if f.Tag.Get("protobuf") == "" {
+			// field has no tag (not in generated message), ignore it
+			u.fields = u.fields[:len(u.fields)-1]
+			j--
+			continue
+		}
+		field.computeMarshalFieldInfo(&f)
+	}
+
+	// fields are marshaled in tag order on the wire.
+	sort.Sort(byTag(u.fields))
+
+	atomic.StoreInt32(&u.initialized, 1)
+}
+
+// helper for sorting fields by tag
+type byTag []*marshalFieldInfo
+
+func (a byTag) Len() int           { return len(a) }
+func (a byTag) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
+func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }
+
+// getExtElemInfo returns the information to marshal an extension element.
+// The info it returns is initialized.
+func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {
+	// get from cache first
+	u.RLock()
+	e, ok := u.extElems[desc.Field]
+	u.RUnlock()
+	if ok {
+		return e
+	}
+
+	t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct
+	tags := strings.Split(desc.Tag, ",")
+	tag, err := strconv.Atoi(tags[1])
+	if err != nil {
+		panic("tag is not an integer")
+	}
+	wt := wiretype(tags[0])
+	if t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct {
+		t = t.Elem()
+	}
+	sizer, marshaler := typeMarshaler(t, tags, false, false)
+	var deref bool
+	if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+		t = reflect.PtrTo(t)
+		deref = true
+	}
+	e = &marshalElemInfo{
+		wiretag:   uint64(tag)<<3 | wt,
+		tagsize:   SizeVarint(uint64(tag) << 3),
+		sizer:     sizer,
+		marshaler: marshaler,
+		isptr:     t.Kind() == reflect.Ptr,
+		deref:     deref,
+	}
+
+	// update cache
+	u.Lock()
+	if u.extElems == nil {
+		u.extElems = make(map[int32]*marshalElemInfo)
+	}
+	u.extElems[desc.Field] = e
+	u.Unlock()
+	return e
+}
+
+// computeMarshalFieldInfo fills up the information to marshal a field.
+func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {
+	// parse protobuf tag of the field.
+	// tag has format of "bytes,49,opt,name=foo,def=hello!"
+	tags := strings.Split(f.Tag.Get("protobuf"), ",")
+	if tags[0] == "" {
+		return
+	}
+	tag, err := strconv.Atoi(tags[1])
+	if err != nil {
+		panic("tag is not an integer")
+	}
+	wt := wiretype(tags[0])
+	if tags[2] == "req" {
+		fi.required = true
+	}
+	fi.setTag(f, tag, wt)
+	fi.setMarshaler(f, tags)
+}
+
+func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
+	fi.field = toField(f)
+	fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.
+	fi.isPointer = true
+	fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
+	fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)
+
+	ityp := f.Type // interface type
+	for _, o := range oneofImplementers {
+		t := reflect.TypeOf(o)
+		if !t.Implements(ityp) {
+			continue
+		}
+		sf := t.Elem().Field(0) // oneof implementer is a struct with a single field
+		tags := strings.Split(sf.Tag.Get("protobuf"), ",")
+		tag, err := strconv.Atoi(tags[1])
+		if err != nil {
+			panic("tag is not an integer")
+		}
+		wt := wiretype(tags[0])
+		sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value
+		fi.oneofElems[t.Elem()] = &marshalElemInfo{
+			wiretag:   uint64(tag)<<3 | wt,
+			tagsize:   SizeVarint(uint64(tag) << 3),
+			sizer:     sizer,
+			marshaler: marshaler,
+		}
+	}
+}
+
+// wiretype returns the wire encoding of the type.
+func wiretype(encoding string) uint64 {
+	switch encoding {
+	case "fixed32":
+		return WireFixed32
+	case "fixed64":
+		return WireFixed64
+	case "varint", "zigzag32", "zigzag64":
+		return WireVarint
+	case "bytes":
+		return WireBytes
+	case "group":
+		return WireStartGroup
+	}
+	panic("unknown wire type " + encoding)
+}
+
+// setTag fills up the tag (in wire format) and its size in the info of a field.
+func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {
+	fi.field = toField(f)
+	fi.wiretag = uint64(tag)<<3 | wt
+	fi.tagsize = SizeVarint(uint64(tag) << 3)
+}
+
+// setMarshaler fills up the sizer and marshaler in the info of a field.
+func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {
+	switch f.Type.Kind() {
+	case reflect.Map:
+		// map field
+		fi.isPointer = true
+		fi.sizer, fi.marshaler = makeMapMarshaler(f)
+		return
+	case reflect.Ptr, reflect.Slice:
+		fi.isPointer = true
+	}
+	fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)
+}
+
+// typeMarshaler returns the sizer and marshaler of a given field.
+// t is the type of the field.
+// tags is the generated "protobuf" tag of the field.
+// If nozero is true, zero value is not marshaled to the wire.
+// If oneof is true, it is a oneof field.
+func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {
+	encoding := tags[0]
+
+	pointer := false
+	slice := false
+	if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+		slice = true
+		t = t.Elem()
+	}
+	if t.Kind() == reflect.Ptr {
+		pointer = true
+		t = t.Elem()
+	}
+
+	packed := false
+	proto3 := false
+	validateUTF8 := true
+	for i := 2; i < len(tags); i++ {
+		if tags[i] == "packed" {
+			packed = true
+		}
+		if tags[i] == "proto3" {
+			proto3 = true
+		}
+	}
+	validateUTF8 = validateUTF8 && proto3
+
+	switch t.Kind() {
+	case reflect.Bool:
+		if pointer {
+			return sizeBoolPtr, appendBoolPtr
+		}
+		if slice {
+			if packed {
+				return sizeBoolPackedSlice, appendBoolPackedSlice
+			}
+			return sizeBoolSlice, appendBoolSlice
+		}
+		if nozero {
+			return sizeBoolValueNoZero, appendBoolValueNoZero
+		}
+		return sizeBoolValue, appendBoolValue
+	case reflect.Uint32:
+		switch encoding {
+		case "fixed32":
+			if pointer {
+				return sizeFixed32Ptr, appendFixed32Ptr
+			}
+			if slice {
+				if packed {
+					return sizeFixed32PackedSlice, appendFixed32PackedSlice
+				}
+				return sizeFixed32Slice, appendFixed32Slice
+			}
+			if nozero {
+				return sizeFixed32ValueNoZero, appendFixed32ValueNoZero
+			}
+			return sizeFixed32Value, appendFixed32Value
+		case "varint":
+			if pointer {
+				return sizeVarint32Ptr, appendVarint32Ptr
+			}
+			if slice {
+				if packed {
+					return sizeVarint32PackedSlice, appendVarint32PackedSlice
+				}
+				return sizeVarint32Slice, appendVarint32Slice
+			}
+			if nozero {
+				return sizeVarint32ValueNoZero, appendVarint32ValueNoZero
+			}
+			return sizeVarint32Value, appendVarint32Value
+		}
+	case reflect.Int32:
+		switch encoding {
+		case "fixed32":
+			if pointer {
+				return sizeFixedS32Ptr, appendFixedS32Ptr
+			}
+			if slice {
+				if packed {
+					return sizeFixedS32PackedSlice, appendFixedS32PackedSlice
+				}
+				return sizeFixedS32Slice, appendFixedS32Slice
+			}
+			if nozero {
+				return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero
+			}
+			return sizeFixedS32Value, appendFixedS32Value
+		case "varint":
+			if pointer {
+				return sizeVarintS32Ptr, appendVarintS32Ptr
+			}
+			if slice {
+				if packed {
+					return sizeVarintS32PackedSlice, appendVarintS32PackedSlice
+				}
+				return sizeVarintS32Slice, appendVarintS32Slice
+			}
+			if nozero {
+				return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero
+			}
+			return sizeVarintS32Value, appendVarintS32Value
+		case "zigzag32":
+			if pointer {
+				return sizeZigzag32Ptr, appendZigzag32Ptr
+			}
+			if slice {
+				if packed {
+					return sizeZigzag32PackedSlice, appendZigzag32PackedSlice
+				}
+				return sizeZigzag32Slice, appendZigzag32Slice
+			}
+			if nozero {
+				return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero
+			}
+			return sizeZigzag32Value, appendZigzag32Value
+		}
+	case reflect.Uint64:
+		switch encoding {
+		case "fixed64":
+			if pointer {
+				return sizeFixed64Ptr, appendFixed64Ptr
+			}
+			if slice {
+				if packed {
+					return sizeFixed64PackedSlice, appendFixed64PackedSlice
+				}
+				return sizeFixed64Slice, appendFixed64Slice
+			}
+			if nozero {
+				return sizeFixed64ValueNoZero, appendFixed64ValueNoZero
+			}
+			return sizeFixed64Value, appendFixed64Value
+		case "varint":
+			if pointer {
+				return sizeVarint64Ptr, appendVarint64Ptr
+			}
+			if slice {
+				if packed {
+					return sizeVarint64PackedSlice, appendVarint64PackedSlice
+				}
+				return sizeVarint64Slice, appendVarint64Slice
+			}
+			if nozero {
+				return sizeVarint64ValueNoZero, appendVarint64ValueNoZero
+			}
+			return sizeVarint64Value, appendVarint64Value
+		}
+	case reflect.Int64:
+		switch encoding {
+		case "fixed64":
+			if pointer {
+				return sizeFixedS64Ptr, appendFixedS64Ptr
+			}
+			if slice {
+				if packed {
+					return sizeFixedS64PackedSlice, appendFixedS64PackedSlice
+				}
+				return sizeFixedS64Slice, appendFixedS64Slice
+			}
+			if nozero {
+				return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero
+			}
+			return sizeFixedS64Value, appendFixedS64Value
+		case "varint":
+			if pointer {
+				return sizeVarintS64Ptr, appendVarintS64Ptr
+			}
+			if slice {
+				if packed {
+					return sizeVarintS64PackedSlice, appendVarintS64PackedSlice
+				}
+				return sizeVarintS64Slice, appendVarintS64Slice
+			}
+			if nozero {
+				return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero
+			}
+			return sizeVarintS64Value, appendVarintS64Value
+		case "zigzag64":
+			if pointer {
+				return sizeZigzag64Ptr, appendZigzag64Ptr
+			}
+			if slice {
+				if packed {
+					return sizeZigzag64PackedSlice, appendZigzag64PackedSlice
+				}
+				return sizeZigzag64Slice, appendZigzag64Slice
+			}
+			if nozero {
+				return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero
+			}
+			return sizeZigzag64Value, appendZigzag64Value
+		}
+	case reflect.Float32:
+		if pointer {
+			return sizeFloat32Ptr, appendFloat32Ptr
+		}
+		if slice {
+			if packed {
+				return sizeFloat32PackedSlice, appendFloat32PackedSlice
+			}
+			return sizeFloat32Slice, appendFloat32Slice
+		}
+		if nozero {
+			return sizeFloat32ValueNoZero, appendFloat32ValueNoZero
+		}
+		return sizeFloat32Value, appendFloat32Value
+	case reflect.Float64:
+		if pointer {
+			return sizeFloat64Ptr, appendFloat64Ptr
+		}
+		if slice {
+			if packed {
+				return sizeFloat64PackedSlice, appendFloat64PackedSlice
+			}
+			return sizeFloat64Slice, appendFloat64Slice
+		}
+		if nozero {
+			return sizeFloat64ValueNoZero, appendFloat64ValueNoZero
+		}
+		return sizeFloat64Value, appendFloat64Value
+	case reflect.String:
+		if validateUTF8 {
+			if pointer {
+				return sizeStringPtr, appendUTF8StringPtr
+			}
+			if slice {
+				return sizeStringSlice, appendUTF8StringSlice
+			}
+			if nozero {
+				return sizeStringValueNoZero, appendUTF8StringValueNoZero
+			}
+			return sizeStringValue, appendUTF8StringValue
+		}
+		if pointer {
+			return sizeStringPtr, appendStringPtr
+		}
+		if slice {
+			return sizeStringSlice, appendStringSlice
+		}
+		if nozero {
+			return sizeStringValueNoZero, appendStringValueNoZero
+		}
+		return sizeStringValue, appendStringValue
+	case reflect.Slice:
+		if slice {
+			return sizeBytesSlice, appendBytesSlice
+		}
+		if oneof {
+			// Oneof bytes field may also have "proto3" tag.
+			// We want to marshal it as a oneof field. Do this
+			// check before the proto3 check.
+			return sizeBytesOneof, appendBytesOneof
+		}
+		if proto3 {
+			return sizeBytes3, appendBytes3
+		}
+		return sizeBytes, appendBytes
+	case reflect.Struct:
+		switch encoding {
+		case "group":
+			if slice {
+				return makeGroupSliceMarshaler(getMarshalInfo(t))
+			}
+			return makeGroupMarshaler(getMarshalInfo(t))
+		case "bytes":
+			if slice {
+				return makeMessageSliceMarshaler(getMarshalInfo(t))
+			}
+			return makeMessageMarshaler(getMarshalInfo(t))
+		}
+	}
+	panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding))
+}
+
+// Below are functions to size/marshal a specific type of a field.
+// They are stored in the field's info, and called by function pointers.
+// They have type sizer or marshaler.
+
+func sizeFixed32Value(_ pointer, tagsize int) int {
+	return 4 + tagsize
+}
+func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toUint32()
+	if v == 0 {
+		return 0
+	}
+	return 4 + tagsize
+}
+func sizeFixed32Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toUint32Ptr()
+	if p == nil {
+		return 0
+	}
+	return 4 + tagsize
+}
+func sizeFixed32Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint32Slice()
+	return (4 + tagsize) * len(s)
+}
+func sizeFixed32PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint32Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixedS32Value(_ pointer, tagsize int) int {
+	return 4 + tagsize
+}
+func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toInt32()
+	if v == 0 {
+		return 0
+	}
+	return 4 + tagsize
+}
+func sizeFixedS32Ptr(ptr pointer, tagsize int) int {
+	p := ptr.getInt32Ptr()
+	if p == nil {
+		return 0
+	}
+	return 4 + tagsize
+}
+func sizeFixedS32Slice(ptr pointer, tagsize int) int {
+	s := ptr.getInt32Slice()
+	return (4 + tagsize) * len(s)
+}
+func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {
+	s := ptr.getInt32Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFloat32Value(_ pointer, tagsize int) int {
+	return 4 + tagsize
+}
+func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {
+	v := math.Float32bits(*ptr.toFloat32())
+	if v == 0 {
+		return 0
+	}
+	return 4 + tagsize
+}
+func sizeFloat32Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toFloat32Ptr()
+	if p == nil {
+		return 0
+	}
+	return 4 + tagsize
+}
+func sizeFloat32Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toFloat32Slice()
+	return (4 + tagsize) * len(s)
+}
+func sizeFloat32PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toFloat32Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixed64Value(_ pointer, tagsize int) int {
+	return 8 + tagsize
+}
+func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toUint64()
+	if v == 0 {
+		return 0
+	}
+	return 8 + tagsize
+}
+func sizeFixed64Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toUint64Ptr()
+	if p == nil {
+		return 0
+	}
+	return 8 + tagsize
+}
+func sizeFixed64Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint64Slice()
+	return (8 + tagsize) * len(s)
+}
+func sizeFixed64PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint64Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFixedS64Value(_ pointer, tagsize int) int {
+	return 8 + tagsize
+}
+func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toInt64()
+	if v == 0 {
+		return 0
+	}
+	return 8 + tagsize
+}
+func sizeFixedS64Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toInt64Ptr()
+	if p == nil {
+		return 0
+	}
+	return 8 + tagsize
+}
+func sizeFixedS64Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toInt64Slice()
+	return (8 + tagsize) * len(s)
+}
+func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toInt64Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFloat64Value(_ pointer, tagsize int) int {
+	return 8 + tagsize
+}
+func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {
+	v := math.Float64bits(*ptr.toFloat64())
+	if v == 0 {
+		return 0
+	}
+	return 8 + tagsize
+}
+func sizeFloat64Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toFloat64Ptr()
+	if p == nil {
+		return 0
+	}
+	return 8 + tagsize
+}
+func sizeFloat64Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toFloat64Slice()
+	return (8 + tagsize) * len(s)
+}
+func sizeFloat64PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toFloat64Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeVarint32Value(ptr pointer, tagsize int) int {
+	v := *ptr.toUint32()
+	return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toUint32()
+	if v == 0 {
+		return 0
+	}
+	return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toUint32Ptr()
+	if p == nil {
+		return 0
+	}
+	return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarint32Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint32Slice()
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v)) + tagsize
+	}
+	return n
+}
+func sizeVarint32PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint32Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v))
+	}
+	return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS32Value(ptr pointer, tagsize int) int {
+	v := *ptr.toInt32()
+	return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toInt32()
+	if v == 0 {
+		return 0
+	}
+	return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32Ptr(ptr pointer, tagsize int) int {
+	p := ptr.getInt32Ptr()
+	if p == nil {
+		return 0
+	}
+	return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS32Slice(ptr pointer, tagsize int) int {
+	s := ptr.getInt32Slice()
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v)) + tagsize
+	}
+	return n
+}
+func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {
+	s := ptr.getInt32Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v))
+	}
+	return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarint64Value(ptr pointer, tagsize int) int {
+	v := *ptr.toUint64()
+	return SizeVarint(v) + tagsize
+}
+func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toUint64()
+	if v == 0 {
+		return 0
+	}
+	return SizeVarint(v) + tagsize
+}
+func sizeVarint64Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toUint64Ptr()
+	if p == nil {
+		return 0
+	}
+	return SizeVarint(*p) + tagsize
+}
+func sizeVarint64Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint64Slice()
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(v) + tagsize
+	}
+	return n
+}
+func sizeVarint64PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toUint64Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(v)
+	}
+	return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS64Value(ptr pointer, tagsize int) int {
+	v := *ptr.toInt64()
+	return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toInt64()
+	if v == 0 {
+		return 0
+	}
+	return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toInt64Ptr()
+	if p == nil {
+		return 0
+	}
+	return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS64Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toInt64Slice()
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v)) + tagsize
+	}
+	return n
+}
+func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toInt64Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v))
+	}
+	return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag32Value(ptr pointer, tagsize int) int {
+	v := *ptr.toInt32()
+	return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toInt32()
+	if v == 0 {
+		return 0
+	}
+	return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Ptr(ptr pointer, tagsize int) int {
+	p := ptr.getInt32Ptr()
+	if p == nil {
+		return 0
+	}
+	v := *p
+	return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Slice(ptr pointer, tagsize int) int {
+	s := ptr.getInt32Slice()
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+	}
+	return n
+}
+func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {
+	s := ptr.getInt32Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+	}
+	return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag64Value(ptr pointer, tagsize int) int {
+	v := *ptr.toInt64()
+	return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toInt64()
+	if v == 0 {
+		return 0
+	}
+	return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Ptr(ptr pointer, tagsize int) int {
+	p := *ptr.toInt64Ptr()
+	if p == nil {
+		return 0
+	}
+	v := *p
+	return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Slice(ptr pointer, tagsize int) int {
+	s := *ptr.toInt64Slice()
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+	}
+	return n
+}
+func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toInt64Slice()
+	if len(s) == 0 {
+		return 0
+	}
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+	}
+	return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeBoolValue(_ pointer, tagsize int) int {
+	return 1 + tagsize
+}
+func sizeBoolValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toBool()
+	if !v {
+		return 0
+	}
+	return 1 + tagsize
+}
+func sizeBoolPtr(ptr pointer, tagsize int) int {
+	p := *ptr.toBoolPtr()
+	if p == nil {
+		return 0
+	}
+	return 1 + tagsize
+}
+func sizeBoolSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toBoolSlice()
+	return (1 + tagsize) * len(s)
+}
+func sizeBoolPackedSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toBoolSlice()
+	if len(s) == 0 {
+		return 0
+	}
+	return len(s) + SizeVarint(uint64(len(s))) + tagsize
+}
+func sizeStringValue(ptr pointer, tagsize int) int {
+	v := *ptr.toString()
+	return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringValueNoZero(ptr pointer, tagsize int) int {
+	v := *ptr.toString()
+	if v == "" {
+		return 0
+	}
+	return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringPtr(ptr pointer, tagsize int) int {
+	p := *ptr.toStringPtr()
+	if p == nil {
+		return 0
+	}
+	v := *p
+	return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toStringSlice()
+	n := 0
+	for _, v := range s {
+		n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+	}
+	return n
+}
+func sizeBytes(ptr pointer, tagsize int) int {
+	v := *ptr.toBytes()
+	if v == nil {
+		return 0
+	}
+	return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytes3(ptr pointer, tagsize int) int {
+	v := *ptr.toBytes()
+	if len(v) == 0 {
+		return 0
+	}
+	return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesOneof(ptr pointer, tagsize int) int {
+	v := *ptr.toBytes()
+	return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesSlice(ptr pointer, tagsize int) int {
+	s := *ptr.toBytesSlice()
+	n := 0
+	for _, v := range s {
+		n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+	}
+	return n
+}
+
+// appendFixed32 appends an encoded fixed32 to b.
+func appendFixed32(b []byte, v uint32) []byte {
+	b = append(b,
+		byte(v),
+		byte(v>>8),
+		byte(v>>16),
+		byte(v>>24))
+	return b
+}
+
+// appendFixed64 appends an encoded fixed64 to b.
+func appendFixed64(b []byte, v uint64) []byte {
+	b = append(b,
+		byte(v),
+		byte(v>>8),
+		byte(v>>16),
+		byte(v>>24),
+		byte(v>>32),
+		byte(v>>40),
+		byte(v>>48),
+		byte(v>>56))
+	return b
+}
+
+// appendVarint appends an encoded varint to b.
+func appendVarint(b []byte, v uint64) []byte {
+	// TODO: make 1-byte (maybe 2-byte) case inline-able, once we
+	// have non-leaf inliner.
+	switch {
+	case v < 1<<7:
+		b = append(b, byte(v))
+	case v < 1<<14:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte(v>>7))
+	case v < 1<<21:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte(v>>14))
+	case v < 1<<28:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte((v>>14)&0x7f|0x80),
+			byte(v>>21))
+	case v < 1<<35:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte((v>>14)&0x7f|0x80),
+			byte((v>>21)&0x7f|0x80),
+			byte(v>>28))
+	case v < 1<<42:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte((v>>14)&0x7f|0x80),
+			byte((v>>21)&0x7f|0x80),
+			byte((v>>28)&0x7f|0x80),
+			byte(v>>35))
+	case v < 1<<49:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte((v>>14)&0x7f|0x80),
+			byte((v>>21)&0x7f|0x80),
+			byte((v>>28)&0x7f|0x80),
+			byte((v>>35)&0x7f|0x80),
+			byte(v>>42))
+	case v < 1<<56:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte((v>>14)&0x7f|0x80),
+			byte((v>>21)&0x7f|0x80),
+			byte((v>>28)&0x7f|0x80),
+			byte((v>>35)&0x7f|0x80),
+			byte((v>>42)&0x7f|0x80),
+			byte(v>>49))
+	case v < 1<<63:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte((v>>14)&0x7f|0x80),
+			byte((v>>21)&0x7f|0x80),
+			byte((v>>28)&0x7f|0x80),
+			byte((v>>35)&0x7f|0x80),
+			byte((v>>42)&0x7f|0x80),
+			byte((v>>49)&0x7f|0x80),
+			byte(v>>56))
+	default:
+		b = append(b,
+			byte(v&0x7f|0x80),
+			byte((v>>7)&0x7f|0x80),
+			byte((v>>14)&0x7f|0x80),
+			byte((v>>21)&0x7f|0x80),
+			byte((v>>28)&0x7f|0x80),
+			byte((v>>35)&0x7f|0x80),
+			byte((v>>42)&0x7f|0x80),
+			byte((v>>49)&0x7f|0x80),
+			byte((v>>56)&0x7f|0x80),
+			1)
+	}
+	return b
+}
+
+func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint32()
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, v)
+	return b, nil
+}
+func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint32()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, v)
+	return b, nil
+}
+func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toUint32Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, *p)
+	return b, nil
+}
+func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint32Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendFixed32(b, v)
+	}
+	return b, nil
+}
+func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint32Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	b = appendVarint(b, uint64(4*len(s)))
+	for _, v := range s {
+		b = appendFixed32(b, v)
+	}
+	return b, nil
+}
+func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt32()
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, uint32(v))
+	return b, nil
+}
+func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt32()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, uint32(v))
+	return b, nil
+}
+func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := ptr.getInt32Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, uint32(*p))
+	return b, nil
+}
+func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := ptr.getInt32Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendFixed32(b, uint32(v))
+	}
+	return b, nil
+}
+func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := ptr.getInt32Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	b = appendVarint(b, uint64(4*len(s)))
+	for _, v := range s {
+		b = appendFixed32(b, uint32(v))
+	}
+	return b, nil
+}
+func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := math.Float32bits(*ptr.toFloat32())
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, v)
+	return b, nil
+}
+func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := math.Float32bits(*ptr.toFloat32())
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, v)
+	return b, nil
+}
+func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toFloat32Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed32(b, math.Float32bits(*p))
+	return b, nil
+}
+func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toFloat32Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendFixed32(b, math.Float32bits(v))
+	}
+	return b, nil
+}
+func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toFloat32Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	b = appendVarint(b, uint64(4*len(s)))
+	for _, v := range s {
+		b = appendFixed32(b, math.Float32bits(v))
+	}
+	return b, nil
+}
+func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint64()
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, v)
+	return b, nil
+}
+func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint64()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, v)
+	return b, nil
+}
+func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toUint64Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, *p)
+	return b, nil
+}
+func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint64Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendFixed64(b, v)
+	}
+	return b, nil
+}
+func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint64Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	b = appendVarint(b, uint64(8*len(s)))
+	for _, v := range s {
+		b = appendFixed64(b, v)
+	}
+	return b, nil
+}
+func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt64()
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, uint64(v))
+	return b, nil
+}
+func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt64()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, uint64(v))
+	return b, nil
+}
+func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toInt64Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, uint64(*p))
+	return b, nil
+}
+func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toInt64Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendFixed64(b, uint64(v))
+	}
+	return b, nil
+}
+func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toInt64Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	b = appendVarint(b, uint64(8*len(s)))
+	for _, v := range s {
+		b = appendFixed64(b, uint64(v))
+	}
+	return b, nil
+}
+func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := math.Float64bits(*ptr.toFloat64())
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, v)
+	return b, nil
+}
+func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := math.Float64bits(*ptr.toFloat64())
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, v)
+	return b, nil
+}
+func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toFloat64Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendFixed64(b, math.Float64bits(*p))
+	return b, nil
+}
+func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toFloat64Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendFixed64(b, math.Float64bits(v))
+	}
+	return b, nil
+}
+func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toFloat64Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	b = appendVarint(b, uint64(8*len(s)))
+	for _, v := range s {
+		b = appendFixed64(b, math.Float64bits(v))
+	}
+	return b, nil
+}
+func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint32()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v))
+	return b, nil
+}
+func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint32()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v))
+	return b, nil
+}
+func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toUint32Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(*p))
+	return b, nil
+}
+func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint32Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64(v))
+	}
+	return b, nil
+}
+func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint32Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	// compute size
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v))
+	}
+	b = appendVarint(b, uint64(n))
+	for _, v := range s {
+		b = appendVarint(b, uint64(v))
+	}
+	return b, nil
+}
+func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt32()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v))
+	return b, nil
+}
+func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt32()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v))
+	return b, nil
+}
+func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := ptr.getInt32Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(*p))
+	return b, nil
+}
+func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := ptr.getInt32Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64(v))
+	}
+	return b, nil
+}
+func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := ptr.getInt32Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	// compute size
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v))
+	}
+	b = appendVarint(b, uint64(n))
+	for _, v := range s {
+		b = appendVarint(b, uint64(v))
+	}
+	return b, nil
+}
+func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint64()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, v)
+	return b, nil
+}
+func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toUint64()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, v)
+	return b, nil
+}
+func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toUint64Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, *p)
+	return b, nil
+}
+func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint64Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, v)
+	}
+	return b, nil
+}
+func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toUint64Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	// compute size
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(v)
+	}
+	b = appendVarint(b, uint64(n))
+	for _, v := range s {
+		b = appendVarint(b, v)
+	}
+	return b, nil
+}
+func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt64()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v))
+	return b, nil
+}
+func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt64()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v))
+	return b, nil
+}
+func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toInt64Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(*p))
+	return b, nil
+}
+func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toInt64Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64(v))
+	}
+	return b, nil
+}
+func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toInt64Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	// compute size
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v))
+	}
+	b = appendVarint(b, uint64(n))
+	for _, v := range s {
+		b = appendVarint(b, uint64(v))
+	}
+	return b, nil
+}
+func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt32()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+	return b, nil
+}
+func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt32()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+	return b, nil
+}
+func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := ptr.getInt32Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	v := *p
+	b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+	return b, nil
+}
+func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := ptr.getInt32Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+	}
+	return b, nil
+}
+func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := ptr.getInt32Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	// compute size
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+	}
+	b = appendVarint(b, uint64(n))
+	for _, v := range s {
+		b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+	}
+	return b, nil
+}
+func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt64()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+	return b, nil
+}
+func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toInt64()
+	if v == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+	return b, nil
+}
+func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toInt64Ptr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	v := *p
+	b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+	return b, nil
+}
+func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toInt64Slice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+	}
+	return b, nil
+}
+func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toInt64Slice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	// compute size
+	n := 0
+	for _, v := range s {
+		n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+	}
+	b = appendVarint(b, uint64(n))
+	for _, v := range s {
+		b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+	}
+	return b, nil
+}
+func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toBool()
+	b = appendVarint(b, wiretag)
+	if v {
+		b = append(b, 1)
+	} else {
+		b = append(b, 0)
+	}
+	return b, nil
+}
+func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toBool()
+	if !v {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = append(b, 1)
+	return b, nil
+}
+
+func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toBoolPtr()
+	if p == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	if *p {
+		b = append(b, 1)
+	} else {
+		b = append(b, 0)
+	}
+	return b, nil
+}
+func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toBoolSlice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		if v {
+			b = append(b, 1)
+		} else {
+			b = append(b, 0)
+		}
+	}
+	return b, nil
+}
+func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toBoolSlice()
+	if len(s) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag&^7|WireBytes)
+	b = appendVarint(b, uint64(len(s)))
+	for _, v := range s {
+		if v {
+			b = append(b, 1)
+		} else {
+			b = append(b, 0)
+		}
+	}
+	return b, nil
+}
+func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toString()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	return b, nil
+}
+func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toString()
+	if v == "" {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	return b, nil
+}
+func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	p := *ptr.toStringPtr()
+	if p == nil {
+		return b, nil
+	}
+	v := *p
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	return b, nil
+}
+func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toStringSlice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64(len(v)))
+		b = append(b, v...)
+	}
+	return b, nil
+}
+func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	var invalidUTF8 bool
+	v := *ptr.toString()
+	if !utf8.ValidString(v) {
+		invalidUTF8 = true
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	if invalidUTF8 {
+		return b, errInvalidUTF8
+	}
+	return b, nil
+}
+func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	var invalidUTF8 bool
+	v := *ptr.toString()
+	if v == "" {
+		return b, nil
+	}
+	if !utf8.ValidString(v) {
+		invalidUTF8 = true
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	if invalidUTF8 {
+		return b, errInvalidUTF8
+	}
+	return b, nil
+}
+func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	var invalidUTF8 bool
+	p := *ptr.toStringPtr()
+	if p == nil {
+		return b, nil
+	}
+	v := *p
+	if !utf8.ValidString(v) {
+		invalidUTF8 = true
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	if invalidUTF8 {
+		return b, errInvalidUTF8
+	}
+	return b, nil
+}
+func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	var invalidUTF8 bool
+	s := *ptr.toStringSlice()
+	for _, v := range s {
+		if !utf8.ValidString(v) {
+			invalidUTF8 = true
+		}
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64(len(v)))
+		b = append(b, v...)
+	}
+	if invalidUTF8 {
+		return b, errInvalidUTF8
+	}
+	return b, nil
+}
+func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toBytes()
+	if v == nil {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	return b, nil
+}
+func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toBytes()
+	if len(v) == 0 {
+		return b, nil
+	}
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	return b, nil
+}
+func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	v := *ptr.toBytes()
+	b = appendVarint(b, wiretag)
+	b = appendVarint(b, uint64(len(v)))
+	b = append(b, v...)
+	return b, nil
+}
+func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+	s := *ptr.toBytesSlice()
+	for _, v := range s {
+		b = appendVarint(b, wiretag)
+		b = appendVarint(b, uint64(len(v)))
+		b = append(b, v...)
+	}
+	return b, nil
+}
+
+// makeGroupMarshaler returns the sizer and marshaler for a group.
+// u is the marshal info of the underlying message.
+func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {
+	return func(ptr pointer, tagsize int) int {
+			p := ptr.getPointer()
+			if p.isNil() {
+				return 0
+			}
+			return u.size(p) + 2*tagsize
+		},
+		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+			p := ptr.getPointer()
+			if p.isNil() {
+				return b, nil
+			}
+			var err error
+			b = appendVarint(b, wiretag) // start group
+			b, err = u.marshal(b, p, deterministic)
+			b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+			return b, err
+		}
+}
+
+// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice.
+// u is the marshal info of the underlying message.
+func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+	return func(ptr pointer, tagsize int) int {
+			s := ptr.getPointerSlice()
+			n := 0
+			for _, v := range s {
+				if v.isNil() {
+					continue
+				}
+				n += u.size(v) + 2*tagsize
+			}
+			return n
+		},
+		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+			s := ptr.getPointerSlice()
+			var err error
+			var nerr nonFatal
+			for _, v := range s {
+				if v.isNil() {
+					return b, errRepeatedHasNil
+				}
+				b = appendVarint(b, wiretag) // start group
+				b, err = u.marshal(b, v, deterministic)
+				b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+				if !nerr.Merge(err) {
+					if err == ErrNil {
+						err = errRepeatedHasNil
+					}
+					return b, err
+				}
+			}
+			return b, nerr.E
+		}
+}
+
+// makeMessageMarshaler returns the sizer and marshaler for a message field.
+// u is the marshal info of the message.
+func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {
+	return func(ptr pointer, tagsize int) int {
+			p := ptr.getPointer()
+			if p.isNil() {
+				return 0
+			}
+			siz := u.size(p)
+			return siz + SizeVarint(uint64(siz)) + tagsize
+		},
+		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+			p := ptr.getPointer()
+			if p.isNil() {
+				return b, nil
+			}
+			b = appendVarint(b, wiretag)
+			siz := u.cachedsize(p)
+			b = appendVarint(b, uint64(siz))
+			return u.marshal(b, p, deterministic)
+		}
+}
+
+// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice.
+// u is the marshal info of the message.
+func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+	return func(ptr pointer, tagsize int) int {
+			s := ptr.getPointerSlice()
+			n := 0
+			for _, v := range s {
+				if v.isNil() {
+					continue
+				}
+				siz := u.size(v)
+				n += siz + SizeVarint(uint64(siz)) + tagsize
+			}
+			return n
+		},
+		func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+			s := ptr.getPointerSlice()
+			var err error
+			var nerr nonFatal
+			for _, v := range s {
+				if v.isNil() {
+					return b, errRepeatedHasNil
+				}
+				b = appendVarint(b, wiretag)
+				siz := u.cachedsize(v)
+				b = appendVarint(b, uint64(siz))
+				b, err = u.marshal(b, v, deterministic)
+
+				if !nerr.Merge(err) {
+					if err == ErrNil {
+						err = errRepeatedHasNil
+					}
+					return b, err
+				}
+			}
+			return b, nerr.E
+		}
+}
+
+// makeMapMarshaler returns the sizer and marshaler for a map field.
+// f is the pointer to the reflect data structure of the field.
+func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
+	// figure out key and value type
+	t := f.Type
+	keyType := t.Key()
+	valType := t.Elem()
+	keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",")
+	valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
+	keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map
+	valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map
+	keyWireTag := 1<<3 | wiretype(keyTags[0])
+	valWireTag := 2<<3 | wiretype(valTags[0])
+
+	// We create an interface to get the addresses of the map key and value.
+	// If value is pointer-typed, the interface is a direct interface, the
+	// idata itself is the value. Otherwise, the idata is the pointer to the
+	// value.
+	// Key cannot be pointer-typed.
+	valIsPtr := valType.Kind() == reflect.Ptr
+
+	// If value is a message with nested maps, calling
+	// valSizer in marshal may be quadratic. We should use
+	// cached version in marshal (but not in size).
+	// If value is not message type, we don't have size cache,
+	// but it cannot be nested either. Just use valSizer.
+	valCachedSizer := valSizer
+	if valIsPtr && valType.Elem().Kind() == reflect.Struct {
+		u := getMarshalInfo(valType.Elem())
+		valCachedSizer = func(ptr pointer, tagsize int) int {
+			// Same as message sizer, but use cache.
+			p := ptr.getPointer()
+			if p.isNil() {
+				return 0
+			}
+			siz := u.cachedsize(p)
+			return siz + SizeVarint(uint64(siz)) + tagsize
+		}
+	}
+	return func(ptr pointer, tagsize int) int {
+			m := ptr.asPointerTo(t).Elem() // the map
+			n := 0
+			for _, k := range m.MapKeys() {
+				ki := k.Interface()
+				vi := m.MapIndex(k).Interface()
+				kaddr := toAddrPointer(&ki, false, false)      // pointer to key
+				vaddr := toAddrPointer(&vi, valIsPtr, false)   // pointer to value
+				siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+				n += siz + SizeVarint(uint64(siz)) + tagsize
+			}
+			return n
+		},
+		func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {
+			m := ptr.asPointerTo(t).Elem() // the map
+			var err error
+			keys := m.MapKeys()
+			if len(keys) > 1 && deterministic {
+				sort.Sort(mapKeys(keys))
+			}
+
+			var nerr nonFatal
+			for _, k := range keys {
+				ki := k.Interface()
+				vi := m.MapIndex(k).Interface()
+				kaddr := toAddrPointer(&ki, false, false)    // pointer to key
+				vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value
+				b = appendVarint(b, tag)
+				siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+				b = appendVarint(b, uint64(siz))
+				b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)
+				if !nerr.Merge(err) {
+					return b, err
+				}
+				b, err = valMarshaler(b, vaddr, valWireTag, deterministic)
+				if err != ErrNil && !nerr.Merge(err) { // allow nil value in map
+					return b, err
+				}
+			}
+			return b, nerr.E
+		}
+}
+
+// makeOneOfMarshaler returns the sizer and marshaler for a oneof field.
+// fi is the marshal info of the field.
+// f is the pointer to the reflect data structure of the field.
+func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {
+	// Oneof field is an interface. We need to get the actual data type on the fly.
+	t := f.Type
+	return func(ptr pointer, _ int) int {
+			p := ptr.getInterfacePointer()
+			if p.isNil() {
+				return 0
+			}
+			v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+			telem := v.Type()
+			e := fi.oneofElems[telem]
+			return e.sizer(p, e.tagsize)
+		},
+		func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {
+			p := ptr.getInterfacePointer()
+			if p.isNil() {
+				return b, nil
+			}
+			v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+			telem := v.Type()
+			if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {
+				return b, errOneofHasNil
+			}
+			e := fi.oneofElems[telem]
+			return e.marshaler(b, p, e.wiretag, deterministic)
+		}
+}
+
+// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field.
+func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
+	m, mu := ext.extensionsRead()
+	if m == nil {
+		return 0
+	}
+	mu.Lock()
+
+	n := 0
+	for _, e := range m {
+		if e.value == nil || e.desc == nil {
+			// Extension is only in its encoded form.
+			n += len(e.enc)
+			continue
+		}
+
+		// We don't skip extensions that have an encoded form set,
+		// because the extension value may have been mutated after
+		// the last time this function was called.
+		ei := u.getExtElemInfo(e.desc)
+		v := e.value
+		p := toAddrPointer(&v, ei.isptr, ei.deref)
+		n += ei.sizer(p, ei.tagsize)
+	}
+	mu.Unlock()
+	return n
+}
+
+// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b.
+func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+	m, mu := ext.extensionsRead()
+	if m == nil {
+		return b, nil
+	}
+	mu.Lock()
+	defer mu.Unlock()
+
+	var err error
+	var nerr nonFatal
+
+	// Fast-path for common cases: zero or one extensions.
+	// Don't bother sorting the keys.
+	if len(m) <= 1 {
+		for _, e := range m {
+			if e.value == nil || e.desc == nil {
+				// Extension is only in its encoded form.
+				b = append(b, e.enc...)
+				continue
+			}
+
+			// We don't skip extensions that have an encoded form set,
+			// because the extension value may have been mutated after
+			// the last time this function was called.
+
+			ei := u.getExtElemInfo(e.desc)
+			v := e.value
+			p := toAddrPointer(&v, ei.isptr, ei.deref)
+			b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+			if !nerr.Merge(err) {
+				return b, err
+			}
+		}
+		return b, nerr.E
+	}
+
+	// Sort the keys to provide a deterministic encoding.
+	// Not sure this is required, but the old code does it.
+	keys := make([]int, 0, len(m))
+	for k := range m {
+		keys = append(keys, int(k))
+	}
+	sort.Ints(keys)
+
+	for _, k := range keys {
+		e := m[int32(k)]
+		if e.value == nil || e.desc == nil {
+			// Extension is only in its encoded form.
+			b = append(b, e.enc...)
+			continue
+		}
+
+		// We don't skip extensions that have an encoded form set,
+		// because the extension value may have been mutated after
+		// the last time this function was called.
+
+		ei := u.getExtElemInfo(e.desc)
+		v := e.value
+		p := toAddrPointer(&v, ei.isptr, ei.deref)
+		b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+		if !nerr.Merge(err) {
+			return b, err
+		}
+	}
+	return b, nerr.E
+}
+
+// message set format is:
+//   message MessageSet {
+//     repeated group Item = 1 {
+//       required int32 type_id = 2;
+//       required string message = 3;
+//     };
+//   }
+
+// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field
+// in message set format (above).
+func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
+	m, mu := ext.extensionsRead()
+	if m == nil {
+		return 0
+	}
+	mu.Lock()
+
+	n := 0
+	for id, e := range m {
+		n += 2                          // start group, end group. tag = 1 (size=1)
+		n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1)
+
+		if e.value == nil || e.desc == nil {
+			// Extension is only in its encoded form.
+			msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+			siz := len(msgWithLen)
+			n += siz + 1 // message, tag = 3 (size=1)
+			continue
+		}
+
+		// We don't skip extensions that have an encoded form set,
+		// because the extension value may have been mutated after
+		// the last time this function was called.
+
+		ei := u.getExtElemInfo(e.desc)
+		v := e.value
+		p := toAddrPointer(&v, ei.isptr, ei.deref)
+		n += ei.sizer(p, 1) // message, tag = 3 (size=1)
+	}
+	mu.Unlock()
+	return n
+}
+
+// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above)
+// to the end of byte slice b.
+func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+	m, mu := ext.extensionsRead()
+	if m == nil {
+		return b, nil
+	}
+	mu.Lock()
+	defer mu.Unlock()
+
+	var err error
+	var nerr nonFatal
+
+	// Fast-path for common cases: zero or one extensions.
+	// Don't bother sorting the keys.
+	if len(m) <= 1 {
+		for id, e := range m {
+			b = append(b, 1<<3|WireStartGroup)
+			b = append(b, 2<<3|WireVarint)
+			b = appendVarint(b, uint64(id))
+
+			if e.value == nil || e.desc == nil {
+				// Extension is only in its encoded form.
+				msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+				b = append(b, 3<<3|WireBytes)
+				b = append(b, msgWithLen...)
+				b = append(b, 1<<3|WireEndGroup)
+				continue
+			}
+
+			// We don't skip extensions that have an encoded form set,
+			// because the extension value may have been mutated after
+			// the last time this function was called.
+
+			ei := u.getExtElemInfo(e.desc)
+			v := e.value
+			p := toAddrPointer(&v, ei.isptr, ei.deref)
+			b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+			if !nerr.Merge(err) {
+				return b, err
+			}
+			b = append(b, 1<<3|WireEndGroup)
+		}
+		return b, nerr.E
+	}
+
+	// Sort the keys to provide a deterministic encoding.
+	keys := make([]int, 0, len(m))
+	for k := range m {
+		keys = append(keys, int(k))
+	}
+	sort.Ints(keys)
+
+	for _, id := range keys {
+		e := m[int32(id)]
+		b = append(b, 1<<3|WireStartGroup)
+		b = append(b, 2<<3|WireVarint)
+		b = appendVarint(b, uint64(id))
+
+		if e.value == nil || e.desc == nil {
+			// Extension is only in its encoded form.
+			msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+			b = append(b, 3<<3|WireBytes)
+			b = append(b, msgWithLen...)
+			b = append(b, 1<<3|WireEndGroup)
+			continue
+		}
+
+		// We don't skip extensions that have an encoded form set,
+		// because the extension value may have been mutated after
+		// the last time this function was called.
+
+		ei := u.getExtElemInfo(e.desc)
+		v := e.value
+		p := toAddrPointer(&v, ei.isptr, ei.deref)
+		b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+		b = append(b, 1<<3|WireEndGroup)
+		if !nerr.Merge(err) {
+			return b, err
+		}
+	}
+	return b, nerr.E
+}
+
+// sizeV1Extensions computes the size of encoded data for a V1-API extension field.
+func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
+	if m == nil {
+		return 0
+	}
+
+	n := 0
+	for _, e := range m {
+		if e.value == nil || e.desc == nil {
+			// Extension is only in its encoded form.
+			n += len(e.enc)
+			continue
+		}
+
+		// We don't skip extensions that have an encoded form set,
+		// because the extension value may have been mutated after
+		// the last time this function was called.
+
+		ei := u.getExtElemInfo(e.desc)
+		v := e.value
+		p := toAddrPointer(&v, ei.isptr, ei.deref)
+		n += ei.sizer(p, ei.tagsize)
+	}
+	return n
+}
+
+// appendV1Extensions marshals a V1-API extension field to the end of byte slice b.
+func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {
+	if m == nil {
+		return b, nil
+	}
+
+	// Sort the keys to provide a deterministic encoding.
+	keys := make([]int, 0, len(m))
+	for k := range m {
+		keys = append(keys, int(k))
+	}
+	sort.Ints(keys)
+
+	var err error
+	var nerr nonFatal
+	for _, k := range keys {
+		e := m[int32(k)]
+		if e.value == nil || e.desc == nil {
+			// Extension is only in its encoded form.
+			b = append(b, e.enc...)
+			continue
+		}
+
+		// We don't skip extensions that have an encoded form set,
+		// because the extension value may have been mutated after
+		// the last time this function was called.
+
+		ei := u.getExtElemInfo(e.desc)
+		v := e.value
+		p := toAddrPointer(&v, ei.isptr, ei.deref)
+		b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+		if !nerr.Merge(err) {
+			return b, err
+		}
+	}
+	return b, nerr.E
+}
+
+// newMarshaler is the interface representing objects that can marshal themselves.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newMarshaler interface {
+	XXX_Size() int
+	XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
+}
+
+// Size returns the encoded size of a protocol buffer message.
+// This is the main entry point.
+func Size(pb Message) int {
+	if m, ok := pb.(newMarshaler); ok {
+		return m.XXX_Size()
+	}
+	if m, ok := pb.(Marshaler); ok {
+		// If the message can marshal itself, let it do it, for compatibility.
+		// NOTE: This is not efficient.
+		b, _ := m.Marshal()
+		return len(b)
+	}
+	// in case somehow we didn't generate the wrapper
+	if pb == nil {
+		return 0
+	}
+	var info InternalMessageInfo
+	return info.Size(pb)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, returning the data.
+// This is the main entry point.
+func Marshal(pb Message) ([]byte, error) {
+	if m, ok := pb.(newMarshaler); ok {
+		siz := m.XXX_Size()
+		b := make([]byte, 0, siz)
+		return m.XXX_Marshal(b, false)
+	}
+	if m, ok := pb.(Marshaler); ok {
+		// If the message can marshal itself, let it do it, for compatibility.
+		// NOTE: This is not efficient.
+		return m.Marshal()
+	}
+	// in case somehow we didn't generate the wrapper
+	if pb == nil {
+		return nil, ErrNil
+	}
+	var info InternalMessageInfo
+	siz := info.Size(pb)
+	b := make([]byte, 0, siz)
+	return info.Marshal(b, pb, false)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, writing the result to the
+// Buffer.
+// This is an alternative entry point. It is not necessary to use
+// a Buffer for most applications.
+func (p *Buffer) Marshal(pb Message) error {
+	var err error
+	if m, ok := pb.(newMarshaler); ok {
+		siz := m.XXX_Size()
+		p.grow(siz) // make sure buf has enough capacity
+		p.buf, err = m.XXX_Marshal(p.buf, p.deterministic)
+		return err
+	}
+	if m, ok := pb.(Marshaler); ok {
+		// If the message can marshal itself, let it do it, for compatibility.
+		// NOTE: This is not efficient.
+		b, err := m.Marshal()
+		p.buf = append(p.buf, b...)
+		return err
+	}
+	// in case somehow we didn't generate the wrapper
+	if pb == nil {
+		return ErrNil
+	}
+	var info InternalMessageInfo
+	siz := info.Size(pb)
+	p.grow(siz) // make sure buf has enough capacity
+	p.buf, err = info.Marshal(p.buf, pb, p.deterministic)
+	return err
+}
+
+// grow grows the buffer's capacity, if necessary, to guarantee space for
+// another n bytes. After grow(n), at least n bytes can be written to the
+// buffer without another allocation.
+func (p *Buffer) grow(n int) {
+	need := len(p.buf) + n
+	if need <= cap(p.buf) {
+		return
+	}
+	newCap := len(p.buf) * 2
+	if newCap < need {
+		newCap = need
+	}
+	p.buf = append(make([]byte, 0, newCap), p.buf...)
+}
diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go
new file mode 100644
index 0000000..5525def
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/table_merge.go
@@ -0,0 +1,654 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+	"fmt"
+	"reflect"
+	"strings"
+	"sync"
+	"sync/atomic"
+)
+
+// Merge merges the src message into dst.
+// This assumes that dst and src of the same type and are non-nil.
+func (a *InternalMessageInfo) Merge(dst, src Message) {
+	mi := atomicLoadMergeInfo(&a.merge)
+	if mi == nil {
+		mi = getMergeInfo(reflect.TypeOf(dst).Elem())
+		atomicStoreMergeInfo(&a.merge, mi)
+	}
+	mi.merge(toPointer(&dst), toPointer(&src))
+}
+
+type mergeInfo struct {
+	typ reflect.Type
+
+	initialized int32 // 0: only typ is valid, 1: everything is valid
+	lock        sync.Mutex
+
+	fields       []mergeFieldInfo
+	unrecognized field // Offset of XXX_unrecognized
+}
+
+type mergeFieldInfo struct {
+	field field // Offset of field, guaranteed to be valid
+
+	// isPointer reports whether the value in the field is a pointer.
+	// This is true for the following situations:
+	//	* Pointer to struct
+	//	* Pointer to basic type (proto2 only)
+	//	* Slice (first value in slice header is a pointer)
+	//	* String (first value in string header is a pointer)
+	isPointer bool
+
+	// basicWidth reports the width of the field assuming that it is directly
+	// embedded in the struct (as is the case for basic types in proto3).
+	// The possible values are:
+	// 	0: invalid
+	//	1: bool
+	//	4: int32, uint32, float32
+	//	8: int64, uint64, float64
+	basicWidth int
+
+	// Where dst and src are pointers to the types being merged.
+	merge func(dst, src pointer)
+}
+
+var (
+	mergeInfoMap  = map[reflect.Type]*mergeInfo{}
+	mergeInfoLock sync.Mutex
+)
+
+func getMergeInfo(t reflect.Type) *mergeInfo {
+	mergeInfoLock.Lock()
+	defer mergeInfoLock.Unlock()
+	mi := mergeInfoMap[t]
+	if mi == nil {
+		mi = &mergeInfo{typ: t}
+		mergeInfoMap[t] = mi
+	}
+	return mi
+}
+
+// merge merges src into dst assuming they are both of type *mi.typ.
+func (mi *mergeInfo) merge(dst, src pointer) {
+	if dst.isNil() {
+		panic("proto: nil destination")
+	}
+	if src.isNil() {
+		return // Nothing to do.
+	}
+
+	if atomic.LoadInt32(&mi.initialized) == 0 {
+		mi.computeMergeInfo()
+	}
+
+	for _, fi := range mi.fields {
+		sfp := src.offset(fi.field)
+
+		// As an optimization, we can avoid the merge function call cost
+		// if we know for sure that the source will have no effect
+		// by checking if it is the zero value.
+		if unsafeAllowed {
+			if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string
+				continue
+			}
+			if fi.basicWidth > 0 {
+				switch {
+				case fi.basicWidth == 1 && !*sfp.toBool():
+					continue
+				case fi.basicWidth == 4 && *sfp.toUint32() == 0:
+					continue
+				case fi.basicWidth == 8 && *sfp.toUint64() == 0:
+					continue
+				}
+			}
+		}
+
+		dfp := dst.offset(fi.field)
+		fi.merge(dfp, sfp)
+	}
+
+	// TODO: Make this faster?
+	out := dst.asPointerTo(mi.typ).Elem()
+	in := src.asPointerTo(mi.typ).Elem()
+	if emIn, err := extendable(in.Addr().Interface()); err == nil {
+		emOut, _ := extendable(out.Addr().Interface())
+		mIn, muIn := emIn.extensionsRead()
+		if mIn != nil {
+			mOut := emOut.extensionsWrite()
+			muIn.Lock()
+			mergeExtension(mOut, mIn)
+			muIn.Unlock()
+		}
+	}
+
+	if mi.unrecognized.IsValid() {
+		if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 {
+			*dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...)
+		}
+	}
+}
+
+func (mi *mergeInfo) computeMergeInfo() {
+	mi.lock.Lock()
+	defer mi.lock.Unlock()
+	if mi.initialized != 0 {
+		return
+	}
+	t := mi.typ
+	n := t.NumField()
+
+	props := GetProperties(t)
+	for i := 0; i < n; i++ {
+		f := t.Field(i)
+		if strings.HasPrefix(f.Name, "XXX_") {
+			continue
+		}
+
+		mfi := mergeFieldInfo{field: toField(&f)}
+		tf := f.Type
+
+		// As an optimization, we can avoid the merge function call cost
+		// if we know for sure that the source will have no effect
+		// by checking if it is the zero value.
+		if unsafeAllowed {
+			switch tf.Kind() {
+			case reflect.Ptr, reflect.Slice, reflect.String:
+				// As a special case, we assume slices and strings are pointers
+				// since we know that the first field in the SliceSlice or
+				// StringHeader is a data pointer.
+				mfi.isPointer = true
+			case reflect.Bool:
+				mfi.basicWidth = 1
+			case reflect.Int32, reflect.Uint32, reflect.Float32:
+				mfi.basicWidth = 4
+			case reflect.Int64, reflect.Uint64, reflect.Float64:
+				mfi.basicWidth = 8
+			}
+		}
+
+		// Unwrap tf to get at its most basic type.
+		var isPointer, isSlice bool
+		if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+			isSlice = true
+			tf = tf.Elem()
+		}
+		if tf.Kind() == reflect.Ptr {
+			isPointer = true
+			tf = tf.Elem()
+		}
+		if isPointer && isSlice && tf.Kind() != reflect.Struct {
+			panic("both pointer and slice for basic type in " + tf.Name())
+		}
+
+		switch tf.Kind() {
+		case reflect.Int32:
+			switch {
+			case isSlice: // E.g., []int32
+				mfi.merge = func(dst, src pointer) {
+					// NOTE: toInt32Slice is not defined (see pointer_reflect.go).
+					/*
+						sfsp := src.toInt32Slice()
+						if *sfsp != nil {
+							dfsp := dst.toInt32Slice()
+							*dfsp = append(*dfsp, *sfsp...)
+							if *dfsp == nil {
+								*dfsp = []int64{}
+							}
+						}
+					*/
+					sfs := src.getInt32Slice()
+					if sfs != nil {
+						dfs := dst.getInt32Slice()
+						dfs = append(dfs, sfs...)
+						if dfs == nil {
+							dfs = []int32{}
+						}
+						dst.setInt32Slice(dfs)
+					}
+				}
+			case isPointer: // E.g., *int32
+				mfi.merge = func(dst, src pointer) {
+					// NOTE: toInt32Ptr is not defined (see pointer_reflect.go).
+					/*
+						sfpp := src.toInt32Ptr()
+						if *sfpp != nil {
+							dfpp := dst.toInt32Ptr()
+							if *dfpp == nil {
+								*dfpp = Int32(**sfpp)
+							} else {
+								**dfpp = **sfpp
+							}
+						}
+					*/
+					sfp := src.getInt32Ptr()
+					if sfp != nil {
+						dfp := dst.getInt32Ptr()
+						if dfp == nil {
+							dst.setInt32Ptr(*sfp)
+						} else {
+							*dfp = *sfp
+						}
+					}
+				}
+			default: // E.g., int32
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toInt32(); v != 0 {
+						*dst.toInt32() = v
+					}
+				}
+			}
+		case reflect.Int64:
+			switch {
+			case isSlice: // E.g., []int64
+				mfi.merge = func(dst, src pointer) {
+					sfsp := src.toInt64Slice()
+					if *sfsp != nil {
+						dfsp := dst.toInt64Slice()
+						*dfsp = append(*dfsp, *sfsp...)
+						if *dfsp == nil {
+							*dfsp = []int64{}
+						}
+					}
+				}
+			case isPointer: // E.g., *int64
+				mfi.merge = func(dst, src pointer) {
+					sfpp := src.toInt64Ptr()
+					if *sfpp != nil {
+						dfpp := dst.toInt64Ptr()
+						if *dfpp == nil {
+							*dfpp = Int64(**sfpp)
+						} else {
+							**dfpp = **sfpp
+						}
+					}
+				}
+			default: // E.g., int64
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toInt64(); v != 0 {
+						*dst.toInt64() = v
+					}
+				}
+			}
+		case reflect.Uint32:
+			switch {
+			case isSlice: // E.g., []uint32
+				mfi.merge = func(dst, src pointer) {
+					sfsp := src.toUint32Slice()
+					if *sfsp != nil {
+						dfsp := dst.toUint32Slice()
+						*dfsp = append(*dfsp, *sfsp...)
+						if *dfsp == nil {
+							*dfsp = []uint32{}
+						}
+					}
+				}
+			case isPointer: // E.g., *uint32
+				mfi.merge = func(dst, src pointer) {
+					sfpp := src.toUint32Ptr()
+					if *sfpp != nil {
+						dfpp := dst.toUint32Ptr()
+						if *dfpp == nil {
+							*dfpp = Uint32(**sfpp)
+						} else {
+							**dfpp = **sfpp
+						}
+					}
+				}
+			default: // E.g., uint32
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toUint32(); v != 0 {
+						*dst.toUint32() = v
+					}
+				}
+			}
+		case reflect.Uint64:
+			switch {
+			case isSlice: // E.g., []uint64
+				mfi.merge = func(dst, src pointer) {
+					sfsp := src.toUint64Slice()
+					if *sfsp != nil {
+						dfsp := dst.toUint64Slice()
+						*dfsp = append(*dfsp, *sfsp...)
+						if *dfsp == nil {
+							*dfsp = []uint64{}
+						}
+					}
+				}
+			case isPointer: // E.g., *uint64
+				mfi.merge = func(dst, src pointer) {
+					sfpp := src.toUint64Ptr()
+					if *sfpp != nil {
+						dfpp := dst.toUint64Ptr()
+						if *dfpp == nil {
+							*dfpp = Uint64(**sfpp)
+						} else {
+							**dfpp = **sfpp
+						}
+					}
+				}
+			default: // E.g., uint64
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toUint64(); v != 0 {
+						*dst.toUint64() = v
+					}
+				}
+			}
+		case reflect.Float32:
+			switch {
+			case isSlice: // E.g., []float32
+				mfi.merge = func(dst, src pointer) {
+					sfsp := src.toFloat32Slice()
+					if *sfsp != nil {
+						dfsp := dst.toFloat32Slice()
+						*dfsp = append(*dfsp, *sfsp...)
+						if *dfsp == nil {
+							*dfsp = []float32{}
+						}
+					}
+				}
+			case isPointer: // E.g., *float32
+				mfi.merge = func(dst, src pointer) {
+					sfpp := src.toFloat32Ptr()
+					if *sfpp != nil {
+						dfpp := dst.toFloat32Ptr()
+						if *dfpp == nil {
+							*dfpp = Float32(**sfpp)
+						} else {
+							**dfpp = **sfpp
+						}
+					}
+				}
+			default: // E.g., float32
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toFloat32(); v != 0 {
+						*dst.toFloat32() = v
+					}
+				}
+			}
+		case reflect.Float64:
+			switch {
+			case isSlice: // E.g., []float64
+				mfi.merge = func(dst, src pointer) {
+					sfsp := src.toFloat64Slice()
+					if *sfsp != nil {
+						dfsp := dst.toFloat64Slice()
+						*dfsp = append(*dfsp, *sfsp...)
+						if *dfsp == nil {
+							*dfsp = []float64{}
+						}
+					}
+				}
+			case isPointer: // E.g., *float64
+				mfi.merge = func(dst, src pointer) {
+					sfpp := src.toFloat64Ptr()
+					if *sfpp != nil {
+						dfpp := dst.toFloat64Ptr()
+						if *dfpp == nil {
+							*dfpp = Float64(**sfpp)
+						} else {
+							**dfpp = **sfpp
+						}
+					}
+				}
+			default: // E.g., float64
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toFloat64(); v != 0 {
+						*dst.toFloat64() = v
+					}
+				}
+			}
+		case reflect.Bool:
+			switch {
+			case isSlice: // E.g., []bool
+				mfi.merge = func(dst, src pointer) {
+					sfsp := src.toBoolSlice()
+					if *sfsp != nil {
+						dfsp := dst.toBoolSlice()
+						*dfsp = append(*dfsp, *sfsp...)
+						if *dfsp == nil {
+							*dfsp = []bool{}
+						}
+					}
+				}
+			case isPointer: // E.g., *bool
+				mfi.merge = func(dst, src pointer) {
+					sfpp := src.toBoolPtr()
+					if *sfpp != nil {
+						dfpp := dst.toBoolPtr()
+						if *dfpp == nil {
+							*dfpp = Bool(**sfpp)
+						} else {
+							**dfpp = **sfpp
+						}
+					}
+				}
+			default: // E.g., bool
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toBool(); v {
+						*dst.toBool() = v
+					}
+				}
+			}
+		case reflect.String:
+			switch {
+			case isSlice: // E.g., []string
+				mfi.merge = func(dst, src pointer) {
+					sfsp := src.toStringSlice()
+					if *sfsp != nil {
+						dfsp := dst.toStringSlice()
+						*dfsp = append(*dfsp, *sfsp...)
+						if *dfsp == nil {
+							*dfsp = []string{}
+						}
+					}
+				}
+			case isPointer: // E.g., *string
+				mfi.merge = func(dst, src pointer) {
+					sfpp := src.toStringPtr()
+					if *sfpp != nil {
+						dfpp := dst.toStringPtr()
+						if *dfpp == nil {
+							*dfpp = String(**sfpp)
+						} else {
+							**dfpp = **sfpp
+						}
+					}
+				}
+			default: // E.g., string
+				mfi.merge = func(dst, src pointer) {
+					if v := *src.toString(); v != "" {
+						*dst.toString() = v
+					}
+				}
+			}
+		case reflect.Slice:
+			isProto3 := props.Prop[i].proto3
+			switch {
+			case isPointer:
+				panic("bad pointer in byte slice case in " + tf.Name())
+			case tf.Elem().Kind() != reflect.Uint8:
+				panic("bad element kind in byte slice case in " + tf.Name())
+			case isSlice: // E.g., [][]byte
+				mfi.merge = func(dst, src pointer) {
+					sbsp := src.toBytesSlice()
+					if *sbsp != nil {
+						dbsp := dst.toBytesSlice()
+						for _, sb := range *sbsp {
+							if sb == nil {
+								*dbsp = append(*dbsp, nil)
+							} else {
+								*dbsp = append(*dbsp, append([]byte{}, sb...))
+							}
+						}
+						if *dbsp == nil {
+							*dbsp = [][]byte{}
+						}
+					}
+				}
+			default: // E.g., []byte
+				mfi.merge = func(dst, src pointer) {
+					sbp := src.toBytes()
+					if *sbp != nil {
+						dbp := dst.toBytes()
+						if !isProto3 || len(*sbp) > 0 {
+							*dbp = append([]byte{}, *sbp...)
+						}
+					}
+				}
+			}
+		case reflect.Struct:
+			switch {
+			case !isPointer:
+				panic(fmt.Sprintf("message field %s without pointer", tf))
+			case isSlice: // E.g., []*pb.T
+				mi := getMergeInfo(tf)
+				mfi.merge = func(dst, src pointer) {
+					sps := src.getPointerSlice()
+					if sps != nil {
+						dps := dst.getPointerSlice()
+						for _, sp := range sps {
+							var dp pointer
+							if !sp.isNil() {
+								dp = valToPointer(reflect.New(tf))
+								mi.merge(dp, sp)
+							}
+							dps = append(dps, dp)
+						}
+						if dps == nil {
+							dps = []pointer{}
+						}
+						dst.setPointerSlice(dps)
+					}
+				}
+			default: // E.g., *pb.T
+				mi := getMergeInfo(tf)
+				mfi.merge = func(dst, src pointer) {
+					sp := src.getPointer()
+					if !sp.isNil() {
+						dp := dst.getPointer()
+						if dp.isNil() {
+							dp = valToPointer(reflect.New(tf))
+							dst.setPointer(dp)
+						}
+						mi.merge(dp, sp)
+					}
+				}
+			}
+		case reflect.Map:
+			switch {
+			case isPointer || isSlice:
+				panic("bad pointer or slice in map case in " + tf.Name())
+			default: // E.g., map[K]V
+				mfi.merge = func(dst, src pointer) {
+					sm := src.asPointerTo(tf).Elem()
+					if sm.Len() == 0 {
+						return
+					}
+					dm := dst.asPointerTo(tf).Elem()
+					if dm.IsNil() {
+						dm.Set(reflect.MakeMap(tf))
+					}
+
+					switch tf.Elem().Kind() {
+					case reflect.Ptr: // Proto struct (e.g., *T)
+						for _, key := range sm.MapKeys() {
+							val := sm.MapIndex(key)
+							val = reflect.ValueOf(Clone(val.Interface().(Message)))
+							dm.SetMapIndex(key, val)
+						}
+					case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+						for _, key := range sm.MapKeys() {
+							val := sm.MapIndex(key)
+							val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
+							dm.SetMapIndex(key, val)
+						}
+					default: // Basic type (e.g., string)
+						for _, key := range sm.MapKeys() {
+							val := sm.MapIndex(key)
+							dm.SetMapIndex(key, val)
+						}
+					}
+				}
+			}
+		case reflect.Interface:
+			// Must be oneof field.
+			switch {
+			case isPointer || isSlice:
+				panic("bad pointer or slice in interface case in " + tf.Name())
+			default: // E.g., interface{}
+				// TODO: Make this faster?
+				mfi.merge = func(dst, src pointer) {
+					su := src.asPointerTo(tf).Elem()
+					if !su.IsNil() {
+						du := dst.asPointerTo(tf).Elem()
+						typ := su.Elem().Type()
+						if du.IsNil() || du.Elem().Type() != typ {
+							du.Set(reflect.New(typ.Elem())) // Initialize interface if empty
+						}
+						sv := su.Elem().Elem().Field(0)
+						if sv.Kind() == reflect.Ptr && sv.IsNil() {
+							return
+						}
+						dv := du.Elem().Elem().Field(0)
+						if dv.Kind() == reflect.Ptr && dv.IsNil() {
+							dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty
+						}
+						switch sv.Type().Kind() {
+						case reflect.Ptr: // Proto struct (e.g., *T)
+							Merge(dv.Interface().(Message), sv.Interface().(Message))
+						case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+							dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...)))
+						default: // Basic type (e.g., string)
+							dv.Set(sv)
+						}
+					}
+				}
+			}
+		default:
+			panic(fmt.Sprintf("merger not found for type:%s", tf))
+		}
+		mi.fields = append(mi.fields, mfi)
+	}
+
+	mi.unrecognized = invalidField
+	if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+		if f.Type != reflect.TypeOf([]byte{}) {
+			panic("expected XXX_unrecognized to be of type []byte")
+		}
+		mi.unrecognized = toField(&f)
+	}
+
+	atomic.StoreInt32(&mi.initialized, 1)
+}
diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go
new file mode 100644
index 0000000..acee2fc
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go
@@ -0,0 +1,2053 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+import (
+	"errors"
+	"fmt"
+	"io"
+	"math"
+	"reflect"
+	"strconv"
+	"strings"
+	"sync"
+	"sync/atomic"
+	"unicode/utf8"
+)
+
+// Unmarshal is the entry point from the generated .pb.go files.
+// This function is not intended to be used by non-generated code.
+// This function is not subject to any compatibility guarantee.
+// msg contains a pointer to a protocol buffer struct.
+// b is the data to be unmarshaled into the protocol buffer.
+// a is a pointer to a place to store cached unmarshal information.
+func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {
+	// Load the unmarshal information for this message type.
+	// The atomic load ensures memory consistency.
+	u := atomicLoadUnmarshalInfo(&a.unmarshal)
+	if u == nil {
+		// Slow path: find unmarshal info for msg, update a with it.
+		u = getUnmarshalInfo(reflect.TypeOf(msg).Elem())
+		atomicStoreUnmarshalInfo(&a.unmarshal, u)
+	}
+	// Then do the unmarshaling.
+	err := u.unmarshal(toPointer(&msg), b)
+	return err
+}
+
+type unmarshalInfo struct {
+	typ reflect.Type // type of the protobuf struct
+
+	// 0 = only typ field is initialized
+	// 1 = completely initialized
+	initialized     int32
+	lock            sync.Mutex                    // prevents double initialization
+	dense           []unmarshalFieldInfo          // fields indexed by tag #
+	sparse          map[uint64]unmarshalFieldInfo // fields indexed by tag #
+	reqFields       []string                      // names of required fields
+	reqMask         uint64                        // 1<<len(reqFields)-1
+	unrecognized    field                         // offset of []byte to put unrecognized data (or invalidField if we should throw it away)
+	extensions      field                         // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist
+	oldExtensions   field                         // offset of old-form extensions field (of type map[int]Extension)
+	extensionRanges []ExtensionRange              // if non-nil, implies extensions field is valid
+	isMessageSet    bool                          // if true, implies extensions field is valid
+}
+
+// An unmarshaler takes a stream of bytes and a pointer to a field of a message.
+// It decodes the field, stores it at f, and returns the unused bytes.
+// w is the wire encoding.
+// b is the data after the tag and wire encoding have been read.
+type unmarshaler func(b []byte, f pointer, w int) ([]byte, error)
+
+type unmarshalFieldInfo struct {
+	// location of the field in the proto message structure.
+	field field
+
+	// function to unmarshal the data for the field.
+	unmarshal unmarshaler
+
+	// if a required field, contains a single set bit at this field's index in the required field list.
+	reqMask uint64
+
+	name string // name of the field, for error reporting
+}
+
+var (
+	unmarshalInfoMap  = map[reflect.Type]*unmarshalInfo{}
+	unmarshalInfoLock sync.Mutex
+)
+
+// getUnmarshalInfo returns the data structure which can be
+// subsequently used to unmarshal a message of the given type.
+// t is the type of the message (note: not pointer to message).
+func getUnmarshalInfo(t reflect.Type) *unmarshalInfo {
+	// It would be correct to return a new unmarshalInfo
+	// unconditionally. We would end up allocating one
+	// per occurrence of that type as a message or submessage.
+	// We use a cache here just to reduce memory usage.
+	unmarshalInfoLock.Lock()
+	defer unmarshalInfoLock.Unlock()
+	u := unmarshalInfoMap[t]
+	if u == nil {
+		u = &unmarshalInfo{typ: t}
+		// Note: we just set the type here. The rest of the fields
+		// will be initialized on first use.
+		unmarshalInfoMap[t] = u
+	}
+	return u
+}
+
+// unmarshal does the main work of unmarshaling a message.
+// u provides type information used to unmarshal the message.
+// m is a pointer to a protocol buffer message.
+// b is a byte stream to unmarshal into m.
+// This is top routine used when recursively unmarshaling submessages.
+func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
+	if atomic.LoadInt32(&u.initialized) == 0 {
+		u.computeUnmarshalInfo()
+	}
+	if u.isMessageSet {
+		return unmarshalMessageSet(b, m.offset(u.extensions).toExtensions())
+	}
+	var reqMask uint64 // bitmask of required fields we've seen.
+	var errLater error
+	for len(b) > 0 {
+		// Read tag and wire type.
+		// Special case 1 and 2 byte varints.
+		var x uint64
+		if b[0] < 128 {
+			x = uint64(b[0])
+			b = b[1:]
+		} else if len(b) >= 2 && b[1] < 128 {
+			x = uint64(b[0]&0x7f) + uint64(b[1])<<7
+			b = b[2:]
+		} else {
+			var n int
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return io.ErrUnexpectedEOF
+			}
+			b = b[n:]
+		}
+		tag := x >> 3
+		wire := int(x) & 7
+
+		// Dispatch on the tag to one of the unmarshal* functions below.
+		var f unmarshalFieldInfo
+		if tag < uint64(len(u.dense)) {
+			f = u.dense[tag]
+		} else {
+			f = u.sparse[tag]
+		}
+		if fn := f.unmarshal; fn != nil {
+			var err error
+			b, err = fn(b, m.offset(f.field), wire)
+			if err == nil {
+				reqMask |= f.reqMask
+				continue
+			}
+			if r, ok := err.(*RequiredNotSetError); ok {
+				// Remember this error, but keep parsing. We need to produce
+				// a full parse even if a required field is missing.
+				if errLater == nil {
+					errLater = r
+				}
+				reqMask |= f.reqMask
+				continue
+			}
+			if err != errInternalBadWireType {
+				if err == errInvalidUTF8 {
+					if errLater == nil {
+						fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
+						errLater = &invalidUTF8Error{fullName}
+					}
+					continue
+				}
+				return err
+			}
+			// Fragments with bad wire type are treated as unknown fields.
+		}
+
+		// Unknown tag.
+		if !u.unrecognized.IsValid() {
+			// Don't keep unrecognized data; just skip it.
+			var err error
+			b, err = skipField(b, wire)
+			if err != nil {
+				return err
+			}
+			continue
+		}
+		// Keep unrecognized data around.
+		// maybe in extensions, maybe in the unrecognized field.
+		z := m.offset(u.unrecognized).toBytes()
+		var emap map[int32]Extension
+		var e Extension
+		for _, r := range u.extensionRanges {
+			if uint64(r.Start) <= tag && tag <= uint64(r.End) {
+				if u.extensions.IsValid() {
+					mp := m.offset(u.extensions).toExtensions()
+					emap = mp.extensionsWrite()
+					e = emap[int32(tag)]
+					z = &e.enc
+					break
+				}
+				if u.oldExtensions.IsValid() {
+					p := m.offset(u.oldExtensions).toOldExtensions()
+					emap = *p
+					if emap == nil {
+						emap = map[int32]Extension{}
+						*p = emap
+					}
+					e = emap[int32(tag)]
+					z = &e.enc
+					break
+				}
+				panic("no extensions field available")
+			}
+		}
+
+		// Use wire type to skip data.
+		var err error
+		b0 := b
+		b, err = skipField(b, wire)
+		if err != nil {
+			return err
+		}
+		*z = encodeVarint(*z, tag<<3|uint64(wire))
+		*z = append(*z, b0[:len(b0)-len(b)]...)
+
+		if emap != nil {
+			emap[int32(tag)] = e
+		}
+	}
+	if reqMask != u.reqMask && errLater == nil {
+		// A required field of this message is missing.
+		for _, n := range u.reqFields {
+			if reqMask&1 == 0 {
+				errLater = &RequiredNotSetError{n}
+			}
+			reqMask >>= 1
+		}
+	}
+	return errLater
+}
+
+// computeUnmarshalInfo fills in u with information for use
+// in unmarshaling protocol buffers of type u.typ.
+func (u *unmarshalInfo) computeUnmarshalInfo() {
+	u.lock.Lock()
+	defer u.lock.Unlock()
+	if u.initialized != 0 {
+		return
+	}
+	t := u.typ
+	n := t.NumField()
+
+	// Set up the "not found" value for the unrecognized byte buffer.
+	// This is the default for proto3.
+	u.unrecognized = invalidField
+	u.extensions = invalidField
+	u.oldExtensions = invalidField
+
+	// List of the generated type and offset for each oneof field.
+	type oneofField struct {
+		ityp  reflect.Type // interface type of oneof field
+		field field        // offset in containing message
+	}
+	var oneofFields []oneofField
+
+	for i := 0; i < n; i++ {
+		f := t.Field(i)
+		if f.Name == "XXX_unrecognized" {
+			// The byte slice used to hold unrecognized input is special.
+			if f.Type != reflect.TypeOf(([]byte)(nil)) {
+				panic("bad type for XXX_unrecognized field: " + f.Type.Name())
+			}
+			u.unrecognized = toField(&f)
+			continue
+		}
+		if f.Name == "XXX_InternalExtensions" {
+			// Ditto here.
+			if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) {
+				panic("bad type for XXX_InternalExtensions field: " + f.Type.Name())
+			}
+			u.extensions = toField(&f)
+			if f.Tag.Get("protobuf_messageset") == "1" {
+				u.isMessageSet = true
+			}
+			continue
+		}
+		if f.Name == "XXX_extensions" {
+			// An older form of the extensions field.
+			if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) {
+				panic("bad type for XXX_extensions field: " + f.Type.Name())
+			}
+			u.oldExtensions = toField(&f)
+			continue
+		}
+		if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" {
+			continue
+		}
+
+		oneof := f.Tag.Get("protobuf_oneof")
+		if oneof != "" {
+			oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)})
+			// The rest of oneof processing happens below.
+			continue
+		}
+
+		tags := f.Tag.Get("protobuf")
+		tagArray := strings.Split(tags, ",")
+		if len(tagArray) < 2 {
+			panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags)
+		}
+		tag, err := strconv.Atoi(tagArray[1])
+		if err != nil {
+			panic("protobuf tag field not an integer: " + tagArray[1])
+		}
+
+		name := ""
+		for _, tag := range tagArray[3:] {
+			if strings.HasPrefix(tag, "name=") {
+				name = tag[5:]
+			}
+		}
+
+		// Extract unmarshaling function from the field (its type and tags).
+		unmarshal := fieldUnmarshaler(&f)
+
+		// Required field?
+		var reqMask uint64
+		if tagArray[2] == "req" {
+			bit := len(u.reqFields)
+			u.reqFields = append(u.reqFields, name)
+			reqMask = uint64(1) << uint(bit)
+			// TODO: if we have more than 64 required fields, we end up
+			// not verifying that all required fields are present.
+			// Fix this, perhaps using a count of required fields?
+		}
+
+		// Store the info in the correct slot in the message.
+		u.setTag(tag, toField(&f), unmarshal, reqMask, name)
+	}
+
+	// Find any types associated with oneof fields.
+	var oneofImplementers []interface{}
+	switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {
+	case oneofFuncsIface:
+		_, _, _, oneofImplementers = m.XXX_OneofFuncs()
+	case oneofWrappersIface:
+		oneofImplementers = m.XXX_OneofWrappers()
+	}
+	for _, v := range oneofImplementers {
+		tptr := reflect.TypeOf(v) // *Msg_X
+		typ := tptr.Elem()        // Msg_X
+
+		f := typ.Field(0) // oneof implementers have one field
+		baseUnmarshal := fieldUnmarshaler(&f)
+		tags := strings.Split(f.Tag.Get("protobuf"), ",")
+		fieldNum, err := strconv.Atoi(tags[1])
+		if err != nil {
+			panic("protobuf tag field not an integer: " + tags[1])
+		}
+		var name string
+		for _, tag := range tags {
+			if strings.HasPrefix(tag, "name=") {
+				name = strings.TrimPrefix(tag, "name=")
+				break
+			}
+		}
+
+		// Find the oneof field that this struct implements.
+		// Might take O(n^2) to process all of the oneofs, but who cares.
+		for _, of := range oneofFields {
+			if tptr.Implements(of.ityp) {
+				// We have found the corresponding interface for this struct.
+				// That lets us know where this struct should be stored
+				// when we encounter it during unmarshaling.
+				unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)
+				u.setTag(fieldNum, of.field, unmarshal, 0, name)
+			}
+		}
+
+	}
+
+	// Get extension ranges, if any.
+	fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
+	if fn.IsValid() {
+		if !u.extensions.IsValid() && !u.oldExtensions.IsValid() {
+			panic("a message with extensions, but no extensions field in " + t.Name())
+		}
+		u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange)
+	}
+
+	// Explicitly disallow tag 0. This will ensure we flag an error
+	// when decoding a buffer of all zeros. Without this code, we
+	// would decode and skip an all-zero buffer of even length.
+	// [0 0] is [tag=0/wiretype=varint varint-encoded-0].
+	u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) {
+		return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w)
+	}, 0, "")
+
+	// Set mask for required field check.
+	u.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1
+
+	atomic.StoreInt32(&u.initialized, 1)
+}
+
+// setTag stores the unmarshal information for the given tag.
+// tag = tag # for field
+// field/unmarshal = unmarshal info for that field.
+// reqMask = if required, bitmask for field position in required field list. 0 otherwise.
+// name = short name of the field.
+func (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64, name string) {
+	i := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask, name: name}
+	n := u.typ.NumField()
+	if tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here?
+		for len(u.dense) <= tag {
+			u.dense = append(u.dense, unmarshalFieldInfo{})
+		}
+		u.dense[tag] = i
+		return
+	}
+	if u.sparse == nil {
+		u.sparse = map[uint64]unmarshalFieldInfo{}
+	}
+	u.sparse[uint64(tag)] = i
+}
+
+// fieldUnmarshaler returns an unmarshaler for the given field.
+func fieldUnmarshaler(f *reflect.StructField) unmarshaler {
+	if f.Type.Kind() == reflect.Map {
+		return makeUnmarshalMap(f)
+	}
+	return typeUnmarshaler(f.Type, f.Tag.Get("protobuf"))
+}
+
+// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair.
+func typeUnmarshaler(t reflect.Type, tags string) unmarshaler {
+	tagArray := strings.Split(tags, ",")
+	encoding := tagArray[0]
+	name := "unknown"
+	proto3 := false
+	validateUTF8 := true
+	for _, tag := range tagArray[3:] {
+		if strings.HasPrefix(tag, "name=") {
+			name = tag[5:]
+		}
+		if tag == "proto3" {
+			proto3 = true
+		}
+	}
+	validateUTF8 = validateUTF8 && proto3
+
+	// Figure out packaging (pointer, slice, or both)
+	slice := false
+	pointer := false
+	if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+		slice = true
+		t = t.Elem()
+	}
+	if t.Kind() == reflect.Ptr {
+		pointer = true
+		t = t.Elem()
+	}
+
+	// We'll never have both pointer and slice for basic types.
+	if pointer && slice && t.Kind() != reflect.Struct {
+		panic("both pointer and slice for basic type in " + t.Name())
+	}
+
+	switch t.Kind() {
+	case reflect.Bool:
+		if pointer {
+			return unmarshalBoolPtr
+		}
+		if slice {
+			return unmarshalBoolSlice
+		}
+		return unmarshalBoolValue
+	case reflect.Int32:
+		switch encoding {
+		case "fixed32":
+			if pointer {
+				return unmarshalFixedS32Ptr
+			}
+			if slice {
+				return unmarshalFixedS32Slice
+			}
+			return unmarshalFixedS32Value
+		case "varint":
+			// this could be int32 or enum
+			if pointer {
+				return unmarshalInt32Ptr
+			}
+			if slice {
+				return unmarshalInt32Slice
+			}
+			return unmarshalInt32Value
+		case "zigzag32":
+			if pointer {
+				return unmarshalSint32Ptr
+			}
+			if slice {
+				return unmarshalSint32Slice
+			}
+			return unmarshalSint32Value
+		}
+	case reflect.Int64:
+		switch encoding {
+		case "fixed64":
+			if pointer {
+				return unmarshalFixedS64Ptr
+			}
+			if slice {
+				return unmarshalFixedS64Slice
+			}
+			return unmarshalFixedS64Value
+		case "varint":
+			if pointer {
+				return unmarshalInt64Ptr
+			}
+			if slice {
+				return unmarshalInt64Slice
+			}
+			return unmarshalInt64Value
+		case "zigzag64":
+			if pointer {
+				return unmarshalSint64Ptr
+			}
+			if slice {
+				return unmarshalSint64Slice
+			}
+			return unmarshalSint64Value
+		}
+	case reflect.Uint32:
+		switch encoding {
+		case "fixed32":
+			if pointer {
+				return unmarshalFixed32Ptr
+			}
+			if slice {
+				return unmarshalFixed32Slice
+			}
+			return unmarshalFixed32Value
+		case "varint":
+			if pointer {
+				return unmarshalUint32Ptr
+			}
+			if slice {
+				return unmarshalUint32Slice
+			}
+			return unmarshalUint32Value
+		}
+	case reflect.Uint64:
+		switch encoding {
+		case "fixed64":
+			if pointer {
+				return unmarshalFixed64Ptr
+			}
+			if slice {
+				return unmarshalFixed64Slice
+			}
+			return unmarshalFixed64Value
+		case "varint":
+			if pointer {
+				return unmarshalUint64Ptr
+			}
+			if slice {
+				return unmarshalUint64Slice
+			}
+			return unmarshalUint64Value
+		}
+	case reflect.Float32:
+		if pointer {
+			return unmarshalFloat32Ptr
+		}
+		if slice {
+			return unmarshalFloat32Slice
+		}
+		return unmarshalFloat32Value
+	case reflect.Float64:
+		if pointer {
+			return unmarshalFloat64Ptr
+		}
+		if slice {
+			return unmarshalFloat64Slice
+		}
+		return unmarshalFloat64Value
+	case reflect.Map:
+		panic("map type in typeUnmarshaler in " + t.Name())
+	case reflect.Slice:
+		if pointer {
+			panic("bad pointer in slice case in " + t.Name())
+		}
+		if slice {
+			return unmarshalBytesSlice
+		}
+		return unmarshalBytesValue
+	case reflect.String:
+		if validateUTF8 {
+			if pointer {
+				return unmarshalUTF8StringPtr
+			}
+			if slice {
+				return unmarshalUTF8StringSlice
+			}
+			return unmarshalUTF8StringValue
+		}
+		if pointer {
+			return unmarshalStringPtr
+		}
+		if slice {
+			return unmarshalStringSlice
+		}
+		return unmarshalStringValue
+	case reflect.Struct:
+		// message or group field
+		if !pointer {
+			panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding))
+		}
+		switch encoding {
+		case "bytes":
+			if slice {
+				return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name)
+			}
+			return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name)
+		case "group":
+			if slice {
+				return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name)
+			}
+			return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name)
+		}
+	}
+	panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding))
+}
+
+// Below are all the unmarshalers for individual fields of various types.
+
+func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int64(x)
+	*f.toInt64() = v
+	return b, nil
+}
+
+func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int64(x)
+	*f.toInt64Ptr() = &v
+	return b, nil
+}
+
+func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			b = b[n:]
+			v := int64(x)
+			s := f.toInt64Slice()
+			*s = append(*s, v)
+		}
+		return res, nil
+	}
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int64(x)
+	s := f.toInt64Slice()
+	*s = append(*s, v)
+	return b, nil
+}
+
+func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int64(x>>1) ^ int64(x)<<63>>63
+	*f.toInt64() = v
+	return b, nil
+}
+
+func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int64(x>>1) ^ int64(x)<<63>>63
+	*f.toInt64Ptr() = &v
+	return b, nil
+}
+
+func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			b = b[n:]
+			v := int64(x>>1) ^ int64(x)<<63>>63
+			s := f.toInt64Slice()
+			*s = append(*s, v)
+		}
+		return res, nil
+	}
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int64(x>>1) ^ int64(x)<<63>>63
+	s := f.toInt64Slice()
+	*s = append(*s, v)
+	return b, nil
+}
+
+func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := uint64(x)
+	*f.toUint64() = v
+	return b, nil
+}
+
+func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := uint64(x)
+	*f.toUint64Ptr() = &v
+	return b, nil
+}
+
+func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			b = b[n:]
+			v := uint64(x)
+			s := f.toUint64Slice()
+			*s = append(*s, v)
+		}
+		return res, nil
+	}
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := uint64(x)
+	s := f.toUint64Slice()
+	*s = append(*s, v)
+	return b, nil
+}
+
+func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int32(x)
+	*f.toInt32() = v
+	return b, nil
+}
+
+func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int32(x)
+	f.setInt32Ptr(v)
+	return b, nil
+}
+
+func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			b = b[n:]
+			v := int32(x)
+			f.appendInt32Slice(v)
+		}
+		return res, nil
+	}
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int32(x)
+	f.appendInt32Slice(v)
+	return b, nil
+}
+
+func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int32(x>>1) ^ int32(x)<<31>>31
+	*f.toInt32() = v
+	return b, nil
+}
+
+func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int32(x>>1) ^ int32(x)<<31>>31
+	f.setInt32Ptr(v)
+	return b, nil
+}
+
+func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			b = b[n:]
+			v := int32(x>>1) ^ int32(x)<<31>>31
+			f.appendInt32Slice(v)
+		}
+		return res, nil
+	}
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := int32(x>>1) ^ int32(x)<<31>>31
+	f.appendInt32Slice(v)
+	return b, nil
+}
+
+func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := uint32(x)
+	*f.toUint32() = v
+	return b, nil
+}
+
+func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := uint32(x)
+	*f.toUint32Ptr() = &v
+	return b, nil
+}
+
+func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			b = b[n:]
+			v := uint32(x)
+			s := f.toUint32Slice()
+			*s = append(*s, v)
+		}
+		return res, nil
+	}
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	v := uint32(x)
+	s := f.toUint32Slice()
+	*s = append(*s, v)
+	return b, nil
+}
+
+func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+	*f.toUint64() = v
+	return b[8:], nil
+}
+
+func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+	*f.toUint64Ptr() = &v
+	return b[8:], nil
+}
+
+func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			if len(b) < 8 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+			s := f.toUint64Slice()
+			*s = append(*s, v)
+			b = b[8:]
+		}
+		return res, nil
+	}
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+	s := f.toUint64Slice()
+	*s = append(*s, v)
+	return b[8:], nil
+}
+
+func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+	*f.toInt64() = v
+	return b[8:], nil
+}
+
+func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+	*f.toInt64Ptr() = &v
+	return b[8:], nil
+}
+
+func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			if len(b) < 8 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+			s := f.toInt64Slice()
+			*s = append(*s, v)
+			b = b[8:]
+		}
+		return res, nil
+	}
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+	s := f.toInt64Slice()
+	*s = append(*s, v)
+	return b[8:], nil
+}
+
+func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+	*f.toUint32() = v
+	return b[4:], nil
+}
+
+func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+	*f.toUint32Ptr() = &v
+	return b[4:], nil
+}
+
+func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			if len(b) < 4 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+			s := f.toUint32Slice()
+			*s = append(*s, v)
+			b = b[4:]
+		}
+		return res, nil
+	}
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+	s := f.toUint32Slice()
+	*s = append(*s, v)
+	return b[4:], nil
+}
+
+func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+	*f.toInt32() = v
+	return b[4:], nil
+}
+
+func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+	f.setInt32Ptr(v)
+	return b[4:], nil
+}
+
+func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			if len(b) < 4 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+			f.appendInt32Slice(v)
+			b = b[4:]
+		}
+		return res, nil
+	}
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+	f.appendInt32Slice(v)
+	return b[4:], nil
+}
+
+func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	// Note: any length varint is allowed, even though any sane
+	// encoder will use one byte.
+	// See https://github.com/golang/protobuf/issues/76
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	// TODO: check if x>1? Tests seem to indicate no.
+	v := x != 0
+	*f.toBool() = v
+	return b[n:], nil
+}
+
+func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := x != 0
+	*f.toBoolPtr() = &v
+	return b[n:], nil
+}
+
+func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			x, n = decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			v := x != 0
+			s := f.toBoolSlice()
+			*s = append(*s, v)
+			b = b[n:]
+		}
+		return res, nil
+	}
+	if w != WireVarint {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := x != 0
+	s := f.toBoolSlice()
+	*s = append(*s, v)
+	return b[n:], nil
+}
+
+func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+	*f.toFloat64() = v
+	return b[8:], nil
+}
+
+func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+	*f.toFloat64Ptr() = &v
+	return b[8:], nil
+}
+
+func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			if len(b) < 8 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+			s := f.toFloat64Slice()
+			*s = append(*s, v)
+			b = b[8:]
+		}
+		return res, nil
+	}
+	if w != WireFixed64 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 8 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+	s := f.toFloat64Slice()
+	*s = append(*s, v)
+	return b[8:], nil
+}
+
+func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+	*f.toFloat32() = v
+	return b[4:], nil
+}
+
+func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+	*f.toFloat32Ptr() = &v
+	return b[4:], nil
+}
+
+func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {
+	if w == WireBytes { // packed
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		res := b[x:]
+		b = b[:x]
+		for len(b) > 0 {
+			if len(b) < 4 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+			s := f.toFloat32Slice()
+			*s = append(*s, v)
+			b = b[4:]
+		}
+		return res, nil
+	}
+	if w != WireFixed32 {
+		return b, errInternalBadWireType
+	}
+	if len(b) < 4 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+	s := f.toFloat32Slice()
+	*s = append(*s, v)
+	return b[4:], nil
+}
+
+func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := string(b[:x])
+	*f.toString() = v
+	return b[x:], nil
+}
+
+func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := string(b[:x])
+	*f.toStringPtr() = &v
+	return b[x:], nil
+}
+
+func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := string(b[:x])
+	s := f.toStringSlice()
+	*s = append(*s, v)
+	return b[x:], nil
+}
+
+func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := string(b[:x])
+	*f.toString() = v
+	if !utf8.ValidString(v) {
+		return b[x:], errInvalidUTF8
+	}
+	return b[x:], nil
+}
+
+func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := string(b[:x])
+	*f.toStringPtr() = &v
+	if !utf8.ValidString(v) {
+		return b[x:], errInvalidUTF8
+	}
+	return b[x:], nil
+}
+
+func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := string(b[:x])
+	s := f.toStringSlice()
+	*s = append(*s, v)
+	if !utf8.ValidString(v) {
+		return b[x:], errInvalidUTF8
+	}
+	return b[x:], nil
+}
+
+var emptyBuf [0]byte
+
+func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	// The use of append here is a trick which avoids the zeroing
+	// that would be required if we used a make/copy pair.
+	// We append to emptyBuf instead of nil because we want
+	// a non-nil result even when the length is 0.
+	v := append(emptyBuf[:], b[:x]...)
+	*f.toBytes() = v
+	return b[x:], nil
+}
+
+func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {
+	if w != WireBytes {
+		return b, errInternalBadWireType
+	}
+	x, n := decodeVarint(b)
+	if n == 0 {
+		return nil, io.ErrUnexpectedEOF
+	}
+	b = b[n:]
+	if x > uint64(len(b)) {
+		return nil, io.ErrUnexpectedEOF
+	}
+	v := append(emptyBuf[:], b[:x]...)
+	s := f.toBytesSlice()
+	*s = append(*s, v)
+	return b[x:], nil
+}
+
+func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {
+	return func(b []byte, f pointer, w int) ([]byte, error) {
+		if w != WireBytes {
+			return b, errInternalBadWireType
+		}
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		// First read the message field to see if something is there.
+		// The semantics of multiple submessages are weird.  Instead of
+		// the last one winning (as it is for all other fields), multiple
+		// submessages are merged.
+		v := f.getPointer()
+		if v.isNil() {
+			v = valToPointer(reflect.New(sub.typ))
+			f.setPointer(v)
+		}
+		err := sub.unmarshal(v, b[:x])
+		if err != nil {
+			if r, ok := err.(*RequiredNotSetError); ok {
+				r.field = name + "." + r.field
+			} else {
+				return nil, err
+			}
+		}
+		return b[x:], err
+	}
+}
+
+func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+	return func(b []byte, f pointer, w int) ([]byte, error) {
+		if w != WireBytes {
+			return b, errInternalBadWireType
+		}
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		v := valToPointer(reflect.New(sub.typ))
+		err := sub.unmarshal(v, b[:x])
+		if err != nil {
+			if r, ok := err.(*RequiredNotSetError); ok {
+				r.field = name + "." + r.field
+			} else {
+				return nil, err
+			}
+		}
+		f.appendPointer(v)
+		return b[x:], err
+	}
+}
+
+func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {
+	return func(b []byte, f pointer, w int) ([]byte, error) {
+		if w != WireStartGroup {
+			return b, errInternalBadWireType
+		}
+		x, y := findEndGroup(b)
+		if x < 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		v := f.getPointer()
+		if v.isNil() {
+			v = valToPointer(reflect.New(sub.typ))
+			f.setPointer(v)
+		}
+		err := sub.unmarshal(v, b[:x])
+		if err != nil {
+			if r, ok := err.(*RequiredNotSetError); ok {
+				r.field = name + "." + r.field
+			} else {
+				return nil, err
+			}
+		}
+		return b[y:], err
+	}
+}
+
+func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+	return func(b []byte, f pointer, w int) ([]byte, error) {
+		if w != WireStartGroup {
+			return b, errInternalBadWireType
+		}
+		x, y := findEndGroup(b)
+		if x < 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		v := valToPointer(reflect.New(sub.typ))
+		err := sub.unmarshal(v, b[:x])
+		if err != nil {
+			if r, ok := err.(*RequiredNotSetError); ok {
+				r.field = name + "." + r.field
+			} else {
+				return nil, err
+			}
+		}
+		f.appendPointer(v)
+		return b[y:], err
+	}
+}
+
+func makeUnmarshalMap(f *reflect.StructField) unmarshaler {
+	t := f.Type
+	kt := t.Key()
+	vt := t.Elem()
+	unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key"))
+	unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val"))
+	return func(b []byte, f pointer, w int) ([]byte, error) {
+		// The map entry is a submessage. Figure out how big it is.
+		if w != WireBytes {
+			return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes)
+		}
+		x, n := decodeVarint(b)
+		if n == 0 {
+			return nil, io.ErrUnexpectedEOF
+		}
+		b = b[n:]
+		if x > uint64(len(b)) {
+			return nil, io.ErrUnexpectedEOF
+		}
+		r := b[x:] // unused data to return
+		b = b[:x]  // data for map entry
+
+		// Note: we could use #keys * #values ~= 200 functions
+		// to do map decoding without reflection. Probably not worth it.
+		// Maps will be somewhat slow. Oh well.
+
+		// Read key and value from data.
+		var nerr nonFatal
+		k := reflect.New(kt)
+		v := reflect.New(vt)
+		for len(b) > 0 {
+			x, n := decodeVarint(b)
+			if n == 0 {
+				return nil, io.ErrUnexpectedEOF
+			}
+			wire := int(x) & 7
+			b = b[n:]
+
+			var err error
+			switch x >> 3 {
+			case 1:
+				b, err = unmarshalKey(b, valToPointer(k), wire)
+			case 2:
+				b, err = unmarshalVal(b, valToPointer(v), wire)
+			default:
+				err = errInternalBadWireType // skip unknown tag
+			}
+
+			if nerr.Merge(err) {
+				continue
+			}
+			if err != errInternalBadWireType {
+				return nil, err
+			}
+
+			// Skip past unknown fields.
+			b, err = skipField(b, wire)
+			if err != nil {
+				return nil, err
+			}
+		}
+
+		// Get map, allocate if needed.
+		m := f.asPointerTo(t).Elem() // an addressable map[K]T
+		if m.IsNil() {
+			m.Set(reflect.MakeMap(t))
+		}
+
+		// Insert into map.
+		m.SetMapIndex(k.Elem(), v.Elem())
+
+		return r, nerr.E
+	}
+}
+
+// makeUnmarshalOneof makes an unmarshaler for oneof fields.
+// for:
+// message Msg {
+//   oneof F {
+//     int64 X = 1;
+//     float64 Y = 2;
+//   }
+// }
+// typ is the type of the concrete entry for a oneof case (e.g. Msg_X).
+// ityp is the interface type of the oneof field (e.g. isMsg_F).
+// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64).
+// Note that this function will be called once for each case in the oneof.
+func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler {
+	sf := typ.Field(0)
+	field0 := toField(&sf)
+	return func(b []byte, f pointer, w int) ([]byte, error) {
+		// Allocate holder for value.
+		v := reflect.New(typ)
+
+		// Unmarshal data into holder.
+		// We unmarshal into the first field of the holder object.
+		var err error
+		var nerr nonFatal
+		b, err = unmarshal(b, valToPointer(v).offset(field0), w)
+		if !nerr.Merge(err) {
+			return nil, err
+		}
+
+		// Write pointer to holder into target field.
+		f.asPointerTo(ityp).Elem().Set(v)
+
+		return b, nerr.E
+	}
+}
+
+// Error used by decode internally.
+var errInternalBadWireType = errors.New("proto: internal error: bad wiretype")
+
+// skipField skips past a field of type wire and returns the remaining bytes.
+func skipField(b []byte, wire int) ([]byte, error) {
+	switch wire {
+	case WireVarint:
+		_, k := decodeVarint(b)
+		if k == 0 {
+			return b, io.ErrUnexpectedEOF
+		}
+		b = b[k:]
+	case WireFixed32:
+		if len(b) < 4 {
+			return b, io.ErrUnexpectedEOF
+		}
+		b = b[4:]
+	case WireFixed64:
+		if len(b) < 8 {
+			return b, io.ErrUnexpectedEOF
+		}
+		b = b[8:]
+	case WireBytes:
+		m, k := decodeVarint(b)
+		if k == 0 || uint64(len(b)-k) < m {
+			return b, io.ErrUnexpectedEOF
+		}
+		b = b[uint64(k)+m:]
+	case WireStartGroup:
+		_, i := findEndGroup(b)
+		if i == -1 {
+			return b, io.ErrUnexpectedEOF
+		}
+		b = b[i:]
+	default:
+		return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire)
+	}
+	return b, nil
+}
+
+// findEndGroup finds the index of the next EndGroup tag.
+// Groups may be nested, so the "next" EndGroup tag is the first
+// unpaired EndGroup.
+// findEndGroup returns the indexes of the start and end of the EndGroup tag.
+// Returns (-1,-1) if it can't find one.
+func findEndGroup(b []byte) (int, int) {
+	depth := 1
+	i := 0
+	for {
+		x, n := decodeVarint(b[i:])
+		if n == 0 {
+			return -1, -1
+		}
+		j := i
+		i += n
+		switch x & 7 {
+		case WireVarint:
+			_, k := decodeVarint(b[i:])
+			if k == 0 {
+				return -1, -1
+			}
+			i += k
+		case WireFixed32:
+			if len(b)-4 < i {
+				return -1, -1
+			}
+			i += 4
+		case WireFixed64:
+			if len(b)-8 < i {
+				return -1, -1
+			}
+			i += 8
+		case WireBytes:
+			m, k := decodeVarint(b[i:])
+			if k == 0 {
+				return -1, -1
+			}
+			i += k
+			if uint64(len(b)-i) < m {
+				return -1, -1
+			}
+			i += int(m)
+		case WireStartGroup:
+			depth++
+		case WireEndGroup:
+			depth--
+			if depth == 0 {
+				return j, i
+			}
+		default:
+			return -1, -1
+		}
+	}
+}
+
+// encodeVarint appends a varint-encoded integer to b and returns the result.
+func encodeVarint(b []byte, x uint64) []byte {
+	for x >= 1<<7 {
+		b = append(b, byte(x&0x7f|0x80))
+		x >>= 7
+	}
+	return append(b, byte(x))
+}
+
+// decodeVarint reads a varint-encoded integer from b.
+// Returns the decoded integer and the number of bytes read.
+// If there is an error, it returns 0,0.
+func decodeVarint(b []byte) (uint64, int) {
+	var x, y uint64
+	if len(b) == 0 {
+		goto bad
+	}
+	x = uint64(b[0])
+	if x < 0x80 {
+		return x, 1
+	}
+	x -= 0x80
+
+	if len(b) <= 1 {
+		goto bad
+	}
+	y = uint64(b[1])
+	x += y << 7
+	if y < 0x80 {
+		return x, 2
+	}
+	x -= 0x80 << 7
+
+	if len(b) <= 2 {
+		goto bad
+	}
+	y = uint64(b[2])
+	x += y << 14
+	if y < 0x80 {
+		return x, 3
+	}
+	x -= 0x80 << 14
+
+	if len(b) <= 3 {
+		goto bad
+	}
+	y = uint64(b[3])
+	x += y << 21
+	if y < 0x80 {
+		return x, 4
+	}
+	x -= 0x80 << 21
+
+	if len(b) <= 4 {
+		goto bad
+	}
+	y = uint64(b[4])
+	x += y << 28
+	if y < 0x80 {
+		return x, 5
+	}
+	x -= 0x80 << 28
+
+	if len(b) <= 5 {
+		goto bad
+	}
+	y = uint64(b[5])
+	x += y << 35
+	if y < 0x80 {
+		return x, 6
+	}
+	x -= 0x80 << 35
+
+	if len(b) <= 6 {
+		goto bad
+	}
+	y = uint64(b[6])
+	x += y << 42
+	if y < 0x80 {
+		return x, 7
+	}
+	x -= 0x80 << 42
+
+	if len(b) <= 7 {
+		goto bad
+	}
+	y = uint64(b[7])
+	x += y << 49
+	if y < 0x80 {
+		return x, 8
+	}
+	x -= 0x80 << 49
+
+	if len(b) <= 8 {
+		goto bad
+	}
+	y = uint64(b[8])
+	x += y << 56
+	if y < 0x80 {
+		return x, 9
+	}
+	x -= 0x80 << 56
+
+	if len(b) <= 9 {
+		goto bad
+	}
+	y = uint64(b[9])
+	x += y << 63
+	if y < 2 {
+		return x, 10
+	}
+
+bad:
+	return 0, 0
+}
diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go
new file mode 100644
index 0000000..1aaee72
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/text.go
@@ -0,0 +1,843 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+// Functions for writing the text protocol buffer format.
+
+import (
+	"bufio"
+	"bytes"
+	"encoding"
+	"errors"
+	"fmt"
+	"io"
+	"log"
+	"math"
+	"reflect"
+	"sort"
+	"strings"
+)
+
+var (
+	newline         = []byte("\n")
+	spaces          = []byte("                                        ")
+	endBraceNewline = []byte("}\n")
+	backslashN      = []byte{'\\', 'n'}
+	backslashR      = []byte{'\\', 'r'}
+	backslashT      = []byte{'\\', 't'}
+	backslashDQ     = []byte{'\\', '"'}
+	backslashBS     = []byte{'\\', '\\'}
+	posInf          = []byte("inf")
+	negInf          = []byte("-inf")
+	nan             = []byte("nan")
+)
+
+type writer interface {
+	io.Writer
+	WriteByte(byte) error
+}
+
+// textWriter is an io.Writer that tracks its indentation level.
+type textWriter struct {
+	ind      int
+	complete bool // if the current position is a complete line
+	compact  bool // whether to write out as a one-liner
+	w        writer
+}
+
+func (w *textWriter) WriteString(s string) (n int, err error) {
+	if !strings.Contains(s, "\n") {
+		if !w.compact && w.complete {
+			w.writeIndent()
+		}
+		w.complete = false
+		return io.WriteString(w.w, s)
+	}
+	// WriteString is typically called without newlines, so this
+	// codepath and its copy are rare.  We copy to avoid
+	// duplicating all of Write's logic here.
+	return w.Write([]byte(s))
+}
+
+func (w *textWriter) Write(p []byte) (n int, err error) {
+	newlines := bytes.Count(p, newline)
+	if newlines == 0 {
+		if !w.compact && w.complete {
+			w.writeIndent()
+		}
+		n, err = w.w.Write(p)
+		w.complete = false
+		return n, err
+	}
+
+	frags := bytes.SplitN(p, newline, newlines+1)
+	if w.compact {
+		for i, frag := range frags {
+			if i > 0 {
+				if err := w.w.WriteByte(' '); err != nil {
+					return n, err
+				}
+				n++
+			}
+			nn, err := w.w.Write(frag)
+			n += nn
+			if err != nil {
+				return n, err
+			}
+		}
+		return n, nil
+	}
+
+	for i, frag := range frags {
+		if w.complete {
+			w.writeIndent()
+		}
+		nn, err := w.w.Write(frag)
+		n += nn
+		if err != nil {
+			return n, err
+		}
+		if i+1 < len(frags) {
+			if err := w.w.WriteByte('\n'); err != nil {
+				return n, err
+			}
+			n++
+		}
+	}
+	w.complete = len(frags[len(frags)-1]) == 0
+	return n, nil
+}
+
+func (w *textWriter) WriteByte(c byte) error {
+	if w.compact && c == '\n' {
+		c = ' '
+	}
+	if !w.compact && w.complete {
+		w.writeIndent()
+	}
+	err := w.w.WriteByte(c)
+	w.complete = c == '\n'
+	return err
+}
+
+func (w *textWriter) indent() { w.ind++ }
+
+func (w *textWriter) unindent() {
+	if w.ind == 0 {
+		log.Print("proto: textWriter unindented too far")
+		return
+	}
+	w.ind--
+}
+
+func writeName(w *textWriter, props *Properties) error {
+	if _, err := w.WriteString(props.OrigName); err != nil {
+		return err
+	}
+	if props.Wire != "group" {
+		return w.WriteByte(':')
+	}
+	return nil
+}
+
+func requiresQuotes(u string) bool {
+	// When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted.
+	for _, ch := range u {
+		switch {
+		case ch == '.' || ch == '/' || ch == '_':
+			continue
+		case '0' <= ch && ch <= '9':
+			continue
+		case 'A' <= ch && ch <= 'Z':
+			continue
+		case 'a' <= ch && ch <= 'z':
+			continue
+		default:
+			return true
+		}
+	}
+	return false
+}
+
+// isAny reports whether sv is a google.protobuf.Any message
+func isAny(sv reflect.Value) bool {
+	type wkt interface {
+		XXX_WellKnownType() string
+	}
+	t, ok := sv.Addr().Interface().(wkt)
+	return ok && t.XXX_WellKnownType() == "Any"
+}
+
+// writeProto3Any writes an expanded google.protobuf.Any message.
+//
+// It returns (false, nil) if sv value can't be unmarshaled (e.g. because
+// required messages are not linked in).
+//
+// It returns (true, error) when sv was written in expanded format or an error
+// was encountered.
+func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {
+	turl := sv.FieldByName("TypeUrl")
+	val := sv.FieldByName("Value")
+	if !turl.IsValid() || !val.IsValid() {
+		return true, errors.New("proto: invalid google.protobuf.Any message")
+	}
+
+	b, ok := val.Interface().([]byte)
+	if !ok {
+		return true, errors.New("proto: invalid google.protobuf.Any message")
+	}
+
+	parts := strings.Split(turl.String(), "/")
+	mt := MessageType(parts[len(parts)-1])
+	if mt == nil {
+		return false, nil
+	}
+	m := reflect.New(mt.Elem())
+	if err := Unmarshal(b, m.Interface().(Message)); err != nil {
+		return false, nil
+	}
+	w.Write([]byte("["))
+	u := turl.String()
+	if requiresQuotes(u) {
+		writeString(w, u)
+	} else {
+		w.Write([]byte(u))
+	}
+	if w.compact {
+		w.Write([]byte("]:<"))
+	} else {
+		w.Write([]byte("]: <\n"))
+		w.ind++
+	}
+	if err := tm.writeStruct(w, m.Elem()); err != nil {
+		return true, err
+	}
+	if w.compact {
+		w.Write([]byte("> "))
+	} else {
+		w.ind--
+		w.Write([]byte(">\n"))
+	}
+	return true, nil
+}
+
+func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
+	if tm.ExpandAny && isAny(sv) {
+		if canExpand, err := tm.writeProto3Any(w, sv); canExpand {
+			return err
+		}
+	}
+	st := sv.Type()
+	sprops := GetProperties(st)
+	for i := 0; i < sv.NumField(); i++ {
+		fv := sv.Field(i)
+		props := sprops.Prop[i]
+		name := st.Field(i).Name
+
+		if name == "XXX_NoUnkeyedLiteral" {
+			continue
+		}
+
+		if strings.HasPrefix(name, "XXX_") {
+			// There are two XXX_ fields:
+			//   XXX_unrecognized []byte
+			//   XXX_extensions   map[int32]proto.Extension
+			// The first is handled here;
+			// the second is handled at the bottom of this function.
+			if name == "XXX_unrecognized" && !fv.IsNil() {
+				if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil {
+					return err
+				}
+			}
+			continue
+		}
+		if fv.Kind() == reflect.Ptr && fv.IsNil() {
+			// Field not filled in. This could be an optional field or
+			// a required field that wasn't filled in. Either way, there
+			// isn't anything we can show for it.
+			continue
+		}
+		if fv.Kind() == reflect.Slice && fv.IsNil() {
+			// Repeated field that is empty, or a bytes field that is unused.
+			continue
+		}
+
+		if props.Repeated && fv.Kind() == reflect.Slice {
+			// Repeated field.
+			for j := 0; j < fv.Len(); j++ {
+				if err := writeName(w, props); err != nil {
+					return err
+				}
+				if !w.compact {
+					if err := w.WriteByte(' '); err != nil {
+						return err
+					}
+				}
+				v := fv.Index(j)
+				if v.Kind() == reflect.Ptr && v.IsNil() {
+					// A nil message in a repeated field is not valid,
+					// but we can handle that more gracefully than panicking.
+					if _, err := w.Write([]byte("<nil>\n")); err != nil {
+						return err
+					}
+					continue
+				}
+				if err := tm.writeAny(w, v, props); err != nil {
+					return err
+				}
+				if err := w.WriteByte('\n'); err != nil {
+					return err
+				}
+			}
+			continue
+		}
+		if fv.Kind() == reflect.Map {
+			// Map fields are rendered as a repeated struct with key/value fields.
+			keys := fv.MapKeys()
+			sort.Sort(mapKeys(keys))
+			for _, key := range keys {
+				val := fv.MapIndex(key)
+				if err := writeName(w, props); err != nil {
+					return err
+				}
+				if !w.compact {
+					if err := w.WriteByte(' '); err != nil {
+						return err
+					}
+				}
+				// open struct
+				if err := w.WriteByte('<'); err != nil {
+					return err
+				}
+				if !w.compact {
+					if err := w.WriteByte('\n'); err != nil {
+						return err
+					}
+				}
+				w.indent()
+				// key
+				if _, err := w.WriteString("key:"); err != nil {
+					return err
+				}
+				if !w.compact {
+					if err := w.WriteByte(' '); err != nil {
+						return err
+					}
+				}
+				if err := tm.writeAny(w, key, props.MapKeyProp); err != nil {
+					return err
+				}
+				if err := w.WriteByte('\n'); err != nil {
+					return err
+				}
+				// nil values aren't legal, but we can avoid panicking because of them.
+				if val.Kind() != reflect.Ptr || !val.IsNil() {
+					// value
+					if _, err := w.WriteString("value:"); err != nil {
+						return err
+					}
+					if !w.compact {
+						if err := w.WriteByte(' '); err != nil {
+							return err
+						}
+					}
+					if err := tm.writeAny(w, val, props.MapValProp); err != nil {
+						return err
+					}
+					if err := w.WriteByte('\n'); err != nil {
+						return err
+					}
+				}
+				// close struct
+				w.unindent()
+				if err := w.WriteByte('>'); err != nil {
+					return err
+				}
+				if err := w.WriteByte('\n'); err != nil {
+					return err
+				}
+			}
+			continue
+		}
+		if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 {
+			// empty bytes field
+			continue
+		}
+		if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice {
+			// proto3 non-repeated scalar field; skip if zero value
+			if isProto3Zero(fv) {
+				continue
+			}
+		}
+
+		if fv.Kind() == reflect.Interface {
+			// Check if it is a oneof.
+			if st.Field(i).Tag.Get("protobuf_oneof") != "" {
+				// fv is nil, or holds a pointer to generated struct.
+				// That generated struct has exactly one field,
+				// which has a protobuf struct tag.
+				if fv.IsNil() {
+					continue
+				}
+				inner := fv.Elem().Elem() // interface -> *T -> T
+				tag := inner.Type().Field(0).Tag.Get("protobuf")
+				props = new(Properties) // Overwrite the outer props var, but not its pointee.
+				props.Parse(tag)
+				// Write the value in the oneof, not the oneof itself.
+				fv = inner.Field(0)
+
+				// Special case to cope with malformed messages gracefully:
+				// If the value in the oneof is a nil pointer, don't panic
+				// in writeAny.
+				if fv.Kind() == reflect.Ptr && fv.IsNil() {
+					// Use errors.New so writeAny won't render quotes.
+					msg := errors.New("/* nil */")
+					fv = reflect.ValueOf(&msg).Elem()
+				}
+			}
+		}
+
+		if err := writeName(w, props); err != nil {
+			return err
+		}
+		if !w.compact {
+			if err := w.WriteByte(' '); err != nil {
+				return err
+			}
+		}
+
+		// Enums have a String method, so writeAny will work fine.
+		if err := tm.writeAny(w, fv, props); err != nil {
+			return err
+		}
+
+		if err := w.WriteByte('\n'); err != nil {
+			return err
+		}
+	}
+
+	// Extensions (the XXX_extensions field).
+	pv := sv.Addr()
+	if _, err := extendable(pv.Interface()); err == nil {
+		if err := tm.writeExtensions(w, pv); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+// writeAny writes an arbitrary field.
+func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
+	v = reflect.Indirect(v)
+
+	// Floats have special cases.
+	if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {
+		x := v.Float()
+		var b []byte
+		switch {
+		case math.IsInf(x, 1):
+			b = posInf
+		case math.IsInf(x, -1):
+			b = negInf
+		case math.IsNaN(x):
+			b = nan
+		}
+		if b != nil {
+			_, err := w.Write(b)
+			return err
+		}
+		// Other values are handled below.
+	}
+
+	// We don't attempt to serialise every possible value type; only those
+	// that can occur in protocol buffers.
+	switch v.Kind() {
+	case reflect.Slice:
+		// Should only be a []byte; repeated fields are handled in writeStruct.
+		if err := writeString(w, string(v.Bytes())); err != nil {
+			return err
+		}
+	case reflect.String:
+		if err := writeString(w, v.String()); err != nil {
+			return err
+		}
+	case reflect.Struct:
+		// Required/optional group/message.
+		var bra, ket byte = '<', '>'
+		if props != nil && props.Wire == "group" {
+			bra, ket = '{', '}'
+		}
+		if err := w.WriteByte(bra); err != nil {
+			return err
+		}
+		if !w.compact {
+			if err := w.WriteByte('\n'); err != nil {
+				return err
+			}
+		}
+		w.indent()
+		if v.CanAddr() {
+			// Calling v.Interface on a struct causes the reflect package to
+			// copy the entire struct. This is racy with the new Marshaler
+			// since we atomically update the XXX_sizecache.
+			//
+			// Thus, we retrieve a pointer to the struct if possible to avoid
+			// a race since v.Interface on the pointer doesn't copy the struct.
+			//
+			// If v is not addressable, then we are not worried about a race
+			// since it implies that the binary Marshaler cannot possibly be
+			// mutating this value.
+			v = v.Addr()
+		}
+		if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
+			text, err := etm.MarshalText()
+			if err != nil {
+				return err
+			}
+			if _, err = w.Write(text); err != nil {
+				return err
+			}
+		} else {
+			if v.Kind() == reflect.Ptr {
+				v = v.Elem()
+			}
+			if err := tm.writeStruct(w, v); err != nil {
+				return err
+			}
+		}
+		w.unindent()
+		if err := w.WriteByte(ket); err != nil {
+			return err
+		}
+	default:
+		_, err := fmt.Fprint(w, v.Interface())
+		return err
+	}
+	return nil
+}
+
+// equivalent to C's isprint.
+func isprint(c byte) bool {
+	return c >= 0x20 && c < 0x7f
+}
+
+// writeString writes a string in the protocol buffer text format.
+// It is similar to strconv.Quote except we don't use Go escape sequences,
+// we treat the string as a byte sequence, and we use octal escapes.
+// These differences are to maintain interoperability with the other
+// languages' implementations of the text format.
+func writeString(w *textWriter, s string) error {
+	// use WriteByte here to get any needed indent
+	if err := w.WriteByte('"'); err != nil {
+		return err
+	}
+	// Loop over the bytes, not the runes.
+	for i := 0; i < len(s); i++ {
+		var err error
+		// Divergence from C++: we don't escape apostrophes.
+		// There's no need to escape them, and the C++ parser
+		// copes with a naked apostrophe.
+		switch c := s[i]; c {
+		case '\n':
+			_, err = w.w.Write(backslashN)
+		case '\r':
+			_, err = w.w.Write(backslashR)
+		case '\t':
+			_, err = w.w.Write(backslashT)
+		case '"':
+			_, err = w.w.Write(backslashDQ)
+		case '\\':
+			_, err = w.w.Write(backslashBS)
+		default:
+			if isprint(c) {
+				err = w.w.WriteByte(c)
+			} else {
+				_, err = fmt.Fprintf(w.w, "\\%03o", c)
+			}
+		}
+		if err != nil {
+			return err
+		}
+	}
+	return w.WriteByte('"')
+}
+
+func writeUnknownStruct(w *textWriter, data []byte) (err error) {
+	if !w.compact {
+		if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil {
+			return err
+		}
+	}
+	b := NewBuffer(data)
+	for b.index < len(b.buf) {
+		x, err := b.DecodeVarint()
+		if err != nil {
+			_, err := fmt.Fprintf(w, "/* %v */\n", err)
+			return err
+		}
+		wire, tag := x&7, x>>3
+		if wire == WireEndGroup {
+			w.unindent()
+			if _, err := w.Write(endBraceNewline); err != nil {
+				return err
+			}
+			continue
+		}
+		if _, err := fmt.Fprint(w, tag); err != nil {
+			return err
+		}
+		if wire != WireStartGroup {
+			if err := w.WriteByte(':'); err != nil {
+				return err
+			}
+		}
+		if !w.compact || wire == WireStartGroup {
+			if err := w.WriteByte(' '); err != nil {
+				return err
+			}
+		}
+		switch wire {
+		case WireBytes:
+			buf, e := b.DecodeRawBytes(false)
+			if e == nil {
+				_, err = fmt.Fprintf(w, "%q", buf)
+			} else {
+				_, err = fmt.Fprintf(w, "/* %v */", e)
+			}
+		case WireFixed32:
+			x, err = b.DecodeFixed32()
+			err = writeUnknownInt(w, x, err)
+		case WireFixed64:
+			x, err = b.DecodeFixed64()
+			err = writeUnknownInt(w, x, err)
+		case WireStartGroup:
+			err = w.WriteByte('{')
+			w.indent()
+		case WireVarint:
+			x, err = b.DecodeVarint()
+			err = writeUnknownInt(w, x, err)
+		default:
+			_, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire)
+		}
+		if err != nil {
+			return err
+		}
+		if err = w.WriteByte('\n'); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+func writeUnknownInt(w *textWriter, x uint64, err error) error {
+	if err == nil {
+		_, err = fmt.Fprint(w, x)
+	} else {
+		_, err = fmt.Fprintf(w, "/* %v */", err)
+	}
+	return err
+}
+
+type int32Slice []int32
+
+func (s int32Slice) Len() int           { return len(s) }
+func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
+func (s int32Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
+
+// writeExtensions writes all the extensions in pv.
+// pv is assumed to be a pointer to a protocol message struct that is extendable.
+func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {
+	emap := extensionMaps[pv.Type().Elem()]
+	ep, _ := extendable(pv.Interface())
+
+	// Order the extensions by ID.
+	// This isn't strictly necessary, but it will give us
+	// canonical output, which will also make testing easier.
+	m, mu := ep.extensionsRead()
+	if m == nil {
+		return nil
+	}
+	mu.Lock()
+	ids := make([]int32, 0, len(m))
+	for id := range m {
+		ids = append(ids, id)
+	}
+	sort.Sort(int32Slice(ids))
+	mu.Unlock()
+
+	for _, extNum := range ids {
+		ext := m[extNum]
+		var desc *ExtensionDesc
+		if emap != nil {
+			desc = emap[extNum]
+		}
+		if desc == nil {
+			// Unknown extension.
+			if err := writeUnknownStruct(w, ext.enc); err != nil {
+				return err
+			}
+			continue
+		}
+
+		pb, err := GetExtension(ep, desc)
+		if err != nil {
+			return fmt.Errorf("failed getting extension: %v", err)
+		}
+
+		// Repeated extensions will appear as a slice.
+		if !desc.repeated() {
+			if err := tm.writeExtension(w, desc.Name, pb); err != nil {
+				return err
+			}
+		} else {
+			v := reflect.ValueOf(pb)
+			for i := 0; i < v.Len(); i++ {
+				if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
+					return err
+				}
+			}
+		}
+	}
+	return nil
+}
+
+func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {
+	if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil {
+		return err
+	}
+	if !w.compact {
+		if err := w.WriteByte(' '); err != nil {
+			return err
+		}
+	}
+	if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {
+		return err
+	}
+	if err := w.WriteByte('\n'); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (w *textWriter) writeIndent() {
+	if !w.complete {
+		return
+	}
+	remain := w.ind * 2
+	for remain > 0 {
+		n := remain
+		if n > len(spaces) {
+			n = len(spaces)
+		}
+		w.w.Write(spaces[:n])
+		remain -= n
+	}
+	w.complete = false
+}
+
+// TextMarshaler is a configurable text format marshaler.
+type TextMarshaler struct {
+	Compact   bool // use compact text format (one line).
+	ExpandAny bool // expand google.protobuf.Any messages of known types
+}
+
+// Marshal writes a given protocol buffer in text format.
+// The only errors returned are from w.
+func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {
+	val := reflect.ValueOf(pb)
+	if pb == nil || val.IsNil() {
+		w.Write([]byte("<nil>"))
+		return nil
+	}
+	var bw *bufio.Writer
+	ww, ok := w.(writer)
+	if !ok {
+		bw = bufio.NewWriter(w)
+		ww = bw
+	}
+	aw := &textWriter{
+		w:        ww,
+		complete: true,
+		compact:  tm.Compact,
+	}
+
+	if etm, ok := pb.(encoding.TextMarshaler); ok {
+		text, err := etm.MarshalText()
+		if err != nil {
+			return err
+		}
+		if _, err = aw.Write(text); err != nil {
+			return err
+		}
+		if bw != nil {
+			return bw.Flush()
+		}
+		return nil
+	}
+	// Dereference the received pointer so we don't have outer < and >.
+	v := reflect.Indirect(val)
+	if err := tm.writeStruct(aw, v); err != nil {
+		return err
+	}
+	if bw != nil {
+		return bw.Flush()
+	}
+	return nil
+}
+
+// Text is the same as Marshal, but returns the string directly.
+func (tm *TextMarshaler) Text(pb Message) string {
+	var buf bytes.Buffer
+	tm.Marshal(&buf, pb)
+	return buf.String()
+}
+
+var (
+	defaultTextMarshaler = TextMarshaler{}
+	compactTextMarshaler = TextMarshaler{Compact: true}
+)
+
+// TODO: consider removing some of the Marshal functions below.
+
+// MarshalText writes a given protocol buffer in text format.
+// The only errors returned are from w.
+func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) }
+
+// MarshalTextString is the same as MarshalText, but returns the string directly.
+func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) }
+
+// CompactText writes a given protocol buffer in compact text format (one line).
+func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) }
+
+// CompactTextString is the same as CompactText, but returns the string directly.
+func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) }
diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go
new file mode 100644
index 0000000..bb55a3a
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/text_parser.go
@@ -0,0 +1,880 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2010 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package proto
+
+// Functions for parsing the Text protocol buffer format.
+// TODO: message sets.
+
+import (
+	"encoding"
+	"errors"
+	"fmt"
+	"reflect"
+	"strconv"
+	"strings"
+	"unicode/utf8"
+)
+
+// Error string emitted when deserializing Any and fields are already set
+const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set"
+
+type ParseError struct {
+	Message string
+	Line    int // 1-based line number
+	Offset  int // 0-based byte offset from start of input
+}
+
+func (p *ParseError) Error() string {
+	if p.Line == 1 {
+		// show offset only for first line
+		return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message)
+	}
+	return fmt.Sprintf("line %d: %v", p.Line, p.Message)
+}
+
+type token struct {
+	value    string
+	err      *ParseError
+	line     int    // line number
+	offset   int    // byte number from start of input, not start of line
+	unquoted string // the unquoted version of value, if it was a quoted string
+}
+
+func (t *token) String() string {
+	if t.err == nil {
+		return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset)
+	}
+	return fmt.Sprintf("parse error: %v", t.err)
+}
+
+type textParser struct {
+	s            string // remaining input
+	done         bool   // whether the parsing is finished (success or error)
+	backed       bool   // whether back() was called
+	offset, line int
+	cur          token
+}
+
+func newTextParser(s string) *textParser {
+	p := new(textParser)
+	p.s = s
+	p.line = 1
+	p.cur.line = 1
+	return p
+}
+
+func (p *textParser) errorf(format string, a ...interface{}) *ParseError {
+	pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset}
+	p.cur.err = pe
+	p.done = true
+	return pe
+}
+
+// Numbers and identifiers are matched by [-+._A-Za-z0-9]
+func isIdentOrNumberChar(c byte) bool {
+	switch {
+	case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z':
+		return true
+	case '0' <= c && c <= '9':
+		return true
+	}
+	switch c {
+	case '-', '+', '.', '_':
+		return true
+	}
+	return false
+}
+
+func isWhitespace(c byte) bool {
+	switch c {
+	case ' ', '\t', '\n', '\r':
+		return true
+	}
+	return false
+}
+
+func isQuote(c byte) bool {
+	switch c {
+	case '"', '\'':
+		return true
+	}
+	return false
+}
+
+func (p *textParser) skipWhitespace() {
+	i := 0
+	for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') {
+		if p.s[i] == '#' {
+			// comment; skip to end of line or input
+			for i < len(p.s) && p.s[i] != '\n' {
+				i++
+			}
+			if i == len(p.s) {
+				break
+			}
+		}
+		if p.s[i] == '\n' {
+			p.line++
+		}
+		i++
+	}
+	p.offset += i
+	p.s = p.s[i:len(p.s)]
+	if len(p.s) == 0 {
+		p.done = true
+	}
+}
+
+func (p *textParser) advance() {
+	// Skip whitespace
+	p.skipWhitespace()
+	if p.done {
+		return
+	}
+
+	// Start of non-whitespace
+	p.cur.err = nil
+	p.cur.offset, p.cur.line = p.offset, p.line
+	p.cur.unquoted = ""
+	switch p.s[0] {
+	case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':
+		// Single symbol
+		p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]
+	case '"', '\'':
+		// Quoted string
+		i := 1
+		for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' {
+			if p.s[i] == '\\' && i+1 < len(p.s) {
+				// skip escaped char
+				i++
+			}
+			i++
+		}
+		if i >= len(p.s) || p.s[i] != p.s[0] {
+			p.errorf("unmatched quote")
+			return
+		}
+		unq, err := unquoteC(p.s[1:i], rune(p.s[0]))
+		if err != nil {
+			p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err)
+			return
+		}
+		p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)]
+		p.cur.unquoted = unq
+	default:
+		i := 0
+		for i < len(p.s) && isIdentOrNumberChar(p.s[i]) {
+			i++
+		}
+		if i == 0 {
+			p.errorf("unexpected byte %#x", p.s[0])
+			return
+		}
+		p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)]
+	}
+	p.offset += len(p.cur.value)
+}
+
+var (
+	errBadUTF8 = errors.New("proto: bad UTF-8")
+)
+
+func unquoteC(s string, quote rune) (string, error) {
+	// This is based on C++'s tokenizer.cc.
+	// Despite its name, this is *not* parsing C syntax.
+	// For instance, "\0" is an invalid quoted string.
+
+	// Avoid allocation in trivial cases.
+	simple := true
+	for _, r := range s {
+		if r == '\\' || r == quote {
+			simple = false
+			break
+		}
+	}
+	if simple {
+		return s, nil
+	}
+
+	buf := make([]byte, 0, 3*len(s)/2)
+	for len(s) > 0 {
+		r, n := utf8.DecodeRuneInString(s)
+		if r == utf8.RuneError && n == 1 {
+			return "", errBadUTF8
+		}
+		s = s[n:]
+		if r != '\\' {
+			if r < utf8.RuneSelf {
+				buf = append(buf, byte(r))
+			} else {
+				buf = append(buf, string(r)...)
+			}
+			continue
+		}
+
+		ch, tail, err := unescape(s)
+		if err != nil {
+			return "", err
+		}
+		buf = append(buf, ch...)
+		s = tail
+	}
+	return string(buf), nil
+}
+
+func unescape(s string) (ch string, tail string, err error) {
+	r, n := utf8.DecodeRuneInString(s)
+	if r == utf8.RuneError && n == 1 {
+		return "", "", errBadUTF8
+	}
+	s = s[n:]
+	switch r {
+	case 'a':
+		return "\a", s, nil
+	case 'b':
+		return "\b", s, nil
+	case 'f':
+		return "\f", s, nil
+	case 'n':
+		return "\n", s, nil
+	case 'r':
+		return "\r", s, nil
+	case 't':
+		return "\t", s, nil
+	case 'v':
+		return "\v", s, nil
+	case '?':
+		return "?", s, nil // trigraph workaround
+	case '\'', '"', '\\':
+		return string(r), s, nil
+	case '0', '1', '2', '3', '4', '5', '6', '7':
+		if len(s) < 2 {
+			return "", "", fmt.Errorf(`\%c requires 2 following digits`, r)
+		}
+		ss := string(r) + s[:2]
+		s = s[2:]
+		i, err := strconv.ParseUint(ss, 8, 8)
+		if err != nil {
+			return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss)
+		}
+		return string([]byte{byte(i)}), s, nil
+	case 'x', 'X', 'u', 'U':
+		var n int
+		switch r {
+		case 'x', 'X':
+			n = 2
+		case 'u':
+			n = 4
+		case 'U':
+			n = 8
+		}
+		if len(s) < n {
+			return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n)
+		}
+		ss := s[:n]
+		s = s[n:]
+		i, err := strconv.ParseUint(ss, 16, 64)
+		if err != nil {
+			return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss)
+		}
+		if r == 'x' || r == 'X' {
+			return string([]byte{byte(i)}), s, nil
+		}
+		if i > utf8.MaxRune {
+			return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss)
+		}
+		return string(i), s, nil
+	}
+	return "", "", fmt.Errorf(`unknown escape \%c`, r)
+}
+
+// Back off the parser by one token. Can only be done between calls to next().
+// It makes the next advance() a no-op.
+func (p *textParser) back() { p.backed = true }
+
+// Advances the parser and returns the new current token.
+func (p *textParser) next() *token {
+	if p.backed || p.done {
+		p.backed = false
+		return &p.cur
+	}
+	p.advance()
+	if p.done {
+		p.cur.value = ""
+	} else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) {
+		// Look for multiple quoted strings separated by whitespace,
+		// and concatenate them.
+		cat := p.cur
+		for {
+			p.skipWhitespace()
+			if p.done || !isQuote(p.s[0]) {
+				break
+			}
+			p.advance()
+			if p.cur.err != nil {
+				return &p.cur
+			}
+			cat.value += " " + p.cur.value
+			cat.unquoted += p.cur.unquoted
+		}
+		p.done = false // parser may have seen EOF, but we want to return cat
+		p.cur = cat
+	}
+	return &p.cur
+}
+
+func (p *textParser) consumeToken(s string) error {
+	tok := p.next()
+	if tok.err != nil {
+		return tok.err
+	}
+	if tok.value != s {
+		p.back()
+		return p.errorf("expected %q, found %q", s, tok.value)
+	}
+	return nil
+}
+
+// Return a RequiredNotSetError indicating which required field was not set.
+func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError {
+	st := sv.Type()
+	sprops := GetProperties(st)
+	for i := 0; i < st.NumField(); i++ {
+		if !isNil(sv.Field(i)) {
+			continue
+		}
+
+		props := sprops.Prop[i]
+		if props.Required {
+			return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)}
+		}
+	}
+	return &RequiredNotSetError{fmt.Sprintf("%v.<unknown field name>", st)} // should not happen
+}
+
+// Returns the index in the struct for the named field, as well as the parsed tag properties.
+func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) {
+	i, ok := sprops.decoderOrigNames[name]
+	if ok {
+		return i, sprops.Prop[i], true
+	}
+	return -1, nil, false
+}
+
+// Consume a ':' from the input stream (if the next token is a colon),
+// returning an error if a colon is needed but not present.
+func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError {
+	tok := p.next()
+	if tok.err != nil {
+		return tok.err
+	}
+	if tok.value != ":" {
+		// Colon is optional when the field is a group or message.
+		needColon := true
+		switch props.Wire {
+		case "group":
+			needColon = false
+		case "bytes":
+			// A "bytes" field is either a message, a string, or a repeated field;
+			// those three become *T, *string and []T respectively, so we can check for
+			// this field being a pointer to a non-string.
+			if typ.Kind() == reflect.Ptr {
+				// *T or *string
+				if typ.Elem().Kind() == reflect.String {
+					break
+				}
+			} else if typ.Kind() == reflect.Slice {
+				// []T or []*T
+				if typ.Elem().Kind() != reflect.Ptr {
+					break
+				}
+			} else if typ.Kind() == reflect.String {
+				// The proto3 exception is for a string field,
+				// which requires a colon.
+				break
+			}
+			needColon = false
+		}
+		if needColon {
+			return p.errorf("expected ':', found %q", tok.value)
+		}
+		p.back()
+	}
+	return nil
+}
+
+func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
+	st := sv.Type()
+	sprops := GetProperties(st)
+	reqCount := sprops.reqCount
+	var reqFieldErr error
+	fieldSet := make(map[string]bool)
+	// A struct is a sequence of "name: value", terminated by one of
+	// '>' or '}', or the end of the input.  A name may also be
+	// "[extension]" or "[type/url]".
+	//
+	// The whole struct can also be an expanded Any message, like:
+	// [type/url] < ... struct contents ... >
+	for {
+		tok := p.next()
+		if tok.err != nil {
+			return tok.err
+		}
+		if tok.value == terminator {
+			break
+		}
+		if tok.value == "[" {
+			// Looks like an extension or an Any.
+			//
+			// TODO: Check whether we need to handle
+			// namespace rooted names (e.g. ".something.Foo").
+			extName, err := p.consumeExtName()
+			if err != nil {
+				return err
+			}
+
+			if s := strings.LastIndex(extName, "/"); s >= 0 {
+				// If it contains a slash, it's an Any type URL.
+				messageName := extName[s+1:]
+				mt := MessageType(messageName)
+				if mt == nil {
+					return p.errorf("unrecognized message %q in google.protobuf.Any", messageName)
+				}
+				tok = p.next()
+				if tok.err != nil {
+					return tok.err
+				}
+				// consume an optional colon
+				if tok.value == ":" {
+					tok = p.next()
+					if tok.err != nil {
+						return tok.err
+					}
+				}
+				var terminator string
+				switch tok.value {
+				case "<":
+					terminator = ">"
+				case "{":
+					terminator = "}"
+				default:
+					return p.errorf("expected '{' or '<', found %q", tok.value)
+				}
+				v := reflect.New(mt.Elem())
+				if pe := p.readStruct(v.Elem(), terminator); pe != nil {
+					return pe
+				}
+				b, err := Marshal(v.Interface().(Message))
+				if err != nil {
+					return p.errorf("failed to marshal message of type %q: %v", messageName, err)
+				}
+				if fieldSet["type_url"] {
+					return p.errorf(anyRepeatedlyUnpacked, "type_url")
+				}
+				if fieldSet["value"] {
+					return p.errorf(anyRepeatedlyUnpacked, "value")
+				}
+				sv.FieldByName("TypeUrl").SetString(extName)
+				sv.FieldByName("Value").SetBytes(b)
+				fieldSet["type_url"] = true
+				fieldSet["value"] = true
+				continue
+			}
+
+			var desc *ExtensionDesc
+			// This could be faster, but it's functional.
+			// TODO: Do something smarter than a linear scan.
+			for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {
+				if d.Name == extName {
+					desc = d
+					break
+				}
+			}
+			if desc == nil {
+				return p.errorf("unrecognized extension %q", extName)
+			}
+
+			props := &Properties{}
+			props.Parse(desc.Tag)
+
+			typ := reflect.TypeOf(desc.ExtensionType)
+			if err := p.checkForColon(props, typ); err != nil {
+				return err
+			}
+
+			rep := desc.repeated()
+
+			// Read the extension structure, and set it in
+			// the value we're constructing.
+			var ext reflect.Value
+			if !rep {
+				ext = reflect.New(typ).Elem()
+			} else {
+				ext = reflect.New(typ.Elem()).Elem()
+			}
+			if err := p.readAny(ext, props); err != nil {
+				if _, ok := err.(*RequiredNotSetError); !ok {
+					return err
+				}
+				reqFieldErr = err
+			}
+			ep := sv.Addr().Interface().(Message)
+			if !rep {
+				SetExtension(ep, desc, ext.Interface())
+			} else {
+				old, err := GetExtension(ep, desc)
+				var sl reflect.Value
+				if err == nil {
+					sl = reflect.ValueOf(old) // existing slice
+				} else {
+					sl = reflect.MakeSlice(typ, 0, 1)
+				}
+				sl = reflect.Append(sl, ext)
+				SetExtension(ep, desc, sl.Interface())
+			}
+			if err := p.consumeOptionalSeparator(); err != nil {
+				return err
+			}
+			continue
+		}
+
+		// This is a normal, non-extension field.
+		name := tok.value
+		var dst reflect.Value
+		fi, props, ok := structFieldByName(sprops, name)
+		if ok {
+			dst = sv.Field(fi)
+		} else if oop, ok := sprops.OneofTypes[name]; ok {
+			// It is a oneof.
+			props = oop.Prop
+			nv := reflect.New(oop.Type.Elem())
+			dst = nv.Elem().Field(0)
+			field := sv.Field(oop.Field)
+			if !field.IsNil() {
+				return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name)
+			}
+			field.Set(nv)
+		}
+		if !dst.IsValid() {
+			return p.errorf("unknown field name %q in %v", name, st)
+		}
+
+		if dst.Kind() == reflect.Map {
+			// Consume any colon.
+			if err := p.checkForColon(props, dst.Type()); err != nil {
+				return err
+			}
+
+			// Construct the map if it doesn't already exist.
+			if dst.IsNil() {
+				dst.Set(reflect.MakeMap(dst.Type()))
+			}
+			key := reflect.New(dst.Type().Key()).Elem()
+			val := reflect.New(dst.Type().Elem()).Elem()
+
+			// The map entry should be this sequence of tokens:
+			//	< key : KEY value : VALUE >
+			// However, implementations may omit key or value, and technically
+			// we should support them in any order.  See b/28924776 for a time
+			// this went wrong.
+
+			tok := p.next()
+			var terminator string
+			switch tok.value {
+			case "<":
+				terminator = ">"
+			case "{":
+				terminator = "}"
+			default:
+				return p.errorf("expected '{' or '<', found %q", tok.value)
+			}
+			for {
+				tok := p.next()
+				if tok.err != nil {
+					return tok.err
+				}
+				if tok.value == terminator {
+					break
+				}
+				switch tok.value {
+				case "key":
+					if err := p.consumeToken(":"); err != nil {
+						return err
+					}
+					if err := p.readAny(key, props.MapKeyProp); err != nil {
+						return err
+					}
+					if err := p.consumeOptionalSeparator(); err != nil {
+						return err
+					}
+				case "value":
+					if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil {
+						return err
+					}
+					if err := p.readAny(val, props.MapValProp); err != nil {
+						return err
+					}
+					if err := p.consumeOptionalSeparator(); err != nil {
+						return err
+					}
+				default:
+					p.back()
+					return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value)
+				}
+			}
+
+			dst.SetMapIndex(key, val)
+			continue
+		}
+
+		// Check that it's not already set if it's not a repeated field.
+		if !props.Repeated && fieldSet[name] {
+			return p.errorf("non-repeated field %q was repeated", name)
+		}
+
+		if err := p.checkForColon(props, dst.Type()); err != nil {
+			return err
+		}
+
+		// Parse into the field.
+		fieldSet[name] = true
+		if err := p.readAny(dst, props); err != nil {
+			if _, ok := err.(*RequiredNotSetError); !ok {
+				return err
+			}
+			reqFieldErr = err
+		}
+		if props.Required {
+			reqCount--
+		}
+
+		if err := p.consumeOptionalSeparator(); err != nil {
+			return err
+		}
+
+	}
+
+	if reqCount > 0 {
+		return p.missingRequiredFieldError(sv)
+	}
+	return reqFieldErr
+}
+
+// consumeExtName consumes extension name or expanded Any type URL and the
+// following ']'. It returns the name or URL consumed.
+func (p *textParser) consumeExtName() (string, error) {
+	tok := p.next()
+	if tok.err != nil {
+		return "", tok.err
+	}
+
+	// If extension name or type url is quoted, it's a single token.
+	if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {
+		name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0]))
+		if err != nil {
+			return "", err
+		}
+		return name, p.consumeToken("]")
+	}
+
+	// Consume everything up to "]"
+	var parts []string
+	for tok.value != "]" {
+		parts = append(parts, tok.value)
+		tok = p.next()
+		if tok.err != nil {
+			return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
+		}
+		if p.done && tok.value != "]" {
+			return "", p.errorf("unclosed type_url or extension name")
+		}
+	}
+	return strings.Join(parts, ""), nil
+}
+
+// consumeOptionalSeparator consumes an optional semicolon or comma.
+// It is used in readStruct to provide backward compatibility.
+func (p *textParser) consumeOptionalSeparator() error {
+	tok := p.next()
+	if tok.err != nil {
+		return tok.err
+	}
+	if tok.value != ";" && tok.value != "," {
+		p.back()
+	}
+	return nil
+}
+
+func (p *textParser) readAny(v reflect.Value, props *Properties) error {
+	tok := p.next()
+	if tok.err != nil {
+		return tok.err
+	}
+	if tok.value == "" {
+		return p.errorf("unexpected EOF")
+	}
+
+	switch fv := v; fv.Kind() {
+	case reflect.Slice:
+		at := v.Type()
+		if at.Elem().Kind() == reflect.Uint8 {
+			// Special case for []byte
+			if tok.value[0] != '"' && tok.value[0] != '\'' {
+				// Deliberately written out here, as the error after
+				// this switch statement would write "invalid []byte: ...",
+				// which is not as user-friendly.
+				return p.errorf("invalid string: %v", tok.value)
+			}
+			bytes := []byte(tok.unquoted)
+			fv.Set(reflect.ValueOf(bytes))
+			return nil
+		}
+		// Repeated field.
+		if tok.value == "[" {
+			// Repeated field with list notation, like [1,2,3].
+			for {
+				fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
+				err := p.readAny(fv.Index(fv.Len()-1), props)
+				if err != nil {
+					return err
+				}
+				tok := p.next()
+				if tok.err != nil {
+					return tok.err
+				}
+				if tok.value == "]" {
+					break
+				}
+				if tok.value != "," {
+					return p.errorf("Expected ']' or ',' found %q", tok.value)
+				}
+			}
+			return nil
+		}
+		// One value of the repeated field.
+		p.back()
+		fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
+		return p.readAny(fv.Index(fv.Len()-1), props)
+	case reflect.Bool:
+		// true/1/t/True or false/f/0/False.
+		switch tok.value {
+		case "true", "1", "t", "True":
+			fv.SetBool(true)
+			return nil
+		case "false", "0", "f", "False":
+			fv.SetBool(false)
+			return nil
+		}
+	case reflect.Float32, reflect.Float64:
+		v := tok.value
+		// Ignore 'f' for compatibility with output generated by C++, but don't
+		// remove 'f' when the value is "-inf" or "inf".
+		if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" {
+			v = v[:len(v)-1]
+		}
+		if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil {
+			fv.SetFloat(f)
+			return nil
+		}
+	case reflect.Int32:
+		if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil {
+			fv.SetInt(x)
+			return nil
+		}
+
+		if len(props.Enum) == 0 {
+			break
+		}
+		m, ok := enumValueMaps[props.Enum]
+		if !ok {
+			break
+		}
+		x, ok := m[tok.value]
+		if !ok {
+			break
+		}
+		fv.SetInt(int64(x))
+		return nil
+	case reflect.Int64:
+		if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil {
+			fv.SetInt(x)
+			return nil
+		}
+
+	case reflect.Ptr:
+		// A basic field (indirected through pointer), or a repeated message/group
+		p.back()
+		fv.Set(reflect.New(fv.Type().Elem()))
+		return p.readAny(fv.Elem(), props)
+	case reflect.String:
+		if tok.value[0] == '"' || tok.value[0] == '\'' {
+			fv.SetString(tok.unquoted)
+			return nil
+		}
+	case reflect.Struct:
+		var terminator string
+		switch tok.value {
+		case "{":
+			terminator = "}"
+		case "<":
+			terminator = ">"
+		default:
+			return p.errorf("expected '{' or '<', found %q", tok.value)
+		}
+		// TODO: Handle nested messages which implement encoding.TextUnmarshaler.
+		return p.readStruct(fv, terminator)
+	case reflect.Uint32:
+		if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil {
+			fv.SetUint(uint64(x))
+			return nil
+		}
+	case reflect.Uint64:
+		if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil {
+			fv.SetUint(x)
+			return nil
+		}
+	}
+	return p.errorf("invalid %v: %v", v.Type(), tok.value)
+}
+
+// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb
+// before starting to unmarshal, so any existing data in pb is always removed.
+// If a required field is not set and no other error occurs,
+// UnmarshalText returns *RequiredNotSetError.
+func UnmarshalText(s string, pb Message) error {
+	if um, ok := pb.(encoding.TextUnmarshaler); ok {
+		return um.UnmarshalText([]byte(s))
+	}
+	pb.Reset()
+	v := reflect.ValueOf(pb)
+	return newTextParser(s).readStruct(v.Elem(), "")
+}
diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
new file mode 100644
index 0000000..1ded05b
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go
@@ -0,0 +1,2887 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/protobuf/descriptor.proto
+
+package descriptor
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type FieldDescriptorProto_Type int32
+
+const (
+	// 0 is reserved for errors.
+	// Order is weird for historical reasons.
+	FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1
+	FieldDescriptorProto_TYPE_FLOAT  FieldDescriptorProto_Type = 2
+	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+	// negative values are likely.
+	FieldDescriptorProto_TYPE_INT64  FieldDescriptorProto_Type = 3
+	FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4
+	// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+	// negative values are likely.
+	FieldDescriptorProto_TYPE_INT32   FieldDescriptorProto_Type = 5
+	FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6
+	FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7
+	FieldDescriptorProto_TYPE_BOOL    FieldDescriptorProto_Type = 8
+	FieldDescriptorProto_TYPE_STRING  FieldDescriptorProto_Type = 9
+	// Tag-delimited aggregate.
+	// Group type is deprecated and not supported in proto3. However, Proto3
+	// implementations should still be able to parse the group wire format and
+	// treat group fields as unknown fields.
+	FieldDescriptorProto_TYPE_GROUP   FieldDescriptorProto_Type = 10
+	FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11
+	// New in version 2.
+	FieldDescriptorProto_TYPE_BYTES    FieldDescriptorProto_Type = 12
+	FieldDescriptorProto_TYPE_UINT32   FieldDescriptorProto_Type = 13
+	FieldDescriptorProto_TYPE_ENUM     FieldDescriptorProto_Type = 14
+	FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15
+	FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16
+	FieldDescriptorProto_TYPE_SINT32   FieldDescriptorProto_Type = 17
+	FieldDescriptorProto_TYPE_SINT64   FieldDescriptorProto_Type = 18
+)
+
+var FieldDescriptorProto_Type_name = map[int32]string{
+	1:  "TYPE_DOUBLE",
+	2:  "TYPE_FLOAT",
+	3:  "TYPE_INT64",
+	4:  "TYPE_UINT64",
+	5:  "TYPE_INT32",
+	6:  "TYPE_FIXED64",
+	7:  "TYPE_FIXED32",
+	8:  "TYPE_BOOL",
+	9:  "TYPE_STRING",
+	10: "TYPE_GROUP",
+	11: "TYPE_MESSAGE",
+	12: "TYPE_BYTES",
+	13: "TYPE_UINT32",
+	14: "TYPE_ENUM",
+	15: "TYPE_SFIXED32",
+	16: "TYPE_SFIXED64",
+	17: "TYPE_SINT32",
+	18: "TYPE_SINT64",
+}
+
+var FieldDescriptorProto_Type_value = map[string]int32{
+	"TYPE_DOUBLE":   1,
+	"TYPE_FLOAT":    2,
+	"TYPE_INT64":    3,
+	"TYPE_UINT64":   4,
+	"TYPE_INT32":    5,
+	"TYPE_FIXED64":  6,
+	"TYPE_FIXED32":  7,
+	"TYPE_BOOL":     8,
+	"TYPE_STRING":   9,
+	"TYPE_GROUP":    10,
+	"TYPE_MESSAGE":  11,
+	"TYPE_BYTES":    12,
+	"TYPE_UINT32":   13,
+	"TYPE_ENUM":     14,
+	"TYPE_SFIXED32": 15,
+	"TYPE_SFIXED64": 16,
+	"TYPE_SINT32":   17,
+	"TYPE_SINT64":   18,
+}
+
+func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type {
+	p := new(FieldDescriptorProto_Type)
+	*p = x
+	return p
+}
+
+func (x FieldDescriptorProto_Type) String() string {
+	return proto.EnumName(FieldDescriptorProto_Type_name, int32(x))
+}
+
+func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type")
+	if err != nil {
+		return err
+	}
+	*x = FieldDescriptorProto_Type(value)
+	return nil
+}
+
+func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{4, 0}
+}
+
+type FieldDescriptorProto_Label int32
+
+const (
+	// 0 is reserved for errors
+	FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1
+	FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2
+	FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3
+)
+
+var FieldDescriptorProto_Label_name = map[int32]string{
+	1: "LABEL_OPTIONAL",
+	2: "LABEL_REQUIRED",
+	3: "LABEL_REPEATED",
+}
+
+var FieldDescriptorProto_Label_value = map[string]int32{
+	"LABEL_OPTIONAL": 1,
+	"LABEL_REQUIRED": 2,
+	"LABEL_REPEATED": 3,
+}
+
+func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label {
+	p := new(FieldDescriptorProto_Label)
+	*p = x
+	return p
+}
+
+func (x FieldDescriptorProto_Label) String() string {
+	return proto.EnumName(FieldDescriptorProto_Label_name, int32(x))
+}
+
+func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label")
+	if err != nil {
+		return err
+	}
+	*x = FieldDescriptorProto_Label(value)
+	return nil
+}
+
+func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{4, 1}
+}
+
+// Generated classes can be optimized for speed or code size.
+type FileOptions_OptimizeMode int32
+
+const (
+	FileOptions_SPEED FileOptions_OptimizeMode = 1
+	// etc.
+	FileOptions_CODE_SIZE    FileOptions_OptimizeMode = 2
+	FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3
+)
+
+var FileOptions_OptimizeMode_name = map[int32]string{
+	1: "SPEED",
+	2: "CODE_SIZE",
+	3: "LITE_RUNTIME",
+}
+
+var FileOptions_OptimizeMode_value = map[string]int32{
+	"SPEED":        1,
+	"CODE_SIZE":    2,
+	"LITE_RUNTIME": 3,
+}
+
+func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode {
+	p := new(FileOptions_OptimizeMode)
+	*p = x
+	return p
+}
+
+func (x FileOptions_OptimizeMode) String() string {
+	return proto.EnumName(FileOptions_OptimizeMode_name, int32(x))
+}
+
+func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode")
+	if err != nil {
+		return err
+	}
+	*x = FileOptions_OptimizeMode(value)
+	return nil
+}
+
+func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{10, 0}
+}
+
+type FieldOptions_CType int32
+
+const (
+	// Default mode.
+	FieldOptions_STRING       FieldOptions_CType = 0
+	FieldOptions_CORD         FieldOptions_CType = 1
+	FieldOptions_STRING_PIECE FieldOptions_CType = 2
+)
+
+var FieldOptions_CType_name = map[int32]string{
+	0: "STRING",
+	1: "CORD",
+	2: "STRING_PIECE",
+}
+
+var FieldOptions_CType_value = map[string]int32{
+	"STRING":       0,
+	"CORD":         1,
+	"STRING_PIECE": 2,
+}
+
+func (x FieldOptions_CType) Enum() *FieldOptions_CType {
+	p := new(FieldOptions_CType)
+	*p = x
+	return p
+}
+
+func (x FieldOptions_CType) String() string {
+	return proto.EnumName(FieldOptions_CType_name, int32(x))
+}
+
+func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType")
+	if err != nil {
+		return err
+	}
+	*x = FieldOptions_CType(value)
+	return nil
+}
+
+func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{12, 0}
+}
+
+type FieldOptions_JSType int32
+
+const (
+	// Use the default type.
+	FieldOptions_JS_NORMAL FieldOptions_JSType = 0
+	// Use JavaScript strings.
+	FieldOptions_JS_STRING FieldOptions_JSType = 1
+	// Use JavaScript numbers.
+	FieldOptions_JS_NUMBER FieldOptions_JSType = 2
+)
+
+var FieldOptions_JSType_name = map[int32]string{
+	0: "JS_NORMAL",
+	1: "JS_STRING",
+	2: "JS_NUMBER",
+}
+
+var FieldOptions_JSType_value = map[string]int32{
+	"JS_NORMAL": 0,
+	"JS_STRING": 1,
+	"JS_NUMBER": 2,
+}
+
+func (x FieldOptions_JSType) Enum() *FieldOptions_JSType {
+	p := new(FieldOptions_JSType)
+	*p = x
+	return p
+}
+
+func (x FieldOptions_JSType) String() string {
+	return proto.EnumName(FieldOptions_JSType_name, int32(x))
+}
+
+func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType")
+	if err != nil {
+		return err
+	}
+	*x = FieldOptions_JSType(value)
+	return nil
+}
+
+func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{12, 1}
+}
+
+// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
+// or neither? HTTP based RPC implementation may choose GET verb for safe
+// methods, and PUT verb for idempotent methods instead of the default POST.
+type MethodOptions_IdempotencyLevel int32
+
+const (
+	MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0
+	MethodOptions_NO_SIDE_EFFECTS     MethodOptions_IdempotencyLevel = 1
+	MethodOptions_IDEMPOTENT          MethodOptions_IdempotencyLevel = 2
+)
+
+var MethodOptions_IdempotencyLevel_name = map[int32]string{
+	0: "IDEMPOTENCY_UNKNOWN",
+	1: "NO_SIDE_EFFECTS",
+	2: "IDEMPOTENT",
+}
+
+var MethodOptions_IdempotencyLevel_value = map[string]int32{
+	"IDEMPOTENCY_UNKNOWN": 0,
+	"NO_SIDE_EFFECTS":     1,
+	"IDEMPOTENT":          2,
+}
+
+func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel {
+	p := new(MethodOptions_IdempotencyLevel)
+	*p = x
+	return p
+}
+
+func (x MethodOptions_IdempotencyLevel) String() string {
+	return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x))
+}
+
+func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel")
+	if err != nil {
+		return err
+	}
+	*x = MethodOptions_IdempotencyLevel(value)
+	return nil
+}
+
+func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{17, 0}
+}
+
+// The protocol compiler can output a FileDescriptorSet containing the .proto
+// files it parses.
+type FileDescriptorSet struct {
+	File                 []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *FileDescriptorSet) Reset()         { *m = FileDescriptorSet{} }
+func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) }
+func (*FileDescriptorSet) ProtoMessage()    {}
+func (*FileDescriptorSet) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{0}
+}
+
+func (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b)
+}
+func (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic)
+}
+func (m *FileDescriptorSet) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FileDescriptorSet.Merge(m, src)
+}
+func (m *FileDescriptorSet) XXX_Size() int {
+	return xxx_messageInfo_FileDescriptorSet.Size(m)
+}
+func (m *FileDescriptorSet) XXX_DiscardUnknown() {
+	xxx_messageInfo_FileDescriptorSet.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FileDescriptorSet proto.InternalMessageInfo
+
+func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto {
+	if m != nil {
+		return m.File
+	}
+	return nil
+}
+
+// Describes a complete .proto file.
+type FileDescriptorProto struct {
+	Name    *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"`
+	// Names of files imported by this file.
+	Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"`
+	// Indexes of the public imported files in the dependency list above.
+	PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"`
+	// Indexes of the weak imported files in the dependency list.
+	// For Google-internal migration only. Do not use.
+	WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"`
+	// All top-level definitions in this file.
+	MessageType []*DescriptorProto        `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"`
+	EnumType    []*EnumDescriptorProto    `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"`
+	Service     []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"`
+	Extension   []*FieldDescriptorProto   `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"`
+	Options     *FileOptions              `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
+	// This field contains optional information about the original source code.
+	// You may safely remove this entire field without harming runtime
+	// functionality of the descriptors -- the information is needed only by
+	// development tools.
+	SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"`
+	// The syntax of the proto file.
+	// The supported values are "proto2" and "proto3".
+	Syntax               *string  `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FileDescriptorProto) Reset()         { *m = FileDescriptorProto{} }
+func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*FileDescriptorProto) ProtoMessage()    {}
+func (*FileDescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{1}
+}
+
+func (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b)
+}
+func (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *FileDescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FileDescriptorProto.Merge(m, src)
+}
+func (m *FileDescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_FileDescriptorProto.Size(m)
+}
+func (m *FileDescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_FileDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FileDescriptorProto proto.InternalMessageInfo
+
+func (m *FileDescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *FileDescriptorProto) GetPackage() string {
+	if m != nil && m.Package != nil {
+		return *m.Package
+	}
+	return ""
+}
+
+func (m *FileDescriptorProto) GetDependency() []string {
+	if m != nil {
+		return m.Dependency
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetPublicDependency() []int32 {
+	if m != nil {
+		return m.PublicDependency
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetWeakDependency() []int32 {
+	if m != nil {
+		return m.WeakDependency
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetMessageType() []*DescriptorProto {
+	if m != nil {
+		return m.MessageType
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto {
+	if m != nil {
+		return m.EnumType
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto {
+	if m != nil {
+		return m.Service
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto {
+	if m != nil {
+		return m.Extension
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetOptions() *FileOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo {
+	if m != nil {
+		return m.SourceCodeInfo
+	}
+	return nil
+}
+
+func (m *FileDescriptorProto) GetSyntax() string {
+	if m != nil && m.Syntax != nil {
+		return *m.Syntax
+	}
+	return ""
+}
+
+// Describes a message type.
+type DescriptorProto struct {
+	Name           *string                           `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Field          []*FieldDescriptorProto           `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"`
+	Extension      []*FieldDescriptorProto           `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"`
+	NestedType     []*DescriptorProto                `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"`
+	EnumType       []*EnumDescriptorProto            `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"`
+	ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"`
+	OneofDecl      []*OneofDescriptorProto           `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"`
+	Options        *MessageOptions                   `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"`
+	ReservedRange  []*DescriptorProto_ReservedRange  `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"`
+	// Reserved field names, which may not be used by fields in the same message.
+	// A given name may only be reserved once.
+	ReservedName         []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DescriptorProto) Reset()         { *m = DescriptorProto{} }
+func (m *DescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*DescriptorProto) ProtoMessage()    {}
+func (*DescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{2}
+}
+
+func (m *DescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescriptorProto.Unmarshal(m, b)
+}
+func (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *DescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescriptorProto.Merge(m, src)
+}
+func (m *DescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_DescriptorProto.Size(m)
+}
+func (m *DescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescriptorProto proto.InternalMessageInfo
+
+func (m *DescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *DescriptorProto) GetField() []*FieldDescriptorProto {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetExtension() []*FieldDescriptorProto {
+	if m != nil {
+		return m.Extension
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetNestedType() []*DescriptorProto {
+	if m != nil {
+		return m.NestedType
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto {
+	if m != nil {
+		return m.EnumType
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange {
+	if m != nil {
+		return m.ExtensionRange
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto {
+	if m != nil {
+		return m.OneofDecl
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetOptions() *MessageOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange {
+	if m != nil {
+		return m.ReservedRange
+	}
+	return nil
+}
+
+func (m *DescriptorProto) GetReservedName() []string {
+	if m != nil {
+		return m.ReservedName
+	}
+	return nil
+}
+
+type DescriptorProto_ExtensionRange struct {
+	Start                *int32                 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
+	End                  *int32                 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
+	Options              *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *DescriptorProto_ExtensionRange) Reset()         { *m = DescriptorProto_ExtensionRange{} }
+func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) }
+func (*DescriptorProto_ExtensionRange) ProtoMessage()    {}
+func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{2, 0}
+}
+
+func (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b)
+}
+func (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic)
+}
+func (m *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(m, src)
+}
+func (m *DescriptorProto_ExtensionRange) XXX_Size() int {
+	return xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m)
+}
+func (m *DescriptorProto_ExtensionRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescriptorProto_ExtensionRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescriptorProto_ExtensionRange proto.InternalMessageInfo
+
+func (m *DescriptorProto_ExtensionRange) GetStart() int32 {
+	if m != nil && m.Start != nil {
+		return *m.Start
+	}
+	return 0
+}
+
+func (m *DescriptorProto_ExtensionRange) GetEnd() int32 {
+	if m != nil && m.End != nil {
+		return *m.End
+	}
+	return 0
+}
+
+func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+// Range of reserved tag numbers. Reserved tag numbers may not be used by
+// fields or extension ranges in the same message. Reserved ranges may
+// not overlap.
+type DescriptorProto_ReservedRange struct {
+	Start                *int32   `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
+	End                  *int32   `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DescriptorProto_ReservedRange) Reset()         { *m = DescriptorProto_ReservedRange{} }
+func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) }
+func (*DescriptorProto_ReservedRange) ProtoMessage()    {}
+func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{2, 1}
+}
+
+func (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b)
+}
+func (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic)
+}
+func (m *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescriptorProto_ReservedRange.Merge(m, src)
+}
+func (m *DescriptorProto_ReservedRange) XXX_Size() int {
+	return xxx_messageInfo_DescriptorProto_ReservedRange.Size(m)
+}
+func (m *DescriptorProto_ReservedRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescriptorProto_ReservedRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescriptorProto_ReservedRange proto.InternalMessageInfo
+
+func (m *DescriptorProto_ReservedRange) GetStart() int32 {
+	if m != nil && m.Start != nil {
+		return *m.Start
+	}
+	return 0
+}
+
+func (m *DescriptorProto_ReservedRange) GetEnd() int32 {
+	if m != nil && m.End != nil {
+		return *m.End
+	}
+	return 0
+}
+
+type ExtensionRangeOptions struct {
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *ExtensionRangeOptions) Reset()         { *m = ExtensionRangeOptions{} }
+func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) }
+func (*ExtensionRangeOptions) ProtoMessage()    {}
+func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{3}
+}
+
+var extRange_ExtensionRangeOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_ExtensionRangeOptions
+}
+
+func (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b)
+}
+func (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic)
+}
+func (m *ExtensionRangeOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ExtensionRangeOptions.Merge(m, src)
+}
+func (m *ExtensionRangeOptions) XXX_Size() int {
+	return xxx_messageInfo_ExtensionRangeOptions.Size(m)
+}
+func (m *ExtensionRangeOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_ExtensionRangeOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionRangeOptions proto.InternalMessageInfo
+
+func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+// Describes a field within a message.
+type FieldDescriptorProto struct {
+	Name   *string                     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Number *int32                      `protobuf:"varint,3,opt,name=number" json:"number,omitempty"`
+	Label  *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"`
+	// If type_name is set, this need not be set.  If both this and type_name
+	// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+	Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"`
+	// For message and enum types, this is the name of the type.  If the name
+	// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+	// rules are used to find the type (i.e. first the nested types within this
+	// message are searched, then within the parent, on up to the root
+	// namespace).
+	TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"`
+	// For extensions, this is the name of the type being extended.  It is
+	// resolved in the same manner as type_name.
+	Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"`
+	// For numeric types, contains the original text representation of the value.
+	// For booleans, "true" or "false".
+	// For strings, contains the default text contents (not escaped in any way).
+	// For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+	// TODO(kenton):  Base-64 encode?
+	DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"`
+	// If set, gives the index of a oneof in the containing type's oneof_decl
+	// list.  This field is a member of that oneof.
+	OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"`
+	// JSON name of this field. The value is set by protocol compiler. If the
+	// user has set a "json_name" option on this field, that option's value
+	// will be used. Otherwise, it's deduced from the field's name by converting
+	// it to camelCase.
+	JsonName             *string       `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"`
+	Options              *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *FieldDescriptorProto) Reset()         { *m = FieldDescriptorProto{} }
+func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*FieldDescriptorProto) ProtoMessage()    {}
+func (*FieldDescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{4}
+}
+
+func (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b)
+}
+func (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *FieldDescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FieldDescriptorProto.Merge(m, src)
+}
+func (m *FieldDescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_FieldDescriptorProto.Size(m)
+}
+func (m *FieldDescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_FieldDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FieldDescriptorProto proto.InternalMessageInfo
+
+func (m *FieldDescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *FieldDescriptorProto) GetNumber() int32 {
+	if m != nil && m.Number != nil {
+		return *m.Number
+	}
+	return 0
+}
+
+func (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label {
+	if m != nil && m.Label != nil {
+		return *m.Label
+	}
+	return FieldDescriptorProto_LABEL_OPTIONAL
+}
+
+func (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type {
+	if m != nil && m.Type != nil {
+		return *m.Type
+	}
+	return FieldDescriptorProto_TYPE_DOUBLE
+}
+
+func (m *FieldDescriptorProto) GetTypeName() string {
+	if m != nil && m.TypeName != nil {
+		return *m.TypeName
+	}
+	return ""
+}
+
+func (m *FieldDescriptorProto) GetExtendee() string {
+	if m != nil && m.Extendee != nil {
+		return *m.Extendee
+	}
+	return ""
+}
+
+func (m *FieldDescriptorProto) GetDefaultValue() string {
+	if m != nil && m.DefaultValue != nil {
+		return *m.DefaultValue
+	}
+	return ""
+}
+
+func (m *FieldDescriptorProto) GetOneofIndex() int32 {
+	if m != nil && m.OneofIndex != nil {
+		return *m.OneofIndex
+	}
+	return 0
+}
+
+func (m *FieldDescriptorProto) GetJsonName() string {
+	if m != nil && m.JsonName != nil {
+		return *m.JsonName
+	}
+	return ""
+}
+
+func (m *FieldDescriptorProto) GetOptions() *FieldOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+// Describes a oneof.
+type OneofDescriptorProto struct {
+	Name                 *string       `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Options              *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *OneofDescriptorProto) Reset()         { *m = OneofDescriptorProto{} }
+func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*OneofDescriptorProto) ProtoMessage()    {}
+func (*OneofDescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{5}
+}
+
+func (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b)
+}
+func (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *OneofDescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OneofDescriptorProto.Merge(m, src)
+}
+func (m *OneofDescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_OneofDescriptorProto.Size(m)
+}
+func (m *OneofDescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_OneofDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OneofDescriptorProto proto.InternalMessageInfo
+
+func (m *OneofDescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *OneofDescriptorProto) GetOptions() *OneofOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+// Describes an enum type.
+type EnumDescriptorProto struct {
+	Name    *string                     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Value   []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
+	Options *EnumOptions                `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+	// Range of reserved numeric values. Reserved numeric values may not be used
+	// by enum values in the same enum declaration. Reserved ranges may not
+	// overlap.
+	ReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:"bytes,4,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"`
+	// Reserved enum value names, which may not be reused. A given name may only
+	// be reserved once.
+	ReservedName         []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnumDescriptorProto) Reset()         { *m = EnumDescriptorProto{} }
+func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*EnumDescriptorProto) ProtoMessage()    {}
+func (*EnumDescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{6}
+}
+
+func (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b)
+}
+func (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *EnumDescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumDescriptorProto.Merge(m, src)
+}
+func (m *EnumDescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_EnumDescriptorProto.Size(m)
+}
+func (m *EnumDescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnumDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumDescriptorProto proto.InternalMessageInfo
+
+func (m *EnumDescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *EnumDescriptorProto) GetOptions() *EnumOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+func (m *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange {
+	if m != nil {
+		return m.ReservedRange
+	}
+	return nil
+}
+
+func (m *EnumDescriptorProto) GetReservedName() []string {
+	if m != nil {
+		return m.ReservedName
+	}
+	return nil
+}
+
+// Range of reserved numeric values. Reserved values may not be used by
+// entries in the same enum. Reserved ranges may not overlap.
+//
+// Note that this is distinct from DescriptorProto.ReservedRange in that it
+// is inclusive such that it can appropriately represent the entire int32
+// domain.
+type EnumDescriptorProto_EnumReservedRange struct {
+	Start                *int32   `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
+	End                  *int32   `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EnumDescriptorProto_EnumReservedRange) Reset()         { *m = EnumDescriptorProto_EnumReservedRange{} }
+func (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) }
+func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage()    {}
+func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{6, 0}
+}
+
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b)
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic)
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(m, src)
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int {
+	return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m)
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumDescriptorProto_EnumReservedRange proto.InternalMessageInfo
+
+func (m *EnumDescriptorProto_EnumReservedRange) GetStart() int32 {
+	if m != nil && m.Start != nil {
+		return *m.Start
+	}
+	return 0
+}
+
+func (m *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 {
+	if m != nil && m.End != nil {
+		return *m.End
+	}
+	return 0
+}
+
+// Describes a value within an enum.
+type EnumValueDescriptorProto struct {
+	Name                 *string           `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Number               *int32            `protobuf:"varint,2,opt,name=number" json:"number,omitempty"`
+	Options              *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *EnumValueDescriptorProto) Reset()         { *m = EnumValueDescriptorProto{} }
+func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*EnumValueDescriptorProto) ProtoMessage()    {}
+func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{7}
+}
+
+func (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b)
+}
+func (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *EnumValueDescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumValueDescriptorProto.Merge(m, src)
+}
+func (m *EnumValueDescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_EnumValueDescriptorProto.Size(m)
+}
+func (m *EnumValueDescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnumValueDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumValueDescriptorProto proto.InternalMessageInfo
+
+func (m *EnumValueDescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *EnumValueDescriptorProto) GetNumber() int32 {
+	if m != nil && m.Number != nil {
+		return *m.Number
+	}
+	return 0
+}
+
+func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+// Describes a service.
+type ServiceDescriptorProto struct {
+	Name                 *string                  `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Method               []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"`
+	Options              *ServiceOptions          `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *ServiceDescriptorProto) Reset()         { *m = ServiceDescriptorProto{} }
+func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*ServiceDescriptorProto) ProtoMessage()    {}
+func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{8}
+}
+
+func (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b)
+}
+func (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *ServiceDescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceDescriptorProto.Merge(m, src)
+}
+func (m *ServiceDescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_ServiceDescriptorProto.Size(m)
+}
+func (m *ServiceDescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServiceDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceDescriptorProto proto.InternalMessageInfo
+
+func (m *ServiceDescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto {
+	if m != nil {
+		return m.Method
+	}
+	return nil
+}
+
+func (m *ServiceDescriptorProto) GetOptions() *ServiceOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+// Describes a method of a service.
+type MethodDescriptorProto struct {
+	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	// Input and output type names.  These are resolved in the same way as
+	// FieldDescriptorProto.type_name, but must refer to a message type.
+	InputType  *string        `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"`
+	OutputType *string        `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"`
+	Options    *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"`
+	// Identifies if client streams multiple client messages
+	ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"`
+	// Identifies if server streams multiple server messages
+	ServerStreaming      *bool    `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MethodDescriptorProto) Reset()         { *m = MethodDescriptorProto{} }
+func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*MethodDescriptorProto) ProtoMessage()    {}
+func (*MethodDescriptorProto) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{9}
+}
+
+func (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b)
+}
+func (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic)
+}
+func (m *MethodDescriptorProto) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MethodDescriptorProto.Merge(m, src)
+}
+func (m *MethodDescriptorProto) XXX_Size() int {
+	return xxx_messageInfo_MethodDescriptorProto.Size(m)
+}
+func (m *MethodDescriptorProto) XXX_DiscardUnknown() {
+	xxx_messageInfo_MethodDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MethodDescriptorProto proto.InternalMessageInfo
+
+const Default_MethodDescriptorProto_ClientStreaming bool = false
+const Default_MethodDescriptorProto_ServerStreaming bool = false
+
+func (m *MethodDescriptorProto) GetName() string {
+	if m != nil && m.Name != nil {
+		return *m.Name
+	}
+	return ""
+}
+
+func (m *MethodDescriptorProto) GetInputType() string {
+	if m != nil && m.InputType != nil {
+		return *m.InputType
+	}
+	return ""
+}
+
+func (m *MethodDescriptorProto) GetOutputType() string {
+	if m != nil && m.OutputType != nil {
+		return *m.OutputType
+	}
+	return ""
+}
+
+func (m *MethodDescriptorProto) GetOptions() *MethodOptions {
+	if m != nil {
+		return m.Options
+	}
+	return nil
+}
+
+func (m *MethodDescriptorProto) GetClientStreaming() bool {
+	if m != nil && m.ClientStreaming != nil {
+		return *m.ClientStreaming
+	}
+	return Default_MethodDescriptorProto_ClientStreaming
+}
+
+func (m *MethodDescriptorProto) GetServerStreaming() bool {
+	if m != nil && m.ServerStreaming != nil {
+		return *m.ServerStreaming
+	}
+	return Default_MethodDescriptorProto_ServerStreaming
+}
+
+type FileOptions struct {
+	// Sets the Java package where classes generated from this .proto will be
+	// placed.  By default, the proto package is used, but this is often
+	// inappropriate because proto packages do not normally start with backwards
+	// domain names.
+	JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"`
+	// If set, all the classes from the .proto file are wrapped in a single
+	// outer class with the given name.  This applies to both Proto1
+	// (equivalent to the old "--one_java_file" option) and Proto2 (where
+	// a .proto always translates to a single class, but you may want to
+	// explicitly choose the class name).
+	JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"`
+	// If set true, then the Java code generator will generate a separate .java
+	// file for each top-level message, enum, and service defined in the .proto
+	// file.  Thus, these types will *not* be nested inside the outer class
+	// named by java_outer_classname.  However, the outer class will still be
+	// generated to contain the file's getDescriptor() method as well as any
+	// top-level extensions defined in the file.
+	JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"`
+	// This option does nothing.
+	JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` // Deprecated: Do not use.
+	// If set true, then the Java2 code generator will generate code that
+	// throws an exception whenever an attempt is made to assign a non-UTF-8
+	// byte sequence to a string field.
+	// Message reflection will do the same.
+	// However, an extension field still accepts non-UTF-8 byte sequences.
+	// This option has no effect on when used with the lite runtime.
+	JavaStringCheckUtf8 *bool                     `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"`
+	OptimizeFor         *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"`
+	// Sets the Go package where structs generated from this .proto will be
+	// placed. If omitted, the Go package will be derived from the following:
+	//   - The basename of the package import path, if provided.
+	//   - Otherwise, the package statement in the .proto file, if present.
+	//   - Otherwise, the basename of the .proto file, without extension.
+	GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"`
+	// Should generic services be generated in each language?  "Generic" services
+	// are not specific to any particular RPC system.  They are generated by the
+	// main code generators in each language (without additional plugins).
+	// Generic services were the only kind of service generation supported by
+	// early versions of google.protobuf.
+	//
+	// Generic services are now considered deprecated in favor of using plugins
+	// that generate code specific to your particular RPC system.  Therefore,
+	// these default to false.  Old code which depends on generic services should
+	// explicitly set them to true.
+	CcGenericServices   *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"`
+	JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"`
+	PyGenericServices   *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"`
+	PhpGenericServices  *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"`
+	// Is this file deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for everything in the file, or it will be completely ignored; in the very
+	// least, this is a formalization for deprecating files.
+	Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
+	// Enables the use of arenas for the proto messages in this file. This applies
+	// only to generated classes for C++.
+	CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0" json:"cc_enable_arenas,omitempty"`
+	// Sets the objective c class prefix which is prepended to all objective c
+	// generated classes from this .proto. There is no default.
+	ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"`
+	// Namespace for generated classes; defaults to the package.
+	CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"`
+	// By default Swift generators will take the proto package and CamelCase it
+	// replacing '.' with underscore and use that to prefix the types/symbols
+	// defined. When this options is provided, they will use this value instead
+	// to prefix the types/symbols defined.
+	SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"`
+	// Sets the php class prefix which is prepended to all php generated classes
+	// from this .proto. Default is empty.
+	PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"`
+	// Use this option to change the namespace of php generated classes. Default
+	// is empty. When this option is empty, the package name will be used for
+	// determining the namespace.
+	PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"`
+	// Use this option to change the namespace of php generated metadata classes.
+	// Default is empty. When this option is empty, the proto file name will be used
+	// for determining the namespace.
+	PhpMetadataNamespace *string `protobuf:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"`
+	// Use this option to change the package of ruby generated classes. Default
+	// is empty. When this option is not set, the package name will be used for
+	// determining the ruby package.
+	RubyPackage *string `protobuf:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"`
+	// The parser stores options it doesn't recognize here.
+	// See the documentation for the "Options" section above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *FileOptions) Reset()         { *m = FileOptions{} }
+func (m *FileOptions) String() string { return proto.CompactTextString(m) }
+func (*FileOptions) ProtoMessage()    {}
+func (*FileOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{10}
+}
+
+var extRange_FileOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_FileOptions
+}
+
+func (m *FileOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FileOptions.Unmarshal(m, b)
+}
+func (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FileOptions.Marshal(b, m, deterministic)
+}
+func (m *FileOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FileOptions.Merge(m, src)
+}
+func (m *FileOptions) XXX_Size() int {
+	return xxx_messageInfo_FileOptions.Size(m)
+}
+func (m *FileOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_FileOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FileOptions proto.InternalMessageInfo
+
+const Default_FileOptions_JavaMultipleFiles bool = false
+const Default_FileOptions_JavaStringCheckUtf8 bool = false
+const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED
+const Default_FileOptions_CcGenericServices bool = false
+const Default_FileOptions_JavaGenericServices bool = false
+const Default_FileOptions_PyGenericServices bool = false
+const Default_FileOptions_PhpGenericServices bool = false
+const Default_FileOptions_Deprecated bool = false
+const Default_FileOptions_CcEnableArenas bool = false
+
+func (m *FileOptions) GetJavaPackage() string {
+	if m != nil && m.JavaPackage != nil {
+		return *m.JavaPackage
+	}
+	return ""
+}
+
+func (m *FileOptions) GetJavaOuterClassname() string {
+	if m != nil && m.JavaOuterClassname != nil {
+		return *m.JavaOuterClassname
+	}
+	return ""
+}
+
+func (m *FileOptions) GetJavaMultipleFiles() bool {
+	if m != nil && m.JavaMultipleFiles != nil {
+		return *m.JavaMultipleFiles
+	}
+	return Default_FileOptions_JavaMultipleFiles
+}
+
+// Deprecated: Do not use.
+func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool {
+	if m != nil && m.JavaGenerateEqualsAndHash != nil {
+		return *m.JavaGenerateEqualsAndHash
+	}
+	return false
+}
+
+func (m *FileOptions) GetJavaStringCheckUtf8() bool {
+	if m != nil && m.JavaStringCheckUtf8 != nil {
+		return *m.JavaStringCheckUtf8
+	}
+	return Default_FileOptions_JavaStringCheckUtf8
+}
+
+func (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode {
+	if m != nil && m.OptimizeFor != nil {
+		return *m.OptimizeFor
+	}
+	return Default_FileOptions_OptimizeFor
+}
+
+func (m *FileOptions) GetGoPackage() string {
+	if m != nil && m.GoPackage != nil {
+		return *m.GoPackage
+	}
+	return ""
+}
+
+func (m *FileOptions) GetCcGenericServices() bool {
+	if m != nil && m.CcGenericServices != nil {
+		return *m.CcGenericServices
+	}
+	return Default_FileOptions_CcGenericServices
+}
+
+func (m *FileOptions) GetJavaGenericServices() bool {
+	if m != nil && m.JavaGenericServices != nil {
+		return *m.JavaGenericServices
+	}
+	return Default_FileOptions_JavaGenericServices
+}
+
+func (m *FileOptions) GetPyGenericServices() bool {
+	if m != nil && m.PyGenericServices != nil {
+		return *m.PyGenericServices
+	}
+	return Default_FileOptions_PyGenericServices
+}
+
+func (m *FileOptions) GetPhpGenericServices() bool {
+	if m != nil && m.PhpGenericServices != nil {
+		return *m.PhpGenericServices
+	}
+	return Default_FileOptions_PhpGenericServices
+}
+
+func (m *FileOptions) GetDeprecated() bool {
+	if m != nil && m.Deprecated != nil {
+		return *m.Deprecated
+	}
+	return Default_FileOptions_Deprecated
+}
+
+func (m *FileOptions) GetCcEnableArenas() bool {
+	if m != nil && m.CcEnableArenas != nil {
+		return *m.CcEnableArenas
+	}
+	return Default_FileOptions_CcEnableArenas
+}
+
+func (m *FileOptions) GetObjcClassPrefix() string {
+	if m != nil && m.ObjcClassPrefix != nil {
+		return *m.ObjcClassPrefix
+	}
+	return ""
+}
+
+func (m *FileOptions) GetCsharpNamespace() string {
+	if m != nil && m.CsharpNamespace != nil {
+		return *m.CsharpNamespace
+	}
+	return ""
+}
+
+func (m *FileOptions) GetSwiftPrefix() string {
+	if m != nil && m.SwiftPrefix != nil {
+		return *m.SwiftPrefix
+	}
+	return ""
+}
+
+func (m *FileOptions) GetPhpClassPrefix() string {
+	if m != nil && m.PhpClassPrefix != nil {
+		return *m.PhpClassPrefix
+	}
+	return ""
+}
+
+func (m *FileOptions) GetPhpNamespace() string {
+	if m != nil && m.PhpNamespace != nil {
+		return *m.PhpNamespace
+	}
+	return ""
+}
+
+func (m *FileOptions) GetPhpMetadataNamespace() string {
+	if m != nil && m.PhpMetadataNamespace != nil {
+		return *m.PhpMetadataNamespace
+	}
+	return ""
+}
+
+func (m *FileOptions) GetRubyPackage() string {
+	if m != nil && m.RubyPackage != nil {
+		return *m.RubyPackage
+	}
+	return ""
+}
+
+func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+type MessageOptions struct {
+	// Set true to use the old proto1 MessageSet wire format for extensions.
+	// This is provided for backwards-compatibility with the MessageSet wire
+	// format.  You should not use this for any other reason:  It's less
+	// efficient, has fewer features, and is more complicated.
+	//
+	// The message must be defined exactly as follows:
+	//   message Foo {
+	//     option message_set_wire_format = true;
+	//     extensions 4 to max;
+	//   }
+	// Note that the message cannot have any defined fields; MessageSets only
+	// have extensions.
+	//
+	// All extensions of your type must be singular messages; e.g. they cannot
+	// be int32s, enums, or repeated messages.
+	//
+	// Because this is an option, the above two restrictions are not enforced by
+	// the protocol compiler.
+	MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"`
+	// Disables the generation of the standard "descriptor()" accessor, which can
+	// conflict with a field of the same name.  This is meant to make migration
+	// from proto1 easier; new code should avoid fields named "descriptor".
+	NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"`
+	// Is this message deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the message, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating messages.
+	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
+	// Whether the message is an automatically generated map entry type for the
+	// maps field.
+	//
+	// For maps fields:
+	//     map<KeyType, ValueType> map_field = 1;
+	// The parsed descriptor looks like:
+	//     message MapFieldEntry {
+	//         option map_entry = true;
+	//         optional KeyType key = 1;
+	//         optional ValueType value = 2;
+	//     }
+	//     repeated MapFieldEntry map_field = 1;
+	//
+	// Implementations may choose not to generate the map_entry=true message, but
+	// use a native map in the target language to hold the keys and values.
+	// The reflection APIs in such implementions still need to work as
+	// if the field is a repeated message field.
+	//
+	// NOTE: Do not set the option in .proto files. Always use the maps syntax
+	// instead. The option should only be implicitly set by the proto compiler
+	// parser.
+	MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"`
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *MessageOptions) Reset()         { *m = MessageOptions{} }
+func (m *MessageOptions) String() string { return proto.CompactTextString(m) }
+func (*MessageOptions) ProtoMessage()    {}
+func (*MessageOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{11}
+}
+
+var extRange_MessageOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_MessageOptions
+}
+
+func (m *MessageOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MessageOptions.Unmarshal(m, b)
+}
+func (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic)
+}
+func (m *MessageOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MessageOptions.Merge(m, src)
+}
+func (m *MessageOptions) XXX_Size() int {
+	return xxx_messageInfo_MessageOptions.Size(m)
+}
+func (m *MessageOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_MessageOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MessageOptions proto.InternalMessageInfo
+
+const Default_MessageOptions_MessageSetWireFormat bool = false
+const Default_MessageOptions_NoStandardDescriptorAccessor bool = false
+const Default_MessageOptions_Deprecated bool = false
+
+func (m *MessageOptions) GetMessageSetWireFormat() bool {
+	if m != nil && m.MessageSetWireFormat != nil {
+		return *m.MessageSetWireFormat
+	}
+	return Default_MessageOptions_MessageSetWireFormat
+}
+
+func (m *MessageOptions) GetNoStandardDescriptorAccessor() bool {
+	if m != nil && m.NoStandardDescriptorAccessor != nil {
+		return *m.NoStandardDescriptorAccessor
+	}
+	return Default_MessageOptions_NoStandardDescriptorAccessor
+}
+
+func (m *MessageOptions) GetDeprecated() bool {
+	if m != nil && m.Deprecated != nil {
+		return *m.Deprecated
+	}
+	return Default_MessageOptions_Deprecated
+}
+
+func (m *MessageOptions) GetMapEntry() bool {
+	if m != nil && m.MapEntry != nil {
+		return *m.MapEntry
+	}
+	return false
+}
+
+func (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+type FieldOptions struct {
+	// The ctype option instructs the C++ code generator to use a different
+	// representation of the field than it normally would.  See the specific
+	// options below.  This option is not yet implemented in the open source
+	// release -- sorry, we'll try to include it in a future version!
+	Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"`
+	// The packed option can be enabled for repeated primitive fields to enable
+	// a more efficient representation on the wire. Rather than repeatedly
+	// writing the tag and type for each element, the entire array is encoded as
+	// a single length-delimited blob. In proto3, only explicit setting it to
+	// false will avoid using packed encoding.
+	Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"`
+	// The jstype option determines the JavaScript type used for values of the
+	// field.  The option is permitted only for 64 bit integral and fixed types
+	// (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
+	// is represented as JavaScript string, which avoids loss of precision that
+	// can happen when a large value is converted to a floating point JavaScript.
+	// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
+	// use the JavaScript "number" type.  The behavior of the default option
+	// JS_NORMAL is implementation dependent.
+	//
+	// This option is an enum to permit additional types to be added, e.g.
+	// goog.math.Integer.
+	Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"`
+	// Should this field be parsed lazily?  Lazy applies only to message-type
+	// fields.  It means that when the outer message is initially parsed, the
+	// inner message's contents will not be parsed but instead stored in encoded
+	// form.  The inner message will actually be parsed when it is first accessed.
+	//
+	// This is only a hint.  Implementations are free to choose whether to use
+	// eager or lazy parsing regardless of the value of this option.  However,
+	// setting this option true suggests that the protocol author believes that
+	// using lazy parsing on this field is worth the additional bookkeeping
+	// overhead typically needed to implement it.
+	//
+	// This option does not affect the public interface of any generated code;
+	// all method signatures remain the same.  Furthermore, thread-safety of the
+	// interface is not affected by this option; const methods remain safe to
+	// call from multiple threads concurrently, while non-const methods continue
+	// to require exclusive access.
+	//
+	//
+	// Note that implementations may choose not to check required fields within
+	// a lazy sub-message.  That is, calling IsInitialized() on the outer message
+	// may return true even if the inner message has missing required fields.
+	// This is necessary because otherwise the inner message would have to be
+	// parsed in order to perform the check, defeating the purpose of lazy
+	// parsing.  An implementation which chooses not to check required fields
+	// must be consistent about it.  That is, for any particular sub-message, the
+	// implementation must either *always* check its required fields, or *never*
+	// check its required fields, regardless of whether or not the message has
+	// been parsed.
+	Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"`
+	// Is this field deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for accessors, or it will be completely ignored; in the very least, this
+	// is a formalization for deprecating fields.
+	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
+	// For Google-internal migration only. Do not use.
+	Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"`
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *FieldOptions) Reset()         { *m = FieldOptions{} }
+func (m *FieldOptions) String() string { return proto.CompactTextString(m) }
+func (*FieldOptions) ProtoMessage()    {}
+func (*FieldOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{12}
+}
+
+var extRange_FieldOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_FieldOptions
+}
+
+func (m *FieldOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FieldOptions.Unmarshal(m, b)
+}
+func (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic)
+}
+func (m *FieldOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FieldOptions.Merge(m, src)
+}
+func (m *FieldOptions) XXX_Size() int {
+	return xxx_messageInfo_FieldOptions.Size(m)
+}
+func (m *FieldOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_FieldOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FieldOptions proto.InternalMessageInfo
+
+const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING
+const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL
+const Default_FieldOptions_Lazy bool = false
+const Default_FieldOptions_Deprecated bool = false
+const Default_FieldOptions_Weak bool = false
+
+func (m *FieldOptions) GetCtype() FieldOptions_CType {
+	if m != nil && m.Ctype != nil {
+		return *m.Ctype
+	}
+	return Default_FieldOptions_Ctype
+}
+
+func (m *FieldOptions) GetPacked() bool {
+	if m != nil && m.Packed != nil {
+		return *m.Packed
+	}
+	return false
+}
+
+func (m *FieldOptions) GetJstype() FieldOptions_JSType {
+	if m != nil && m.Jstype != nil {
+		return *m.Jstype
+	}
+	return Default_FieldOptions_Jstype
+}
+
+func (m *FieldOptions) GetLazy() bool {
+	if m != nil && m.Lazy != nil {
+		return *m.Lazy
+	}
+	return Default_FieldOptions_Lazy
+}
+
+func (m *FieldOptions) GetDeprecated() bool {
+	if m != nil && m.Deprecated != nil {
+		return *m.Deprecated
+	}
+	return Default_FieldOptions_Deprecated
+}
+
+func (m *FieldOptions) GetWeak() bool {
+	if m != nil && m.Weak != nil {
+		return *m.Weak
+	}
+	return Default_FieldOptions_Weak
+}
+
+func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+type OneofOptions struct {
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *OneofOptions) Reset()         { *m = OneofOptions{} }
+func (m *OneofOptions) String() string { return proto.CompactTextString(m) }
+func (*OneofOptions) ProtoMessage()    {}
+func (*OneofOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{13}
+}
+
+var extRange_OneofOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_OneofOptions
+}
+
+func (m *OneofOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OneofOptions.Unmarshal(m, b)
+}
+func (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic)
+}
+func (m *OneofOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OneofOptions.Merge(m, src)
+}
+func (m *OneofOptions) XXX_Size() int {
+	return xxx_messageInfo_OneofOptions.Size(m)
+}
+func (m *OneofOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_OneofOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OneofOptions proto.InternalMessageInfo
+
+func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+type EnumOptions struct {
+	// Set this option to true to allow mapping different tag names to the same
+	// value.
+	AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"`
+	// Is this enum deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the enum, or it will be completely ignored; in the very least, this
+	// is a formalization for deprecating enums.
+	Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *EnumOptions) Reset()         { *m = EnumOptions{} }
+func (m *EnumOptions) String() string { return proto.CompactTextString(m) }
+func (*EnumOptions) ProtoMessage()    {}
+func (*EnumOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{14}
+}
+
+var extRange_EnumOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_EnumOptions
+}
+
+func (m *EnumOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnumOptions.Unmarshal(m, b)
+}
+func (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic)
+}
+func (m *EnumOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumOptions.Merge(m, src)
+}
+func (m *EnumOptions) XXX_Size() int {
+	return xxx_messageInfo_EnumOptions.Size(m)
+}
+func (m *EnumOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnumOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumOptions proto.InternalMessageInfo
+
+const Default_EnumOptions_Deprecated bool = false
+
+func (m *EnumOptions) GetAllowAlias() bool {
+	if m != nil && m.AllowAlias != nil {
+		return *m.AllowAlias
+	}
+	return false
+}
+
+func (m *EnumOptions) GetDeprecated() bool {
+	if m != nil && m.Deprecated != nil {
+		return *m.Deprecated
+	}
+	return Default_EnumOptions_Deprecated
+}
+
+func (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+type EnumValueOptions struct {
+	// Is this enum value deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the enum value, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating enum values.
+	Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *EnumValueOptions) Reset()         { *m = EnumValueOptions{} }
+func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) }
+func (*EnumValueOptions) ProtoMessage()    {}
+func (*EnumValueOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{15}
+}
+
+var extRange_EnumValueOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_EnumValueOptions
+}
+
+func (m *EnumValueOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EnumValueOptions.Unmarshal(m, b)
+}
+func (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic)
+}
+func (m *EnumValueOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EnumValueOptions.Merge(m, src)
+}
+func (m *EnumValueOptions) XXX_Size() int {
+	return xxx_messageInfo_EnumValueOptions.Size(m)
+}
+func (m *EnumValueOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_EnumValueOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumValueOptions proto.InternalMessageInfo
+
+const Default_EnumValueOptions_Deprecated bool = false
+
+func (m *EnumValueOptions) GetDeprecated() bool {
+	if m != nil && m.Deprecated != nil {
+		return *m.Deprecated
+	}
+	return Default_EnumValueOptions_Deprecated
+}
+
+func (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+type ServiceOptions struct {
+	// Is this service deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the service, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating services.
+	Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *ServiceOptions) Reset()         { *m = ServiceOptions{} }
+func (m *ServiceOptions) String() string { return proto.CompactTextString(m) }
+func (*ServiceOptions) ProtoMessage()    {}
+func (*ServiceOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{16}
+}
+
+var extRange_ServiceOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_ServiceOptions
+}
+
+func (m *ServiceOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ServiceOptions.Unmarshal(m, b)
+}
+func (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic)
+}
+func (m *ServiceOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ServiceOptions.Merge(m, src)
+}
+func (m *ServiceOptions) XXX_Size() int {
+	return xxx_messageInfo_ServiceOptions.Size(m)
+}
+func (m *ServiceOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_ServiceOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceOptions proto.InternalMessageInfo
+
+const Default_ServiceOptions_Deprecated bool = false
+
+func (m *ServiceOptions) GetDeprecated() bool {
+	if m != nil && m.Deprecated != nil {
+		return *m.Deprecated
+	}
+	return Default_ServiceOptions_Deprecated
+}
+
+func (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+type MethodOptions struct {
+	// Is this method deprecated?
+	// Depending on the target platform, this can emit Deprecated annotations
+	// for the method, or it will be completely ignored; in the very least,
+	// this is a formalization for deprecating methods.
+	Deprecated       *bool                           `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
+	IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"`
+	// The parser stores options it doesn't recognize here. See above.
+	UninterpretedOption          []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+	XXX_NoUnkeyedLiteral         struct{}               `json:"-"`
+	proto.XXX_InternalExtensions `json:"-"`
+	XXX_unrecognized             []byte `json:"-"`
+	XXX_sizecache                int32  `json:"-"`
+}
+
+func (m *MethodOptions) Reset()         { *m = MethodOptions{} }
+func (m *MethodOptions) String() string { return proto.CompactTextString(m) }
+func (*MethodOptions) ProtoMessage()    {}
+func (*MethodOptions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{17}
+}
+
+var extRange_MethodOptions = []proto.ExtensionRange{
+	{Start: 1000, End: 536870911},
+}
+
+func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange {
+	return extRange_MethodOptions
+}
+
+func (m *MethodOptions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MethodOptions.Unmarshal(m, b)
+}
+func (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic)
+}
+func (m *MethodOptions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MethodOptions.Merge(m, src)
+}
+func (m *MethodOptions) XXX_Size() int {
+	return xxx_messageInfo_MethodOptions.Size(m)
+}
+func (m *MethodOptions) XXX_DiscardUnknown() {
+	xxx_messageInfo_MethodOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MethodOptions proto.InternalMessageInfo
+
+const Default_MethodOptions_Deprecated bool = false
+const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN
+
+func (m *MethodOptions) GetDeprecated() bool {
+	if m != nil && m.Deprecated != nil {
+		return *m.Deprecated
+	}
+	return Default_MethodOptions_Deprecated
+}
+
+func (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel {
+	if m != nil && m.IdempotencyLevel != nil {
+		return *m.IdempotencyLevel
+	}
+	return Default_MethodOptions_IdempotencyLevel
+}
+
+func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption {
+	if m != nil {
+		return m.UninterpretedOption
+	}
+	return nil
+}
+
+// A message representing a option the parser does not recognize. This only
+// appears in options protos created by the compiler::Parser class.
+// DescriptorPool resolves these when building Descriptor objects. Therefore,
+// options protos in descriptor objects (e.g. returned by Descriptor::options(),
+// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+// in them.
+type UninterpretedOption struct {
+	Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"`
+	// The value of the uninterpreted option, in whatever type the tokenizer
+	// identified it as during parsing. Exactly one of these should be set.
+	IdentifierValue      *string  `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"`
+	PositiveIntValue     *uint64  `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"`
+	NegativeIntValue     *int64   `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"`
+	DoubleValue          *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"`
+	StringValue          []byte   `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"`
+	AggregateValue       *string  `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UninterpretedOption) Reset()         { *m = UninterpretedOption{} }
+func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) }
+func (*UninterpretedOption) ProtoMessage()    {}
+func (*UninterpretedOption) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{18}
+}
+
+func (m *UninterpretedOption) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UninterpretedOption.Unmarshal(m, b)
+}
+func (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic)
+}
+func (m *UninterpretedOption) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UninterpretedOption.Merge(m, src)
+}
+func (m *UninterpretedOption) XXX_Size() int {
+	return xxx_messageInfo_UninterpretedOption.Size(m)
+}
+func (m *UninterpretedOption) XXX_DiscardUnknown() {
+	xxx_messageInfo_UninterpretedOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UninterpretedOption proto.InternalMessageInfo
+
+func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart {
+	if m != nil {
+		return m.Name
+	}
+	return nil
+}
+
+func (m *UninterpretedOption) GetIdentifierValue() string {
+	if m != nil && m.IdentifierValue != nil {
+		return *m.IdentifierValue
+	}
+	return ""
+}
+
+func (m *UninterpretedOption) GetPositiveIntValue() uint64 {
+	if m != nil && m.PositiveIntValue != nil {
+		return *m.PositiveIntValue
+	}
+	return 0
+}
+
+func (m *UninterpretedOption) GetNegativeIntValue() int64 {
+	if m != nil && m.NegativeIntValue != nil {
+		return *m.NegativeIntValue
+	}
+	return 0
+}
+
+func (m *UninterpretedOption) GetDoubleValue() float64 {
+	if m != nil && m.DoubleValue != nil {
+		return *m.DoubleValue
+	}
+	return 0
+}
+
+func (m *UninterpretedOption) GetStringValue() []byte {
+	if m != nil {
+		return m.StringValue
+	}
+	return nil
+}
+
+func (m *UninterpretedOption) GetAggregateValue() string {
+	if m != nil && m.AggregateValue != nil {
+		return *m.AggregateValue
+	}
+	return ""
+}
+
+// The name of the uninterpreted option.  Each string represents a segment in
+// a dot-separated name.  is_extension is true iff a segment represents an
+// extension (denoted with parentheses in options specs in .proto files).
+// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+// "foo.(bar.baz).qux".
+type UninterpretedOption_NamePart struct {
+	NamePart             *string  `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"`
+	IsExtension          *bool    `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UninterpretedOption_NamePart) Reset()         { *m = UninterpretedOption_NamePart{} }
+func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) }
+func (*UninterpretedOption_NamePart) ProtoMessage()    {}
+func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{18, 0}
+}
+
+func (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b)
+}
+func (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic)
+}
+func (m *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UninterpretedOption_NamePart.Merge(m, src)
+}
+func (m *UninterpretedOption_NamePart) XXX_Size() int {
+	return xxx_messageInfo_UninterpretedOption_NamePart.Size(m)
+}
+func (m *UninterpretedOption_NamePart) XXX_DiscardUnknown() {
+	xxx_messageInfo_UninterpretedOption_NamePart.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UninterpretedOption_NamePart proto.InternalMessageInfo
+
+func (m *UninterpretedOption_NamePart) GetNamePart() string {
+	if m != nil && m.NamePart != nil {
+		return *m.NamePart
+	}
+	return ""
+}
+
+func (m *UninterpretedOption_NamePart) GetIsExtension() bool {
+	if m != nil && m.IsExtension != nil {
+		return *m.IsExtension
+	}
+	return false
+}
+
+// Encapsulates information about the original source file from which a
+// FileDescriptorProto was generated.
+type SourceCodeInfo struct {
+	// A Location identifies a piece of source code in a .proto file which
+	// corresponds to a particular definition.  This information is intended
+	// to be useful to IDEs, code indexers, documentation generators, and similar
+	// tools.
+	//
+	// For example, say we have a file like:
+	//   message Foo {
+	//     optional string foo = 1;
+	//   }
+	// Let's look at just the field definition:
+	//   optional string foo = 1;
+	//   ^       ^^     ^^  ^  ^^^
+	//   a       bc     de  f  ghi
+	// We have the following locations:
+	//   span   path               represents
+	//   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+	//   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+	//   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+	//   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+	//   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+	//
+	// Notes:
+	// - A location may refer to a repeated field itself (i.e. not to any
+	//   particular index within it).  This is used whenever a set of elements are
+	//   logically enclosed in a single code segment.  For example, an entire
+	//   extend block (possibly containing multiple extension definitions) will
+	//   have an outer location whose path refers to the "extensions" repeated
+	//   field without an index.
+	// - Multiple locations may have the same path.  This happens when a single
+	//   logical declaration is spread out across multiple places.  The most
+	//   obvious example is the "extend" block again -- there may be multiple
+	//   extend blocks in the same scope, each of which will have the same path.
+	// - A location's span is not always a subset of its parent's span.  For
+	//   example, the "extendee" of an extension declaration appears at the
+	//   beginning of the "extend" block and is shared by all extensions within
+	//   the block.
+	// - Just because a location's span is a subset of some other location's span
+	//   does not mean that it is a descendent.  For example, a "group" defines
+	//   both a type and a field in a single declaration.  Thus, the locations
+	//   corresponding to the type and field and their components will overlap.
+	// - Code which tries to interpret locations should probably be designed to
+	//   ignore those that it doesn't understand, as more types of locations could
+	//   be recorded in the future.
+	Location             []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *SourceCodeInfo) Reset()         { *m = SourceCodeInfo{} }
+func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) }
+func (*SourceCodeInfo) ProtoMessage()    {}
+func (*SourceCodeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{19}
+}
+
+func (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b)
+}
+func (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic)
+}
+func (m *SourceCodeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SourceCodeInfo.Merge(m, src)
+}
+func (m *SourceCodeInfo) XXX_Size() int {
+	return xxx_messageInfo_SourceCodeInfo.Size(m)
+}
+func (m *SourceCodeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_SourceCodeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SourceCodeInfo proto.InternalMessageInfo
+
+func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location {
+	if m != nil {
+		return m.Location
+	}
+	return nil
+}
+
+type SourceCodeInfo_Location struct {
+	// Identifies which part of the FileDescriptorProto was defined at this
+	// location.
+	//
+	// Each element is a field number or an index.  They form a path from
+	// the root FileDescriptorProto to the place where the definition.  For
+	// example, this path:
+	//   [ 4, 3, 2, 7, 1 ]
+	// refers to:
+	//   file.message_type(3)  // 4, 3
+	//       .field(7)         // 2, 7
+	//       .name()           // 1
+	// This is because FileDescriptorProto.message_type has field number 4:
+	//   repeated DescriptorProto message_type = 4;
+	// and DescriptorProto.field has field number 2:
+	//   repeated FieldDescriptorProto field = 2;
+	// and FieldDescriptorProto.name has field number 1:
+	//   optional string name = 1;
+	//
+	// Thus, the above path gives the location of a field name.  If we removed
+	// the last element:
+	//   [ 4, 3, 2, 7 ]
+	// this path refers to the whole field declaration (from the beginning
+	// of the label to the terminating semicolon).
+	Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"`
+	// Always has exactly three or four elements: start line, start column,
+	// end line (optional, otherwise assumed same as start line), end column.
+	// These are packed into a single field for efficiency.  Note that line
+	// and column numbers are zero-based -- typically you will want to add
+	// 1 to each before displaying to a user.
+	Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"`
+	// If this SourceCodeInfo represents a complete declaration, these are any
+	// comments appearing before and after the declaration which appear to be
+	// attached to the declaration.
+	//
+	// A series of line comments appearing on consecutive lines, with no other
+	// tokens appearing on those lines, will be treated as a single comment.
+	//
+	// leading_detached_comments will keep paragraphs of comments that appear
+	// before (but not connected to) the current element. Each paragraph,
+	// separated by empty lines, will be one comment element in the repeated
+	// field.
+	//
+	// Only the comment content is provided; comment markers (e.g. //) are
+	// stripped out.  For block comments, leading whitespace and an asterisk
+	// will be stripped from the beginning of each line other than the first.
+	// Newlines are included in the output.
+	//
+	// Examples:
+	//
+	//   optional int32 foo = 1;  // Comment attached to foo.
+	//   // Comment attached to bar.
+	//   optional int32 bar = 2;
+	//
+	//   optional string baz = 3;
+	//   // Comment attached to baz.
+	//   // Another line attached to baz.
+	//
+	//   // Comment attached to qux.
+	//   //
+	//   // Another line attached to qux.
+	//   optional double qux = 4;
+	//
+	//   // Detached comment for corge. This is not leading or trailing comments
+	//   // to qux or corge because there are blank lines separating it from
+	//   // both.
+	//
+	//   // Detached comment for corge paragraph 2.
+	//
+	//   optional string corge = 5;
+	//   /* Block comment attached
+	//    * to corge.  Leading asterisks
+	//    * will be removed. */
+	//   /* Block comment attached to
+	//    * grault. */
+	//   optional int32 grault = 6;
+	//
+	//   // ignored detached comments.
+	LeadingComments         *string  `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"`
+	TrailingComments        *string  `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"`
+	LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"`
+	XXX_NoUnkeyedLiteral    struct{} `json:"-"`
+	XXX_unrecognized        []byte   `json:"-"`
+	XXX_sizecache           int32    `json:"-"`
+}
+
+func (m *SourceCodeInfo_Location) Reset()         { *m = SourceCodeInfo_Location{} }
+func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) }
+func (*SourceCodeInfo_Location) ProtoMessage()    {}
+func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{19, 0}
+}
+
+func (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b)
+}
+func (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic)
+}
+func (m *SourceCodeInfo_Location) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SourceCodeInfo_Location.Merge(m, src)
+}
+func (m *SourceCodeInfo_Location) XXX_Size() int {
+	return xxx_messageInfo_SourceCodeInfo_Location.Size(m)
+}
+func (m *SourceCodeInfo_Location) XXX_DiscardUnknown() {
+	xxx_messageInfo_SourceCodeInfo_Location.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SourceCodeInfo_Location proto.InternalMessageInfo
+
+func (m *SourceCodeInfo_Location) GetPath() []int32 {
+	if m != nil {
+		return m.Path
+	}
+	return nil
+}
+
+func (m *SourceCodeInfo_Location) GetSpan() []int32 {
+	if m != nil {
+		return m.Span
+	}
+	return nil
+}
+
+func (m *SourceCodeInfo_Location) GetLeadingComments() string {
+	if m != nil && m.LeadingComments != nil {
+		return *m.LeadingComments
+	}
+	return ""
+}
+
+func (m *SourceCodeInfo_Location) GetTrailingComments() string {
+	if m != nil && m.TrailingComments != nil {
+		return *m.TrailingComments
+	}
+	return ""
+}
+
+func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string {
+	if m != nil {
+		return m.LeadingDetachedComments
+	}
+	return nil
+}
+
+// Describes the relationship between generated code and its original source
+// file. A GeneratedCodeInfo message is associated with only one generated
+// source file, but may contain references to different source .proto files.
+type GeneratedCodeInfo struct {
+	// An Annotation connects some span of text in generated code to an element
+	// of its generating .proto file.
+	Annotation           []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *GeneratedCodeInfo) Reset()         { *m = GeneratedCodeInfo{} }
+func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) }
+func (*GeneratedCodeInfo) ProtoMessage()    {}
+func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{20}
+}
+
+func (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b)
+}
+func (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic)
+}
+func (m *GeneratedCodeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeneratedCodeInfo.Merge(m, src)
+}
+func (m *GeneratedCodeInfo) XXX_Size() int {
+	return xxx_messageInfo_GeneratedCodeInfo.Size(m)
+}
+func (m *GeneratedCodeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeneratedCodeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeneratedCodeInfo proto.InternalMessageInfo
+
+func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation {
+	if m != nil {
+		return m.Annotation
+	}
+	return nil
+}
+
+type GeneratedCodeInfo_Annotation struct {
+	// Identifies the element in the original source .proto file. This field
+	// is formatted the same as SourceCodeInfo.Location.path.
+	Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"`
+	// Identifies the filesystem path to the original source .proto.
+	SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"`
+	// Identifies the starting offset in bytes in the generated code
+	// that relates to the identified object.
+	Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"`
+	// Identifies the ending offset in bytes in the generated code that
+	// relates to the identified offset. The end offset should be one past
+	// the last relevant byte (so the length of the text = end - begin).
+	End                  *int32   `protobuf:"varint,4,opt,name=end" json:"end,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GeneratedCodeInfo_Annotation) Reset()         { *m = GeneratedCodeInfo_Annotation{} }
+func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) }
+func (*GeneratedCodeInfo_Annotation) ProtoMessage()    {}
+func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e5baabe45344a177, []int{20, 0}
+}
+
+func (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b)
+}
+func (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic)
+}
+func (m *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(m, src)
+}
+func (m *GeneratedCodeInfo_Annotation) XXX_Size() int {
+	return xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m)
+}
+func (m *GeneratedCodeInfo_Annotation) XXX_DiscardUnknown() {
+	xxx_messageInfo_GeneratedCodeInfo_Annotation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeneratedCodeInfo_Annotation proto.InternalMessageInfo
+
+func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 {
+	if m != nil {
+		return m.Path
+	}
+	return nil
+}
+
+func (m *GeneratedCodeInfo_Annotation) GetSourceFile() string {
+	if m != nil && m.SourceFile != nil {
+		return *m.SourceFile
+	}
+	return ""
+}
+
+func (m *GeneratedCodeInfo_Annotation) GetBegin() int32 {
+	if m != nil && m.Begin != nil {
+		return *m.Begin
+	}
+	return 0
+}
+
+func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 {
+	if m != nil && m.End != nil {
+		return *m.End
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value)
+	proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value)
+	proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value)
+	proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value)
+	proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value)
+	proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value)
+	proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet")
+	proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto")
+	proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto")
+	proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange")
+	proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange")
+	proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions")
+	proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto")
+	proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto")
+	proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto")
+	proto.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), "google.protobuf.EnumDescriptorProto.EnumReservedRange")
+	proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto")
+	proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto")
+	proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto")
+	proto.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions")
+	proto.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions")
+	proto.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions")
+	proto.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions")
+	proto.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions")
+	proto.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions")
+	proto.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions")
+	proto.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions")
+	proto.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption")
+	proto.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart")
+	proto.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo")
+	proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location")
+	proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo")
+	proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation")
+}
+
+func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor_e5baabe45344a177) }
+
+var fileDescriptor_e5baabe45344a177 = []byte{
+	// 2589 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x8e, 0xdb, 0xc6,
+	0x15, 0x0e, 0xf5, 0xb7, 0xd2, 0x91, 0x56, 0x3b, 0x3b, 0xbb, 0xb1, 0xe9, 0xcd, 0x8f, 0xd7, 0xca,
+	0x8f, 0xd7, 0x4e, 0xac, 0x0d, 0x1c, 0xdb, 0x71, 0xd6, 0x45, 0x5a, 0xad, 0x44, 0x6f, 0xe4, 0xee,
+	0x4a, 0x2a, 0xa5, 0x6d, 0x7e, 0x80, 0x82, 0x98, 0x25, 0x47, 0x12, 0x6d, 0x8a, 0x64, 0x48, 0xca,
+	0xf6, 0x06, 0xbd, 0x30, 0xd0, 0xab, 0x5e, 0x15, 0xe8, 0x55, 0x51, 0x14, 0xbd, 0xe8, 0x4d, 0x80,
+	0x3e, 0x40, 0x81, 0xde, 0xf5, 0x09, 0x0a, 0xe4, 0x0d, 0x8a, 0xb6, 0x40, 0xfb, 0x08, 0xbd, 0x2c,
+	0x66, 0x86, 0xa4, 0x48, 0x49, 0x1b, 0x6f, 0x02, 0xc4, 0xb9, 0x92, 0xe6, 0x3b, 0xdf, 0x39, 0x73,
+	0xe6, 0xcc, 0x99, 0x99, 0x33, 0x43, 0xd8, 0x1e, 0x39, 0xce, 0xc8, 0xa2, 0xbb, 0xae, 0xe7, 0x04,
+	0xce, 0xc9, 0x74, 0xb8, 0x6b, 0x50, 0x5f, 0xf7, 0x4c, 0x37, 0x70, 0xbc, 0x3a, 0xc7, 0xf0, 0x9a,
+	0x60, 0xd4, 0x23, 0x46, 0xed, 0x08, 0xd6, 0xef, 0x9b, 0x16, 0x6d, 0xc5, 0xc4, 0x3e, 0x0d, 0xf0,
+	0x5d, 0xc8, 0x0d, 0x4d, 0x8b, 0xca, 0xd2, 0x76, 0x76, 0xa7, 0x7c, 0xf3, 0xcd, 0xfa, 0x9c, 0x52,
+	0x3d, 0xad, 0xd1, 0x63, 0xb0, 0xca, 0x35, 0x6a, 0xff, 0xce, 0xc1, 0xc6, 0x12, 0x29, 0xc6, 0x90,
+	0xb3, 0xc9, 0x84, 0x59, 0x94, 0x76, 0x4a, 0x2a, 0xff, 0x8f, 0x65, 0x58, 0x71, 0x89, 0xfe, 0x88,
+	0x8c, 0xa8, 0x9c, 0xe1, 0x70, 0xd4, 0xc4, 0xaf, 0x03, 0x18, 0xd4, 0xa5, 0xb6, 0x41, 0x6d, 0xfd,
+	0x54, 0xce, 0x6e, 0x67, 0x77, 0x4a, 0x6a, 0x02, 0xc1, 0xef, 0xc0, 0xba, 0x3b, 0x3d, 0xb1, 0x4c,
+	0x5d, 0x4b, 0xd0, 0x60, 0x3b, 0xbb, 0x93, 0x57, 0x91, 0x10, 0xb4, 0x66, 0xe4, 0xab, 0xb0, 0xf6,
+	0x84, 0x92, 0x47, 0x49, 0x6a, 0x99, 0x53, 0xab, 0x0c, 0x4e, 0x10, 0x9b, 0x50, 0x99, 0x50, 0xdf,
+	0x27, 0x23, 0xaa, 0x05, 0xa7, 0x2e, 0x95, 0x73, 0x7c, 0xf4, 0xdb, 0x0b, 0xa3, 0x9f, 0x1f, 0x79,
+	0x39, 0xd4, 0x1a, 0x9c, 0xba, 0x14, 0x37, 0xa0, 0x44, 0xed, 0xe9, 0x44, 0x58, 0xc8, 0x9f, 0x11,
+	0x3f, 0xc5, 0x9e, 0x4e, 0xe6, 0xad, 0x14, 0x99, 0x5a, 0x68, 0x62, 0xc5, 0xa7, 0xde, 0x63, 0x53,
+	0xa7, 0x72, 0x81, 0x1b, 0xb8, 0xba, 0x60, 0xa0, 0x2f, 0xe4, 0xf3, 0x36, 0x22, 0x3d, 0xdc, 0x84,
+	0x12, 0x7d, 0x1a, 0x50, 0xdb, 0x37, 0x1d, 0x5b, 0x5e, 0xe1, 0x46, 0xde, 0x5a, 0x32, 0x8b, 0xd4,
+	0x32, 0xe6, 0x4d, 0xcc, 0xf4, 0xf0, 0x1d, 0x58, 0x71, 0xdc, 0xc0, 0x74, 0x6c, 0x5f, 0x2e, 0x6e,
+	0x4b, 0x3b, 0xe5, 0x9b, 0xaf, 0x2e, 0x4d, 0x84, 0xae, 0xe0, 0xa8, 0x11, 0x19, 0xb7, 0x01, 0xf9,
+	0xce, 0xd4, 0xd3, 0xa9, 0xa6, 0x3b, 0x06, 0xd5, 0x4c, 0x7b, 0xe8, 0xc8, 0x25, 0x6e, 0xe0, 0xf2,
+	0xe2, 0x40, 0x38, 0xb1, 0xe9, 0x18, 0xb4, 0x6d, 0x0f, 0x1d, 0xb5, 0xea, 0xa7, 0xda, 0xf8, 0x02,
+	0x14, 0xfc, 0x53, 0x3b, 0x20, 0x4f, 0xe5, 0x0a, 0xcf, 0x90, 0xb0, 0x55, 0xfb, 0x6b, 0x01, 0xd6,
+	0xce, 0x93, 0x62, 0xf7, 0x20, 0x3f, 0x64, 0xa3, 0x94, 0x33, 0xdf, 0x26, 0x06, 0x42, 0x27, 0x1d,
+	0xc4, 0xc2, 0x77, 0x0c, 0x62, 0x03, 0xca, 0x36, 0xf5, 0x03, 0x6a, 0x88, 0x8c, 0xc8, 0x9e, 0x33,
+	0xa7, 0x40, 0x28, 0x2d, 0xa6, 0x54, 0xee, 0x3b, 0xa5, 0xd4, 0xa7, 0xb0, 0x16, 0xbb, 0xa4, 0x79,
+	0xc4, 0x1e, 0x45, 0xb9, 0xb9, 0xfb, 0x3c, 0x4f, 0xea, 0x4a, 0xa4, 0xa7, 0x32, 0x35, 0xb5, 0x4a,
+	0x53, 0x6d, 0xdc, 0x02, 0x70, 0x6c, 0xea, 0x0c, 0x35, 0x83, 0xea, 0x96, 0x5c, 0x3c, 0x23, 0x4a,
+	0x5d, 0x46, 0x59, 0x88, 0x92, 0x23, 0x50, 0xdd, 0xc2, 0x1f, 0xce, 0x52, 0x6d, 0xe5, 0x8c, 0x4c,
+	0x39, 0x12, 0x8b, 0x6c, 0x21, 0xdb, 0x8e, 0xa1, 0xea, 0x51, 0x96, 0xf7, 0xd4, 0x08, 0x47, 0x56,
+	0xe2, 0x4e, 0xd4, 0x9f, 0x3b, 0x32, 0x35, 0x54, 0x13, 0x03, 0x5b, 0xf5, 0x92, 0x4d, 0xfc, 0x06,
+	0xc4, 0x80, 0xc6, 0xd3, 0x0a, 0xf8, 0x2e, 0x54, 0x89, 0xc0, 0x0e, 0x99, 0xd0, 0xad, 0x2f, 0xa1,
+	0x9a, 0x0e, 0x0f, 0xde, 0x84, 0xbc, 0x1f, 0x10, 0x2f, 0xe0, 0x59, 0x98, 0x57, 0x45, 0x03, 0x23,
+	0xc8, 0x52, 0xdb, 0xe0, 0xbb, 0x5c, 0x5e, 0x65, 0x7f, 0xf1, 0x4f, 0x66, 0x03, 0xce, 0xf2, 0x01,
+	0xbf, 0xbd, 0x38, 0xa3, 0x29, 0xcb, 0xf3, 0xe3, 0xde, 0xfa, 0x00, 0x56, 0x53, 0x03, 0x38, 0x6f,
+	0xd7, 0xb5, 0x5f, 0xc2, 0xcb, 0x4b, 0x4d, 0xe3, 0x4f, 0x61, 0x73, 0x6a, 0x9b, 0x76, 0x40, 0x3d,
+	0xd7, 0xa3, 0x2c, 0x63, 0x45, 0x57, 0xf2, 0x7f, 0x56, 0xce, 0xc8, 0xb9, 0xe3, 0x24, 0x5b, 0x58,
+	0x51, 0x37, 0xa6, 0x8b, 0xe0, 0xf5, 0x52, 0xf1, 0xbf, 0x2b, 0xe8, 0xd9, 0xb3, 0x67, 0xcf, 0x32,
+	0xb5, 0xdf, 0x15, 0x60, 0x73, 0xd9, 0x9a, 0x59, 0xba, 0x7c, 0x2f, 0x40, 0xc1, 0x9e, 0x4e, 0x4e,
+	0xa8, 0xc7, 0x83, 0x94, 0x57, 0xc3, 0x16, 0x6e, 0x40, 0xde, 0x22, 0x27, 0xd4, 0x92, 0x73, 0xdb,
+	0xd2, 0x4e, 0xf5, 0xe6, 0x3b, 0xe7, 0x5a, 0x95, 0xf5, 0x43, 0xa6, 0xa2, 0x0a, 0x4d, 0xfc, 0x11,
+	0xe4, 0xc2, 0x2d, 0x9a, 0x59, 0xb8, 0x7e, 0x3e, 0x0b, 0x6c, 0x2d, 0xa9, 0x5c, 0x0f, 0xbf, 0x02,
+	0x25, 0xf6, 0x2b, 0x72, 0xa3, 0xc0, 0x7d, 0x2e, 0x32, 0x80, 0xe5, 0x05, 0xde, 0x82, 0x22, 0x5f,
+	0x26, 0x06, 0x8d, 0x8e, 0xb6, 0xb8, 0xcd, 0x12, 0xcb, 0xa0, 0x43, 0x32, 0xb5, 0x02, 0xed, 0x31,
+	0xb1, 0xa6, 0x94, 0x27, 0x7c, 0x49, 0xad, 0x84, 0xe0, 0xcf, 0x19, 0x86, 0x2f, 0x43, 0x59, 0xac,
+	0x2a, 0xd3, 0x36, 0xe8, 0x53, 0xbe, 0x7b, 0xe6, 0x55, 0xb1, 0xd0, 0xda, 0x0c, 0x61, 0xdd, 0x3f,
+	0xf4, 0x1d, 0x3b, 0x4a, 0x4d, 0xde, 0x05, 0x03, 0x78, 0xf7, 0x1f, 0xcc, 0x6f, 0xdc, 0xaf, 0x2d,
+	0x1f, 0xde, 0x7c, 0x4e, 0xd5, 0xfe, 0x92, 0x81, 0x1c, 0xdf, 0x2f, 0xd6, 0xa0, 0x3c, 0xf8, 0xac,
+	0xa7, 0x68, 0xad, 0xee, 0xf1, 0xfe, 0xa1, 0x82, 0x24, 0x5c, 0x05, 0xe0, 0xc0, 0xfd, 0xc3, 0x6e,
+	0x63, 0x80, 0x32, 0x71, 0xbb, 0xdd, 0x19, 0xdc, 0xb9, 0x85, 0xb2, 0xb1, 0xc2, 0xb1, 0x00, 0x72,
+	0x49, 0xc2, 0xfb, 0x37, 0x51, 0x1e, 0x23, 0xa8, 0x08, 0x03, 0xed, 0x4f, 0x95, 0xd6, 0x9d, 0x5b,
+	0xa8, 0x90, 0x46, 0xde, 0xbf, 0x89, 0x56, 0xf0, 0x2a, 0x94, 0x38, 0xb2, 0xdf, 0xed, 0x1e, 0xa2,
+	0x62, 0x6c, 0xb3, 0x3f, 0x50, 0xdb, 0x9d, 0x03, 0x54, 0x8a, 0x6d, 0x1e, 0xa8, 0xdd, 0xe3, 0x1e,
+	0x82, 0xd8, 0xc2, 0x91, 0xd2, 0xef, 0x37, 0x0e, 0x14, 0x54, 0x8e, 0x19, 0xfb, 0x9f, 0x0d, 0x94,
+	0x3e, 0xaa, 0xa4, 0xdc, 0x7a, 0xff, 0x26, 0x5a, 0x8d, 0xbb, 0x50, 0x3a, 0xc7, 0x47, 0xa8, 0x8a,
+	0xd7, 0x61, 0x55, 0x74, 0x11, 0x39, 0xb1, 0x36, 0x07, 0xdd, 0xb9, 0x85, 0xd0, 0xcc, 0x11, 0x61,
+	0x65, 0x3d, 0x05, 0xdc, 0xb9, 0x85, 0x70, 0xad, 0x09, 0x79, 0x9e, 0x5d, 0x18, 0x43, 0xf5, 0xb0,
+	0xb1, 0xaf, 0x1c, 0x6a, 0xdd, 0xde, 0xa0, 0xdd, 0xed, 0x34, 0x0e, 0x91, 0x34, 0xc3, 0x54, 0xe5,
+	0x67, 0xc7, 0x6d, 0x55, 0x69, 0xa1, 0x4c, 0x12, 0xeb, 0x29, 0x8d, 0x81, 0xd2, 0x42, 0xd9, 0x9a,
+	0x0e, 0x9b, 0xcb, 0xf6, 0xc9, 0xa5, 0x2b, 0x23, 0x31, 0xc5, 0x99, 0x33, 0xa6, 0x98, 0xdb, 0x5a,
+	0x98, 0xe2, 0x7f, 0x65, 0x60, 0x63, 0xc9, 0x59, 0xb1, 0xb4, 0x93, 0x1f, 0x43, 0x5e, 0xa4, 0xa8,
+	0x38, 0x3d, 0xaf, 0x2d, 0x3d, 0x74, 0x78, 0xc2, 0x2e, 0x9c, 0xa0, 0x5c, 0x2f, 0x59, 0x41, 0x64,
+	0xcf, 0xa8, 0x20, 0x98, 0x89, 0x85, 0x3d, 0xfd, 0x17, 0x0b, 0x7b, 0xba, 0x38, 0xf6, 0xee, 0x9c,
+	0xe7, 0xd8, 0xe3, 0xd8, 0xb7, 0xdb, 0xdb, 0xf3, 0x4b, 0xf6, 0xf6, 0x7b, 0xb0, 0xbe, 0x60, 0xe8,
+	0xdc, 0x7b, 0xec, 0xaf, 0x24, 0x90, 0xcf, 0x0a, 0xce, 0x73, 0x76, 0xba, 0x4c, 0x6a, 0xa7, 0xbb,
+	0x37, 0x1f, 0xc1, 0x2b, 0x67, 0x4f, 0xc2, 0xc2, 0x5c, 0x7f, 0x25, 0xc1, 0x85, 0xe5, 0x95, 0xe2,
+	0x52, 0x1f, 0x3e, 0x82, 0xc2, 0x84, 0x06, 0x63, 0x27, 0xaa, 0x96, 0xde, 0x5e, 0x72, 0x06, 0x33,
+	0xf1, 0xfc, 0x64, 0x87, 0x5a, 0xc9, 0x43, 0x3c, 0x7b, 0x56, 0xb9, 0x27, 0xbc, 0x59, 0xf0, 0xf4,
+	0xd7, 0x19, 0x78, 0x79, 0xa9, 0xf1, 0xa5, 0x8e, 0xbe, 0x06, 0x60, 0xda, 0xee, 0x34, 0x10, 0x15,
+	0x91, 0xd8, 0x60, 0x4b, 0x1c, 0xe1, 0x9b, 0x17, 0xdb, 0x3c, 0xa7, 0x41, 0x2c, 0xcf, 0x72, 0x39,
+	0x08, 0x88, 0x13, 0xee, 0xce, 0x1c, 0xcd, 0x71, 0x47, 0x5f, 0x3f, 0x63, 0xa4, 0x0b, 0x89, 0xf9,
+	0x1e, 0x20, 0xdd, 0x32, 0xa9, 0x1d, 0x68, 0x7e, 0xe0, 0x51, 0x32, 0x31, 0xed, 0x11, 0x3f, 0x41,
+	0x8a, 0x7b, 0xf9, 0x21, 0xb1, 0x7c, 0xaa, 0xae, 0x09, 0x71, 0x3f, 0x92, 0x32, 0x0d, 0x9e, 0x40,
+	0x5e, 0x42, 0xa3, 0x90, 0xd2, 0x10, 0xe2, 0x58, 0xa3, 0xf6, 0xdb, 0x12, 0x94, 0x13, 0x75, 0x35,
+	0xbe, 0x02, 0x95, 0x87, 0xe4, 0x31, 0xd1, 0xa2, 0xbb, 0x92, 0x88, 0x44, 0x99, 0x61, 0xbd, 0xf0,
+	0xbe, 0xf4, 0x1e, 0x6c, 0x72, 0x8a, 0x33, 0x0d, 0xa8, 0xa7, 0xe9, 0x16, 0xf1, 0x7d, 0x1e, 0xb4,
+	0x22, 0xa7, 0x62, 0x26, 0xeb, 0x32, 0x51, 0x33, 0x92, 0xe0, 0xdb, 0xb0, 0xc1, 0x35, 0x26, 0x53,
+	0x2b, 0x30, 0x5d, 0x8b, 0x6a, 0xec, 0xf6, 0xe6, 0xf3, 0x93, 0x24, 0xf6, 0x6c, 0x9d, 0x31, 0x8e,
+	0x42, 0x02, 0xf3, 0xc8, 0xc7, 0x2d, 0x78, 0x8d, 0xab, 0x8d, 0xa8, 0x4d, 0x3d, 0x12, 0x50, 0x8d,
+	0x7e, 0x31, 0x25, 0x96, 0xaf, 0x11, 0xdb, 0xd0, 0xc6, 0xc4, 0x1f, 0xcb, 0x9b, 0xcc, 0xc0, 0x7e,
+	0x46, 0x96, 0xd4, 0x4b, 0x8c, 0x78, 0x10, 0xf2, 0x14, 0x4e, 0x6b, 0xd8, 0xc6, 0xc7, 0xc4, 0x1f,
+	0xe3, 0x3d, 0xb8, 0xc0, 0xad, 0xf8, 0x81, 0x67, 0xda, 0x23, 0x4d, 0x1f, 0x53, 0xfd, 0x91, 0x36,
+	0x0d, 0x86, 0x77, 0xe5, 0x57, 0x92, 0xfd, 0x73, 0x0f, 0xfb, 0x9c, 0xd3, 0x64, 0x94, 0xe3, 0x60,
+	0x78, 0x17, 0xf7, 0xa1, 0xc2, 0x26, 0x63, 0x62, 0x7e, 0x49, 0xb5, 0xa1, 0xe3, 0xf1, 0xa3, 0xb1,
+	0xba, 0x64, 0x6b, 0x4a, 0x44, 0xb0, 0xde, 0x0d, 0x15, 0x8e, 0x1c, 0x83, 0xee, 0xe5, 0xfb, 0x3d,
+	0x45, 0x69, 0xa9, 0xe5, 0xc8, 0xca, 0x7d, 0xc7, 0x63, 0x09, 0x35, 0x72, 0xe2, 0x00, 0x97, 0x45,
+	0x42, 0x8d, 0x9c, 0x28, 0xbc, 0xb7, 0x61, 0x43, 0xd7, 0xc5, 0x98, 0x4d, 0x5d, 0x0b, 0xef, 0x58,
+	0xbe, 0x8c, 0x52, 0xc1, 0xd2, 0xf5, 0x03, 0x41, 0x08, 0x73, 0xdc, 0xc7, 0x1f, 0xc2, 0xcb, 0xb3,
+	0x60, 0x25, 0x15, 0xd7, 0x17, 0x46, 0x39, 0xaf, 0x7a, 0x1b, 0x36, 0xdc, 0xd3, 0x45, 0x45, 0x9c,
+	0xea, 0xd1, 0x3d, 0x9d, 0x57, 0xfb, 0x00, 0x36, 0xdd, 0xb1, 0xbb, 0xa8, 0x77, 0x3d, 0xa9, 0x87,
+	0xdd, 0xb1, 0x3b, 0xaf, 0xf8, 0x16, 0xbf, 0x70, 0x7b, 0x54, 0x27, 0x01, 0x35, 0xe4, 0x8b, 0x49,
+	0x7a, 0x42, 0x80, 0x77, 0x01, 0xe9, 0xba, 0x46, 0x6d, 0x72, 0x62, 0x51, 0x8d, 0x78, 0xd4, 0x26,
+	0xbe, 0x7c, 0x39, 0x49, 0xae, 0xea, 0xba, 0xc2, 0xa5, 0x0d, 0x2e, 0xc4, 0xd7, 0x61, 0xdd, 0x39,
+	0x79, 0xa8, 0x8b, 0x94, 0xd4, 0x5c, 0x8f, 0x0e, 0xcd, 0xa7, 0xf2, 0x9b, 0x3c, 0xbe, 0x6b, 0x4c,
+	0xc0, 0x13, 0xb2, 0xc7, 0x61, 0x7c, 0x0d, 0x90, 0xee, 0x8f, 0x89, 0xe7, 0xf2, 0x3d, 0xd9, 0x77,
+	0x89, 0x4e, 0xe5, 0xb7, 0x04, 0x55, 0xe0, 0x9d, 0x08, 0x66, 0x4b, 0xc2, 0x7f, 0x62, 0x0e, 0x83,
+	0xc8, 0xe2, 0x55, 0xb1, 0x24, 0x38, 0x16, 0x5a, 0xdb, 0x01, 0xc4, 0x42, 0x91, 0xea, 0x78, 0x87,
+	0xd3, 0xaa, 0xee, 0xd8, 0x4d, 0xf6, 0xfb, 0x06, 0xac, 0x32, 0xe6, 0xac, 0xd3, 0x6b, 0xa2, 0x20,
+	0x73, 0xc7, 0x89, 0x1e, 0x6f, 0xc1, 0x05, 0x46, 0x9a, 0xd0, 0x80, 0x18, 0x24, 0x20, 0x09, 0xf6,
+	0xbb, 0x9c, 0xcd, 0xe2, 0x7e, 0x14, 0x0a, 0x53, 0x7e, 0x7a, 0xd3, 0x93, 0xd3, 0x38, 0xb3, 0x6e,
+	0x08, 0x3f, 0x19, 0x16, 0xe5, 0xd6, 0xf7, 0x56, 0x74, 0xd7, 0xf6, 0xa0, 0x92, 0x4c, 0x7c, 0x5c,
+	0x02, 0x91, 0xfa, 0x48, 0x62, 0x55, 0x50, 0xb3, 0xdb, 0x62, 0xf5, 0xcb, 0xe7, 0x0a, 0xca, 0xb0,
+	0x3a, 0xea, 0xb0, 0x3d, 0x50, 0x34, 0xf5, 0xb8, 0x33, 0x68, 0x1f, 0x29, 0x28, 0x9b, 0x28, 0xd8,
+	0x1f, 0xe4, 0x8a, 0x6f, 0xa3, 0xab, 0xb5, 0xaf, 0x33, 0x50, 0x4d, 0xdf, 0xc0, 0xf0, 0x8f, 0xe0,
+	0x62, 0xf4, 0x5c, 0xe2, 0xd3, 0x40, 0x7b, 0x62, 0x7a, 0x7c, 0x45, 0x4e, 0x88, 0x38, 0x1d, 0xe3,
+	0x9c, 0xd8, 0x0c, 0x59, 0x7d, 0x1a, 0x7c, 0x62, 0x7a, 0x6c, 0xbd, 0x4d, 0x48, 0x80, 0x0f, 0xe1,
+	0xb2, 0xed, 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0x7b, 0xa8, 0xd2, 0x88, 0xae, 0x53,
+	0xdf, 0x77, 0xc4, 0x49, 0x18, 0x5b, 0x79, 0xd5, 0x76, 0xfa, 0x21, 0x79, 0x76, 0x44, 0x34, 0x42,
+	0xea, 0x5c, 0xfe, 0x66, 0xcf, 0xca, 0xdf, 0x57, 0xa0, 0x34, 0x21, 0xae, 0x46, 0xed, 0xc0, 0x3b,
+	0xe5, 0x75, 0x77, 0x51, 0x2d, 0x4e, 0x88, 0xab, 0xb0, 0xf6, 0x0b, 0xb9, 0xfe, 0x3c, 0xc8, 0x15,
+	0x8b, 0xa8, 0xf4, 0x20, 0x57, 0x2c, 0x21, 0xa8, 0xfd, 0x33, 0x0b, 0x95, 0x64, 0x1d, 0xce, 0xae,
+	0x35, 0x3a, 0x3f, 0xb2, 0x24, 0xbe, 0xa9, 0xbd, 0xf1, 0x8d, 0x55, 0x7b, 0xbd, 0xc9, 0xce, 0xb2,
+	0xbd, 0x82, 0xa8, 0x8e, 0x55, 0xa1, 0xc9, 0xea, 0x08, 0x96, 0x6c, 0x54, 0x54, 0x23, 0x45, 0x35,
+	0x6c, 0xe1, 0x03, 0x28, 0x3c, 0xf4, 0xb9, 0xed, 0x02, 0xb7, 0xfd, 0xe6, 0x37, 0xdb, 0x7e, 0xd0,
+	0xe7, 0xc6, 0x4b, 0x0f, 0xfa, 0x5a, 0xa7, 0xab, 0x1e, 0x35, 0x0e, 0xd5, 0x50, 0x1d, 0x5f, 0x82,
+	0x9c, 0x45, 0xbe, 0x3c, 0x4d, 0x9f, 0x7a, 0x1c, 0x3a, 0xef, 0x24, 0x5c, 0x82, 0xdc, 0x13, 0x4a,
+	0x1e, 0xa5, 0xcf, 0x1a, 0x0e, 0x7d, 0x8f, 0x8b, 0x61, 0x17, 0xf2, 0x3c, 0x5e, 0x18, 0x20, 0x8c,
+	0x18, 0x7a, 0x09, 0x17, 0x21, 0xd7, 0xec, 0xaa, 0x6c, 0x41, 0x20, 0xa8, 0x08, 0x54, 0xeb, 0xb5,
+	0x95, 0xa6, 0x82, 0x32, 0xb5, 0xdb, 0x50, 0x10, 0x41, 0x60, 0x8b, 0x25, 0x0e, 0x03, 0x7a, 0x29,
+	0x6c, 0x86, 0x36, 0xa4, 0x48, 0x7a, 0x7c, 0xb4, 0xaf, 0xa8, 0x28, 0x93, 0x9e, 0xea, 0x1c, 0xca,
+	0xd7, 0x7c, 0xa8, 0x24, 0x0b, 0xf1, 0x17, 0x73, 0xc9, 0xfe, 0x9b, 0x04, 0xe5, 0x44, 0x61, 0xcd,
+	0x2a, 0x22, 0x62, 0x59, 0xce, 0x13, 0x8d, 0x58, 0x26, 0xf1, 0xc3, 0xd4, 0x00, 0x0e, 0x35, 0x18,
+	0x72, 0xde, 0xa9, 0x7b, 0x41, 0x4b, 0x24, 0x8f, 0x0a, 0xb5, 0x3f, 0x4a, 0x80, 0xe6, 0x2b, 0xdb,
+	0x39, 0x37, 0xa5, 0x1f, 0xd2, 0xcd, 0xda, 0x1f, 0x24, 0xa8, 0xa6, 0xcb, 0xd9, 0x39, 0xf7, 0xae,
+	0xfc, 0xa0, 0xee, 0xfd, 0x23, 0x03, 0xab, 0xa9, 0x22, 0xf6, 0xbc, 0xde, 0x7d, 0x01, 0xeb, 0xa6,
+	0x41, 0x27, 0xae, 0x13, 0x50, 0x5b, 0x3f, 0xd5, 0x2c, 0xfa, 0x98, 0x5a, 0x72, 0x8d, 0x6f, 0x1a,
+	0xbb, 0xdf, 0x5c, 0x26, 0xd7, 0xdb, 0x33, 0xbd, 0x43, 0xa6, 0xb6, 0xb7, 0xd1, 0x6e, 0x29, 0x47,
+	0xbd, 0xee, 0x40, 0xe9, 0x34, 0x3f, 0xd3, 0x8e, 0x3b, 0x3f, 0xed, 0x74, 0x3f, 0xe9, 0xa8, 0xc8,
+	0x9c, 0xa3, 0x7d, 0x8f, 0xcb, 0xbe, 0x07, 0x68, 0xde, 0x29, 0x7c, 0x11, 0x96, 0xb9, 0x85, 0x5e,
+	0xc2, 0x1b, 0xb0, 0xd6, 0xe9, 0x6a, 0xfd, 0x76, 0x4b, 0xd1, 0x94, 0xfb, 0xf7, 0x95, 0xe6, 0xa0,
+	0x2f, 0x1e, 0x3e, 0x62, 0xf6, 0x20, 0xb5, 0xc0, 0x6b, 0xbf, 0xcf, 0xc2, 0xc6, 0x12, 0x4f, 0x70,
+	0x23, 0xbc, 0xb2, 0x88, 0x5b, 0xd4, 0x8d, 0xf3, 0x78, 0x5f, 0x67, 0x35, 0x43, 0x8f, 0x78, 0x41,
+	0x78, 0xc3, 0xb9, 0x06, 0x2c, 0x4a, 0x76, 0x60, 0x0e, 0x4d, 0xea, 0x85, 0xef, 0x44, 0xe2, 0x1e,
+	0xb3, 0x36, 0xc3, 0xc5, 0x53, 0xd1, 0xbb, 0x80, 0x5d, 0xc7, 0x37, 0x03, 0xf3, 0x31, 0xd5, 0x4c,
+	0x3b, 0x7a, 0x54, 0x62, 0xf7, 0x9a, 0x9c, 0x8a, 0x22, 0x49, 0xdb, 0x0e, 0x62, 0xb6, 0x4d, 0x47,
+	0x64, 0x8e, 0xcd, 0x36, 0xf3, 0xac, 0x8a, 0x22, 0x49, 0xcc, 0xbe, 0x02, 0x15, 0xc3, 0x99, 0xb2,
+	0x62, 0x4f, 0xf0, 0xd8, 0xd9, 0x21, 0xa9, 0x65, 0x81, 0xc5, 0x94, 0xb0, 0x8c, 0x9f, 0xbd, 0x66,
+	0x55, 0xd4, 0xb2, 0xc0, 0x04, 0xe5, 0x2a, 0xac, 0x91, 0xd1, 0xc8, 0x63, 0xc6, 0x23, 0x43, 0xe2,
+	0x62, 0x52, 0x8d, 0x61, 0x4e, 0xdc, 0x7a, 0x00, 0xc5, 0x28, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0xd0,
+	0x5c, 0x71, 0xdb, 0xce, 0xec, 0x94, 0xd4, 0xa2, 0x1d, 0x09, 0xaf, 0x40, 0xc5, 0xf4, 0xb5, 0xd9,
+	0xe3, 0x7c, 0x66, 0x3b, 0xb3, 0x53, 0x54, 0xcb, 0xa6, 0x1f, 0x3f, 0x6c, 0xd6, 0xbe, 0xca, 0x40,
+	0x35, 0xfd, 0x71, 0x01, 0xb7, 0xa0, 0x68, 0x39, 0x3a, 0xe1, 0xa9, 0x25, 0xbe, 0x6c, 0xed, 0x3c,
+	0xe7, 0x7b, 0x44, 0xfd, 0x30, 0xe4, 0xab, 0xb1, 0xe6, 0xd6, 0xdf, 0x25, 0x28, 0x46, 0x30, 0xbe,
+	0x00, 0x39, 0x97, 0x04, 0x63, 0x6e, 0x2e, 0xbf, 0x9f, 0x41, 0x92, 0xca, 0xdb, 0x0c, 0xf7, 0x5d,
+	0x62, 0xf3, 0x14, 0x08, 0x71, 0xd6, 0x66, 0xf3, 0x6a, 0x51, 0x62, 0xf0, 0x5b, 0x8f, 0x33, 0x99,
+	0x50, 0x3b, 0xf0, 0xa3, 0x79, 0x0d, 0xf1, 0x66, 0x08, 0xe3, 0x77, 0x60, 0x3d, 0xf0, 0x88, 0x69,
+	0xa5, 0xb8, 0x39, 0xce, 0x45, 0x91, 0x20, 0x26, 0xef, 0xc1, 0xa5, 0xc8, 0xae, 0x41, 0x03, 0xa2,
+	0x8f, 0xa9, 0x31, 0x53, 0x2a, 0xf0, 0xd7, 0x8d, 0x8b, 0x21, 0xa1, 0x15, 0xca, 0x23, 0xdd, 0xda,
+	0xd7, 0x12, 0xac, 0x47, 0xf7, 0x34, 0x23, 0x0e, 0xd6, 0x11, 0x00, 0xb1, 0x6d, 0x27, 0x48, 0x86,
+	0x6b, 0x31, 0x95, 0x17, 0xf4, 0xea, 0x8d, 0x58, 0x49, 0x4d, 0x18, 0xd8, 0x9a, 0x00, 0xcc, 0x24,
+	0x67, 0x86, 0xed, 0x32, 0x94, 0xc3, 0x2f, 0x47, 0xfc, 0xf3, 0xa3, 0xb8, 0xd9, 0x83, 0x80, 0xd8,
+	0x85, 0x0e, 0x6f, 0x42, 0xfe, 0x84, 0x8e, 0x4c, 0x3b, 0x7c, 0x0f, 0x16, 0x8d, 0xe8, 0xfd, 0x25,
+	0x17, 0xbf, 0xbf, 0xec, 0xff, 0x46, 0x82, 0x0d, 0xdd, 0x99, 0xcc, 0xfb, 0xbb, 0x8f, 0xe6, 0x9e,
+	0x17, 0xfc, 0x8f, 0xa5, 0xcf, 0x3f, 0x1a, 0x99, 0xc1, 0x78, 0x7a, 0x52, 0xd7, 0x9d, 0xc9, 0xee,
+	0xc8, 0xb1, 0x88, 0x3d, 0x9a, 0x7d, 0x3f, 0xe5, 0x7f, 0xf4, 0x1b, 0x23, 0x6a, 0xdf, 0x18, 0x39,
+	0x89, 0xaf, 0xa9, 0xf7, 0x66, 0x7f, 0xff, 0x27, 0x49, 0x7f, 0xca, 0x64, 0x0f, 0x7a, 0xfb, 0x7f,
+	0xce, 0x6c, 0x1d, 0x88, 0xee, 0x7a, 0x51, 0x78, 0x54, 0x3a, 0xb4, 0xa8, 0xce, 0x86, 0xfc, 0xff,
+	0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xe8, 0xef, 0xc4, 0x9b, 0x1d, 0x00, 0x00,
+}
diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto
new file mode 100644
index 0000000..ed08fcb
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto
@@ -0,0 +1,883 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// The messages in this file describe the definitions found in .proto files.
+// A valid .proto file can be translated directly to a FileDescriptorProto
+// without any other information (e.g. without reading its imports).
+
+
+syntax = "proto2";
+
+package google.protobuf;
+option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "DescriptorProtos";
+option csharp_namespace = "Google.Protobuf.Reflection";
+option objc_class_prefix = "GPB";
+option cc_enable_arenas = true;
+
+// descriptor.proto must be optimized for speed because reflection-based
+// algorithms don't work during bootstrapping.
+option optimize_for = SPEED;
+
+// The protocol compiler can output a FileDescriptorSet containing the .proto
+// files it parses.
+message FileDescriptorSet {
+  repeated FileDescriptorProto file = 1;
+}
+
+// Describes a complete .proto file.
+message FileDescriptorProto {
+  optional string name = 1;       // file name, relative to root of source tree
+  optional string package = 2;    // e.g. "foo", "foo.bar", etc.
+
+  // Names of files imported by this file.
+  repeated string dependency = 3;
+  // Indexes of the public imported files in the dependency list above.
+  repeated int32 public_dependency = 10;
+  // Indexes of the weak imported files in the dependency list.
+  // For Google-internal migration only. Do not use.
+  repeated int32 weak_dependency = 11;
+
+  // All top-level definitions in this file.
+  repeated DescriptorProto message_type = 4;
+  repeated EnumDescriptorProto enum_type = 5;
+  repeated ServiceDescriptorProto service = 6;
+  repeated FieldDescriptorProto extension = 7;
+
+  optional FileOptions options = 8;
+
+  // This field contains optional information about the original source code.
+  // You may safely remove this entire field without harming runtime
+  // functionality of the descriptors -- the information is needed only by
+  // development tools.
+  optional SourceCodeInfo source_code_info = 9;
+
+  // The syntax of the proto file.
+  // The supported values are "proto2" and "proto3".
+  optional string syntax = 12;
+}
+
+// Describes a message type.
+message DescriptorProto {
+  optional string name = 1;
+
+  repeated FieldDescriptorProto field = 2;
+  repeated FieldDescriptorProto extension = 6;
+
+  repeated DescriptorProto nested_type = 3;
+  repeated EnumDescriptorProto enum_type = 4;
+
+  message ExtensionRange {
+    optional int32 start = 1;
+    optional int32 end = 2;
+
+    optional ExtensionRangeOptions options = 3;
+  }
+  repeated ExtensionRange extension_range = 5;
+
+  repeated OneofDescriptorProto oneof_decl = 8;
+
+  optional MessageOptions options = 7;
+
+  // Range of reserved tag numbers. Reserved tag numbers may not be used by
+  // fields or extension ranges in the same message. Reserved ranges may
+  // not overlap.
+  message ReservedRange {
+    optional int32 start = 1; // Inclusive.
+    optional int32 end = 2;   // Exclusive.
+  }
+  repeated ReservedRange reserved_range = 9;
+  // Reserved field names, which may not be used by fields in the same message.
+  // A given name may only be reserved once.
+  repeated string reserved_name = 10;
+}
+
+message ExtensionRangeOptions {
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+// Describes a field within a message.
+message FieldDescriptorProto {
+  enum Type {
+    // 0 is reserved for errors.
+    // Order is weird for historical reasons.
+    TYPE_DOUBLE         = 1;
+    TYPE_FLOAT          = 2;
+    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+    // negative values are likely.
+    TYPE_INT64          = 3;
+    TYPE_UINT64         = 4;
+    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+    // negative values are likely.
+    TYPE_INT32          = 5;
+    TYPE_FIXED64        = 6;
+    TYPE_FIXED32        = 7;
+    TYPE_BOOL           = 8;
+    TYPE_STRING         = 9;
+    // Tag-delimited aggregate.
+    // Group type is deprecated and not supported in proto3. However, Proto3
+    // implementations should still be able to parse the group wire format and
+    // treat group fields as unknown fields.
+    TYPE_GROUP          = 10;
+    TYPE_MESSAGE        = 11;  // Length-delimited aggregate.
+
+    // New in version 2.
+    TYPE_BYTES          = 12;
+    TYPE_UINT32         = 13;
+    TYPE_ENUM           = 14;
+    TYPE_SFIXED32       = 15;
+    TYPE_SFIXED64       = 16;
+    TYPE_SINT32         = 17;  // Uses ZigZag encoding.
+    TYPE_SINT64         = 18;  // Uses ZigZag encoding.
+  };
+
+  enum Label {
+    // 0 is reserved for errors
+    LABEL_OPTIONAL      = 1;
+    LABEL_REQUIRED      = 2;
+    LABEL_REPEATED      = 3;
+  };
+
+  optional string name = 1;
+  optional int32 number = 3;
+  optional Label label = 4;
+
+  // If type_name is set, this need not be set.  If both this and type_name
+  // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+  optional Type type = 5;
+
+  // For message and enum types, this is the name of the type.  If the name
+  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+  // rules are used to find the type (i.e. first the nested types within this
+  // message are searched, then within the parent, on up to the root
+  // namespace).
+  optional string type_name = 6;
+
+  // For extensions, this is the name of the type being extended.  It is
+  // resolved in the same manner as type_name.
+  optional string extendee = 2;
+
+  // For numeric types, contains the original text representation of the value.
+  // For booleans, "true" or "false".
+  // For strings, contains the default text contents (not escaped in any way).
+  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+  // TODO(kenton):  Base-64 encode?
+  optional string default_value = 7;
+
+  // If set, gives the index of a oneof in the containing type's oneof_decl
+  // list.  This field is a member of that oneof.
+  optional int32 oneof_index = 9;
+
+  // JSON name of this field. The value is set by protocol compiler. If the
+  // user has set a "json_name" option on this field, that option's value
+  // will be used. Otherwise, it's deduced from the field's name by converting
+  // it to camelCase.
+  optional string json_name = 10;
+
+  optional FieldOptions options = 8;
+}
+
+// Describes a oneof.
+message OneofDescriptorProto {
+  optional string name = 1;
+  optional OneofOptions options = 2;
+}
+
+// Describes an enum type.
+message EnumDescriptorProto {
+  optional string name = 1;
+
+  repeated EnumValueDescriptorProto value = 2;
+
+  optional EnumOptions options = 3;
+
+  // Range of reserved numeric values. Reserved values may not be used by
+  // entries in the same enum. Reserved ranges may not overlap.
+  //
+  // Note that this is distinct from DescriptorProto.ReservedRange in that it
+  // is inclusive such that it can appropriately represent the entire int32
+  // domain.
+  message EnumReservedRange {
+    optional int32 start = 1; // Inclusive.
+    optional int32 end = 2;   // Inclusive.
+  }
+
+  // Range of reserved numeric values. Reserved numeric values may not be used
+  // by enum values in the same enum declaration. Reserved ranges may not
+  // overlap.
+  repeated EnumReservedRange reserved_range = 4;
+
+  // Reserved enum value names, which may not be reused. A given name may only
+  // be reserved once.
+  repeated string reserved_name = 5;
+}
+
+// Describes a value within an enum.
+message EnumValueDescriptorProto {
+  optional string name = 1;
+  optional int32 number = 2;
+
+  optional EnumValueOptions options = 3;
+}
+
+// Describes a service.
+message ServiceDescriptorProto {
+  optional string name = 1;
+  repeated MethodDescriptorProto method = 2;
+
+  optional ServiceOptions options = 3;
+}
+
+// Describes a method of a service.
+message MethodDescriptorProto {
+  optional string name = 1;
+
+  // Input and output type names.  These are resolved in the same way as
+  // FieldDescriptorProto.type_name, but must refer to a message type.
+  optional string input_type = 2;
+  optional string output_type = 3;
+
+  optional MethodOptions options = 4;
+
+  // Identifies if client streams multiple client messages
+  optional bool client_streaming = 5 [default=false];
+  // Identifies if server streams multiple server messages
+  optional bool server_streaming = 6 [default=false];
+}
+
+
+// ===================================================================
+// Options
+
+// Each of the definitions above may have "options" attached.  These are
+// just annotations which may cause code to be generated slightly differently
+// or may contain hints for code that manipulates protocol messages.
+//
+// Clients may define custom options as extensions of the *Options messages.
+// These extensions may not yet be known at parsing time, so the parser cannot
+// store the values in them.  Instead it stores them in a field in the *Options
+// message called uninterpreted_option. This field must have the same name
+// across all *Options messages. We then use this field to populate the
+// extensions when we build a descriptor, at which point all protos have been
+// parsed and so all extensions are known.
+//
+// Extension numbers for custom options may be chosen as follows:
+// * For options which will only be used within a single application or
+//   organization, or for experimental options, use field numbers 50000
+//   through 99999.  It is up to you to ensure that you do not use the
+//   same number for multiple options.
+// * For options which will be published and used publicly by multiple
+//   independent entities, e-mail protobuf-global-extension-registry@google.com
+//   to reserve extension numbers. Simply provide your project name (e.g.
+//   Objective-C plugin) and your project website (if available) -- there's no
+//   need to explain how you intend to use them. Usually you only need one
+//   extension number. You can declare multiple options with only one extension
+//   number by putting them in a sub-message. See the Custom Options section of
+//   the docs for examples:
+//   https://developers.google.com/protocol-buffers/docs/proto#options
+//   If this turns out to be popular, a web service will be set up
+//   to automatically assign option numbers.
+
+
+message FileOptions {
+
+  // Sets the Java package where classes generated from this .proto will be
+  // placed.  By default, the proto package is used, but this is often
+  // inappropriate because proto packages do not normally start with backwards
+  // domain names.
+  optional string java_package = 1;
+
+
+  // If set, all the classes from the .proto file are wrapped in a single
+  // outer class with the given name.  This applies to both Proto1
+  // (equivalent to the old "--one_java_file" option) and Proto2 (where
+  // a .proto always translates to a single class, but you may want to
+  // explicitly choose the class name).
+  optional string java_outer_classname = 8;
+
+  // If set true, then the Java code generator will generate a separate .java
+  // file for each top-level message, enum, and service defined in the .proto
+  // file.  Thus, these types will *not* be nested inside the outer class
+  // named by java_outer_classname.  However, the outer class will still be
+  // generated to contain the file's getDescriptor() method as well as any
+  // top-level extensions defined in the file.
+  optional bool java_multiple_files = 10 [default=false];
+
+  // This option does nothing.
+  optional bool java_generate_equals_and_hash = 20 [deprecated=true];
+
+  // If set true, then the Java2 code generator will generate code that
+  // throws an exception whenever an attempt is made to assign a non-UTF-8
+  // byte sequence to a string field.
+  // Message reflection will do the same.
+  // However, an extension field still accepts non-UTF-8 byte sequences.
+  // This option has no effect on when used with the lite runtime.
+  optional bool java_string_check_utf8 = 27 [default=false];
+
+
+  // Generated classes can be optimized for speed or code size.
+  enum OptimizeMode {
+    SPEED = 1;        // Generate complete code for parsing, serialization,
+                      // etc.
+    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
+    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
+  }
+  optional OptimizeMode optimize_for = 9 [default=SPEED];
+
+  // Sets the Go package where structs generated from this .proto will be
+  // placed. If omitted, the Go package will be derived from the following:
+  //   - The basename of the package import path, if provided.
+  //   - Otherwise, the package statement in the .proto file, if present.
+  //   - Otherwise, the basename of the .proto file, without extension.
+  optional string go_package = 11;
+
+
+
+  // Should generic services be generated in each language?  "Generic" services
+  // are not specific to any particular RPC system.  They are generated by the
+  // main code generators in each language (without additional plugins).
+  // Generic services were the only kind of service generation supported by
+  // early versions of google.protobuf.
+  //
+  // Generic services are now considered deprecated in favor of using plugins
+  // that generate code specific to your particular RPC system.  Therefore,
+  // these default to false.  Old code which depends on generic services should
+  // explicitly set them to true.
+  optional bool cc_generic_services = 16 [default=false];
+  optional bool java_generic_services = 17 [default=false];
+  optional bool py_generic_services = 18 [default=false];
+  optional bool php_generic_services = 42 [default=false];
+
+  // Is this file deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for everything in the file, or it will be completely ignored; in the very
+  // least, this is a formalization for deprecating files.
+  optional bool deprecated = 23 [default=false];
+
+  // Enables the use of arenas for the proto messages in this file. This applies
+  // only to generated classes for C++.
+  optional bool cc_enable_arenas = 31 [default=false];
+
+
+  // Sets the objective c class prefix which is prepended to all objective c
+  // generated classes from this .proto. There is no default.
+  optional string objc_class_prefix = 36;
+
+  // Namespace for generated classes; defaults to the package.
+  optional string csharp_namespace = 37;
+
+  // By default Swift generators will take the proto package and CamelCase it
+  // replacing '.' with underscore and use that to prefix the types/symbols
+  // defined. When this options is provided, they will use this value instead
+  // to prefix the types/symbols defined.
+  optional string swift_prefix = 39;
+
+  // Sets the php class prefix which is prepended to all php generated classes
+  // from this .proto. Default is empty.
+  optional string php_class_prefix = 40;
+
+  // Use this option to change the namespace of php generated classes. Default
+  // is empty. When this option is empty, the package name will be used for
+  // determining the namespace.
+  optional string php_namespace = 41;
+
+
+  // Use this option to change the namespace of php generated metadata classes.
+  // Default is empty. When this option is empty, the proto file name will be used
+  // for determining the namespace.
+  optional string php_metadata_namespace = 44;
+
+  // Use this option to change the package of ruby generated classes. Default
+  // is empty. When this option is not set, the package name will be used for
+  // determining the ruby package.
+  optional string ruby_package = 45;
+
+  // The parser stores options it doesn't recognize here.
+  // See the documentation for the "Options" section above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message.
+  // See the documentation for the "Options" section above.
+  extensions 1000 to max;
+
+  reserved 38;
+}
+
+message MessageOptions {
+  // Set true to use the old proto1 MessageSet wire format for extensions.
+  // This is provided for backwards-compatibility with the MessageSet wire
+  // format.  You should not use this for any other reason:  It's less
+  // efficient, has fewer features, and is more complicated.
+  //
+  // The message must be defined exactly as follows:
+  //   message Foo {
+  //     option message_set_wire_format = true;
+  //     extensions 4 to max;
+  //   }
+  // Note that the message cannot have any defined fields; MessageSets only
+  // have extensions.
+  //
+  // All extensions of your type must be singular messages; e.g. they cannot
+  // be int32s, enums, or repeated messages.
+  //
+  // Because this is an option, the above two restrictions are not enforced by
+  // the protocol compiler.
+  optional bool message_set_wire_format = 1 [default=false];
+
+  // Disables the generation of the standard "descriptor()" accessor, which can
+  // conflict with a field of the same name.  This is meant to make migration
+  // from proto1 easier; new code should avoid fields named "descriptor".
+  optional bool no_standard_descriptor_accessor = 2 [default=false];
+
+  // Is this message deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the message, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating messages.
+  optional bool deprecated = 3 [default=false];
+
+  // Whether the message is an automatically generated map entry type for the
+  // maps field.
+  //
+  // For maps fields:
+  //     map<KeyType, ValueType> map_field = 1;
+  // The parsed descriptor looks like:
+  //     message MapFieldEntry {
+  //         option map_entry = true;
+  //         optional KeyType key = 1;
+  //         optional ValueType value = 2;
+  //     }
+  //     repeated MapFieldEntry map_field = 1;
+  //
+  // Implementations may choose not to generate the map_entry=true message, but
+  // use a native map in the target language to hold the keys and values.
+  // The reflection APIs in such implementions still need to work as
+  // if the field is a repeated message field.
+  //
+  // NOTE: Do not set the option in .proto files. Always use the maps syntax
+  // instead. The option should only be implicitly set by the proto compiler
+  // parser.
+  optional bool map_entry = 7;
+
+  reserved 8;  // javalite_serializable
+  reserved 9;  // javanano_as_lite
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message FieldOptions {
+  // The ctype option instructs the C++ code generator to use a different
+  // representation of the field than it normally would.  See the specific
+  // options below.  This option is not yet implemented in the open source
+  // release -- sorry, we'll try to include it in a future version!
+  optional CType ctype = 1 [default = STRING];
+  enum CType {
+    // Default mode.
+    STRING = 0;
+
+    CORD = 1;
+
+    STRING_PIECE = 2;
+  }
+  // The packed option can be enabled for repeated primitive fields to enable
+  // a more efficient representation on the wire. Rather than repeatedly
+  // writing the tag and type for each element, the entire array is encoded as
+  // a single length-delimited blob. In proto3, only explicit setting it to
+  // false will avoid using packed encoding.
+  optional bool packed = 2;
+
+  // The jstype option determines the JavaScript type used for values of the
+  // field.  The option is permitted only for 64 bit integral and fixed types
+  // (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
+  // is represented as JavaScript string, which avoids loss of precision that
+  // can happen when a large value is converted to a floating point JavaScript.
+  // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
+  // use the JavaScript "number" type.  The behavior of the default option
+  // JS_NORMAL is implementation dependent.
+  //
+  // This option is an enum to permit additional types to be added, e.g.
+  // goog.math.Integer.
+  optional JSType jstype = 6 [default = JS_NORMAL];
+  enum JSType {
+    // Use the default type.
+    JS_NORMAL = 0;
+
+    // Use JavaScript strings.
+    JS_STRING = 1;
+
+    // Use JavaScript numbers.
+    JS_NUMBER = 2;
+  }
+
+  // Should this field be parsed lazily?  Lazy applies only to message-type
+  // fields.  It means that when the outer message is initially parsed, the
+  // inner message's contents will not be parsed but instead stored in encoded
+  // form.  The inner message will actually be parsed when it is first accessed.
+  //
+  // This is only a hint.  Implementations are free to choose whether to use
+  // eager or lazy parsing regardless of the value of this option.  However,
+  // setting this option true suggests that the protocol author believes that
+  // using lazy parsing on this field is worth the additional bookkeeping
+  // overhead typically needed to implement it.
+  //
+  // This option does not affect the public interface of any generated code;
+  // all method signatures remain the same.  Furthermore, thread-safety of the
+  // interface is not affected by this option; const methods remain safe to
+  // call from multiple threads concurrently, while non-const methods continue
+  // to require exclusive access.
+  //
+  //
+  // Note that implementations may choose not to check required fields within
+  // a lazy sub-message.  That is, calling IsInitialized() on the outer message
+  // may return true even if the inner message has missing required fields.
+  // This is necessary because otherwise the inner message would have to be
+  // parsed in order to perform the check, defeating the purpose of lazy
+  // parsing.  An implementation which chooses not to check required fields
+  // must be consistent about it.  That is, for any particular sub-message, the
+  // implementation must either *always* check its required fields, or *never*
+  // check its required fields, regardless of whether or not the message has
+  // been parsed.
+  optional bool lazy = 5 [default=false];
+
+  // Is this field deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for accessors, or it will be completely ignored; in the very least, this
+  // is a formalization for deprecating fields.
+  optional bool deprecated = 3 [default=false];
+
+  // For Google-internal migration only. Do not use.
+  optional bool weak = 10 [default=false];
+
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+
+  reserved 4;  // removed jtype
+}
+
+message OneofOptions {
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumOptions {
+
+  // Set this option to true to allow mapping different tag names to the same
+  // value.
+  optional bool allow_alias = 2;
+
+  // Is this enum deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the enum, or it will be completely ignored; in the very least, this
+  // is a formalization for deprecating enums.
+  optional bool deprecated = 3 [default=false];
+
+  reserved 5;  // javanano_as_lite
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumValueOptions {
+  // Is this enum value deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the enum value, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating enum values.
+  optional bool deprecated = 1 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message ServiceOptions {
+
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // Is this service deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the service, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating services.
+  optional bool deprecated = 33 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message MethodOptions {
+
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // Is this method deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the method, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating methods.
+  optional bool deprecated = 33 [default=false];
+
+  // Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
+  // or neither? HTTP based RPC implementation may choose GET verb for safe
+  // methods, and PUT verb for idempotent methods instead of the default POST.
+  enum IdempotencyLevel {
+    IDEMPOTENCY_UNKNOWN = 0;
+    NO_SIDE_EFFECTS     = 1; // implies idempotent
+    IDEMPOTENT          = 2; // idempotent, but may have side effects
+  }
+  optional IdempotencyLevel idempotency_level =
+      34 [default=IDEMPOTENCY_UNKNOWN];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+
+// A message representing a option the parser does not recognize. This only
+// appears in options protos created by the compiler::Parser class.
+// DescriptorPool resolves these when building Descriptor objects. Therefore,
+// options protos in descriptor objects (e.g. returned by Descriptor::options(),
+// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+// in them.
+message UninterpretedOption {
+  // The name of the uninterpreted option.  Each string represents a segment in
+  // a dot-separated name.  is_extension is true iff a segment represents an
+  // extension (denoted with parentheses in options specs in .proto files).
+  // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+  // "foo.(bar.baz).qux".
+  message NamePart {
+    required string name_part = 1;
+    required bool is_extension = 2;
+  }
+  repeated NamePart name = 2;
+
+  // The value of the uninterpreted option, in whatever type the tokenizer
+  // identified it as during parsing. Exactly one of these should be set.
+  optional string identifier_value = 3;
+  optional uint64 positive_int_value = 4;
+  optional int64 negative_int_value = 5;
+  optional double double_value = 6;
+  optional bytes string_value = 7;
+  optional string aggregate_value = 8;
+}
+
+// ===================================================================
+// Optional source code info
+
+// Encapsulates information about the original source file from which a
+// FileDescriptorProto was generated.
+message SourceCodeInfo {
+  // A Location identifies a piece of source code in a .proto file which
+  // corresponds to a particular definition.  This information is intended
+  // to be useful to IDEs, code indexers, documentation generators, and similar
+  // tools.
+  //
+  // For example, say we have a file like:
+  //   message Foo {
+  //     optional string foo = 1;
+  //   }
+  // Let's look at just the field definition:
+  //   optional string foo = 1;
+  //   ^       ^^     ^^  ^  ^^^
+  //   a       bc     de  f  ghi
+  // We have the following locations:
+  //   span   path               represents
+  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+  //
+  // Notes:
+  // - A location may refer to a repeated field itself (i.e. not to any
+  //   particular index within it).  This is used whenever a set of elements are
+  //   logically enclosed in a single code segment.  For example, an entire
+  //   extend block (possibly containing multiple extension definitions) will
+  //   have an outer location whose path refers to the "extensions" repeated
+  //   field without an index.
+  // - Multiple locations may have the same path.  This happens when a single
+  //   logical declaration is spread out across multiple places.  The most
+  //   obvious example is the "extend" block again -- there may be multiple
+  //   extend blocks in the same scope, each of which will have the same path.
+  // - A location's span is not always a subset of its parent's span.  For
+  //   example, the "extendee" of an extension declaration appears at the
+  //   beginning of the "extend" block and is shared by all extensions within
+  //   the block.
+  // - Just because a location's span is a subset of some other location's span
+  //   does not mean that it is a descendent.  For example, a "group" defines
+  //   both a type and a field in a single declaration.  Thus, the locations
+  //   corresponding to the type and field and their components will overlap.
+  // - Code which tries to interpret locations should probably be designed to
+  //   ignore those that it doesn't understand, as more types of locations could
+  //   be recorded in the future.
+  repeated Location location = 1;
+  message Location {
+    // Identifies which part of the FileDescriptorProto was defined at this
+    // location.
+    //
+    // Each element is a field number or an index.  They form a path from
+    // the root FileDescriptorProto to the place where the definition.  For
+    // example, this path:
+    //   [ 4, 3, 2, 7, 1 ]
+    // refers to:
+    //   file.message_type(3)  // 4, 3
+    //       .field(7)         // 2, 7
+    //       .name()           // 1
+    // This is because FileDescriptorProto.message_type has field number 4:
+    //   repeated DescriptorProto message_type = 4;
+    // and DescriptorProto.field has field number 2:
+    //   repeated FieldDescriptorProto field = 2;
+    // and FieldDescriptorProto.name has field number 1:
+    //   optional string name = 1;
+    //
+    // Thus, the above path gives the location of a field name.  If we removed
+    // the last element:
+    //   [ 4, 3, 2, 7 ]
+    // this path refers to the whole field declaration (from the beginning
+    // of the label to the terminating semicolon).
+    repeated int32 path = 1 [packed=true];
+
+    // Always has exactly three or four elements: start line, start column,
+    // end line (optional, otherwise assumed same as start line), end column.
+    // These are packed into a single field for efficiency.  Note that line
+    // and column numbers are zero-based -- typically you will want to add
+    // 1 to each before displaying to a user.
+    repeated int32 span = 2 [packed=true];
+
+    // If this SourceCodeInfo represents a complete declaration, these are any
+    // comments appearing before and after the declaration which appear to be
+    // attached to the declaration.
+    //
+    // A series of line comments appearing on consecutive lines, with no other
+    // tokens appearing on those lines, will be treated as a single comment.
+    //
+    // leading_detached_comments will keep paragraphs of comments that appear
+    // before (but not connected to) the current element. Each paragraph,
+    // separated by empty lines, will be one comment element in the repeated
+    // field.
+    //
+    // Only the comment content is provided; comment markers (e.g. //) are
+    // stripped out.  For block comments, leading whitespace and an asterisk
+    // will be stripped from the beginning of each line other than the first.
+    // Newlines are included in the output.
+    //
+    // Examples:
+    //
+    //   optional int32 foo = 1;  // Comment attached to foo.
+    //   // Comment attached to bar.
+    //   optional int32 bar = 2;
+    //
+    //   optional string baz = 3;
+    //   // Comment attached to baz.
+    //   // Another line attached to baz.
+    //
+    //   // Comment attached to qux.
+    //   //
+    //   // Another line attached to qux.
+    //   optional double qux = 4;
+    //
+    //   // Detached comment for corge. This is not leading or trailing comments
+    //   // to qux or corge because there are blank lines separating it from
+    //   // both.
+    //
+    //   // Detached comment for corge paragraph 2.
+    //
+    //   optional string corge = 5;
+    //   /* Block comment attached
+    //    * to corge.  Leading asterisks
+    //    * will be removed. */
+    //   /* Block comment attached to
+    //    * grault. */
+    //   optional int32 grault = 6;
+    //
+    //   // ignored detached comments.
+    optional string leading_comments = 3;
+    optional string trailing_comments = 4;
+    repeated string leading_detached_comments = 6;
+  }
+}
+
+// Describes the relationship between generated code and its original source
+// file. A GeneratedCodeInfo message is associated with only one generated
+// source file, but may contain references to different source .proto files.
+message GeneratedCodeInfo {
+  // An Annotation connects some span of text in generated code to an element
+  // of its generating .proto file.
+  repeated Annotation annotation = 1;
+  message Annotation {
+    // Identifies the element in the original source .proto file. This field
+    // is formatted the same as SourceCodeInfo.Location.path.
+    repeated int32 path = 1 [packed=true];
+
+    // Identifies the filesystem path to the original source .proto.
+    optional string source_file = 2;
+
+    // Identifies the starting offset in bytes in the generated code
+    // that relates to the identified object.
+    optional int32 begin = 3;
+
+    // Identifies the ending offset in bytes in the generated code that
+    // relates to the identified offset. The end offset should be one past
+    // the last relevant byte (so the length of the text = end - begin).
+    optional int32 end = 4;
+  }
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/any.go b/vendor/github.com/golang/protobuf/ptypes/any.go
new file mode 100644
index 0000000..70276e8
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/any.go
@@ -0,0 +1,141 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package ptypes
+
+// This file implements functions to marshal proto.Message to/from
+// google.protobuf.Any message.
+
+import (
+	"fmt"
+	"reflect"
+	"strings"
+
+	"github.com/golang/protobuf/proto"
+	"github.com/golang/protobuf/ptypes/any"
+)
+
+const googleApis = "type.googleapis.com/"
+
+// AnyMessageName returns the name of the message contained in a google.protobuf.Any message.
+//
+// Note that regular type assertions should be done using the Is
+// function. AnyMessageName is provided for less common use cases like filtering a
+// sequence of Any messages based on a set of allowed message type names.
+func AnyMessageName(any *any.Any) (string, error) {
+	if any == nil {
+		return "", fmt.Errorf("message is nil")
+	}
+	slash := strings.LastIndex(any.TypeUrl, "/")
+	if slash < 0 {
+		return "", fmt.Errorf("message type url %q is invalid", any.TypeUrl)
+	}
+	return any.TypeUrl[slash+1:], nil
+}
+
+// MarshalAny takes the protocol buffer and encodes it into google.protobuf.Any.
+func MarshalAny(pb proto.Message) (*any.Any, error) {
+	value, err := proto.Marshal(pb)
+	if err != nil {
+		return nil, err
+	}
+	return &any.Any{TypeUrl: googleApis + proto.MessageName(pb), Value: value}, nil
+}
+
+// DynamicAny is a value that can be passed to UnmarshalAny to automatically
+// allocate a proto.Message for the type specified in a google.protobuf.Any
+// message. The allocated message is stored in the embedded proto.Message.
+//
+// Example:
+//
+//   var x ptypes.DynamicAny
+//   if err := ptypes.UnmarshalAny(a, &x); err != nil { ... }
+//   fmt.Printf("unmarshaled message: %v", x.Message)
+type DynamicAny struct {
+	proto.Message
+}
+
+// Empty returns a new proto.Message of the type specified in a
+// google.protobuf.Any message. It returns an error if corresponding message
+// type isn't linked in.
+func Empty(any *any.Any) (proto.Message, error) {
+	aname, err := AnyMessageName(any)
+	if err != nil {
+		return nil, err
+	}
+
+	t := proto.MessageType(aname)
+	if t == nil {
+		return nil, fmt.Errorf("any: message type %q isn't linked in", aname)
+	}
+	return reflect.New(t.Elem()).Interface().(proto.Message), nil
+}
+
+// UnmarshalAny parses the protocol buffer representation in a google.protobuf.Any
+// message and places the decoded result in pb. It returns an error if type of
+// contents of Any message does not match type of pb message.
+//
+// pb can be a proto.Message, or a *DynamicAny.
+func UnmarshalAny(any *any.Any, pb proto.Message) error {
+	if d, ok := pb.(*DynamicAny); ok {
+		if d.Message == nil {
+			var err error
+			d.Message, err = Empty(any)
+			if err != nil {
+				return err
+			}
+		}
+		return UnmarshalAny(any, d.Message)
+	}
+
+	aname, err := AnyMessageName(any)
+	if err != nil {
+		return err
+	}
+
+	mname := proto.MessageName(pb)
+	if aname != mname {
+		return fmt.Errorf("mismatched message type: got %q want %q", aname, mname)
+	}
+	return proto.Unmarshal(any.Value, pb)
+}
+
+// Is returns true if any value contains a given message type.
+func Is(any *any.Any, pb proto.Message) bool {
+	// The following is equivalent to AnyMessageName(any) == proto.MessageName(pb),
+	// but it avoids scanning TypeUrl for the slash.
+	if any == nil {
+		return false
+	}
+	name := proto.MessageName(pb)
+	prefix := len(any.TypeUrl) - len(name)
+	return prefix >= 1 && any.TypeUrl[prefix-1] == '/' && any.TypeUrl[prefix:] == name
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go
new file mode 100644
index 0000000..78ee523
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go
@@ -0,0 +1,200 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/protobuf/any.proto
+
+package any
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// `Any` contains an arbitrary serialized protocol buffer message along with a
+// URL that describes the type of the serialized message.
+//
+// Protobuf library provides support to pack/unpack Any values in the form
+// of utility functions or additional generated methods of the Any type.
+//
+// Example 1: Pack and unpack a message in C++.
+//
+//     Foo foo = ...;
+//     Any any;
+//     any.PackFrom(foo);
+//     ...
+//     if (any.UnpackTo(&foo)) {
+//       ...
+//     }
+//
+// Example 2: Pack and unpack a message in Java.
+//
+//     Foo foo = ...;
+//     Any any = Any.pack(foo);
+//     ...
+//     if (any.is(Foo.class)) {
+//       foo = any.unpack(Foo.class);
+//     }
+//
+//  Example 3: Pack and unpack a message in Python.
+//
+//     foo = Foo(...)
+//     any = Any()
+//     any.Pack(foo)
+//     ...
+//     if any.Is(Foo.DESCRIPTOR):
+//       any.Unpack(foo)
+//       ...
+//
+//  Example 4: Pack and unpack a message in Go
+//
+//      foo := &pb.Foo{...}
+//      any, err := ptypes.MarshalAny(foo)
+//      ...
+//      foo := &pb.Foo{}
+//      if err := ptypes.UnmarshalAny(any, foo); err != nil {
+//        ...
+//      }
+//
+// The pack methods provided by protobuf library will by default use
+// 'type.googleapis.com/full.type.name' as the type URL and the unpack
+// methods only use the fully qualified type name after the last '/'
+// in the type URL, for example "foo.bar.com/x/y.z" will yield type
+// name "y.z".
+//
+//
+// JSON
+// ====
+// The JSON representation of an `Any` value uses the regular
+// representation of the deserialized, embedded message, with an
+// additional field `@type` which contains the type URL. Example:
+//
+//     package google.profile;
+//     message Person {
+//       string first_name = 1;
+//       string last_name = 2;
+//     }
+//
+//     {
+//       "@type": "type.googleapis.com/google.profile.Person",
+//       "firstName": <string>,
+//       "lastName": <string>
+//     }
+//
+// If the embedded message type is well-known and has a custom JSON
+// representation, that representation will be embedded adding a field
+// `value` which holds the custom JSON in addition to the `@type`
+// field. Example (for message [google.protobuf.Duration][]):
+//
+//     {
+//       "@type": "type.googleapis.com/google.protobuf.Duration",
+//       "value": "1.212s"
+//     }
+//
+type Any struct {
+	// A URL/resource name that uniquely identifies the type of the serialized
+	// protocol buffer message. The last segment of the URL's path must represent
+	// the fully qualified name of the type (as in
+	// `path/google.protobuf.Duration`). The name should be in a canonical form
+	// (e.g., leading "." is not accepted).
+	//
+	// In practice, teams usually precompile into the binary all types that they
+	// expect it to use in the context of Any. However, for URLs which use the
+	// scheme `http`, `https`, or no scheme, one can optionally set up a type
+	// server that maps type URLs to message definitions as follows:
+	//
+	// * If no scheme is provided, `https` is assumed.
+	// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
+	//   value in binary format, or produce an error.
+	// * Applications are allowed to cache lookup results based on the
+	//   URL, or have them precompiled into a binary to avoid any
+	//   lookup. Therefore, binary compatibility needs to be preserved
+	//   on changes to types. (Use versioned type names to manage
+	//   breaking changes.)
+	//
+	// Note: this functionality is not currently available in the official
+	// protobuf release, and it is not used for type URLs beginning with
+	// type.googleapis.com.
+	//
+	// Schemes other than `http`, `https` (or the empty scheme) might be
+	// used with implementation specific semantics.
+	//
+	TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"`
+	// Must be a valid serialized protocol buffer of the above specified type.
+	Value                []byte   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Any) Reset()         { *m = Any{} }
+func (m *Any) String() string { return proto.CompactTextString(m) }
+func (*Any) ProtoMessage()    {}
+func (*Any) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b53526c13ae22eb4, []int{0}
+}
+
+func (*Any) XXX_WellKnownType() string { return "Any" }
+
+func (m *Any) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Any.Unmarshal(m, b)
+}
+func (m *Any) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Any.Marshal(b, m, deterministic)
+}
+func (m *Any) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Any.Merge(m, src)
+}
+func (m *Any) XXX_Size() int {
+	return xxx_messageInfo_Any.Size(m)
+}
+func (m *Any) XXX_DiscardUnknown() {
+	xxx_messageInfo_Any.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Any proto.InternalMessageInfo
+
+func (m *Any) GetTypeUrl() string {
+	if m != nil {
+		return m.TypeUrl
+	}
+	return ""
+}
+
+func (m *Any) GetValue() []byte {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*Any)(nil), "google.protobuf.Any")
+}
+
+func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor_b53526c13ae22eb4) }
+
+var fileDescriptor_b53526c13ae22eb4 = []byte{
+	// 185 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4,
+	0x03, 0x73, 0x84, 0xf8, 0x21, 0x52, 0x7a, 0x30, 0x29, 0x25, 0x33, 0x2e, 0x66, 0xc7, 0xbc, 0x4a,
+	0x21, 0x49, 0x2e, 0x8e, 0x92, 0xca, 0x82, 0xd4, 0xf8, 0xd2, 0xa2, 0x1c, 0x09, 0x46, 0x05, 0x46,
+	0x0d, 0xce, 0x20, 0x76, 0x10, 0x3f, 0xb4, 0x28, 0x47, 0x48, 0x84, 0x8b, 0xb5, 0x2c, 0x31, 0xa7,
+	0x34, 0x55, 0x82, 0x49, 0x81, 0x51, 0x83, 0x27, 0x08, 0xc2, 0x71, 0xca, 0xe7, 0x12, 0x4e, 0xce,
+	0xcf, 0xd5, 0x43, 0x33, 0xce, 0x89, 0xc3, 0x31, 0xaf, 0x32, 0x00, 0xc4, 0x09, 0x60, 0x8c, 0x52,
+	0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc,
+	0x4b, 0x47, 0xb8, 0xa8, 0x00, 0x64, 0x7a, 0x31, 0xc8, 0x61, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c,
+	0x56, 0x31, 0xc9, 0xb9, 0x43, 0x8c, 0x0a, 0x80, 0x2a, 0xd1, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce,
+	0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0x29, 0x4d, 0x62, 0x03, 0xeb, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff,
+	0xff, 0x13, 0xf8, 0xe8, 0x42, 0xdd, 0x00, 0x00, 0x00,
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.proto b/vendor/github.com/golang/protobuf/ptypes/any/any.proto
new file mode 100644
index 0000000..4932942
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/any/any.proto
@@ -0,0 +1,154 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+package google.protobuf;
+
+option csharp_namespace = "Google.Protobuf.WellKnownTypes";
+option go_package = "github.com/golang/protobuf/ptypes/any";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "AnyProto";
+option java_multiple_files = true;
+option objc_class_prefix = "GPB";
+
+// `Any` contains an arbitrary serialized protocol buffer message along with a
+// URL that describes the type of the serialized message.
+//
+// Protobuf library provides support to pack/unpack Any values in the form
+// of utility functions or additional generated methods of the Any type.
+//
+// Example 1: Pack and unpack a message in C++.
+//
+//     Foo foo = ...;
+//     Any any;
+//     any.PackFrom(foo);
+//     ...
+//     if (any.UnpackTo(&foo)) {
+//       ...
+//     }
+//
+// Example 2: Pack and unpack a message in Java.
+//
+//     Foo foo = ...;
+//     Any any = Any.pack(foo);
+//     ...
+//     if (any.is(Foo.class)) {
+//       foo = any.unpack(Foo.class);
+//     }
+//
+//  Example 3: Pack and unpack a message in Python.
+//
+//     foo = Foo(...)
+//     any = Any()
+//     any.Pack(foo)
+//     ...
+//     if any.Is(Foo.DESCRIPTOR):
+//       any.Unpack(foo)
+//       ...
+//
+//  Example 4: Pack and unpack a message in Go
+//
+//      foo := &pb.Foo{...}
+//      any, err := ptypes.MarshalAny(foo)
+//      ...
+//      foo := &pb.Foo{}
+//      if err := ptypes.UnmarshalAny(any, foo); err != nil {
+//        ...
+//      }
+//
+// The pack methods provided by protobuf library will by default use
+// 'type.googleapis.com/full.type.name' as the type URL and the unpack
+// methods only use the fully qualified type name after the last '/'
+// in the type URL, for example "foo.bar.com/x/y.z" will yield type
+// name "y.z".
+//
+//
+// JSON
+// ====
+// The JSON representation of an `Any` value uses the regular
+// representation of the deserialized, embedded message, with an
+// additional field `@type` which contains the type URL. Example:
+//
+//     package google.profile;
+//     message Person {
+//       string first_name = 1;
+//       string last_name = 2;
+//     }
+//
+//     {
+//       "@type": "type.googleapis.com/google.profile.Person",
+//       "firstName": <string>,
+//       "lastName": <string>
+//     }
+//
+// If the embedded message type is well-known and has a custom JSON
+// representation, that representation will be embedded adding a field
+// `value` which holds the custom JSON in addition to the `@type`
+// field. Example (for message [google.protobuf.Duration][]):
+//
+//     {
+//       "@type": "type.googleapis.com/google.protobuf.Duration",
+//       "value": "1.212s"
+//     }
+//
+message Any {
+  // A URL/resource name that uniquely identifies the type of the serialized
+  // protocol buffer message. The last segment of the URL's path must represent
+  // the fully qualified name of the type (as in
+  // `path/google.protobuf.Duration`). The name should be in a canonical form
+  // (e.g., leading "." is not accepted).
+  //
+  // In practice, teams usually precompile into the binary all types that they
+  // expect it to use in the context of Any. However, for URLs which use the
+  // scheme `http`, `https`, or no scheme, one can optionally set up a type
+  // server that maps type URLs to message definitions as follows:
+  //
+  // * If no scheme is provided, `https` is assumed.
+  // * An HTTP GET on the URL must yield a [google.protobuf.Type][]
+  //   value in binary format, or produce an error.
+  // * Applications are allowed to cache lookup results based on the
+  //   URL, or have them precompiled into a binary to avoid any
+  //   lookup. Therefore, binary compatibility needs to be preserved
+  //   on changes to types. (Use versioned type names to manage
+  //   breaking changes.)
+  //
+  // Note: this functionality is not currently available in the official
+  // protobuf release, and it is not used for type URLs beginning with
+  // type.googleapis.com.
+  //
+  // Schemes other than `http`, `https` (or the empty scheme) might be
+  // used with implementation specific semantics.
+  //
+  string type_url = 1;
+
+  // Must be a valid serialized protocol buffer of the above specified type.
+  bytes value = 2;
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/doc.go b/vendor/github.com/golang/protobuf/ptypes/doc.go
new file mode 100644
index 0000000..c0d595d
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/doc.go
@@ -0,0 +1,35 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/*
+Package ptypes contains code for interacting with well-known types.
+*/
+package ptypes
diff --git a/vendor/github.com/golang/protobuf/ptypes/duration.go b/vendor/github.com/golang/protobuf/ptypes/duration.go
new file mode 100644
index 0000000..26d1ca2
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/duration.go
@@ -0,0 +1,102 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package ptypes
+
+// This file implements conversions between google.protobuf.Duration
+// and time.Duration.
+
+import (
+	"errors"
+	"fmt"
+	"time"
+
+	durpb "github.com/golang/protobuf/ptypes/duration"
+)
+
+const (
+	// Range of a durpb.Duration in seconds, as specified in
+	// google/protobuf/duration.proto. This is about 10,000 years in seconds.
+	maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)
+	minSeconds = -maxSeconds
+)
+
+// validateDuration determines whether the durpb.Duration is valid according to the
+// definition in google/protobuf/duration.proto. A valid durpb.Duration
+// may still be too large to fit into a time.Duration (the range of durpb.Duration
+// is about 10,000 years, and the range of time.Duration is about 290).
+func validateDuration(d *durpb.Duration) error {
+	if d == nil {
+		return errors.New("duration: nil Duration")
+	}
+	if d.Seconds < minSeconds || d.Seconds > maxSeconds {
+		return fmt.Errorf("duration: %v: seconds out of range", d)
+	}
+	if d.Nanos <= -1e9 || d.Nanos >= 1e9 {
+		return fmt.Errorf("duration: %v: nanos out of range", d)
+	}
+	// Seconds and Nanos must have the same sign, unless d.Nanos is zero.
+	if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) {
+		return fmt.Errorf("duration: %v: seconds and nanos have different signs", d)
+	}
+	return nil
+}
+
+// Duration converts a durpb.Duration to a time.Duration. Duration
+// returns an error if the durpb.Duration is invalid or is too large to be
+// represented in a time.Duration.
+func Duration(p *durpb.Duration) (time.Duration, error) {
+	if err := validateDuration(p); err != nil {
+		return 0, err
+	}
+	d := time.Duration(p.Seconds) * time.Second
+	if int64(d/time.Second) != p.Seconds {
+		return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
+	}
+	if p.Nanos != 0 {
+		d += time.Duration(p.Nanos) * time.Nanosecond
+		if (d < 0) != (p.Nanos < 0) {
+			return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p)
+		}
+	}
+	return d, nil
+}
+
+// DurationProto converts a time.Duration to a durpb.Duration.
+func DurationProto(d time.Duration) *durpb.Duration {
+	nanos := d.Nanoseconds()
+	secs := nanos / 1e9
+	nanos -= secs * 1e9
+	return &durpb.Duration{
+		Seconds: secs,
+		Nanos:   int32(nanos),
+	}
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go
new file mode 100644
index 0000000..0d681ee
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go
@@ -0,0 +1,161 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/protobuf/duration.proto
+
+package duration
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Duration represents a signed, fixed-length span of time represented
+// as a count of seconds and fractions of seconds at nanosecond
+// resolution. It is independent of any calendar and concepts like "day"
+// or "month". It is related to Timestamp in that the difference between
+// two Timestamp values is a Duration and it can be added or subtracted
+// from a Timestamp. Range is approximately +-10,000 years.
+//
+// # Examples
+//
+// Example 1: Compute Duration from two Timestamps in pseudo code.
+//
+//     Timestamp start = ...;
+//     Timestamp end = ...;
+//     Duration duration = ...;
+//
+//     duration.seconds = end.seconds - start.seconds;
+//     duration.nanos = end.nanos - start.nanos;
+//
+//     if (duration.seconds < 0 && duration.nanos > 0) {
+//       duration.seconds += 1;
+//       duration.nanos -= 1000000000;
+//     } else if (durations.seconds > 0 && duration.nanos < 0) {
+//       duration.seconds -= 1;
+//       duration.nanos += 1000000000;
+//     }
+//
+// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+//
+//     Timestamp start = ...;
+//     Duration duration = ...;
+//     Timestamp end = ...;
+//
+//     end.seconds = start.seconds + duration.seconds;
+//     end.nanos = start.nanos + duration.nanos;
+//
+//     if (end.nanos < 0) {
+//       end.seconds -= 1;
+//       end.nanos += 1000000000;
+//     } else if (end.nanos >= 1000000000) {
+//       end.seconds += 1;
+//       end.nanos -= 1000000000;
+//     }
+//
+// Example 3: Compute Duration from datetime.timedelta in Python.
+//
+//     td = datetime.timedelta(days=3, minutes=10)
+//     duration = Duration()
+//     duration.FromTimedelta(td)
+//
+// # JSON Mapping
+//
+// In JSON format, the Duration type is encoded as a string rather than an
+// object, where the string ends in the suffix "s" (indicating seconds) and
+// is preceded by the number of seconds, with nanoseconds expressed as
+// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
+// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
+// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
+// microsecond should be expressed in JSON format as "3.000001s".
+//
+//
+type Duration struct {
+	// Signed seconds of the span of time. Must be from -315,576,000,000
+	// to +315,576,000,000 inclusive. Note: these bounds are computed from:
+	// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
+	Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
+	// Signed fractions of a second at nanosecond resolution of the span
+	// of time. Durations less than one second are represented with a 0
+	// `seconds` field and a positive or negative `nanos` field. For durations
+	// of one second or more, a non-zero value for the `nanos` field must be
+	// of the same sign as the `seconds` field. Must be from -999,999,999
+	// to +999,999,999 inclusive.
+	Nanos                int32    `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Duration) Reset()         { *m = Duration{} }
+func (m *Duration) String() string { return proto.CompactTextString(m) }
+func (*Duration) ProtoMessage()    {}
+func (*Duration) Descriptor() ([]byte, []int) {
+	return fileDescriptor_23597b2ebd7ac6c5, []int{0}
+}
+
+func (*Duration) XXX_WellKnownType() string { return "Duration" }
+
+func (m *Duration) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Duration.Unmarshal(m, b)
+}
+func (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Duration.Marshal(b, m, deterministic)
+}
+func (m *Duration) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Duration.Merge(m, src)
+}
+func (m *Duration) XXX_Size() int {
+	return xxx_messageInfo_Duration.Size(m)
+}
+func (m *Duration) XXX_DiscardUnknown() {
+	xxx_messageInfo_Duration.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Duration proto.InternalMessageInfo
+
+func (m *Duration) GetSeconds() int64 {
+	if m != nil {
+		return m.Seconds
+	}
+	return 0
+}
+
+func (m *Duration) GetNanos() int32 {
+	if m != nil {
+		return m.Nanos
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*Duration)(nil), "google.protobuf.Duration")
+}
+
+func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor_23597b2ebd7ac6c5) }
+
+var fileDescriptor_23597b2ebd7ac6c5 = []byte{
+	// 190 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a,
+	0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0x56,
+	0x5c, 0x1c, 0x2e, 0x50, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0xc9, 0xf9, 0x79, 0x29, 0xc5,
+	0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x30, 0xae, 0x90, 0x08, 0x17, 0x6b, 0x5e, 0x62, 0x5e,
+	0x7e, 0xb1, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x84, 0xe3, 0x54, 0xc3, 0x25, 0x9c, 0x9c,
+	0x9f, 0xab, 0x87, 0x66, 0xa4, 0x13, 0x2f, 0xcc, 0xc0, 0x00, 0x90, 0x48, 0x00, 0x63, 0x94, 0x56,
+	0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e,
+	0x3a, 0xc2, 0x7d, 0x05, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x70, 0x67, 0xfe, 0x60, 0x64, 0x5c, 0xc4,
+	0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, 0x00, 0x54, 0xa9, 0x5e, 0x78,
+	0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, 0x12, 0x1b, 0xd8, 0x0c, 0x63,
+	0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x30, 0xff, 0xf3, 0x00, 0x00, 0x00,
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto b/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto
new file mode 100644
index 0000000..975fce4
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto
@@ -0,0 +1,117 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+package google.protobuf;
+
+option csharp_namespace = "Google.Protobuf.WellKnownTypes";
+option cc_enable_arenas = true;
+option go_package = "github.com/golang/protobuf/ptypes/duration";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "DurationProto";
+option java_multiple_files = true;
+option objc_class_prefix = "GPB";
+
+// A Duration represents a signed, fixed-length span of time represented
+// as a count of seconds and fractions of seconds at nanosecond
+// resolution. It is independent of any calendar and concepts like "day"
+// or "month". It is related to Timestamp in that the difference between
+// two Timestamp values is a Duration and it can be added or subtracted
+// from a Timestamp. Range is approximately +-10,000 years.
+//
+// # Examples
+//
+// Example 1: Compute Duration from two Timestamps in pseudo code.
+//
+//     Timestamp start = ...;
+//     Timestamp end = ...;
+//     Duration duration = ...;
+//
+//     duration.seconds = end.seconds - start.seconds;
+//     duration.nanos = end.nanos - start.nanos;
+//
+//     if (duration.seconds < 0 && duration.nanos > 0) {
+//       duration.seconds += 1;
+//       duration.nanos -= 1000000000;
+//     } else if (durations.seconds > 0 && duration.nanos < 0) {
+//       duration.seconds -= 1;
+//       duration.nanos += 1000000000;
+//     }
+//
+// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+//
+//     Timestamp start = ...;
+//     Duration duration = ...;
+//     Timestamp end = ...;
+//
+//     end.seconds = start.seconds + duration.seconds;
+//     end.nanos = start.nanos + duration.nanos;
+//
+//     if (end.nanos < 0) {
+//       end.seconds -= 1;
+//       end.nanos += 1000000000;
+//     } else if (end.nanos >= 1000000000) {
+//       end.seconds += 1;
+//       end.nanos -= 1000000000;
+//     }
+//
+// Example 3: Compute Duration from datetime.timedelta in Python.
+//
+//     td = datetime.timedelta(days=3, minutes=10)
+//     duration = Duration()
+//     duration.FromTimedelta(td)
+//
+// # JSON Mapping
+//
+// In JSON format, the Duration type is encoded as a string rather than an
+// object, where the string ends in the suffix "s" (indicating seconds) and
+// is preceded by the number of seconds, with nanoseconds expressed as
+// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
+// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
+// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
+// microsecond should be expressed in JSON format as "3.000001s".
+//
+//
+message Duration {
+
+  // Signed seconds of the span of time. Must be from -315,576,000,000
+  // to +315,576,000,000 inclusive. Note: these bounds are computed from:
+  // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
+  int64 seconds = 1;
+
+  // Signed fractions of a second at nanosecond resolution of the span
+  // of time. Durations less than one second are represented with a 0
+  // `seconds` field and a positive or negative `nanos` field. For durations
+  // of one second or more, a non-zero value for the `nanos` field must be
+  // of the same sign as the `seconds` field. Must be from -999,999,999
+  // to +999,999,999 inclusive.
+  int32 nanos = 2;
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go b/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
new file mode 100644
index 0000000..b4eb03e
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
@@ -0,0 +1,83 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/protobuf/empty.proto
+
+package empty
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A generic empty message that you can re-use to avoid defining duplicated
+// empty messages in your APIs. A typical example is to use it as the request
+// or the response type of an API method. For instance:
+//
+//     service Foo {
+//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+//     }
+//
+// The JSON representation for `Empty` is empty JSON object `{}`.
+type Empty struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Empty) Reset()         { *m = Empty{} }
+func (m *Empty) String() string { return proto.CompactTextString(m) }
+func (*Empty) ProtoMessage()    {}
+func (*Empty) Descriptor() ([]byte, []int) {
+	return fileDescriptor_900544acb223d5b8, []int{0}
+}
+
+func (*Empty) XXX_WellKnownType() string { return "Empty" }
+
+func (m *Empty) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Empty.Unmarshal(m, b)
+}
+func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Empty.Marshal(b, m, deterministic)
+}
+func (m *Empty) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Empty.Merge(m, src)
+}
+func (m *Empty) XXX_Size() int {
+	return xxx_messageInfo_Empty.Size(m)
+}
+func (m *Empty) XXX_DiscardUnknown() {
+	xxx_messageInfo_Empty.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Empty proto.InternalMessageInfo
+
+func init() {
+	proto.RegisterType((*Empty)(nil), "google.protobuf.Empty")
+}
+
+func init() { proto.RegisterFile("google/protobuf/empty.proto", fileDescriptor_900544acb223d5b8) }
+
+var fileDescriptor_900544acb223d5b8 = []byte{
+	// 148 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcd, 0x2d, 0x28,
+	0xa9, 0xd4, 0x03, 0x73, 0x85, 0xf8, 0x21, 0x92, 0x7a, 0x30, 0x49, 0x25, 0x76, 0x2e, 0x56, 0x57,
+	0x90, 0xbc, 0x53, 0x19, 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0xbc, 0x13, 0x17, 0x58, 0x36,
+	0x00, 0xc4, 0x0d, 0x60, 0x8c, 0x52, 0x4f, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf,
+	0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0x47, 0x58, 0x53, 0x50, 0x52, 0x59, 0x90, 0x5a, 0x0c,
+	0xb1, 0xed, 0x07, 0x23, 0xe3, 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10,
+	0x13, 0x03, 0xa0, 0xea, 0xf4, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40,
+	0xea, 0x93, 0xd8, 0xc0, 0x06, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0xd4, 0xb3, 0xa6,
+	0xb7, 0x00, 0x00, 0x00,
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto b/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto
new file mode 100644
index 0000000..03cacd2
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto
@@ -0,0 +1,52 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+package google.protobuf;
+
+option csharp_namespace = "Google.Protobuf.WellKnownTypes";
+option go_package = "github.com/golang/protobuf/ptypes/empty";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "EmptyProto";
+option java_multiple_files = true;
+option objc_class_prefix = "GPB";
+option cc_enable_arenas = true;
+
+// A generic empty message that you can re-use to avoid defining duplicated
+// empty messages in your APIs. A typical example is to use it as the request
+// or the response type of an API method. For instance:
+//
+//     service Foo {
+//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+//     }
+//
+// The JSON representation for `Empty` is empty JSON object `{}`.
+message Empty {}
diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp.go b/vendor/github.com/golang/protobuf/ptypes/timestamp.go
new file mode 100644
index 0000000..8da0df0
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/timestamp.go
@@ -0,0 +1,132 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors.  All rights reserved.
+// https://github.com/golang/protobuf
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package ptypes
+
+// This file implements operations on google.protobuf.Timestamp.
+
+import (
+	"errors"
+	"fmt"
+	"time"
+
+	tspb "github.com/golang/protobuf/ptypes/timestamp"
+)
+
+const (
+	// Seconds field of the earliest valid Timestamp.
+	// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
+	minValidSeconds = -62135596800
+	// Seconds field just after the latest valid Timestamp.
+	// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
+	maxValidSeconds = 253402300800
+)
+
+// validateTimestamp determines whether a Timestamp is valid.
+// A valid timestamp represents a time in the range
+// [0001-01-01, 10000-01-01) and has a Nanos field
+// in the range [0, 1e9).
+//
+// If the Timestamp is valid, validateTimestamp returns nil.
+// Otherwise, it returns an error that describes
+// the problem.
+//
+// Every valid Timestamp can be represented by a time.Time, but the converse is not true.
+func validateTimestamp(ts *tspb.Timestamp) error {
+	if ts == nil {
+		return errors.New("timestamp: nil Timestamp")
+	}
+	if ts.Seconds < minValidSeconds {
+		return fmt.Errorf("timestamp: %v before 0001-01-01", ts)
+	}
+	if ts.Seconds >= maxValidSeconds {
+		return fmt.Errorf("timestamp: %v after 10000-01-01", ts)
+	}
+	if ts.Nanos < 0 || ts.Nanos >= 1e9 {
+		return fmt.Errorf("timestamp: %v: nanos not in range [0, 1e9)", ts)
+	}
+	return nil
+}
+
+// Timestamp converts a google.protobuf.Timestamp proto to a time.Time.
+// It returns an error if the argument is invalid.
+//
+// Unlike most Go functions, if Timestamp returns an error, the first return value
+// is not the zero time.Time. Instead, it is the value obtained from the
+// time.Unix function when passed the contents of the Timestamp, in the UTC
+// locale. This may or may not be a meaningful time; many invalid Timestamps
+// do map to valid time.Times.
+//
+// A nil Timestamp returns an error. The first return value in that case is
+// undefined.
+func Timestamp(ts *tspb.Timestamp) (time.Time, error) {
+	// Don't return the zero value on error, because corresponds to a valid
+	// timestamp. Instead return whatever time.Unix gives us.
+	var t time.Time
+	if ts == nil {
+		t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp
+	} else {
+		t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC()
+	}
+	return t, validateTimestamp(ts)
+}
+
+// TimestampNow returns a google.protobuf.Timestamp for the current time.
+func TimestampNow() *tspb.Timestamp {
+	ts, err := TimestampProto(time.Now())
+	if err != nil {
+		panic("ptypes: time.Now() out of Timestamp range")
+	}
+	return ts
+}
+
+// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.
+// It returns an error if the resulting Timestamp is invalid.
+func TimestampProto(t time.Time) (*tspb.Timestamp, error) {
+	ts := &tspb.Timestamp{
+		Seconds: t.Unix(),
+		Nanos:   int32(t.Nanosecond()),
+	}
+	if err := validateTimestamp(ts); err != nil {
+		return nil, err
+	}
+	return ts, nil
+}
+
+// TimestampString returns the RFC 3339 string for valid Timestamps. For invalid
+// Timestamps, it returns an error message in parentheses.
+func TimestampString(ts *tspb.Timestamp) string {
+	t, err := Timestamp(ts)
+	if err != nil {
+		return fmt.Sprintf("(%v)", err)
+	}
+	return t.Format(time.RFC3339Nano)
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
new file mode 100644
index 0000000..31cd846
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go
@@ -0,0 +1,179 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: google/protobuf/timestamp.proto
+
+package timestamp
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// A Timestamp represents a point in time independent of any time zone
+// or calendar, represented as seconds and fractions of seconds at
+// nanosecond resolution in UTC Epoch time. It is encoded using the
+// Proleptic Gregorian Calendar which extends the Gregorian calendar
+// backwards to year one. It is encoded assuming all minutes are 60
+// seconds long, i.e. leap seconds are "smeared" so that no leap second
+// table is needed for interpretation. Range is from
+// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
+// By restricting to that range, we ensure that we can convert to
+// and from  RFC 3339 date strings.
+// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
+//
+// # Examples
+//
+// Example 1: Compute Timestamp from POSIX `time()`.
+//
+//     Timestamp timestamp;
+//     timestamp.set_seconds(time(NULL));
+//     timestamp.set_nanos(0);
+//
+// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+//
+//     struct timeval tv;
+//     gettimeofday(&tv, NULL);
+//
+//     Timestamp timestamp;
+//     timestamp.set_seconds(tv.tv_sec);
+//     timestamp.set_nanos(tv.tv_usec * 1000);
+//
+// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+//
+//     FILETIME ft;
+//     GetSystemTimeAsFileTime(&ft);
+//     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+//
+//     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
+//     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
+//     Timestamp timestamp;
+//     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
+//     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+//
+// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+//
+//     long millis = System.currentTimeMillis();
+//
+//     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
+//         .setNanos((int) ((millis % 1000) * 1000000)).build();
+//
+//
+// Example 5: Compute Timestamp from current time in Python.
+//
+//     timestamp = Timestamp()
+//     timestamp.GetCurrentTime()
+//
+// # JSON Mapping
+//
+// In JSON format, the Timestamp type is encoded as a string in the
+// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
+// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
+// where {year} is always expressed using four digits while {month}, {day},
+// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
+// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
+// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
+// is required. A proto3 JSON serializer should always use UTC (as indicated by
+// "Z") when printing the Timestamp type and a proto3 JSON parser should be
+// able to accept both UTC and other timezones (as indicated by an offset).
+//
+// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
+// 01:30 UTC on January 15, 2017.
+//
+// In JavaScript, one can convert a Date object to this format using the
+// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
+// method. In Python, a standard `datetime.datetime` object can be converted
+// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
+// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
+// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
+// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--
+// ) to obtain a formatter capable of generating timestamps in this format.
+//
+//
+type Timestamp struct {
+	// Represents seconds of UTC time since Unix epoch
+	// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
+	// 9999-12-31T23:59:59Z inclusive.
+	Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
+	// Non-negative fractions of a second at nanosecond resolution. Negative
+	// second values with fractions must still have non-negative nanos values
+	// that count forward in time. Must be from 0 to 999,999,999
+	// inclusive.
+	Nanos                int32    `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Timestamp) Reset()         { *m = Timestamp{} }
+func (m *Timestamp) String() string { return proto.CompactTextString(m) }
+func (*Timestamp) ProtoMessage()    {}
+func (*Timestamp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_292007bbfe81227e, []int{0}
+}
+
+func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" }
+
+func (m *Timestamp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Timestamp.Unmarshal(m, b)
+}
+func (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Timestamp.Marshal(b, m, deterministic)
+}
+func (m *Timestamp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Timestamp.Merge(m, src)
+}
+func (m *Timestamp) XXX_Size() int {
+	return xxx_messageInfo_Timestamp.Size(m)
+}
+func (m *Timestamp) XXX_DiscardUnknown() {
+	xxx_messageInfo_Timestamp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Timestamp proto.InternalMessageInfo
+
+func (m *Timestamp) GetSeconds() int64 {
+	if m != nil {
+		return m.Seconds
+	}
+	return 0
+}
+
+func (m *Timestamp) GetNanos() int32 {
+	if m != nil {
+		return m.Nanos
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp")
+}
+
+func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor_292007bbfe81227e) }
+
+var fileDescriptor_292007bbfe81227e = []byte{
+	// 191 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f,
+	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d,
+	0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x03, 0x0b, 0x09, 0xf1, 0x43, 0x14, 0xe8, 0xc1, 0x14, 0x28,
+	0x59, 0x73, 0x71, 0x86, 0xc0, 0xd4, 0x08, 0x49, 0x70, 0xb1, 0x17, 0xa7, 0x26, 0xe7, 0xe7, 0xa5,
+	0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0xc1, 0xb8, 0x42, 0x22, 0x5c, 0xac, 0x79, 0x89,
+	0x79, 0xf9, 0xc5, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10, 0x8e, 0x53, 0x1d, 0x97, 0x70,
+	0x72, 0x7e, 0xae, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51,
+	0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89,
+	0x79, 0xe9, 0x08, 0x27, 0x16, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x23, 0x5c, 0xfa, 0x83, 0x91, 0x71,
+	0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a,
+	0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43,
+	0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x77, 0x4a, 0x07, 0xf7, 0x00, 0x00, 0x00,
+}
diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
new file mode 100644
index 0000000..eafb3fa
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto
@@ -0,0 +1,135 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+package google.protobuf;
+
+option csharp_namespace = "Google.Protobuf.WellKnownTypes";
+option cc_enable_arenas = true;
+option go_package = "github.com/golang/protobuf/ptypes/timestamp";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "TimestampProto";
+option java_multiple_files = true;
+option objc_class_prefix = "GPB";
+
+// A Timestamp represents a point in time independent of any time zone
+// or calendar, represented as seconds and fractions of seconds at
+// nanosecond resolution in UTC Epoch time. It is encoded using the
+// Proleptic Gregorian Calendar which extends the Gregorian calendar
+// backwards to year one. It is encoded assuming all minutes are 60
+// seconds long, i.e. leap seconds are "smeared" so that no leap second
+// table is needed for interpretation. Range is from
+// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
+// By restricting to that range, we ensure that we can convert to
+// and from  RFC 3339 date strings.
+// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
+//
+// # Examples
+//
+// Example 1: Compute Timestamp from POSIX `time()`.
+//
+//     Timestamp timestamp;
+//     timestamp.set_seconds(time(NULL));
+//     timestamp.set_nanos(0);
+//
+// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+//
+//     struct timeval tv;
+//     gettimeofday(&tv, NULL);
+//
+//     Timestamp timestamp;
+//     timestamp.set_seconds(tv.tv_sec);
+//     timestamp.set_nanos(tv.tv_usec * 1000);
+//
+// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+//
+//     FILETIME ft;
+//     GetSystemTimeAsFileTime(&ft);
+//     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+//
+//     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
+//     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
+//     Timestamp timestamp;
+//     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
+//     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+//
+// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+//
+//     long millis = System.currentTimeMillis();
+//
+//     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
+//         .setNanos((int) ((millis % 1000) * 1000000)).build();
+//
+//
+// Example 5: Compute Timestamp from current time in Python.
+//
+//     timestamp = Timestamp()
+//     timestamp.GetCurrentTime()
+//
+// # JSON Mapping
+//
+// In JSON format, the Timestamp type is encoded as a string in the
+// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
+// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
+// where {year} is always expressed using four digits while {month}, {day},
+// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
+// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
+// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
+// is required. A proto3 JSON serializer should always use UTC (as indicated by
+// "Z") when printing the Timestamp type and a proto3 JSON parser should be
+// able to accept both UTC and other timezones (as indicated by an offset).
+//
+// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
+// 01:30 UTC on January 15, 2017.
+//
+// In JavaScript, one can convert a Date object to this format using the
+// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
+// method. In Python, a standard `datetime.datetime` object can be converted
+// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
+// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
+// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
+// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--
+// ) to obtain a formatter capable of generating timestamps in this format.
+//
+//
+message Timestamp {
+
+  // Represents seconds of UTC time since Unix epoch
+  // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
+  // 9999-12-31T23:59:59Z inclusive.
+  int64 seconds = 1;
+
+  // Non-negative fractions of a second at nanosecond resolution. Negative
+  // second values with fractions must still have non-negative nanos values
+  // that count forward in time. Must be from 0 to 999,999,999
+  // inclusive.
+  int32 nanos = 2;
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/common/common.pb.go b/vendor/github.com/opencord/voltha-protos/go/common/common.pb.go
new file mode 100644
index 0000000..c50262b
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/common/common.pb.go
@@ -0,0 +1,685 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/common.proto
+
+package common
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type TestModeKeys int32
+
+const (
+	TestModeKeys_api_test TestModeKeys = 0
+)
+
+var TestModeKeys_name = map[int32]string{
+	0: "api_test",
+}
+
+var TestModeKeys_value = map[string]int32{
+	"api_test": 0,
+}
+
+func (x TestModeKeys) String() string {
+	return proto.EnumName(TestModeKeys_name, int32(x))
+}
+
+func (TestModeKeys) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{0}
+}
+
+// Logging verbosity level
+type LogLevel_LogLevel int32
+
+const (
+	LogLevel_DEBUG    LogLevel_LogLevel = 0
+	LogLevel_INFO     LogLevel_LogLevel = 1
+	LogLevel_WARNING  LogLevel_LogLevel = 2
+	LogLevel_ERROR    LogLevel_LogLevel = 3
+	LogLevel_CRITICAL LogLevel_LogLevel = 4
+	LogLevel_FATAL    LogLevel_LogLevel = 5
+)
+
+var LogLevel_LogLevel_name = map[int32]string{
+	0: "DEBUG",
+	1: "INFO",
+	2: "WARNING",
+	3: "ERROR",
+	4: "CRITICAL",
+	5: "FATAL",
+}
+
+var LogLevel_LogLevel_value = map[string]int32{
+	"DEBUG":    0,
+	"INFO":     1,
+	"WARNING":  2,
+	"ERROR":    3,
+	"CRITICAL": 4,
+	"FATAL":    5,
+}
+
+func (x LogLevel_LogLevel) String() string {
+	return proto.EnumName(LogLevel_LogLevel_name, int32(x))
+}
+
+func (LogLevel_LogLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{2, 0}
+}
+
+// Administrative State
+type AdminState_AdminState int32
+
+const (
+	// The administrative state of the device is unknown
+	AdminState_UNKNOWN AdminState_AdminState = 0
+	// The device is pre-provisioned into Voltha, but not contacted by it
+	AdminState_PREPROVISIONED AdminState_AdminState = 1
+	// The device is enabled for activation and operation
+	AdminState_ENABLED AdminState_AdminState = 2
+	// The device is disabled and shall not perform its intended forwarding
+	// functions other than being available for re-activation.
+	AdminState_DISABLED AdminState_AdminState = 3
+	// The device is in the state of image download
+	AdminState_DOWNLOADING_IMAGE AdminState_AdminState = 4
+	// The device is marked to be deleted
+	AdminState_DELETED AdminState_AdminState = 5
+)
+
+var AdminState_AdminState_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "PREPROVISIONED",
+	2: "ENABLED",
+	3: "DISABLED",
+	4: "DOWNLOADING_IMAGE",
+	5: "DELETED",
+}
+
+var AdminState_AdminState_value = map[string]int32{
+	"UNKNOWN":           0,
+	"PREPROVISIONED":    1,
+	"ENABLED":           2,
+	"DISABLED":          3,
+	"DOWNLOADING_IMAGE": 4,
+	"DELETED":           5,
+}
+
+func (x AdminState_AdminState) String() string {
+	return proto.EnumName(AdminState_AdminState_name, int32(x))
+}
+
+func (AdminState_AdminState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{6, 0}
+}
+
+// Operational Status
+type OperStatus_OperStatus int32
+
+const (
+	// The status of the device is unknown at this point
+	OperStatus_UNKNOWN OperStatus_OperStatus = 0
+	// The device has been discovered, but not yet activated
+	OperStatus_DISCOVERED OperStatus_OperStatus = 1
+	// The device is being activated (booted, rebooted, upgraded, etc.)
+	OperStatus_ACTIVATING OperStatus_OperStatus = 2
+	// Service impacting tests are being conducted
+	OperStatus_TESTING OperStatus_OperStatus = 3
+	// The device is up and active
+	OperStatus_ACTIVE OperStatus_OperStatus = 4
+	// The device has failed and cannot fulfill its intended role
+	OperStatus_FAILED OperStatus_OperStatus = 5
+)
+
+var OperStatus_OperStatus_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "DISCOVERED",
+	2: "ACTIVATING",
+	3: "TESTING",
+	4: "ACTIVE",
+	5: "FAILED",
+}
+
+var OperStatus_OperStatus_value = map[string]int32{
+	"UNKNOWN":    0,
+	"DISCOVERED": 1,
+	"ACTIVATING": 2,
+	"TESTING":    3,
+	"ACTIVE":     4,
+	"FAILED":     5,
+}
+
+func (x OperStatus_OperStatus) String() string {
+	return proto.EnumName(OperStatus_OperStatus_name, int32(x))
+}
+
+func (OperStatus_OperStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{7, 0}
+}
+
+// Connectivity Status
+type ConnectStatus_ConnectStatus int32
+
+const (
+	// The device connectivity status is unknown
+	ConnectStatus_UNKNOWN ConnectStatus_ConnectStatus = 0
+	// The device cannot be reached by Voltha
+	ConnectStatus_UNREACHABLE ConnectStatus_ConnectStatus = 1
+	// There is live communication between device and Voltha
+	ConnectStatus_REACHABLE ConnectStatus_ConnectStatus = 2
+)
+
+var ConnectStatus_ConnectStatus_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "UNREACHABLE",
+	2: "REACHABLE",
+}
+
+var ConnectStatus_ConnectStatus_value = map[string]int32{
+	"UNKNOWN":     0,
+	"UNREACHABLE": 1,
+	"REACHABLE":   2,
+}
+
+func (x ConnectStatus_ConnectStatus) String() string {
+	return proto.EnumName(ConnectStatus_ConnectStatus_name, int32(x))
+}
+
+func (ConnectStatus_ConnectStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{8, 0}
+}
+
+type OperationResp_OperationReturnCode int32
+
+const (
+	OperationResp_OPERATION_SUCCESS     OperationResp_OperationReturnCode = 0
+	OperationResp_OPERATION_FAILURE     OperationResp_OperationReturnCode = 1
+	OperationResp_OPERATION_UNSUPPORTED OperationResp_OperationReturnCode = 2
+)
+
+var OperationResp_OperationReturnCode_name = map[int32]string{
+	0: "OPERATION_SUCCESS",
+	1: "OPERATION_FAILURE",
+	2: "OPERATION_UNSUPPORTED",
+}
+
+var OperationResp_OperationReturnCode_value = map[string]int32{
+	"OPERATION_SUCCESS":     0,
+	"OPERATION_FAILURE":     1,
+	"OPERATION_UNSUPPORTED": 2,
+}
+
+func (x OperationResp_OperationReturnCode) String() string {
+	return proto.EnumName(OperationResp_OperationReturnCode_name, int32(x))
+}
+
+func (OperationResp_OperationReturnCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{9, 0}
+}
+
+// Convey a resource identifier
+type ID struct {
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ID) Reset()         { *m = ID{} }
+func (m *ID) String() string { return proto.CompactTextString(m) }
+func (*ID) ProtoMessage()    {}
+func (*ID) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{0}
+}
+
+func (m *ID) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ID.Unmarshal(m, b)
+}
+func (m *ID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ID.Marshal(b, m, deterministic)
+}
+func (m *ID) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ID.Merge(m, src)
+}
+func (m *ID) XXX_Size() int {
+	return xxx_messageInfo_ID.Size(m)
+}
+func (m *ID) XXX_DiscardUnknown() {
+	xxx_messageInfo_ID.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ID proto.InternalMessageInfo
+
+func (m *ID) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+// Represents a list of IDs
+type IDs struct {
+	Items                []*ID    `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *IDs) Reset()         { *m = IDs{} }
+func (m *IDs) String() string { return proto.CompactTextString(m) }
+func (*IDs) ProtoMessage()    {}
+func (*IDs) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{1}
+}
+
+func (m *IDs) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IDs.Unmarshal(m, b)
+}
+func (m *IDs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IDs.Marshal(b, m, deterministic)
+}
+func (m *IDs) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IDs.Merge(m, src)
+}
+func (m *IDs) XXX_Size() int {
+	return xxx_messageInfo_IDs.Size(m)
+}
+func (m *IDs) XXX_DiscardUnknown() {
+	xxx_messageInfo_IDs.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IDs proto.InternalMessageInfo
+
+func (m *IDs) GetItems() []*ID {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type LogLevel struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LogLevel) Reset()         { *m = LogLevel{} }
+func (m *LogLevel) String() string { return proto.CompactTextString(m) }
+func (*LogLevel) ProtoMessage()    {}
+func (*LogLevel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{2}
+}
+
+func (m *LogLevel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogLevel.Unmarshal(m, b)
+}
+func (m *LogLevel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogLevel.Marshal(b, m, deterministic)
+}
+func (m *LogLevel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogLevel.Merge(m, src)
+}
+func (m *LogLevel) XXX_Size() int {
+	return xxx_messageInfo_LogLevel.Size(m)
+}
+func (m *LogLevel) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogLevel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogLevel proto.InternalMessageInfo
+
+type Logging struct {
+	Level                LogLevel_LogLevel `protobuf:"varint,1,opt,name=level,proto3,enum=common.LogLevel_LogLevel" json:"level,omitempty"`
+	PackageName          string            `protobuf:"bytes,2,opt,name=package_name,json=packageName,proto3" json:"package_name,omitempty"`
+	ComponentName        string            `protobuf:"bytes,3,opt,name=component_name,json=componentName,proto3" json:"component_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *Logging) Reset()         { *m = Logging{} }
+func (m *Logging) String() string { return proto.CompactTextString(m) }
+func (*Logging) ProtoMessage()    {}
+func (*Logging) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{3}
+}
+
+func (m *Logging) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Logging.Unmarshal(m, b)
+}
+func (m *Logging) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Logging.Marshal(b, m, deterministic)
+}
+func (m *Logging) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Logging.Merge(m, src)
+}
+func (m *Logging) XXX_Size() int {
+	return xxx_messageInfo_Logging.Size(m)
+}
+func (m *Logging) XXX_DiscardUnknown() {
+	xxx_messageInfo_Logging.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Logging proto.InternalMessageInfo
+
+func (m *Logging) GetLevel() LogLevel_LogLevel {
+	if m != nil {
+		return m.Level
+	}
+	return LogLevel_DEBUG
+}
+
+func (m *Logging) GetPackageName() string {
+	if m != nil {
+		return m.PackageName
+	}
+	return ""
+}
+
+func (m *Logging) GetComponentName() string {
+	if m != nil {
+		return m.ComponentName
+	}
+	return ""
+}
+
+// For GetLogLevels(), select component to query
+type LoggingComponent struct {
+	ComponentName        string   `protobuf:"bytes,1,opt,name=component_name,json=componentName,proto3" json:"component_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LoggingComponent) Reset()         { *m = LoggingComponent{} }
+func (m *LoggingComponent) String() string { return proto.CompactTextString(m) }
+func (*LoggingComponent) ProtoMessage()    {}
+func (*LoggingComponent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{4}
+}
+
+func (m *LoggingComponent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LoggingComponent.Unmarshal(m, b)
+}
+func (m *LoggingComponent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LoggingComponent.Marshal(b, m, deterministic)
+}
+func (m *LoggingComponent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LoggingComponent.Merge(m, src)
+}
+func (m *LoggingComponent) XXX_Size() int {
+	return xxx_messageInfo_LoggingComponent.Size(m)
+}
+func (m *LoggingComponent) XXX_DiscardUnknown() {
+	xxx_messageInfo_LoggingComponent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LoggingComponent proto.InternalMessageInfo
+
+func (m *LoggingComponent) GetComponentName() string {
+	if m != nil {
+		return m.ComponentName
+	}
+	return ""
+}
+
+// For returning multiple log levels
+type Loggings struct {
+	Items                []*Logging `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *Loggings) Reset()         { *m = Loggings{} }
+func (m *Loggings) String() string { return proto.CompactTextString(m) }
+func (*Loggings) ProtoMessage()    {}
+func (*Loggings) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{5}
+}
+
+func (m *Loggings) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Loggings.Unmarshal(m, b)
+}
+func (m *Loggings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Loggings.Marshal(b, m, deterministic)
+}
+func (m *Loggings) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Loggings.Merge(m, src)
+}
+func (m *Loggings) XXX_Size() int {
+	return xxx_messageInfo_Loggings.Size(m)
+}
+func (m *Loggings) XXX_DiscardUnknown() {
+	xxx_messageInfo_Loggings.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Loggings proto.InternalMessageInfo
+
+func (m *Loggings) GetItems() []*Logging {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type AdminState struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdminState) Reset()         { *m = AdminState{} }
+func (m *AdminState) String() string { return proto.CompactTextString(m) }
+func (*AdminState) ProtoMessage()    {}
+func (*AdminState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{6}
+}
+
+func (m *AdminState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdminState.Unmarshal(m, b)
+}
+func (m *AdminState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdminState.Marshal(b, m, deterministic)
+}
+func (m *AdminState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdminState.Merge(m, src)
+}
+func (m *AdminState) XXX_Size() int {
+	return xxx_messageInfo_AdminState.Size(m)
+}
+func (m *AdminState) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdminState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdminState proto.InternalMessageInfo
+
+type OperStatus struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OperStatus) Reset()         { *m = OperStatus{} }
+func (m *OperStatus) String() string { return proto.CompactTextString(m) }
+func (*OperStatus) ProtoMessage()    {}
+func (*OperStatus) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{7}
+}
+
+func (m *OperStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperStatus.Unmarshal(m, b)
+}
+func (m *OperStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperStatus.Marshal(b, m, deterministic)
+}
+func (m *OperStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperStatus.Merge(m, src)
+}
+func (m *OperStatus) XXX_Size() int {
+	return xxx_messageInfo_OperStatus.Size(m)
+}
+func (m *OperStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperStatus.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperStatus proto.InternalMessageInfo
+
+type ConnectStatus struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConnectStatus) Reset()         { *m = ConnectStatus{} }
+func (m *ConnectStatus) String() string { return proto.CompactTextString(m) }
+func (*ConnectStatus) ProtoMessage()    {}
+func (*ConnectStatus) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{8}
+}
+
+func (m *ConnectStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConnectStatus.Unmarshal(m, b)
+}
+func (m *ConnectStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConnectStatus.Marshal(b, m, deterministic)
+}
+func (m *ConnectStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConnectStatus.Merge(m, src)
+}
+func (m *ConnectStatus) XXX_Size() int {
+	return xxx_messageInfo_ConnectStatus.Size(m)
+}
+func (m *ConnectStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConnectStatus.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConnectStatus proto.InternalMessageInfo
+
+type OperationResp struct {
+	// Return code
+	Code OperationResp_OperationReturnCode `protobuf:"varint,1,opt,name=code,proto3,enum=common.OperationResp_OperationReturnCode" json:"code,omitempty"`
+	// Additional Info
+	AdditionalInfo       string   `protobuf:"bytes,2,opt,name=additional_info,json=additionalInfo,proto3" json:"additional_info,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OperationResp) Reset()         { *m = OperationResp{} }
+func (m *OperationResp) String() string { return proto.CompactTextString(m) }
+func (*OperationResp) ProtoMessage()    {}
+func (*OperationResp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []int{9}
+}
+
+func (m *OperationResp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OperationResp.Unmarshal(m, b)
+}
+func (m *OperationResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OperationResp.Marshal(b, m, deterministic)
+}
+func (m *OperationResp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OperationResp.Merge(m, src)
+}
+func (m *OperationResp) XXX_Size() int {
+	return xxx_messageInfo_OperationResp.Size(m)
+}
+func (m *OperationResp) XXX_DiscardUnknown() {
+	xxx_messageInfo_OperationResp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OperationResp proto.InternalMessageInfo
+
+func (m *OperationResp) GetCode() OperationResp_OperationReturnCode {
+	if m != nil {
+		return m.Code
+	}
+	return OperationResp_OPERATION_SUCCESS
+}
+
+func (m *OperationResp) GetAdditionalInfo() string {
+	if m != nil {
+		return m.AdditionalInfo
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterEnum("common.TestModeKeys", TestModeKeys_name, TestModeKeys_value)
+	proto.RegisterEnum("common.LogLevel_LogLevel", LogLevel_LogLevel_name, LogLevel_LogLevel_value)
+	proto.RegisterEnum("common.AdminState_AdminState", AdminState_AdminState_name, AdminState_AdminState_value)
+	proto.RegisterEnum("common.OperStatus_OperStatus", OperStatus_OperStatus_name, OperStatus_OperStatus_value)
+	proto.RegisterEnum("common.ConnectStatus_ConnectStatus", ConnectStatus_ConnectStatus_name, ConnectStatus_ConnectStatus_value)
+	proto.RegisterEnum("common.OperationResp_OperationReturnCode", OperationResp_OperationReturnCode_name, OperationResp_OperationReturnCode_value)
+	proto.RegisterType((*ID)(nil), "common.ID")
+	proto.RegisterType((*IDs)(nil), "common.IDs")
+	proto.RegisterType((*LogLevel)(nil), "common.LogLevel")
+	proto.RegisterType((*Logging)(nil), "common.Logging")
+	proto.RegisterType((*LoggingComponent)(nil), "common.LoggingComponent")
+	proto.RegisterType((*Loggings)(nil), "common.Loggings")
+	proto.RegisterType((*AdminState)(nil), "common.AdminState")
+	proto.RegisterType((*OperStatus)(nil), "common.OperStatus")
+	proto.RegisterType((*ConnectStatus)(nil), "common.ConnectStatus")
+	proto.RegisterType((*OperationResp)(nil), "common.OperationResp")
+}
+
+func init() { proto.RegisterFile("voltha_protos/common.proto", fileDescriptor_c2e3fd231961e826) }
+
+var fileDescriptor_c2e3fd231961e826 = []byte{
+	// 661 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x54, 0x4d, 0x4f, 0xdb, 0x4a,
+	0x14, 0x8d, 0xf3, 0x05, 0xdc, 0x90, 0xe0, 0x37, 0xef, 0x21, 0x01, 0x7a, 0x95, 0x52, 0x4b, 0x08,
+	0xda, 0x0a, 0xa2, 0xd2, 0x55, 0xab, 0x76, 0x61, 0xec, 0x21, 0x1d, 0x61, 0xc6, 0xd1, 0xd8, 0x01,
+	0xa9, 0x0b, 0x22, 0x13, 0x0f, 0xc6, 0x6a, 0x32, 0x63, 0xc5, 0x06, 0x89, 0x65, 0xa5, 0xfe, 0xbd,
+	0xfe, 0x85, 0xfe, 0x86, 0xae, 0xba, 0xae, 0xc6, 0x76, 0x48, 0x52, 0xb1, 0xf3, 0x39, 0x73, 0xae,
+	0xcf, 0xbd, 0xe7, 0x8e, 0x06, 0xf6, 0x1e, 0xe4, 0x24, 0xbb, 0x0b, 0x46, 0xc9, 0x4c, 0x66, 0x32,
+	0xed, 0x8d, 0xe5, 0x74, 0x2a, 0xc5, 0x71, 0x8e, 0x50, 0xb3, 0x40, 0x7b, 0xdd, 0x55, 0xcd, 0x63,
+	0x20, 0xa2, 0x91, 0x4c, 0xb2, 0x58, 0x8a, 0xb4, 0x50, 0x1a, 0xff, 0x41, 0x95, 0xd8, 0xa8, 0x03,
+	0xd5, 0x38, 0xdc, 0xd1, 0xba, 0xda, 0xe1, 0x06, 0xab, 0xc6, 0xa1, 0x71, 0x00, 0x35, 0x62, 0xa7,
+	0xa8, 0x0b, 0x8d, 0x38, 0xe3, 0xd3, 0x74, 0x47, 0xeb, 0xd6, 0x0e, 0x5b, 0x27, 0x70, 0x5c, 0x9a,
+	0x10, 0x9b, 0x15, 0x07, 0xc6, 0x18, 0xd6, 0x1d, 0x19, 0x39, 0xfc, 0x81, 0x4f, 0x8c, 0xc1, 0xe2,
+	0x1b, 0x6d, 0x40, 0xc3, 0xc6, 0xa7, 0xc3, 0xbe, 0x5e, 0x41, 0xeb, 0x50, 0x27, 0xf4, 0xcc, 0xd5,
+	0x35, 0xd4, 0x82, 0xb5, 0x2b, 0x93, 0x51, 0x42, 0xfb, 0x7a, 0x55, 0x29, 0x30, 0x63, 0x2e, 0xd3,
+	0x6b, 0x68, 0x13, 0xd6, 0x2d, 0x46, 0x7c, 0x62, 0x99, 0x8e, 0x5e, 0x57, 0x07, 0x67, 0xa6, 0x6f,
+	0x3a, 0x7a, 0xe3, 0x43, 0xe3, 0xd7, 0xef, 0x1f, 0x2f, 0x2a, 0xc6, 0x77, 0x0d, 0xd6, 0x1c, 0x19,
+	0x45, 0xb1, 0x88, 0x50, 0x0f, 0x1a, 0x13, 0xe5, 0x90, 0x37, 0xdb, 0x39, 0xd9, 0x9d, 0xb7, 0x34,
+	0x77, 0x7e, 0xfa, 0x60, 0x85, 0x0e, 0xbd, 0x84, 0xcd, 0x24, 0x18, 0x7f, 0x0d, 0x22, 0x3e, 0x12,
+	0xc1, 0x94, 0xef, 0x54, 0xf3, 0x21, 0x5b, 0x25, 0x47, 0x83, 0x29, 0x47, 0xfb, 0xd0, 0x19, 0xcb,
+	0x69, 0x22, 0x05, 0x17, 0x59, 0x21, 0xaa, 0xe5, 0xa2, 0xf6, 0x13, 0xab, 0x64, 0xc6, 0x7b, 0xd0,
+	0xcb, 0x2e, 0xac, 0x39, 0xff, 0x4c, 0xa9, 0xf6, 0x5c, 0xe9, 0xdb, 0x3c, 0x1a, 0x55, 0x9a, 0xa2,
+	0xfd, 0xd5, 0x50, 0xb7, 0x96, 0x26, 0x50, 0x82, 0x79, 0xb2, 0xdf, 0x34, 0x00, 0x33, 0x9c, 0xc6,
+	0xc2, 0xcb, 0x82, 0x8c, 0x1b, 0x93, 0x65, 0xa4, 0x92, 0x1c, 0xd2, 0x73, 0xea, 0x5e, 0x51, 0xbd,
+	0x82, 0x10, 0x74, 0x06, 0x0c, 0x0f, 0x98, 0x7b, 0x49, 0x3c, 0xe2, 0x52, 0x6c, 0x17, 0x51, 0x63,
+	0x6a, 0x9e, 0x3a, 0xd8, 0xd6, 0xab, 0x2a, 0x5f, 0x9b, 0x78, 0x05, 0xaa, 0xa1, 0x6d, 0xf8, 0xc7,
+	0x76, 0xaf, 0xa8, 0xe3, 0x9a, 0x36, 0xa1, 0xfd, 0x11, 0xb9, 0x30, 0xfb, 0x58, 0xaf, 0xab, 0x0a,
+	0x1b, 0x3b, 0xd8, 0xc7, 0xf6, 0x22, 0xf8, 0x14, 0xc0, 0x4d, 0xf8, 0x4c, 0x79, 0xde, 0xa7, 0xc6,
+	0xf5, 0x32, 0x5a, 0x6d, 0xa1, 0x03, 0x60, 0x13, 0xcf, 0x72, 0x2f, 0x31, 0xcb, 0xed, 0x3b, 0x00,
+	0xa6, 0xe5, 0x93, 0x4b, 0xd3, 0x2f, 0x96, 0xdd, 0x82, 0x35, 0x1f, 0x7b, 0x39, 0xa8, 0x21, 0x80,
+	0x66, 0x7e, 0xa8, 0x5c, 0x01, 0x9a, 0x67, 0x26, 0x71, 0x96, 0x4d, 0x7d, 0x68, 0x5b, 0x52, 0x08,
+	0x3e, 0xce, 0x4a, 0xdf, 0x8f, 0x7f, 0x11, 0xab, 0xd6, 0x5b, 0xd0, 0x1a, 0x52, 0x86, 0x4d, 0xeb,
+	0xb3, 0x1a, 0x50, 0xd7, 0x50, 0x1b, 0x36, 0x16, 0xb0, 0x3a, 0xff, 0xeb, 0x4f, 0x0d, 0xda, 0xaa,
+	0xfb, 0x40, 0x5d, 0x7e, 0xc6, 0xd3, 0x04, 0x7d, 0x82, 0xfa, 0x58, 0x86, 0xbc, 0xbc, 0x48, 0xaf,
+	0xe6, 0x6b, 0x58, 0x11, 0x2d, 0xa3, 0xec, 0x7e, 0x26, 0x2c, 0x19, 0x72, 0x96, 0x97, 0xa1, 0x03,
+	0xd8, 0x0a, 0xc2, 0x30, 0x56, 0x67, 0xc1, 0x64, 0x14, 0x8b, 0x5b, 0x59, 0x5e, 0xad, 0xce, 0x82,
+	0x26, 0xe2, 0x56, 0x1a, 0xd7, 0xf0, 0xef, 0x33, 0x7f, 0x51, 0x6b, 0x70, 0x07, 0x98, 0x99, 0x3e,
+	0x71, 0xe9, 0xc8, 0x1b, 0x5a, 0x16, 0xf6, 0x3c, 0xbd, 0xb2, 0x4a, 0xab, 0x68, 0x86, 0x4c, 0x0d,
+	0xb5, 0x0b, 0xdb, 0x0b, 0x7a, 0x48, 0xbd, 0xe1, 0x60, 0xe0, 0x32, 0xb5, 0xab, 0xf9, 0x80, 0xaf,
+	0xff, 0x87, 0x4d, 0x9f, 0xa7, 0xd9, 0x85, 0x0c, 0xf9, 0x39, 0x7f, 0x4c, 0xd5, 0xd2, 0x83, 0x24,
+	0x1e, 0x65, 0x3c, 0xcd, 0xf4, 0xca, 0xe9, 0xd1, 0x97, 0x37, 0x51, 0x9c, 0xdd, 0xdd, 0xdf, 0xa8,
+	0x31, 0x7b, 0x32, 0xe1, 0x62, 0x2c, 0x67, 0x61, 0xaf, 0x78, 0x1e, 0x8e, 0xca, 0xe7, 0x21, 0x92,
+	0xe5, 0x2b, 0x72, 0xd3, 0xcc, 0x99, 0x77, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xd4, 0xbf,
+	0xf3, 0x64, 0x04, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/common/meta.pb.go b/vendor/github.com/opencord/voltha-protos/go/common/meta.pb.go
new file mode 100644
index 0000000..181f3dd
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/common/meta.pb.go
@@ -0,0 +1,141 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/meta.proto
+
+package common
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type Access int32
+
+const (
+	// read-write, stored attribute
+	Access_CONFIG Access = 0
+	// read-only field, stored with the model, covered by its hash
+	Access_READ_ONLY Access = 1
+	// A read-only attribute that is not stored in the model, not covered
+	// by its hash, its value is filled real-time upon each request.
+	Access_REAL_TIME Access = 2
+)
+
+var Access_name = map[int32]string{
+	0: "CONFIG",
+	1: "READ_ONLY",
+	2: "REAL_TIME",
+}
+
+var Access_value = map[string]int32{
+	"CONFIG":    0,
+	"READ_ONLY": 1,
+	"REAL_TIME": 2,
+}
+
+func (x Access) String() string {
+	return proto.EnumName(Access_name, int32(x))
+}
+
+func (Access) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_96b320e8a67781f3, []int{0}
+}
+
+type ChildNode struct {
+	Key                  string   `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChildNode) Reset()         { *m = ChildNode{} }
+func (m *ChildNode) String() string { return proto.CompactTextString(m) }
+func (*ChildNode) ProtoMessage()    {}
+func (*ChildNode) Descriptor() ([]byte, []int) {
+	return fileDescriptor_96b320e8a67781f3, []int{0}
+}
+
+func (m *ChildNode) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChildNode.Unmarshal(m, b)
+}
+func (m *ChildNode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChildNode.Marshal(b, m, deterministic)
+}
+func (m *ChildNode) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChildNode.Merge(m, src)
+}
+func (m *ChildNode) XXX_Size() int {
+	return xxx_messageInfo_ChildNode.Size(m)
+}
+func (m *ChildNode) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChildNode.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChildNode proto.InternalMessageInfo
+
+func (m *ChildNode) GetKey() string {
+	if m != nil {
+		return m.Key
+	}
+	return ""
+}
+
+var E_ChildNode = &proto.ExtensionDesc{
+	ExtendedType:  (*descriptor.FieldOptions)(nil),
+	ExtensionType: (*ChildNode)(nil),
+	Field:         7761772,
+	Name:          "voltha.child_node",
+	Tag:           "bytes,7761772,opt,name=child_node",
+	Filename:      "voltha_protos/meta.proto",
+}
+
+var E_Access = &proto.ExtensionDesc{
+	ExtendedType:  (*descriptor.FieldOptions)(nil),
+	ExtensionType: (*Access)(nil),
+	Field:         7761773,
+	Name:          "voltha.access",
+	Tag:           "varint,7761773,opt,name=access,enum=voltha.Access",
+	Filename:      "voltha_protos/meta.proto",
+}
+
+func init() {
+	proto.RegisterEnum("voltha.Access", Access_name, Access_value)
+	proto.RegisterType((*ChildNode)(nil), "voltha.ChildNode")
+	proto.RegisterExtension(E_ChildNode)
+	proto.RegisterExtension(E_Access)
+}
+
+func init() { proto.RegisterFile("voltha_protos/meta.proto", fileDescriptor_96b320e8a67781f3) }
+
+var fileDescriptor_96b320e8a67781f3 = []byte{
+	// 271 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0x41, 0x4b, 0x84, 0x40,
+	0x18, 0x86, 0xb3, 0x05, 0xc1, 0x2f, 0x5a, 0xcc, 0x93, 0x04, 0x0b, 0xd2, 0x69, 0x29, 0x76, 0x06,
+	0xec, 0xb6, 0xb7, 0x6d, 0xdb, 0xad, 0x85, 0x4d, 0x41, 0xba, 0xd4, 0x45, 0x74, 0x9c, 0x74, 0x48,
+	0xfd, 0xc4, 0x99, 0x0d, 0xfa, 0xa9, 0x5d, 0xfa, 0x05, 0xf5, 0x1f, 0x42, 0x47, 0xbb, 0xee, 0xed,
+	0x9d, 0x77, 0xde, 0x79, 0x78, 0x18, 0x70, 0x3f, 0xb0, 0x54, 0x45, 0x12, 0x37, 0x2d, 0x2a, 0x94,
+	0xb4, 0xe2, 0x2a, 0x21, 0x7d, 0x76, 0x4c, 0x7d, 0x73, 0xe9, 0xe5, 0x88, 0x79, 0xc9, 0x69, 0xdf,
+	0xa6, 0x87, 0x37, 0x9a, 0x71, 0xc9, 0x5a, 0xd1, 0x28, 0x6c, 0xf5, 0xf2, 0x6a, 0x06, 0xd6, 0xba,
+	0x10, 0x65, 0x16, 0x60, 0xc6, 0x1d, 0x1b, 0x26, 0xef, 0xfc, 0xd3, 0x35, 0x3c, 0x63, 0x6e, 0x45,
+	0x5d, 0xbc, 0xf6, 0xc1, 0x5c, 0x31, 0xc6, 0xa5, 0x74, 0x00, 0xcc, 0x75, 0x18, 0x6c, 0x77, 0x0f,
+	0xf6, 0x89, 0x73, 0x0e, 0x56, 0xb4, 0x59, 0xdd, 0xc7, 0x61, 0xb0, 0x7f, 0xb1, 0x8d, 0xe1, 0xb8,
+	0x8f, 0x9f, 0x77, 0x4f, 0x1b, 0xfb, 0x74, 0x19, 0x01, 0xb0, 0x0e, 0x19, 0xd7, 0x1d, 0x73, 0x46,
+	0xb4, 0x03, 0x19, 0x1d, 0xc8, 0x56, 0xf0, 0x32, 0x0b, 0x1b, 0x25, 0xb0, 0x96, 0xee, 0xcf, 0xf7,
+	0xd7, 0xc4, 0x33, 0xe6, 0x67, 0xfe, 0x05, 0xd1, 0xce, 0xe4, 0x5f, 0x27, 0xb2, 0xd8, 0x18, 0x97,
+	0x8f, 0x60, 0x26, 0xda, 0xe3, 0x08, 0xef, 0x57, 0xf3, 0xa6, 0xfe, 0x74, 0xe4, 0x69, 0xff, 0x68,
+	0x78, 0x7f, 0xb7, 0x78, 0xbd, 0xc9, 0x85, 0x2a, 0x0e, 0x29, 0x61, 0x58, 0x51, 0x6c, 0x78, 0xcd,
+	0xb0, 0xcd, 0xa8, 0x1e, 0x2f, 0x86, 0xaf, 0xcc, 0x91, 0x32, 0xac, 0x2a, 0xac, 0x53, 0xb3, 0x6f,
+	0x6e, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x90, 0x94, 0xed, 0x6c, 0x01, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/common/yang_options.pb.go b/vendor/github.com/opencord/voltha-protos/go/common/yang_options.pb.go
new file mode 100644
index 0000000..c9f4d8e
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/common/yang_options.pb.go
@@ -0,0 +1,237 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/yang_options.proto
+
+package common
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type MessageParserOption int32
+
+const (
+	// Move any enclosing child enum/message definition to the same level
+	// as the parent (this message) in the yang generated file
+	MessageParserOption_MOVE_TO_PARENT_LEVEL MessageParserOption = 0
+	// Create both a grouping and a container for this message.  The container
+	// name will be the message name.  The grouping name will be the message
+	// name prefixed with "grouping_"
+	MessageParserOption_CREATE_BOTH_GROUPING_AND_CONTAINER MessageParserOption = 1
+)
+
+var MessageParserOption_name = map[int32]string{
+	0: "MOVE_TO_PARENT_LEVEL",
+	1: "CREATE_BOTH_GROUPING_AND_CONTAINER",
+}
+
+var MessageParserOption_value = map[string]int32{
+	"MOVE_TO_PARENT_LEVEL":               0,
+	"CREATE_BOTH_GROUPING_AND_CONTAINER": 1,
+}
+
+func (x MessageParserOption) String() string {
+	return proto.EnumName(MessageParserOption_name, int32(x))
+}
+
+func (MessageParserOption) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e6be2fba65eb89fb, []int{0}
+}
+
+type InlineNode struct {
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Type                 string   `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InlineNode) Reset()         { *m = InlineNode{} }
+func (m *InlineNode) String() string { return proto.CompactTextString(m) }
+func (*InlineNode) ProtoMessage()    {}
+func (*InlineNode) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e6be2fba65eb89fb, []int{0}
+}
+
+func (m *InlineNode) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InlineNode.Unmarshal(m, b)
+}
+func (m *InlineNode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InlineNode.Marshal(b, m, deterministic)
+}
+func (m *InlineNode) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InlineNode.Merge(m, src)
+}
+func (m *InlineNode) XXX_Size() int {
+	return xxx_messageInfo_InlineNode.Size(m)
+}
+func (m *InlineNode) XXX_DiscardUnknown() {
+	xxx_messageInfo_InlineNode.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InlineNode proto.InternalMessageInfo
+
+func (m *InlineNode) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *InlineNode) GetType() string {
+	if m != nil {
+		return m.Type
+	}
+	return ""
+}
+
+type RpcReturnDef struct {
+	// The gRPC methods return message types.  NETCONF expects an actual
+	// attribute as defined in the YANG schema.  The xnl_tag will be used
+	// as the top most tag when translating a gRPC response into an xml
+	// response
+	XmlTag string `protobuf:"bytes,1,opt,name=xml_tag,json=xmlTag,proto3" json:"xml_tag,omitempty"`
+	// When the gRPC response is a list of items, we need to differentiate
+	// between a YANG schema attribute whose name is "items" and when "items"
+	// is used only to indicate a list of items is being returned.  The default
+	// behavior assumes a list is returned when "items" is present in
+	// the response.  This option will therefore be used when the attribute
+	// name in the YANG schema is 'items'
+	ListItemsName        string   `protobuf:"bytes,2,opt,name=list_items_name,json=listItemsName,proto3" json:"list_items_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RpcReturnDef) Reset()         { *m = RpcReturnDef{} }
+func (m *RpcReturnDef) String() string { return proto.CompactTextString(m) }
+func (*RpcReturnDef) ProtoMessage()    {}
+func (*RpcReturnDef) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e6be2fba65eb89fb, []int{1}
+}
+
+func (m *RpcReturnDef) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RpcReturnDef.Unmarshal(m, b)
+}
+func (m *RpcReturnDef) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RpcReturnDef.Marshal(b, m, deterministic)
+}
+func (m *RpcReturnDef) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RpcReturnDef.Merge(m, src)
+}
+func (m *RpcReturnDef) XXX_Size() int {
+	return xxx_messageInfo_RpcReturnDef.Size(m)
+}
+func (m *RpcReturnDef) XXX_DiscardUnknown() {
+	xxx_messageInfo_RpcReturnDef.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RpcReturnDef proto.InternalMessageInfo
+
+func (m *RpcReturnDef) GetXmlTag() string {
+	if m != nil {
+		return m.XmlTag
+	}
+	return ""
+}
+
+func (m *RpcReturnDef) GetListItemsName() string {
+	if m != nil {
+		return m.ListItemsName
+	}
+	return ""
+}
+
+var E_YangChildRule = &proto.ExtensionDesc{
+	ExtendedType:  (*descriptor.MessageOptions)(nil),
+	ExtensionType: (*MessageParserOption)(nil),
+	Field:         7761774,
+	Name:          "common.yang_child_rule",
+	Tag:           "varint,7761774,opt,name=yang_child_rule,enum=common.MessageParserOption",
+	Filename:      "voltha_protos/yang_options.proto",
+}
+
+var E_YangMessageRule = &proto.ExtensionDesc{
+	ExtendedType:  (*descriptor.MessageOptions)(nil),
+	ExtensionType: (*MessageParserOption)(nil),
+	Field:         7761775,
+	Name:          "common.yang_message_rule",
+	Tag:           "varint,7761775,opt,name=yang_message_rule,enum=common.MessageParserOption",
+	Filename:      "voltha_protos/yang_options.proto",
+}
+
+var E_YangInlineNode = &proto.ExtensionDesc{
+	ExtendedType:  (*descriptor.FieldOptions)(nil),
+	ExtensionType: (*InlineNode)(nil),
+	Field:         7761776,
+	Name:          "common.yang_inline_node",
+	Tag:           "bytes,7761776,opt,name=yang_inline_node",
+	Filename:      "voltha_protos/yang_options.proto",
+}
+
+var E_YangXmlTag = &proto.ExtensionDesc{
+	ExtendedType:  (*descriptor.MethodOptions)(nil),
+	ExtensionType: (*RpcReturnDef)(nil),
+	Field:         7761777,
+	Name:          "common.yang_xml_tag",
+	Tag:           "bytes,7761777,opt,name=yang_xml_tag",
+	Filename:      "voltha_protos/yang_options.proto",
+}
+
+func init() {
+	proto.RegisterEnum("common.MessageParserOption", MessageParserOption_name, MessageParserOption_value)
+	proto.RegisterType((*InlineNode)(nil), "common.InlineNode")
+	proto.RegisterType((*RpcReturnDef)(nil), "common.RpcReturnDef")
+	proto.RegisterExtension(E_YangChildRule)
+	proto.RegisterExtension(E_YangMessageRule)
+	proto.RegisterExtension(E_YangInlineNode)
+	proto.RegisterExtension(E_YangXmlTag)
+}
+
+func init() { proto.RegisterFile("voltha_protos/yang_options.proto", fileDescriptor_e6be2fba65eb89fb) }
+
+var fileDescriptor_e6be2fba65eb89fb = []byte{
+	// 452 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4d, 0x6f, 0xd3, 0x30,
+	0x18, 0xc7, 0x69, 0x41, 0x45, 0x98, 0xad, 0x2b, 0x66, 0x12, 0x15, 0x08, 0xa8, 0x7a, 0x98, 0x26,
+	0xd0, 0x12, 0x34, 0x6e, 0xbd, 0x75, 0x5d, 0x18, 0x95, 0xb6, 0xa4, 0xb2, 0xc2, 0x78, 0x39, 0x60,
+	0xa5, 0xc9, 0x33, 0xc7, 0xc2, 0xb1, 0xa3, 0xd8, 0x41, 0xdb, 0x47, 0xe5, 0xc2, 0x47, 0xe0, 0xe5,
+	0x1b, 0xa0, 0xd8, 0x09, 0x43, 0x62, 0x87, 0xde, 0xda, 0x7f, 0x9e, 0xfc, 0x7e, 0x79, 0x5e, 0xd0,
+	0xe4, 0xab, 0x12, 0x26, 0x4f, 0x68, 0x59, 0x29, 0xa3, 0xb4, 0x7f, 0x95, 0x48, 0x46, 0x55, 0x69,
+	0xb8, 0x92, 0xda, 0xb3, 0x19, 0x1e, 0xa4, 0xaa, 0x28, 0x94, 0x7c, 0x3c, 0x61, 0x4a, 0x31, 0x01,
+	0xbe, 0x4d, 0xd7, 0xf5, 0x85, 0x9f, 0x81, 0x4e, 0x2b, 0x5e, 0x1a, 0x55, 0xb9, 0xca, 0xe9, 0x2b,
+	0x84, 0x96, 0x52, 0x70, 0x09, 0xa1, 0xca, 0x00, 0x0f, 0x51, 0x9f, 0x67, 0xe3, 0xde, 0xa4, 0xb7,
+	0x7f, 0x8f, 0xf4, 0x79, 0x86, 0x31, 0xba, 0x63, 0xae, 0x4a, 0x18, 0xf7, 0x6d, 0x62, 0x7f, 0x4f,
+	0x23, 0xb4, 0x45, 0xca, 0x94, 0x80, 0xa9, 0x2b, 0x79, 0x0c, 0x17, 0xf8, 0x11, 0xba, 0x7b, 0x59,
+	0x08, 0x6a, 0x12, 0xd6, 0xbe, 0x38, 0xb8, 0x2c, 0x44, 0x9c, 0x30, 0xbc, 0x87, 0x76, 0x04, 0xd7,
+	0x86, 0x72, 0x03, 0x85, 0xa6, 0x32, 0x29, 0x3a, 0xce, 0x76, 0x13, 0x2f, 0x9b, 0x34, 0x4c, 0x0a,
+	0x78, 0xf1, 0x1e, 0x3d, 0x3c, 0x03, 0xad, 0x13, 0x06, 0xab, 0xa4, 0xd2, 0x50, 0x45, 0xb6, 0x15,
+	0x3c, 0x46, 0xbb, 0x67, 0xd1, 0x79, 0x40, 0xe3, 0x88, 0xae, 0xe6, 0x24, 0x08, 0x63, 0x7a, 0x1a,
+	0x9c, 0x07, 0xa7, 0xa3, 0x5b, 0x78, 0x0f, 0x4d, 0x17, 0x24, 0x98, 0xc7, 0x01, 0x3d, 0x8a, 0xe2,
+	0xb7, 0xf4, 0x84, 0x44, 0xef, 0x56, 0xcb, 0xf0, 0x84, 0xce, 0xc3, 0x63, 0xba, 0x88, 0xc2, 0x78,
+	0xbe, 0x0c, 0x03, 0x32, 0xea, 0xcd, 0x18, 0xda, 0xb1, 0xb3, 0x49, 0x73, 0x2e, 0x32, 0x5a, 0xd5,
+	0x02, 0xf0, 0x73, 0xcf, 0x4d, 0xc4, 0xeb, 0x26, 0xe2, 0xb5, 0x6a, 0x27, 0xd5, 0xe3, 0x1f, 0xdf,
+	0xbf, 0xdd, 0x9e, 0xf4, 0xf6, 0x87, 0x87, 0x4f, 0x3c, 0x37, 0x43, 0xef, 0x86, 0x6f, 0x23, 0xdb,
+	0x0d, 0x77, 0xd1, 0x60, 0x49, 0x2d, 0x60, 0xf6, 0x05, 0x3d, 0xb0, 0xa2, 0xc2, 0x95, 0x6e, 0xa8,
+	0xfa, 0xb9, 0x91, 0xca, 0xb6, 0xd0, 0x3e, 0xb0, 0xb2, 0xcf, 0x68, 0x64, 0x65, 0xdc, 0xae, 0x8d,
+	0xca, 0x66, 0x6f, 0x4f, 0xff, 0x73, 0xbd, 0xe1, 0x20, 0xb2, 0xce, 0xf4, 0xcb, 0x99, 0xee, 0x1f,
+	0xe2, 0xce, 0x74, 0xbd, 0x73, 0x32, 0x6c, 0x68, 0xd7, 0xff, 0x67, 0x1f, 0xd1, 0x96, 0xe5, 0xb7,
+	0x4b, 0xc5, 0xcf, 0x6e, 0xe8, 0xc3, 0xe4, 0xea, 0x2f, 0xfc, 0x77, 0x07, 0xdf, 0xed, 0xe0, 0xff,
+	0x9e, 0x07, 0x41, 0x0d, 0xec, 0x83, 0xbd, 0x88, 0xa3, 0x83, 0x4f, 0x2f, 0x19, 0x37, 0x79, 0xbd,
+	0x6e, 0x2a, 0x7d, 0x55, 0x82, 0x4c, 0x55, 0x95, 0xf9, 0xee, 0x9c, 0x0f, 0xda, 0x73, 0x66, 0xca,
+	0x77, 0x9c, 0xf5, 0xc0, 0x26, 0xaf, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x45, 0xe4, 0xb5, 0xec,
+	0xf0, 0x02, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/omci/omci_alarm_db.pb.go b/vendor/github.com/opencord/voltha-protos/go/omci/omci_alarm_db.pb.go
new file mode 100644
index 0000000..63b0437
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/omci/omci_alarm_db.pb.go
@@ -0,0 +1,516 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/omci_alarm_db.proto
+
+package omci
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	_ "github.com/opencord/voltha-protos/go/common"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type AlarmOpenOmciEventType_OpenOmciEventType int32
+
+const (
+	AlarmOpenOmciEventType_state_change AlarmOpenOmciEventType_OpenOmciEventType = 0
+)
+
+var AlarmOpenOmciEventType_OpenOmciEventType_name = map[int32]string{
+	0: "state_change",
+}
+
+var AlarmOpenOmciEventType_OpenOmciEventType_value = map[string]int32{
+	"state_change": 0,
+}
+
+func (x AlarmOpenOmciEventType_OpenOmciEventType) String() string {
+	return proto.EnumName(AlarmOpenOmciEventType_OpenOmciEventType_name, int32(x))
+}
+
+func (AlarmOpenOmciEventType_OpenOmciEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{6, 0}
+}
+
+type AlarmAttributeData struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value                string   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmAttributeData) Reset()         { *m = AlarmAttributeData{} }
+func (m *AlarmAttributeData) String() string { return proto.CompactTextString(m) }
+func (*AlarmAttributeData) ProtoMessage()    {}
+func (*AlarmAttributeData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{0}
+}
+
+func (m *AlarmAttributeData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmAttributeData.Unmarshal(m, b)
+}
+func (m *AlarmAttributeData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmAttributeData.Marshal(b, m, deterministic)
+}
+func (m *AlarmAttributeData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmAttributeData.Merge(m, src)
+}
+func (m *AlarmAttributeData) XXX_Size() int {
+	return xxx_messageInfo_AlarmAttributeData.Size(m)
+}
+func (m *AlarmAttributeData) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmAttributeData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmAttributeData proto.InternalMessageInfo
+
+func (m *AlarmAttributeData) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *AlarmAttributeData) GetValue() string {
+	if m != nil {
+		return m.Value
+	}
+	return ""
+}
+
+type AlarmInstanceData struct {
+	InstanceId           uint32                `protobuf:"varint,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
+	Created              string                `protobuf:"bytes,2,opt,name=created,proto3" json:"created,omitempty"`
+	Modified             string                `protobuf:"bytes,3,opt,name=modified,proto3" json:"modified,omitempty"`
+	Attributes           []*AlarmAttributeData `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AlarmInstanceData) Reset()         { *m = AlarmInstanceData{} }
+func (m *AlarmInstanceData) String() string { return proto.CompactTextString(m) }
+func (*AlarmInstanceData) ProtoMessage()    {}
+func (*AlarmInstanceData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{1}
+}
+
+func (m *AlarmInstanceData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmInstanceData.Unmarshal(m, b)
+}
+func (m *AlarmInstanceData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmInstanceData.Marshal(b, m, deterministic)
+}
+func (m *AlarmInstanceData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmInstanceData.Merge(m, src)
+}
+func (m *AlarmInstanceData) XXX_Size() int {
+	return xxx_messageInfo_AlarmInstanceData.Size(m)
+}
+func (m *AlarmInstanceData) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmInstanceData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmInstanceData proto.InternalMessageInfo
+
+func (m *AlarmInstanceData) GetInstanceId() uint32 {
+	if m != nil {
+		return m.InstanceId
+	}
+	return 0
+}
+
+func (m *AlarmInstanceData) GetCreated() string {
+	if m != nil {
+		return m.Created
+	}
+	return ""
+}
+
+func (m *AlarmInstanceData) GetModified() string {
+	if m != nil {
+		return m.Modified
+	}
+	return ""
+}
+
+func (m *AlarmInstanceData) GetAttributes() []*AlarmAttributeData {
+	if m != nil {
+		return m.Attributes
+	}
+	return nil
+}
+
+type AlarmClassData struct {
+	ClassId              uint32               `protobuf:"varint,1,opt,name=class_id,json=classId,proto3" json:"class_id,omitempty"`
+	Instances            []*AlarmInstanceData `protobuf:"bytes,2,rep,name=instances,proto3" json:"instances,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *AlarmClassData) Reset()         { *m = AlarmClassData{} }
+func (m *AlarmClassData) String() string { return proto.CompactTextString(m) }
+func (*AlarmClassData) ProtoMessage()    {}
+func (*AlarmClassData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{2}
+}
+
+func (m *AlarmClassData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmClassData.Unmarshal(m, b)
+}
+func (m *AlarmClassData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmClassData.Marshal(b, m, deterministic)
+}
+func (m *AlarmClassData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmClassData.Merge(m, src)
+}
+func (m *AlarmClassData) XXX_Size() int {
+	return xxx_messageInfo_AlarmClassData.Size(m)
+}
+func (m *AlarmClassData) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmClassData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmClassData proto.InternalMessageInfo
+
+func (m *AlarmClassData) GetClassId() uint32 {
+	if m != nil {
+		return m.ClassId
+	}
+	return 0
+}
+
+func (m *AlarmClassData) GetInstances() []*AlarmInstanceData {
+	if m != nil {
+		return m.Instances
+	}
+	return nil
+}
+
+type AlarmManagedEntity struct {
+	ClassId              uint32   `protobuf:"varint,1,opt,name=class_id,json=classId,proto3" json:"class_id,omitempty"`
+	Name                 string   `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmManagedEntity) Reset()         { *m = AlarmManagedEntity{} }
+func (m *AlarmManagedEntity) String() string { return proto.CompactTextString(m) }
+func (*AlarmManagedEntity) ProtoMessage()    {}
+func (*AlarmManagedEntity) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{3}
+}
+
+func (m *AlarmManagedEntity) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmManagedEntity.Unmarshal(m, b)
+}
+func (m *AlarmManagedEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmManagedEntity.Marshal(b, m, deterministic)
+}
+func (m *AlarmManagedEntity) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmManagedEntity.Merge(m, src)
+}
+func (m *AlarmManagedEntity) XXX_Size() int {
+	return xxx_messageInfo_AlarmManagedEntity.Size(m)
+}
+func (m *AlarmManagedEntity) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmManagedEntity.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmManagedEntity proto.InternalMessageInfo
+
+func (m *AlarmManagedEntity) GetClassId() uint32 {
+	if m != nil {
+		return m.ClassId
+	}
+	return 0
+}
+
+func (m *AlarmManagedEntity) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+type AlarmMessageType struct {
+	MessageType          uint32   `protobuf:"varint,1,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmMessageType) Reset()         { *m = AlarmMessageType{} }
+func (m *AlarmMessageType) String() string { return proto.CompactTextString(m) }
+func (*AlarmMessageType) ProtoMessage()    {}
+func (*AlarmMessageType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{4}
+}
+
+func (m *AlarmMessageType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmMessageType.Unmarshal(m, b)
+}
+func (m *AlarmMessageType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmMessageType.Marshal(b, m, deterministic)
+}
+func (m *AlarmMessageType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmMessageType.Merge(m, src)
+}
+func (m *AlarmMessageType) XXX_Size() int {
+	return xxx_messageInfo_AlarmMessageType.Size(m)
+}
+func (m *AlarmMessageType) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmMessageType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmMessageType proto.InternalMessageInfo
+
+func (m *AlarmMessageType) GetMessageType() uint32 {
+	if m != nil {
+		return m.MessageType
+	}
+	return 0
+}
+
+type AlarmDeviceData struct {
+	DeviceId             string                `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	Created              string                `protobuf:"bytes,2,opt,name=created,proto3" json:"created,omitempty"`
+	LastAlarmSequence    uint32                `protobuf:"varint,3,opt,name=last_alarm_sequence,json=lastAlarmSequence,proto3" json:"last_alarm_sequence,omitempty"`
+	LastSyncTime         string                `protobuf:"bytes,4,opt,name=last_sync_time,json=lastSyncTime,proto3" json:"last_sync_time,omitempty"`
+	Version              uint32                `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"`
+	Classes              []*AlarmClassData     `protobuf:"bytes,6,rep,name=classes,proto3" json:"classes,omitempty"`
+	ManagedEntities      []*AlarmManagedEntity `protobuf:"bytes,7,rep,name=managed_entities,json=managedEntities,proto3" json:"managed_entities,omitempty"`
+	MessageTypes         []*AlarmMessageType   `protobuf:"bytes,8,rep,name=message_types,json=messageTypes,proto3" json:"message_types,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *AlarmDeviceData) Reset()         { *m = AlarmDeviceData{} }
+func (m *AlarmDeviceData) String() string { return proto.CompactTextString(m) }
+func (*AlarmDeviceData) ProtoMessage()    {}
+func (*AlarmDeviceData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{5}
+}
+
+func (m *AlarmDeviceData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmDeviceData.Unmarshal(m, b)
+}
+func (m *AlarmDeviceData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmDeviceData.Marshal(b, m, deterministic)
+}
+func (m *AlarmDeviceData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmDeviceData.Merge(m, src)
+}
+func (m *AlarmDeviceData) XXX_Size() int {
+	return xxx_messageInfo_AlarmDeviceData.Size(m)
+}
+func (m *AlarmDeviceData) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmDeviceData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmDeviceData proto.InternalMessageInfo
+
+func (m *AlarmDeviceData) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *AlarmDeviceData) GetCreated() string {
+	if m != nil {
+		return m.Created
+	}
+	return ""
+}
+
+func (m *AlarmDeviceData) GetLastAlarmSequence() uint32 {
+	if m != nil {
+		return m.LastAlarmSequence
+	}
+	return 0
+}
+
+func (m *AlarmDeviceData) GetLastSyncTime() string {
+	if m != nil {
+		return m.LastSyncTime
+	}
+	return ""
+}
+
+func (m *AlarmDeviceData) GetVersion() uint32 {
+	if m != nil {
+		return m.Version
+	}
+	return 0
+}
+
+func (m *AlarmDeviceData) GetClasses() []*AlarmClassData {
+	if m != nil {
+		return m.Classes
+	}
+	return nil
+}
+
+func (m *AlarmDeviceData) GetManagedEntities() []*AlarmManagedEntity {
+	if m != nil {
+		return m.ManagedEntities
+	}
+	return nil
+}
+
+func (m *AlarmDeviceData) GetMessageTypes() []*AlarmMessageType {
+	if m != nil {
+		return m.MessageTypes
+	}
+	return nil
+}
+
+type AlarmOpenOmciEventType struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmOpenOmciEventType) Reset()         { *m = AlarmOpenOmciEventType{} }
+func (m *AlarmOpenOmciEventType) String() string { return proto.CompactTextString(m) }
+func (*AlarmOpenOmciEventType) ProtoMessage()    {}
+func (*AlarmOpenOmciEventType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{6}
+}
+
+func (m *AlarmOpenOmciEventType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmOpenOmciEventType.Unmarshal(m, b)
+}
+func (m *AlarmOpenOmciEventType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmOpenOmciEventType.Marshal(b, m, deterministic)
+}
+func (m *AlarmOpenOmciEventType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmOpenOmciEventType.Merge(m, src)
+}
+func (m *AlarmOpenOmciEventType) XXX_Size() int {
+	return xxx_messageInfo_AlarmOpenOmciEventType.Size(m)
+}
+func (m *AlarmOpenOmciEventType) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmOpenOmciEventType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmOpenOmciEventType proto.InternalMessageInfo
+
+type AlarmOpenOmciEvent struct {
+	Type                 AlarmOpenOmciEventType_OpenOmciEventType `protobuf:"varint,1,opt,name=type,proto3,enum=omci.AlarmOpenOmciEventType_OpenOmciEventType" json:"type,omitempty"`
+	Data                 string                                   `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                                 `json:"-"`
+	XXX_unrecognized     []byte                                   `json:"-"`
+	XXX_sizecache        int32                                    `json:"-"`
+}
+
+func (m *AlarmOpenOmciEvent) Reset()         { *m = AlarmOpenOmciEvent{} }
+func (m *AlarmOpenOmciEvent) String() string { return proto.CompactTextString(m) }
+func (*AlarmOpenOmciEvent) ProtoMessage()    {}
+func (*AlarmOpenOmciEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8d41f1e38aadb08d, []int{7}
+}
+
+func (m *AlarmOpenOmciEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmOpenOmciEvent.Unmarshal(m, b)
+}
+func (m *AlarmOpenOmciEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmOpenOmciEvent.Marshal(b, m, deterministic)
+}
+func (m *AlarmOpenOmciEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmOpenOmciEvent.Merge(m, src)
+}
+func (m *AlarmOpenOmciEvent) XXX_Size() int {
+	return xxx_messageInfo_AlarmOpenOmciEvent.Size(m)
+}
+func (m *AlarmOpenOmciEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmOpenOmciEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmOpenOmciEvent proto.InternalMessageInfo
+
+func (m *AlarmOpenOmciEvent) GetType() AlarmOpenOmciEventType_OpenOmciEventType {
+	if m != nil {
+		return m.Type
+	}
+	return AlarmOpenOmciEventType_state_change
+}
+
+func (m *AlarmOpenOmciEvent) GetData() string {
+	if m != nil {
+		return m.Data
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterEnum("omci.AlarmOpenOmciEventType_OpenOmciEventType", AlarmOpenOmciEventType_OpenOmciEventType_name, AlarmOpenOmciEventType_OpenOmciEventType_value)
+	proto.RegisterType((*AlarmAttributeData)(nil), "omci.AlarmAttributeData")
+	proto.RegisterType((*AlarmInstanceData)(nil), "omci.AlarmInstanceData")
+	proto.RegisterType((*AlarmClassData)(nil), "omci.AlarmClassData")
+	proto.RegisterType((*AlarmManagedEntity)(nil), "omci.AlarmManagedEntity")
+	proto.RegisterType((*AlarmMessageType)(nil), "omci.AlarmMessageType")
+	proto.RegisterType((*AlarmDeviceData)(nil), "omci.AlarmDeviceData")
+	proto.RegisterType((*AlarmOpenOmciEventType)(nil), "omci.AlarmOpenOmciEventType")
+	proto.RegisterType((*AlarmOpenOmciEvent)(nil), "omci.AlarmOpenOmciEvent")
+}
+
+func init() { proto.RegisterFile("voltha_protos/omci_alarm_db.proto", fileDescriptor_8d41f1e38aadb08d) }
+
+var fileDescriptor_8d41f1e38aadb08d = []byte{
+	// 594 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xc1, 0x6a, 0xdb, 0x4c,
+	0x10, 0xfe, 0x9d, 0x28, 0x89, 0x33, 0xb6, 0x13, 0x67, 0xff, 0x90, 0x6e, 0x03, 0x81, 0x54, 0xb4,
+	0x25, 0xa5, 0x54, 0x86, 0xf4, 0xd8, 0x42, 0x88, 0x12, 0x1f, 0x7c, 0x28, 0xa1, 0x4a, 0x4e, 0xbd,
+	0x88, 0xb5, 0x34, 0xb5, 0x17, 0xb4, 0x2b, 0x57, 0xbb, 0x36, 0xf8, 0xd0, 0x4b, 0x9f, 0xaa, 0x2f,
+	0x91, 0x97, 0xe8, 0xa9, 0x4f, 0x90, 0x73, 0xd1, 0x48, 0xb2, 0x65, 0x04, 0xa5, 0xb7, 0xfd, 0xbe,
+	0x99, 0xf9, 0x66, 0x76, 0xbe, 0x65, 0xe1, 0xc5, 0x22, 0x4d, 0xec, 0x54, 0x84, 0xb3, 0x2c, 0xb5,
+	0xa9, 0x19, 0xa4, 0x2a, 0x92, 0xa1, 0x48, 0x44, 0xa6, 0xc2, 0x78, 0xec, 0x11, 0xc9, 0x9c, 0x9c,
+	0x3c, 0xe5, 0x9b, 0x89, 0x0a, 0xad, 0x28, 0xe2, 0xee, 0x10, 0xd8, 0x75, 0x5e, 0x71, 0x6d, 0x6d,
+	0x26, 0xc7, 0x73, 0x8b, 0xb7, 0xc2, 0x0a, 0xf6, 0x1c, 0x1c, 0x2d, 0x14, 0xf2, 0xd6, 0x79, 0xeb,
+	0x62, 0xdf, 0xdf, 0xf9, 0xfd, 0xf4, 0x78, 0xd6, 0x0a, 0x88, 0x62, 0xc7, 0xb0, 0xb3, 0x10, 0xc9,
+	0x1c, 0xf9, 0x56, 0x1e, 0x0b, 0x0a, 0xe0, 0xfe, 0x6c, 0xc1, 0x11, 0xe9, 0x8c, 0xb4, 0xb1, 0x42,
+	0x47, 0x85, 0xcc, 0x6b, 0xe8, 0xc8, 0x12, 0x87, 0x32, 0x26, 0xb5, 0x5e, 0xa5, 0x06, 0x55, 0x64,
+	0x14, 0x33, 0x0e, 0x7b, 0x51, 0x86, 0xc2, 0x62, 0x5c, 0xaa, 0x56, 0x90, 0x9d, 0x42, 0x5b, 0xa5,
+	0xb1, 0xfc, 0x2a, 0x31, 0xe6, 0xdb, 0x14, 0x5a, 0x61, 0x36, 0x04, 0x10, 0xd5, 0xd4, 0x86, 0x3b,
+	0xe7, 0xdb, 0x17, 0x9d, 0x4b, 0xee, 0xe5, 0xf7, 0xf5, 0x9a, 0x57, 0xf2, 0x3b, 0xbf, 0x9e, 0x1e,
+	0xcf, 0x76, 0x8b, 0x7b, 0x05, 0xb5, 0x42, 0xf7, 0x3b, 0x1c, 0x50, 0xfa, 0x4d, 0x22, 0x8c, 0xa1,
+	0xb1, 0xcf, 0xa1, 0x1d, 0xe5, 0xa0, 0x31, 0xf3, 0x1e, 0xd1, 0xa3, 0x98, 0x8d, 0x60, 0xbf, 0x1a,
+	0xdf, 0xf0, 0x2d, 0xea, 0xfc, 0xac, 0xd6, 0xb9, 0xbe, 0x04, 0x9f, 0xe5, 0x8d, 0x7b, 0x1b, 0x9b,
+	0x08, 0xd6, 0xd5, 0xee, 0xe7, 0xd2, 0x80, 0x4f, 0x42, 0x8b, 0x09, 0xc6, 0x43, 0x6d, 0xa5, 0x5d,
+	0xfe, 0xc3, 0x08, 0x95, 0x45, 0x5b, 0x0d, 0x8b, 0xdc, 0x8f, 0xd0, 0x2f, 0x24, 0xd1, 0x18, 0x31,
+	0xc1, 0x87, 0xe5, 0x0c, 0xd9, 0x05, 0x74, 0x55, 0x01, 0x43, 0xbb, 0x9c, 0xe1, 0xa6, 0x68, 0x47,
+	0xad, 0x33, 0xdd, 0x1f, 0xdb, 0x70, 0x48, 0xe5, 0xb7, 0xb8, 0x90, 0xa5, 0x91, 0x2e, 0xec, 0xc7,
+	0x84, 0xaa, 0x79, 0x56, 0x1d, 0xdb, 0x05, 0xff, 0x57, 0x13, 0x3d, 0xf8, 0x3f, 0x11, 0xc6, 0x96,
+	0x4f, 0xd3, 0xe0, 0xb7, 0x39, 0xea, 0x08, 0xc9, 0xcf, 0x5e, 0x70, 0x94, 0x87, 0xa8, 0xdf, 0x7d,
+	0x19, 0x60, 0x2f, 0xe1, 0x80, 0xf2, 0xcd, 0x52, 0x47, 0xa1, 0x95, 0x0a, 0xb9, 0x43, 0x82, 0xdd,
+	0x9c, 0xbd, 0x5f, 0xea, 0xe8, 0x41, 0x2a, 0xcc, 0xfb, 0x2d, 0x30, 0x33, 0x32, 0xd5, 0x7c, 0x87,
+	0x94, 0x2a, 0xc8, 0xae, 0xa0, 0xd8, 0x12, 0x1a, 0xbe, 0x4b, 0xde, 0x1c, 0xd7, 0xbc, 0x59, 0xd9,
+	0xec, 0x1f, 0xe6, 0xc6, 0xc0, 0x7a, 0xd1, 0x41, 0x55, 0xc5, 0x6e, 0xa0, 0xaf, 0x0a, 0x3b, 0x42,
+	0xcc, 0xfd, 0x90, 0x68, 0xf8, 0x5e, 0xe3, 0x7d, 0x6d, 0x38, 0x16, 0x1c, 0xaa, 0x1a, 0x94, 0x68,
+	0xd8, 0x07, 0xe8, 0xd5, 0x37, 0x6e, 0x78, 0x9b, 0x14, 0x4e, 0xea, 0x0a, 0xeb, 0xb5, 0x07, 0xdd,
+	0x9a, 0x07, 0xc6, 0xbd, 0x82, 0x13, 0xca, 0xb8, 0x9b, 0xa1, 0xbe, 0x53, 0x91, 0x1c, 0x2e, 0x50,
+	0x5b, 0xb2, 0xe7, 0x15, 0x1c, 0x35, 0x48, 0xd6, 0x87, 0xae, 0xb1, 0xc2, 0x62, 0x18, 0x4d, 0x85,
+	0x9e, 0x60, 0xff, 0x3f, 0x37, 0x29, 0x9f, 0xd5, 0x46, 0x2e, 0xf3, 0xc1, 0x59, 0xb9, 0x7f, 0x70,
+	0xe9, 0xd5, 0x46, 0x69, 0x68, 0x7a, 0x0d, 0x26, 0xa0, 0x5a, 0xc6, 0xc0, 0x89, 0x85, 0x15, 0xa5,
+	0xc9, 0x74, 0xf6, 0xdf, 0x7e, 0x79, 0x33, 0x91, 0x76, 0x3a, 0x1f, 0x7b, 0x51, 0xaa, 0x06, 0xe9,
+	0x0c, 0x75, 0x94, 0x66, 0xf1, 0xa0, 0xf8, 0x75, 0xde, 0x95, 0xbf, 0xce, 0x24, 0xa5, 0x1f, 0x6a,
+	0xbc, 0x4b, 0xf8, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xab, 0xe4, 0x42, 0xe2, 0xbe, 0x04,
+	0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/omci/omci_mib_db.pb.go b/vendor/github.com/opencord/voltha-protos/go/omci/omci_mib_db.pb.go
new file mode 100644
index 0000000..f173e7f
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/omci/omci_mib_db.pb.go
@@ -0,0 +1,515 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/omci_mib_db.proto
+
+package omci
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	_ "github.com/opencord/voltha-protos/go/common"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type OpenOmciEventType_OpenOmciEventType int32
+
+const (
+	OpenOmciEventType_state_change OpenOmciEventType_OpenOmciEventType = 0
+)
+
+var OpenOmciEventType_OpenOmciEventType_name = map[int32]string{
+	0: "state_change",
+}
+
+var OpenOmciEventType_OpenOmciEventType_value = map[string]int32{
+	"state_change": 0,
+}
+
+func (x OpenOmciEventType_OpenOmciEventType) String() string {
+	return proto.EnumName(OpenOmciEventType_OpenOmciEventType_name, int32(x))
+}
+
+func (OpenOmciEventType_OpenOmciEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{6, 0}
+}
+
+type MibAttributeData struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value                string   `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MibAttributeData) Reset()         { *m = MibAttributeData{} }
+func (m *MibAttributeData) String() string { return proto.CompactTextString(m) }
+func (*MibAttributeData) ProtoMessage()    {}
+func (*MibAttributeData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{0}
+}
+
+func (m *MibAttributeData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MibAttributeData.Unmarshal(m, b)
+}
+func (m *MibAttributeData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MibAttributeData.Marshal(b, m, deterministic)
+}
+func (m *MibAttributeData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MibAttributeData.Merge(m, src)
+}
+func (m *MibAttributeData) XXX_Size() int {
+	return xxx_messageInfo_MibAttributeData.Size(m)
+}
+func (m *MibAttributeData) XXX_DiscardUnknown() {
+	xxx_messageInfo_MibAttributeData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MibAttributeData proto.InternalMessageInfo
+
+func (m *MibAttributeData) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *MibAttributeData) GetValue() string {
+	if m != nil {
+		return m.Value
+	}
+	return ""
+}
+
+type MibInstanceData struct {
+	InstanceId           uint32              `protobuf:"varint,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
+	Created              string              `protobuf:"bytes,2,opt,name=created,proto3" json:"created,omitempty"`
+	Modified             string              `protobuf:"bytes,3,opt,name=modified,proto3" json:"modified,omitempty"`
+	Attributes           []*MibAttributeData `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *MibInstanceData) Reset()         { *m = MibInstanceData{} }
+func (m *MibInstanceData) String() string { return proto.CompactTextString(m) }
+func (*MibInstanceData) ProtoMessage()    {}
+func (*MibInstanceData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{1}
+}
+
+func (m *MibInstanceData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MibInstanceData.Unmarshal(m, b)
+}
+func (m *MibInstanceData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MibInstanceData.Marshal(b, m, deterministic)
+}
+func (m *MibInstanceData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MibInstanceData.Merge(m, src)
+}
+func (m *MibInstanceData) XXX_Size() int {
+	return xxx_messageInfo_MibInstanceData.Size(m)
+}
+func (m *MibInstanceData) XXX_DiscardUnknown() {
+	xxx_messageInfo_MibInstanceData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MibInstanceData proto.InternalMessageInfo
+
+func (m *MibInstanceData) GetInstanceId() uint32 {
+	if m != nil {
+		return m.InstanceId
+	}
+	return 0
+}
+
+func (m *MibInstanceData) GetCreated() string {
+	if m != nil {
+		return m.Created
+	}
+	return ""
+}
+
+func (m *MibInstanceData) GetModified() string {
+	if m != nil {
+		return m.Modified
+	}
+	return ""
+}
+
+func (m *MibInstanceData) GetAttributes() []*MibAttributeData {
+	if m != nil {
+		return m.Attributes
+	}
+	return nil
+}
+
+type MibClassData struct {
+	ClassId              uint32             `protobuf:"varint,1,opt,name=class_id,json=classId,proto3" json:"class_id,omitempty"`
+	Instances            []*MibInstanceData `protobuf:"bytes,2,rep,name=instances,proto3" json:"instances,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *MibClassData) Reset()         { *m = MibClassData{} }
+func (m *MibClassData) String() string { return proto.CompactTextString(m) }
+func (*MibClassData) ProtoMessage()    {}
+func (*MibClassData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{2}
+}
+
+func (m *MibClassData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MibClassData.Unmarshal(m, b)
+}
+func (m *MibClassData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MibClassData.Marshal(b, m, deterministic)
+}
+func (m *MibClassData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MibClassData.Merge(m, src)
+}
+func (m *MibClassData) XXX_Size() int {
+	return xxx_messageInfo_MibClassData.Size(m)
+}
+func (m *MibClassData) XXX_DiscardUnknown() {
+	xxx_messageInfo_MibClassData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MibClassData proto.InternalMessageInfo
+
+func (m *MibClassData) GetClassId() uint32 {
+	if m != nil {
+		return m.ClassId
+	}
+	return 0
+}
+
+func (m *MibClassData) GetInstances() []*MibInstanceData {
+	if m != nil {
+		return m.Instances
+	}
+	return nil
+}
+
+type ManagedEntity struct {
+	ClassId              uint32   `protobuf:"varint,1,opt,name=class_id,json=classId,proto3" json:"class_id,omitempty"`
+	Name                 string   `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ManagedEntity) Reset()         { *m = ManagedEntity{} }
+func (m *ManagedEntity) String() string { return proto.CompactTextString(m) }
+func (*ManagedEntity) ProtoMessage()    {}
+func (*ManagedEntity) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{3}
+}
+
+func (m *ManagedEntity) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ManagedEntity.Unmarshal(m, b)
+}
+func (m *ManagedEntity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ManagedEntity.Marshal(b, m, deterministic)
+}
+func (m *ManagedEntity) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ManagedEntity.Merge(m, src)
+}
+func (m *ManagedEntity) XXX_Size() int {
+	return xxx_messageInfo_ManagedEntity.Size(m)
+}
+func (m *ManagedEntity) XXX_DiscardUnknown() {
+	xxx_messageInfo_ManagedEntity.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ManagedEntity proto.InternalMessageInfo
+
+func (m *ManagedEntity) GetClassId() uint32 {
+	if m != nil {
+		return m.ClassId
+	}
+	return 0
+}
+
+func (m *ManagedEntity) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+type MessageType struct {
+	MessageType          uint32   `protobuf:"varint,1,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *MessageType) Reset()         { *m = MessageType{} }
+func (m *MessageType) String() string { return proto.CompactTextString(m) }
+func (*MessageType) ProtoMessage()    {}
+func (*MessageType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{4}
+}
+
+func (m *MessageType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MessageType.Unmarshal(m, b)
+}
+func (m *MessageType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MessageType.Marshal(b, m, deterministic)
+}
+func (m *MessageType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MessageType.Merge(m, src)
+}
+func (m *MessageType) XXX_Size() int {
+	return xxx_messageInfo_MessageType.Size(m)
+}
+func (m *MessageType) XXX_DiscardUnknown() {
+	xxx_messageInfo_MessageType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MessageType proto.InternalMessageInfo
+
+func (m *MessageType) GetMessageType() uint32 {
+	if m != nil {
+		return m.MessageType
+	}
+	return 0
+}
+
+type MibDeviceData struct {
+	DeviceId             string           `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	Created              string           `protobuf:"bytes,2,opt,name=created,proto3" json:"created,omitempty"`
+	LastSyncTime         string           `protobuf:"bytes,3,opt,name=last_sync_time,json=lastSyncTime,proto3" json:"last_sync_time,omitempty"`
+	MibDataSync          uint32           `protobuf:"varint,4,opt,name=mib_data_sync,json=mibDataSync,proto3" json:"mib_data_sync,omitempty"`
+	Version              uint32           `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"`
+	Classes              []*MibClassData  `protobuf:"bytes,6,rep,name=classes,proto3" json:"classes,omitempty"`
+	ManagedEntities      []*ManagedEntity `protobuf:"bytes,7,rep,name=managed_entities,json=managedEntities,proto3" json:"managed_entities,omitempty"`
+	MessageTypes         []*MessageType   `protobuf:"bytes,8,rep,name=message_types,json=messageTypes,proto3" json:"message_types,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *MibDeviceData) Reset()         { *m = MibDeviceData{} }
+func (m *MibDeviceData) String() string { return proto.CompactTextString(m) }
+func (*MibDeviceData) ProtoMessage()    {}
+func (*MibDeviceData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{5}
+}
+
+func (m *MibDeviceData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MibDeviceData.Unmarshal(m, b)
+}
+func (m *MibDeviceData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MibDeviceData.Marshal(b, m, deterministic)
+}
+func (m *MibDeviceData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MibDeviceData.Merge(m, src)
+}
+func (m *MibDeviceData) XXX_Size() int {
+	return xxx_messageInfo_MibDeviceData.Size(m)
+}
+func (m *MibDeviceData) XXX_DiscardUnknown() {
+	xxx_messageInfo_MibDeviceData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MibDeviceData proto.InternalMessageInfo
+
+func (m *MibDeviceData) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *MibDeviceData) GetCreated() string {
+	if m != nil {
+		return m.Created
+	}
+	return ""
+}
+
+func (m *MibDeviceData) GetLastSyncTime() string {
+	if m != nil {
+		return m.LastSyncTime
+	}
+	return ""
+}
+
+func (m *MibDeviceData) GetMibDataSync() uint32 {
+	if m != nil {
+		return m.MibDataSync
+	}
+	return 0
+}
+
+func (m *MibDeviceData) GetVersion() uint32 {
+	if m != nil {
+		return m.Version
+	}
+	return 0
+}
+
+func (m *MibDeviceData) GetClasses() []*MibClassData {
+	if m != nil {
+		return m.Classes
+	}
+	return nil
+}
+
+func (m *MibDeviceData) GetManagedEntities() []*ManagedEntity {
+	if m != nil {
+		return m.ManagedEntities
+	}
+	return nil
+}
+
+func (m *MibDeviceData) GetMessageTypes() []*MessageType {
+	if m != nil {
+		return m.MessageTypes
+	}
+	return nil
+}
+
+type OpenOmciEventType struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OpenOmciEventType) Reset()         { *m = OpenOmciEventType{} }
+func (m *OpenOmciEventType) String() string { return proto.CompactTextString(m) }
+func (*OpenOmciEventType) ProtoMessage()    {}
+func (*OpenOmciEventType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{6}
+}
+
+func (m *OpenOmciEventType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OpenOmciEventType.Unmarshal(m, b)
+}
+func (m *OpenOmciEventType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OpenOmciEventType.Marshal(b, m, deterministic)
+}
+func (m *OpenOmciEventType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OpenOmciEventType.Merge(m, src)
+}
+func (m *OpenOmciEventType) XXX_Size() int {
+	return xxx_messageInfo_OpenOmciEventType.Size(m)
+}
+func (m *OpenOmciEventType) XXX_DiscardUnknown() {
+	xxx_messageInfo_OpenOmciEventType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OpenOmciEventType proto.InternalMessageInfo
+
+type OpenOmciEvent struct {
+	Type                 OpenOmciEventType_OpenOmciEventType `protobuf:"varint,1,opt,name=type,proto3,enum=omci.OpenOmciEventType_OpenOmciEventType" json:"type,omitempty"`
+	Data                 string                              `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                            `json:"-"`
+	XXX_unrecognized     []byte                              `json:"-"`
+	XXX_sizecache        int32                               `json:"-"`
+}
+
+func (m *OpenOmciEvent) Reset()         { *m = OpenOmciEvent{} }
+func (m *OpenOmciEvent) String() string { return proto.CompactTextString(m) }
+func (*OpenOmciEvent) ProtoMessage()    {}
+func (*OpenOmciEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_4fa402a2df36dcc1, []int{7}
+}
+
+func (m *OpenOmciEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OpenOmciEvent.Unmarshal(m, b)
+}
+func (m *OpenOmciEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OpenOmciEvent.Marshal(b, m, deterministic)
+}
+func (m *OpenOmciEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OpenOmciEvent.Merge(m, src)
+}
+func (m *OpenOmciEvent) XXX_Size() int {
+	return xxx_messageInfo_OpenOmciEvent.Size(m)
+}
+func (m *OpenOmciEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_OpenOmciEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OpenOmciEvent proto.InternalMessageInfo
+
+func (m *OpenOmciEvent) GetType() OpenOmciEventType_OpenOmciEventType {
+	if m != nil {
+		return m.Type
+	}
+	return OpenOmciEventType_state_change
+}
+
+func (m *OpenOmciEvent) GetData() string {
+	if m != nil {
+		return m.Data
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterEnum("omci.OpenOmciEventType_OpenOmciEventType", OpenOmciEventType_OpenOmciEventType_name, OpenOmciEventType_OpenOmciEventType_value)
+	proto.RegisterType((*MibAttributeData)(nil), "omci.MibAttributeData")
+	proto.RegisterType((*MibInstanceData)(nil), "omci.MibInstanceData")
+	proto.RegisterType((*MibClassData)(nil), "omci.MibClassData")
+	proto.RegisterType((*ManagedEntity)(nil), "omci.ManagedEntity")
+	proto.RegisterType((*MessageType)(nil), "omci.MessageType")
+	proto.RegisterType((*MibDeviceData)(nil), "omci.MibDeviceData")
+	proto.RegisterType((*OpenOmciEventType)(nil), "omci.OpenOmciEventType")
+	proto.RegisterType((*OpenOmciEvent)(nil), "omci.OpenOmciEvent")
+}
+
+func init() { proto.RegisterFile("voltha_protos/omci_mib_db.proto", fileDescriptor_4fa402a2df36dcc1) }
+
+var fileDescriptor_4fa402a2df36dcc1 = []byte{
+	// 582 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdb, 0x6a, 0xdb, 0x40,
+	0x10, 0xad, 0x1d, 0x25, 0x71, 0x46, 0x56, 0xe2, 0x6c, 0x2f, 0x6c, 0x03, 0xa1, 0x41, 0xb4, 0x25,
+	0xa1, 0xd4, 0x81, 0x14, 0x5a, 0x28, 0xa4, 0x50, 0x3b, 0xa1, 0x18, 0x2a, 0x02, 0x6a, 0x9e, 0xfa,
+	0x22, 0x56, 0xd2, 0xd4, 0x5e, 0xf0, 0xae, 0x8c, 0x77, 0x6d, 0xd0, 0x7f, 0xf5, 0x37, 0xf2, 0x13,
+	0x7d, 0xca, 0x17, 0xe4, 0xb9, 0xec, 0xea, 0x62, 0xb9, 0x2e, 0xa5, 0x6f, 0x3a, 0x73, 0x39, 0x33,
+	0x73, 0x8e, 0x58, 0x78, 0xb1, 0xcc, 0xa6, 0x7a, 0xc2, 0xa2, 0xd9, 0x3c, 0xd3, 0x99, 0x3a, 0xcf,
+	0x44, 0xc2, 0x23, 0xc1, 0xe3, 0x28, 0x8d, 0xfb, 0x36, 0x44, 0x1c, 0x13, 0x3a, 0xa2, 0xeb, 0x65,
+	0x02, 0x35, 0x2b, 0xf2, 0xfe, 0x10, 0x7a, 0x01, 0x8f, 0x3f, 0x6b, 0x3d, 0xe7, 0xf1, 0x42, 0xe3,
+	0x15, 0xd3, 0x8c, 0x3c, 0x07, 0x47, 0x32, 0x81, 0xb4, 0x75, 0xd2, 0x3a, 0xdd, 0x1b, 0x6c, 0xdf,
+	0x3f, 0xdc, 0x1d, 0xb7, 0x42, 0x1b, 0x22, 0x4f, 0x60, 0x7b, 0xc9, 0xa6, 0x0b, 0xa4, 0x6d, 0x93,
+	0x0b, 0x0b, 0xe0, 0xff, 0x6c, 0xc1, 0x41, 0xc0, 0xe3, 0x91, 0x54, 0x9a, 0xc9, 0xa4, 0x20, 0x79,
+	0x0d, 0x2e, 0x2f, 0x71, 0xc4, 0x53, 0xcb, 0xe5, 0x55, 0x5c, 0x50, 0x65, 0x46, 0x29, 0xa1, 0xb0,
+	0x9b, 0xcc, 0x91, 0x69, 0x4c, 0x4b, 0xce, 0x0a, 0x92, 0x23, 0xe8, 0x88, 0x2c, 0xe5, 0x3f, 0x38,
+	0xa6, 0x74, 0xcb, 0xa6, 0x6a, 0x4c, 0x86, 0x00, 0xac, 0xda, 0x59, 0x51, 0xe7, 0x64, 0xeb, 0xd4,
+	0xbd, 0x78, 0xd6, 0x37, 0xb7, 0xf6, 0xff, 0x3c, 0x67, 0xe0, 0xfe, 0x7a, 0xb8, 0x3b, 0xde, 0x29,
+	0x6e, 0x0a, 0x1b, 0x6d, 0x7e, 0x0e, 0xdd, 0x80, 0xc7, 0xc3, 0x29, 0x53, 0xca, 0xae, 0x7c, 0x02,
+	0x9d, 0xc4, 0x80, 0x8d, 0x7d, 0x77, 0x6d, 0x78, 0x94, 0x92, 0x2f, 0xb0, 0x57, 0xad, 0xae, 0x68,
+	0xdb, 0x4e, 0x7d, 0x5a, 0x4f, 0x6d, 0x9e, 0x3f, 0x20, 0x66, 0xa8, 0xb7, 0xa6, 0x41, 0xb8, 0xea,
+	0xf5, 0xbf, 0x82, 0x17, 0x30, 0xc9, 0xc6, 0x98, 0x5e, 0x4b, 0xcd, 0x75, 0xfe, 0x1f, 0xb3, 0x2b,
+	0x57, 0xda, 0x1b, 0xae, 0xf8, 0x1f, 0xc0, 0x0d, 0x50, 0x29, 0x36, 0xc6, 0xdb, 0x7c, 0x86, 0xe4,
+	0x14, 0xba, 0xa2, 0x80, 0x91, 0xce, 0x67, 0xb8, 0xce, 0xe7, 0x8a, 0x55, 0xa5, 0x7f, 0xdf, 0x06,
+	0x2f, 0xe0, 0xf1, 0x15, 0x2e, 0x79, 0x69, 0x9b, 0x0f, 0x7b, 0xa9, 0x45, 0xd5, 0x22, 0xf5, 0xa8,
+	0x4e, 0x11, 0xff, 0xa7, 0x65, 0x2f, 0x61, 0x7f, 0xca, 0x94, 0x8e, 0x54, 0x2e, 0x93, 0x48, 0x73,
+	0x81, 0xa5, 0x71, 0x5d, 0x13, 0xfd, 0x96, 0xcb, 0xe4, 0x96, 0x0b, 0x24, 0x3e, 0x78, 0xf6, 0x1f,
+	0x65, 0x9a, 0xd9, 0x4a, 0xea, 0x98, 0x05, 0x43, 0x57, 0xf0, 0xd8, 0xec, 0x60, 0xea, 0xcc, 0x8c,
+	0x25, 0xce, 0x15, 0xcf, 0x24, 0xdd, 0xb6, 0xd9, 0x0a, 0x92, 0x4b, 0x28, 0x24, 0x41, 0x45, 0x77,
+	0xac, 0x03, 0xa4, 0x76, 0xa0, 0xb6, 0x72, 0x70, 0x60, 0xe4, 0x87, 0x95, 0xa6, 0x61, 0xd5, 0x43,
+	0x3e, 0x41, 0x4f, 0x14, 0xca, 0x47, 0x68, 0xa4, 0xe7, 0xa8, 0xe8, 0xae, 0xe5, 0x79, 0x5c, 0xf2,
+	0x34, 0x7d, 0x09, 0x0f, 0x44, 0x03, 0x72, 0x54, 0xe4, 0x3d, 0x78, 0x4d, 0x71, 0x15, 0xed, 0xd8,
+	0xe6, 0xc3, 0xb2, 0x79, 0x25, 0x6e, 0xd8, 0x6d, 0x28, 0xad, 0xfc, 0x8f, 0x70, 0x78, 0x33, 0x43,
+	0x79, 0x23, 0x12, 0x7e, 0xbd, 0x44, 0xa9, 0xad, 0xfe, 0xaf, 0xfe, 0x12, 0x24, 0x3d, 0xe8, 0x2a,
+	0xcd, 0x34, 0x46, 0xc9, 0x84, 0xc9, 0x31, 0xf6, 0x1e, 0xf9, 0x31, 0x78, 0x6b, 0x65, 0xe4, 0x12,
+	0x9c, 0xda, 0xd9, 0xfd, 0x8b, 0xb3, 0x62, 0xf6, 0x06, 0xd3, 0x66, 0x24, 0xb4, 0x6d, 0x84, 0x80,
+	0x63, 0xc4, 0x2f, 0xdd, 0xb3, 0xdf, 0x83, 0x37, 0xdf, 0xcf, 0xc6, 0x5c, 0x4f, 0x16, 0x71, 0x3f,
+	0xc9, 0xc4, 0x79, 0x36, 0x43, 0x99, 0x64, 0xf3, 0xf4, 0xbc, 0x78, 0x38, 0xde, 0x96, 0x0f, 0xc7,
+	0x38, 0xb3, 0x4f, 0x4c, 0xbc, 0x63, 0xf1, 0xbb, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xd7,
+	0x40, 0x10, 0x7f, 0x04, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/openflow_13/openflow_13.pb.go b/vendor/github.com/opencord/voltha-protos/go/openflow_13/openflow_13.pb.go
new file mode 100644
index 0000000..f56baef
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/openflow_13/openflow_13.pb.go
@@ -0,0 +1,9840 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/openflow_13.proto
+
+package openflow_13
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	common "github.com/opencord/voltha-protos/go/common"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// InlineNode from public import voltha_protos/yang_options.proto
+type InlineNode = common.InlineNode
+
+// RpcReturnDef from public import voltha_protos/yang_options.proto
+type RpcReturnDef = common.RpcReturnDef
+
+// MessageParserOption from public import voltha_protos/yang_options.proto
+type MessageParserOption = common.MessageParserOption
+
+var MessageParserOption_name = common.MessageParserOption_name
+var MessageParserOption_value = common.MessageParserOption_value
+
+const MessageParserOption_MOVE_TO_PARENT_LEVEL = MessageParserOption(common.MessageParserOption_MOVE_TO_PARENT_LEVEL)
+const MessageParserOption_CREATE_BOTH_GROUPING_AND_CONTAINER = MessageParserOption(common.MessageParserOption_CREATE_BOTH_GROUPING_AND_CONTAINER)
+
+var E_YangChildRule = common.E_YangChildRule
+
+var E_YangMessageRule = common.E_YangMessageRule
+
+var E_YangInlineNode = common.E_YangInlineNode
+
+var E_YangXmlTag = common.E_YangXmlTag
+
+// Port numbering. Ports are numbered starting from 1.
+type OfpPortNo int32
+
+const (
+	OfpPortNo_OFPP_INVALID OfpPortNo = 0
+	// Maximum number of physical and logical switch ports.
+	OfpPortNo_OFPP_MAX OfpPortNo = 2147483392
+	// Reserved OpenFlow Port (fake output "ports").
+	OfpPortNo_OFPP_IN_PORT    OfpPortNo = 2147483640
+	OfpPortNo_OFPP_TABLE      OfpPortNo = 2147483641
+	OfpPortNo_OFPP_NORMAL     OfpPortNo = 2147483642
+	OfpPortNo_OFPP_FLOOD      OfpPortNo = 2147483643
+	OfpPortNo_OFPP_ALL        OfpPortNo = 2147483644
+	OfpPortNo_OFPP_CONTROLLER OfpPortNo = 2147483645
+	OfpPortNo_OFPP_LOCAL      OfpPortNo = 2147483646
+	OfpPortNo_OFPP_ANY        OfpPortNo = 2147483647
+)
+
+var OfpPortNo_name = map[int32]string{
+	0:          "OFPP_INVALID",
+	2147483392: "OFPP_MAX",
+	2147483640: "OFPP_IN_PORT",
+	2147483641: "OFPP_TABLE",
+	2147483642: "OFPP_NORMAL",
+	2147483643: "OFPP_FLOOD",
+	2147483644: "OFPP_ALL",
+	2147483645: "OFPP_CONTROLLER",
+	2147483646: "OFPP_LOCAL",
+	2147483647: "OFPP_ANY",
+}
+
+var OfpPortNo_value = map[string]int32{
+	"OFPP_INVALID":    0,
+	"OFPP_MAX":        2147483392,
+	"OFPP_IN_PORT":    2147483640,
+	"OFPP_TABLE":      2147483641,
+	"OFPP_NORMAL":     2147483642,
+	"OFPP_FLOOD":      2147483643,
+	"OFPP_ALL":        2147483644,
+	"OFPP_CONTROLLER": 2147483645,
+	"OFPP_LOCAL":      2147483646,
+	"OFPP_ANY":        2147483647,
+}
+
+func (x OfpPortNo) String() string {
+	return proto.EnumName(OfpPortNo_name, int32(x))
+}
+
+func (OfpPortNo) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{0}
+}
+
+type OfpType int32
+
+const (
+	// Immutable messages.
+	OfpType_OFPT_HELLO        OfpType = 0
+	OfpType_OFPT_ERROR        OfpType = 1
+	OfpType_OFPT_ECHO_REQUEST OfpType = 2
+	OfpType_OFPT_ECHO_REPLY   OfpType = 3
+	OfpType_OFPT_EXPERIMENTER OfpType = 4
+	// Switch configuration messages.
+	OfpType_OFPT_FEATURES_REQUEST   OfpType = 5
+	OfpType_OFPT_FEATURES_REPLY     OfpType = 6
+	OfpType_OFPT_GET_CONFIG_REQUEST OfpType = 7
+	OfpType_OFPT_GET_CONFIG_REPLY   OfpType = 8
+	OfpType_OFPT_SET_CONFIG         OfpType = 9
+	// Asynchronous messages.
+	OfpType_OFPT_PACKET_IN    OfpType = 10
+	OfpType_OFPT_FLOW_REMOVED OfpType = 11
+	OfpType_OFPT_PORT_STATUS  OfpType = 12
+	// Controller command messages.
+	OfpType_OFPT_PACKET_OUT OfpType = 13
+	OfpType_OFPT_FLOW_MOD   OfpType = 14
+	OfpType_OFPT_GROUP_MOD  OfpType = 15
+	OfpType_OFPT_PORT_MOD   OfpType = 16
+	OfpType_OFPT_TABLE_MOD  OfpType = 17
+	// Multipart messages.
+	OfpType_OFPT_MULTIPART_REQUEST OfpType = 18
+	OfpType_OFPT_MULTIPART_REPLY   OfpType = 19
+	// Barrier messages.
+	OfpType_OFPT_BARRIER_REQUEST OfpType = 20
+	OfpType_OFPT_BARRIER_REPLY   OfpType = 21
+	// Queue Configuration messages.
+	OfpType_OFPT_QUEUE_GET_CONFIG_REQUEST OfpType = 22
+	OfpType_OFPT_QUEUE_GET_CONFIG_REPLY   OfpType = 23
+	// Controller role change request messages.
+	OfpType_OFPT_ROLE_REQUEST OfpType = 24
+	OfpType_OFPT_ROLE_REPLY   OfpType = 25
+	// Asynchronous message configuration.
+	OfpType_OFPT_GET_ASYNC_REQUEST OfpType = 26
+	OfpType_OFPT_GET_ASYNC_REPLY   OfpType = 27
+	OfpType_OFPT_SET_ASYNC         OfpType = 28
+	// Meters and rate limiters configuration messages.
+	OfpType_OFPT_METER_MOD OfpType = 29
+)
+
+var OfpType_name = map[int32]string{
+	0:  "OFPT_HELLO",
+	1:  "OFPT_ERROR",
+	2:  "OFPT_ECHO_REQUEST",
+	3:  "OFPT_ECHO_REPLY",
+	4:  "OFPT_EXPERIMENTER",
+	5:  "OFPT_FEATURES_REQUEST",
+	6:  "OFPT_FEATURES_REPLY",
+	7:  "OFPT_GET_CONFIG_REQUEST",
+	8:  "OFPT_GET_CONFIG_REPLY",
+	9:  "OFPT_SET_CONFIG",
+	10: "OFPT_PACKET_IN",
+	11: "OFPT_FLOW_REMOVED",
+	12: "OFPT_PORT_STATUS",
+	13: "OFPT_PACKET_OUT",
+	14: "OFPT_FLOW_MOD",
+	15: "OFPT_GROUP_MOD",
+	16: "OFPT_PORT_MOD",
+	17: "OFPT_TABLE_MOD",
+	18: "OFPT_MULTIPART_REQUEST",
+	19: "OFPT_MULTIPART_REPLY",
+	20: "OFPT_BARRIER_REQUEST",
+	21: "OFPT_BARRIER_REPLY",
+	22: "OFPT_QUEUE_GET_CONFIG_REQUEST",
+	23: "OFPT_QUEUE_GET_CONFIG_REPLY",
+	24: "OFPT_ROLE_REQUEST",
+	25: "OFPT_ROLE_REPLY",
+	26: "OFPT_GET_ASYNC_REQUEST",
+	27: "OFPT_GET_ASYNC_REPLY",
+	28: "OFPT_SET_ASYNC",
+	29: "OFPT_METER_MOD",
+}
+
+var OfpType_value = map[string]int32{
+	"OFPT_HELLO":                    0,
+	"OFPT_ERROR":                    1,
+	"OFPT_ECHO_REQUEST":             2,
+	"OFPT_ECHO_REPLY":               3,
+	"OFPT_EXPERIMENTER":             4,
+	"OFPT_FEATURES_REQUEST":         5,
+	"OFPT_FEATURES_REPLY":           6,
+	"OFPT_GET_CONFIG_REQUEST":       7,
+	"OFPT_GET_CONFIG_REPLY":         8,
+	"OFPT_SET_CONFIG":               9,
+	"OFPT_PACKET_IN":                10,
+	"OFPT_FLOW_REMOVED":             11,
+	"OFPT_PORT_STATUS":              12,
+	"OFPT_PACKET_OUT":               13,
+	"OFPT_FLOW_MOD":                 14,
+	"OFPT_GROUP_MOD":                15,
+	"OFPT_PORT_MOD":                 16,
+	"OFPT_TABLE_MOD":                17,
+	"OFPT_MULTIPART_REQUEST":        18,
+	"OFPT_MULTIPART_REPLY":          19,
+	"OFPT_BARRIER_REQUEST":          20,
+	"OFPT_BARRIER_REPLY":            21,
+	"OFPT_QUEUE_GET_CONFIG_REQUEST": 22,
+	"OFPT_QUEUE_GET_CONFIG_REPLY":   23,
+	"OFPT_ROLE_REQUEST":             24,
+	"OFPT_ROLE_REPLY":               25,
+	"OFPT_GET_ASYNC_REQUEST":        26,
+	"OFPT_GET_ASYNC_REPLY":          27,
+	"OFPT_SET_ASYNC":                28,
+	"OFPT_METER_MOD":                29,
+}
+
+func (x OfpType) String() string {
+	return proto.EnumName(OfpType_name, int32(x))
+}
+
+func (OfpType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{1}
+}
+
+// Hello elements types.
+type OfpHelloElemType int32
+
+const (
+	OfpHelloElemType_OFPHET_INVALID       OfpHelloElemType = 0
+	OfpHelloElemType_OFPHET_VERSIONBITMAP OfpHelloElemType = 1
+)
+
+var OfpHelloElemType_name = map[int32]string{
+	0: "OFPHET_INVALID",
+	1: "OFPHET_VERSIONBITMAP",
+}
+
+var OfpHelloElemType_value = map[string]int32{
+	"OFPHET_INVALID":       0,
+	"OFPHET_VERSIONBITMAP": 1,
+}
+
+func (x OfpHelloElemType) String() string {
+	return proto.EnumName(OfpHelloElemType_name, int32(x))
+}
+
+func (OfpHelloElemType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{2}
+}
+
+type OfpConfigFlags int32
+
+const (
+	// Handling of IP fragments.
+	OfpConfigFlags_OFPC_FRAG_NORMAL OfpConfigFlags = 0
+	OfpConfigFlags_OFPC_FRAG_DROP   OfpConfigFlags = 1
+	OfpConfigFlags_OFPC_FRAG_REASM  OfpConfigFlags = 2
+	OfpConfigFlags_OFPC_FRAG_MASK   OfpConfigFlags = 3
+)
+
+var OfpConfigFlags_name = map[int32]string{
+	0: "OFPC_FRAG_NORMAL",
+	1: "OFPC_FRAG_DROP",
+	2: "OFPC_FRAG_REASM",
+	3: "OFPC_FRAG_MASK",
+}
+
+var OfpConfigFlags_value = map[string]int32{
+	"OFPC_FRAG_NORMAL": 0,
+	"OFPC_FRAG_DROP":   1,
+	"OFPC_FRAG_REASM":  2,
+	"OFPC_FRAG_MASK":   3,
+}
+
+func (x OfpConfigFlags) String() string {
+	return proto.EnumName(OfpConfigFlags_name, int32(x))
+}
+
+func (OfpConfigFlags) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{3}
+}
+
+// Flags to configure the table. Reserved for future use.
+type OfpTableConfig int32
+
+const (
+	OfpTableConfig_OFPTC_INVALID         OfpTableConfig = 0
+	OfpTableConfig_OFPTC_DEPRECATED_MASK OfpTableConfig = 3
+)
+
+var OfpTableConfig_name = map[int32]string{
+	0: "OFPTC_INVALID",
+	3: "OFPTC_DEPRECATED_MASK",
+}
+
+var OfpTableConfig_value = map[string]int32{
+	"OFPTC_INVALID":         0,
+	"OFPTC_DEPRECATED_MASK": 3,
+}
+
+func (x OfpTableConfig) String() string {
+	return proto.EnumName(OfpTableConfig_name, int32(x))
+}
+
+func (OfpTableConfig) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{4}
+}
+
+// Table numbering. Tables can use any number up to OFPT_MAX.
+type OfpTable int32
+
+const (
+	OfpTable_OFPTT_INVALID OfpTable = 0
+	// Last usable table number.
+	OfpTable_OFPTT_MAX OfpTable = 254
+	// Fake tables.
+	OfpTable_OFPTT_ALL OfpTable = 255
+)
+
+var OfpTable_name = map[int32]string{
+	0:   "OFPTT_INVALID",
+	254: "OFPTT_MAX",
+	255: "OFPTT_ALL",
+}
+
+var OfpTable_value = map[string]int32{
+	"OFPTT_INVALID": 0,
+	"OFPTT_MAX":     254,
+	"OFPTT_ALL":     255,
+}
+
+func (x OfpTable) String() string {
+	return proto.EnumName(OfpTable_name, int32(x))
+}
+
+func (OfpTable) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{5}
+}
+
+// Capabilities supported by the datapath.
+type OfpCapabilities int32
+
+const (
+	OfpCapabilities_OFPC_INVALID      OfpCapabilities = 0
+	OfpCapabilities_OFPC_FLOW_STATS   OfpCapabilities = 1
+	OfpCapabilities_OFPC_TABLE_STATS  OfpCapabilities = 2
+	OfpCapabilities_OFPC_PORT_STATS   OfpCapabilities = 4
+	OfpCapabilities_OFPC_GROUP_STATS  OfpCapabilities = 8
+	OfpCapabilities_OFPC_IP_REASM     OfpCapabilities = 32
+	OfpCapabilities_OFPC_QUEUE_STATS  OfpCapabilities = 64
+	OfpCapabilities_OFPC_PORT_BLOCKED OfpCapabilities = 256
+)
+
+var OfpCapabilities_name = map[int32]string{
+	0:   "OFPC_INVALID",
+	1:   "OFPC_FLOW_STATS",
+	2:   "OFPC_TABLE_STATS",
+	4:   "OFPC_PORT_STATS",
+	8:   "OFPC_GROUP_STATS",
+	32:  "OFPC_IP_REASM",
+	64:  "OFPC_QUEUE_STATS",
+	256: "OFPC_PORT_BLOCKED",
+}
+
+var OfpCapabilities_value = map[string]int32{
+	"OFPC_INVALID":      0,
+	"OFPC_FLOW_STATS":   1,
+	"OFPC_TABLE_STATS":  2,
+	"OFPC_PORT_STATS":   4,
+	"OFPC_GROUP_STATS":  8,
+	"OFPC_IP_REASM":     32,
+	"OFPC_QUEUE_STATS":  64,
+	"OFPC_PORT_BLOCKED": 256,
+}
+
+func (x OfpCapabilities) String() string {
+	return proto.EnumName(OfpCapabilities_name, int32(x))
+}
+
+func (OfpCapabilities) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{6}
+}
+
+// Flags to indicate behavior of the physical port.  These flags are
+// used in ofp_port to describe the current configuration.  They are
+// used in the ofp_port_mod message to configure the port's behavior.
+type OfpPortConfig int32
+
+const (
+	OfpPortConfig_OFPPC_INVALID      OfpPortConfig = 0
+	OfpPortConfig_OFPPC_PORT_DOWN    OfpPortConfig = 1
+	OfpPortConfig_OFPPC_NO_RECV      OfpPortConfig = 4
+	OfpPortConfig_OFPPC_NO_FWD       OfpPortConfig = 32
+	OfpPortConfig_OFPPC_NO_PACKET_IN OfpPortConfig = 64
+)
+
+var OfpPortConfig_name = map[int32]string{
+	0:  "OFPPC_INVALID",
+	1:  "OFPPC_PORT_DOWN",
+	4:  "OFPPC_NO_RECV",
+	32: "OFPPC_NO_FWD",
+	64: "OFPPC_NO_PACKET_IN",
+}
+
+var OfpPortConfig_value = map[string]int32{
+	"OFPPC_INVALID":      0,
+	"OFPPC_PORT_DOWN":    1,
+	"OFPPC_NO_RECV":      4,
+	"OFPPC_NO_FWD":       32,
+	"OFPPC_NO_PACKET_IN": 64,
+}
+
+func (x OfpPortConfig) String() string {
+	return proto.EnumName(OfpPortConfig_name, int32(x))
+}
+
+func (OfpPortConfig) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{7}
+}
+
+// Current state of the physical port.  These are not configurable from
+// the controller.
+type OfpPortState int32
+
+const (
+	OfpPortState_OFPPS_INVALID   OfpPortState = 0
+	OfpPortState_OFPPS_LINK_DOWN OfpPortState = 1
+	OfpPortState_OFPPS_BLOCKED   OfpPortState = 2
+	OfpPortState_OFPPS_LIVE      OfpPortState = 4
+)
+
+var OfpPortState_name = map[int32]string{
+	0: "OFPPS_INVALID",
+	1: "OFPPS_LINK_DOWN",
+	2: "OFPPS_BLOCKED",
+	4: "OFPPS_LIVE",
+}
+
+var OfpPortState_value = map[string]int32{
+	"OFPPS_INVALID":   0,
+	"OFPPS_LINK_DOWN": 1,
+	"OFPPS_BLOCKED":   2,
+	"OFPPS_LIVE":      4,
+}
+
+func (x OfpPortState) String() string {
+	return proto.EnumName(OfpPortState_name, int32(x))
+}
+
+func (OfpPortState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{8}
+}
+
+// Features of ports available in a datapath.
+type OfpPortFeatures int32
+
+const (
+	OfpPortFeatures_OFPPF_INVALID    OfpPortFeatures = 0
+	OfpPortFeatures_OFPPF_10MB_HD    OfpPortFeatures = 1
+	OfpPortFeatures_OFPPF_10MB_FD    OfpPortFeatures = 2
+	OfpPortFeatures_OFPPF_100MB_HD   OfpPortFeatures = 4
+	OfpPortFeatures_OFPPF_100MB_FD   OfpPortFeatures = 8
+	OfpPortFeatures_OFPPF_1GB_HD     OfpPortFeatures = 16
+	OfpPortFeatures_OFPPF_1GB_FD     OfpPortFeatures = 32
+	OfpPortFeatures_OFPPF_10GB_FD    OfpPortFeatures = 64
+	OfpPortFeatures_OFPPF_40GB_FD    OfpPortFeatures = 128
+	OfpPortFeatures_OFPPF_100GB_FD   OfpPortFeatures = 256
+	OfpPortFeatures_OFPPF_1TB_FD     OfpPortFeatures = 512
+	OfpPortFeatures_OFPPF_OTHER      OfpPortFeatures = 1024
+	OfpPortFeatures_OFPPF_COPPER     OfpPortFeatures = 2048
+	OfpPortFeatures_OFPPF_FIBER      OfpPortFeatures = 4096
+	OfpPortFeatures_OFPPF_AUTONEG    OfpPortFeatures = 8192
+	OfpPortFeatures_OFPPF_PAUSE      OfpPortFeatures = 16384
+	OfpPortFeatures_OFPPF_PAUSE_ASYM OfpPortFeatures = 32768
+)
+
+var OfpPortFeatures_name = map[int32]string{
+	0:     "OFPPF_INVALID",
+	1:     "OFPPF_10MB_HD",
+	2:     "OFPPF_10MB_FD",
+	4:     "OFPPF_100MB_HD",
+	8:     "OFPPF_100MB_FD",
+	16:    "OFPPF_1GB_HD",
+	32:    "OFPPF_1GB_FD",
+	64:    "OFPPF_10GB_FD",
+	128:   "OFPPF_40GB_FD",
+	256:   "OFPPF_100GB_FD",
+	512:   "OFPPF_1TB_FD",
+	1024:  "OFPPF_OTHER",
+	2048:  "OFPPF_COPPER",
+	4096:  "OFPPF_FIBER",
+	8192:  "OFPPF_AUTONEG",
+	16384: "OFPPF_PAUSE",
+	32768: "OFPPF_PAUSE_ASYM",
+}
+
+var OfpPortFeatures_value = map[string]int32{
+	"OFPPF_INVALID":    0,
+	"OFPPF_10MB_HD":    1,
+	"OFPPF_10MB_FD":    2,
+	"OFPPF_100MB_HD":   4,
+	"OFPPF_100MB_FD":   8,
+	"OFPPF_1GB_HD":     16,
+	"OFPPF_1GB_FD":     32,
+	"OFPPF_10GB_FD":    64,
+	"OFPPF_40GB_FD":    128,
+	"OFPPF_100GB_FD":   256,
+	"OFPPF_1TB_FD":     512,
+	"OFPPF_OTHER":      1024,
+	"OFPPF_COPPER":     2048,
+	"OFPPF_FIBER":      4096,
+	"OFPPF_AUTONEG":    8192,
+	"OFPPF_PAUSE":      16384,
+	"OFPPF_PAUSE_ASYM": 32768,
+}
+
+func (x OfpPortFeatures) String() string {
+	return proto.EnumName(OfpPortFeatures_name, int32(x))
+}
+
+func (OfpPortFeatures) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{9}
+}
+
+// What changed about the physical port
+type OfpPortReason int32
+
+const (
+	OfpPortReason_OFPPR_ADD    OfpPortReason = 0
+	OfpPortReason_OFPPR_DELETE OfpPortReason = 1
+	OfpPortReason_OFPPR_MODIFY OfpPortReason = 2
+)
+
+var OfpPortReason_name = map[int32]string{
+	0: "OFPPR_ADD",
+	1: "OFPPR_DELETE",
+	2: "OFPPR_MODIFY",
+}
+
+var OfpPortReason_value = map[string]int32{
+	"OFPPR_ADD":    0,
+	"OFPPR_DELETE": 1,
+	"OFPPR_MODIFY": 2,
+}
+
+func (x OfpPortReason) String() string {
+	return proto.EnumName(OfpPortReason_name, int32(x))
+}
+
+func (OfpPortReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{10}
+}
+
+// The match type indicates the match structure (set of fields that compose the
+// match) in use. The match type is placed in the type field at the beginning
+// of all match structures. The "OpenFlow Extensible Match" type corresponds
+// to OXM TLV format described below and must be supported by all OpenFlow
+// switches. Extensions that define other match types may be published on the
+// ONF wiki. Support for extensions is optional.
+type OfpMatchType int32
+
+const (
+	OfpMatchType_OFPMT_STANDARD OfpMatchType = 0
+	OfpMatchType_OFPMT_OXM      OfpMatchType = 1
+)
+
+var OfpMatchType_name = map[int32]string{
+	0: "OFPMT_STANDARD",
+	1: "OFPMT_OXM",
+}
+
+var OfpMatchType_value = map[string]int32{
+	"OFPMT_STANDARD": 0,
+	"OFPMT_OXM":      1,
+}
+
+func (x OfpMatchType) String() string {
+	return proto.EnumName(OfpMatchType_name, int32(x))
+}
+
+func (OfpMatchType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{11}
+}
+
+// OXM Class IDs.
+// The high order bit differentiate reserved classes from member classes.
+// Classes 0x0000 to 0x7FFF are member classes, allocated by ONF.
+// Classes 0x8000 to 0xFFFE are reserved classes, reserved for standardisation.
+type OfpOxmClass int32
+
+const (
+	OfpOxmClass_OFPXMC_NXM_0          OfpOxmClass = 0
+	OfpOxmClass_OFPXMC_NXM_1          OfpOxmClass = 1
+	OfpOxmClass_OFPXMC_OPENFLOW_BASIC OfpOxmClass = 32768
+	OfpOxmClass_OFPXMC_EXPERIMENTER   OfpOxmClass = 65535
+)
+
+var OfpOxmClass_name = map[int32]string{
+	0:     "OFPXMC_NXM_0",
+	1:     "OFPXMC_NXM_1",
+	32768: "OFPXMC_OPENFLOW_BASIC",
+	65535: "OFPXMC_EXPERIMENTER",
+}
+
+var OfpOxmClass_value = map[string]int32{
+	"OFPXMC_NXM_0":          0,
+	"OFPXMC_NXM_1":          1,
+	"OFPXMC_OPENFLOW_BASIC": 32768,
+	"OFPXMC_EXPERIMENTER":   65535,
+}
+
+func (x OfpOxmClass) String() string {
+	return proto.EnumName(OfpOxmClass_name, int32(x))
+}
+
+func (OfpOxmClass) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{12}
+}
+
+// OXM Flow field types for OpenFlow basic class.
+type OxmOfbFieldTypes int32
+
+const (
+	OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT        OxmOfbFieldTypes = 0
+	OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT    OxmOfbFieldTypes = 1
+	OxmOfbFieldTypes_OFPXMT_OFB_METADATA       OxmOfbFieldTypes = 2
+	OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST        OxmOfbFieldTypes = 3
+	OxmOfbFieldTypes_OFPXMT_OFB_ETH_SRC        OxmOfbFieldTypes = 4
+	OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE       OxmOfbFieldTypes = 5
+	OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID       OxmOfbFieldTypes = 6
+	OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP       OxmOfbFieldTypes = 7
+	OxmOfbFieldTypes_OFPXMT_OFB_IP_DSCP        OxmOfbFieldTypes = 8
+	OxmOfbFieldTypes_OFPXMT_OFB_IP_ECN         OxmOfbFieldTypes = 9
+	OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO       OxmOfbFieldTypes = 10
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV4_SRC       OxmOfbFieldTypes = 11
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST       OxmOfbFieldTypes = 12
+	OxmOfbFieldTypes_OFPXMT_OFB_TCP_SRC        OxmOfbFieldTypes = 13
+	OxmOfbFieldTypes_OFPXMT_OFB_TCP_DST        OxmOfbFieldTypes = 14
+	OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC        OxmOfbFieldTypes = 15
+	OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST        OxmOfbFieldTypes = 16
+	OxmOfbFieldTypes_OFPXMT_OFB_SCTP_SRC       OxmOfbFieldTypes = 17
+	OxmOfbFieldTypes_OFPXMT_OFB_SCTP_DST       OxmOfbFieldTypes = 18
+	OxmOfbFieldTypes_OFPXMT_OFB_ICMPV4_TYPE    OxmOfbFieldTypes = 19
+	OxmOfbFieldTypes_OFPXMT_OFB_ICMPV4_CODE    OxmOfbFieldTypes = 20
+	OxmOfbFieldTypes_OFPXMT_OFB_ARP_OP         OxmOfbFieldTypes = 21
+	OxmOfbFieldTypes_OFPXMT_OFB_ARP_SPA        OxmOfbFieldTypes = 22
+	OxmOfbFieldTypes_OFPXMT_OFB_ARP_TPA        OxmOfbFieldTypes = 23
+	OxmOfbFieldTypes_OFPXMT_OFB_ARP_SHA        OxmOfbFieldTypes = 24
+	OxmOfbFieldTypes_OFPXMT_OFB_ARP_THA        OxmOfbFieldTypes = 25
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV6_SRC       OxmOfbFieldTypes = 26
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV6_DST       OxmOfbFieldTypes = 27
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV6_FLABEL    OxmOfbFieldTypes = 28
+	OxmOfbFieldTypes_OFPXMT_OFB_ICMPV6_TYPE    OxmOfbFieldTypes = 29
+	OxmOfbFieldTypes_OFPXMT_OFB_ICMPV6_CODE    OxmOfbFieldTypes = 30
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_TARGET OxmOfbFieldTypes = 31
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_SLL    OxmOfbFieldTypes = 32
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_TLL    OxmOfbFieldTypes = 33
+	OxmOfbFieldTypes_OFPXMT_OFB_MPLS_LABEL     OxmOfbFieldTypes = 34
+	OxmOfbFieldTypes_OFPXMT_OFB_MPLS_TC        OxmOfbFieldTypes = 35
+	OxmOfbFieldTypes_OFPXMT_OFB_MPLS_BOS       OxmOfbFieldTypes = 36
+	OxmOfbFieldTypes_OFPXMT_OFB_PBB_ISID       OxmOfbFieldTypes = 37
+	OxmOfbFieldTypes_OFPXMT_OFB_TUNNEL_ID      OxmOfbFieldTypes = 38
+	OxmOfbFieldTypes_OFPXMT_OFB_IPV6_EXTHDR    OxmOfbFieldTypes = 39
+)
+
+var OxmOfbFieldTypes_name = map[int32]string{
+	0:  "OFPXMT_OFB_IN_PORT",
+	1:  "OFPXMT_OFB_IN_PHY_PORT",
+	2:  "OFPXMT_OFB_METADATA",
+	3:  "OFPXMT_OFB_ETH_DST",
+	4:  "OFPXMT_OFB_ETH_SRC",
+	5:  "OFPXMT_OFB_ETH_TYPE",
+	6:  "OFPXMT_OFB_VLAN_VID",
+	7:  "OFPXMT_OFB_VLAN_PCP",
+	8:  "OFPXMT_OFB_IP_DSCP",
+	9:  "OFPXMT_OFB_IP_ECN",
+	10: "OFPXMT_OFB_IP_PROTO",
+	11: "OFPXMT_OFB_IPV4_SRC",
+	12: "OFPXMT_OFB_IPV4_DST",
+	13: "OFPXMT_OFB_TCP_SRC",
+	14: "OFPXMT_OFB_TCP_DST",
+	15: "OFPXMT_OFB_UDP_SRC",
+	16: "OFPXMT_OFB_UDP_DST",
+	17: "OFPXMT_OFB_SCTP_SRC",
+	18: "OFPXMT_OFB_SCTP_DST",
+	19: "OFPXMT_OFB_ICMPV4_TYPE",
+	20: "OFPXMT_OFB_ICMPV4_CODE",
+	21: "OFPXMT_OFB_ARP_OP",
+	22: "OFPXMT_OFB_ARP_SPA",
+	23: "OFPXMT_OFB_ARP_TPA",
+	24: "OFPXMT_OFB_ARP_SHA",
+	25: "OFPXMT_OFB_ARP_THA",
+	26: "OFPXMT_OFB_IPV6_SRC",
+	27: "OFPXMT_OFB_IPV6_DST",
+	28: "OFPXMT_OFB_IPV6_FLABEL",
+	29: "OFPXMT_OFB_ICMPV6_TYPE",
+	30: "OFPXMT_OFB_ICMPV6_CODE",
+	31: "OFPXMT_OFB_IPV6_ND_TARGET",
+	32: "OFPXMT_OFB_IPV6_ND_SLL",
+	33: "OFPXMT_OFB_IPV6_ND_TLL",
+	34: "OFPXMT_OFB_MPLS_LABEL",
+	35: "OFPXMT_OFB_MPLS_TC",
+	36: "OFPXMT_OFB_MPLS_BOS",
+	37: "OFPXMT_OFB_PBB_ISID",
+	38: "OFPXMT_OFB_TUNNEL_ID",
+	39: "OFPXMT_OFB_IPV6_EXTHDR",
+}
+
+var OxmOfbFieldTypes_value = map[string]int32{
+	"OFPXMT_OFB_IN_PORT":        0,
+	"OFPXMT_OFB_IN_PHY_PORT":    1,
+	"OFPXMT_OFB_METADATA":       2,
+	"OFPXMT_OFB_ETH_DST":        3,
+	"OFPXMT_OFB_ETH_SRC":        4,
+	"OFPXMT_OFB_ETH_TYPE":       5,
+	"OFPXMT_OFB_VLAN_VID":       6,
+	"OFPXMT_OFB_VLAN_PCP":       7,
+	"OFPXMT_OFB_IP_DSCP":        8,
+	"OFPXMT_OFB_IP_ECN":         9,
+	"OFPXMT_OFB_IP_PROTO":       10,
+	"OFPXMT_OFB_IPV4_SRC":       11,
+	"OFPXMT_OFB_IPV4_DST":       12,
+	"OFPXMT_OFB_TCP_SRC":        13,
+	"OFPXMT_OFB_TCP_DST":        14,
+	"OFPXMT_OFB_UDP_SRC":        15,
+	"OFPXMT_OFB_UDP_DST":        16,
+	"OFPXMT_OFB_SCTP_SRC":       17,
+	"OFPXMT_OFB_SCTP_DST":       18,
+	"OFPXMT_OFB_ICMPV4_TYPE":    19,
+	"OFPXMT_OFB_ICMPV4_CODE":    20,
+	"OFPXMT_OFB_ARP_OP":         21,
+	"OFPXMT_OFB_ARP_SPA":        22,
+	"OFPXMT_OFB_ARP_TPA":        23,
+	"OFPXMT_OFB_ARP_SHA":        24,
+	"OFPXMT_OFB_ARP_THA":        25,
+	"OFPXMT_OFB_IPV6_SRC":       26,
+	"OFPXMT_OFB_IPV6_DST":       27,
+	"OFPXMT_OFB_IPV6_FLABEL":    28,
+	"OFPXMT_OFB_ICMPV6_TYPE":    29,
+	"OFPXMT_OFB_ICMPV6_CODE":    30,
+	"OFPXMT_OFB_IPV6_ND_TARGET": 31,
+	"OFPXMT_OFB_IPV6_ND_SLL":    32,
+	"OFPXMT_OFB_IPV6_ND_TLL":    33,
+	"OFPXMT_OFB_MPLS_LABEL":     34,
+	"OFPXMT_OFB_MPLS_TC":        35,
+	"OFPXMT_OFB_MPLS_BOS":       36,
+	"OFPXMT_OFB_PBB_ISID":       37,
+	"OFPXMT_OFB_TUNNEL_ID":      38,
+	"OFPXMT_OFB_IPV6_EXTHDR":    39,
+}
+
+func (x OxmOfbFieldTypes) String() string {
+	return proto.EnumName(OxmOfbFieldTypes_name, int32(x))
+}
+
+func (OxmOfbFieldTypes) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{13}
+}
+
+// The VLAN id is 12-bits, so we can use the entire 16 bits to indicate
+// special conditions.
+type OfpVlanId int32
+
+const (
+	OfpVlanId_OFPVID_NONE    OfpVlanId = 0
+	OfpVlanId_OFPVID_PRESENT OfpVlanId = 4096
+)
+
+var OfpVlanId_name = map[int32]string{
+	0:    "OFPVID_NONE",
+	4096: "OFPVID_PRESENT",
+}
+
+var OfpVlanId_value = map[string]int32{
+	"OFPVID_NONE":    0,
+	"OFPVID_PRESENT": 4096,
+}
+
+func (x OfpVlanId) String() string {
+	return proto.EnumName(OfpVlanId_name, int32(x))
+}
+
+func (OfpVlanId) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{14}
+}
+
+// Bit definitions for IPv6 Extension Header pseudo-field.
+type OfpIpv6ExthdrFlags int32
+
+const (
+	OfpIpv6ExthdrFlags_OFPIEH_INVALID OfpIpv6ExthdrFlags = 0
+	OfpIpv6ExthdrFlags_OFPIEH_NONEXT  OfpIpv6ExthdrFlags = 1
+	OfpIpv6ExthdrFlags_OFPIEH_ESP     OfpIpv6ExthdrFlags = 2
+	OfpIpv6ExthdrFlags_OFPIEH_AUTH    OfpIpv6ExthdrFlags = 4
+	OfpIpv6ExthdrFlags_OFPIEH_DEST    OfpIpv6ExthdrFlags = 8
+	OfpIpv6ExthdrFlags_OFPIEH_FRAG    OfpIpv6ExthdrFlags = 16
+	OfpIpv6ExthdrFlags_OFPIEH_ROUTER  OfpIpv6ExthdrFlags = 32
+	OfpIpv6ExthdrFlags_OFPIEH_HOP     OfpIpv6ExthdrFlags = 64
+	OfpIpv6ExthdrFlags_OFPIEH_UNREP   OfpIpv6ExthdrFlags = 128
+	OfpIpv6ExthdrFlags_OFPIEH_UNSEQ   OfpIpv6ExthdrFlags = 256
+)
+
+var OfpIpv6ExthdrFlags_name = map[int32]string{
+	0:   "OFPIEH_INVALID",
+	1:   "OFPIEH_NONEXT",
+	2:   "OFPIEH_ESP",
+	4:   "OFPIEH_AUTH",
+	8:   "OFPIEH_DEST",
+	16:  "OFPIEH_FRAG",
+	32:  "OFPIEH_ROUTER",
+	64:  "OFPIEH_HOP",
+	128: "OFPIEH_UNREP",
+	256: "OFPIEH_UNSEQ",
+}
+
+var OfpIpv6ExthdrFlags_value = map[string]int32{
+	"OFPIEH_INVALID": 0,
+	"OFPIEH_NONEXT":  1,
+	"OFPIEH_ESP":     2,
+	"OFPIEH_AUTH":    4,
+	"OFPIEH_DEST":    8,
+	"OFPIEH_FRAG":    16,
+	"OFPIEH_ROUTER":  32,
+	"OFPIEH_HOP":     64,
+	"OFPIEH_UNREP":   128,
+	"OFPIEH_UNSEQ":   256,
+}
+
+func (x OfpIpv6ExthdrFlags) String() string {
+	return proto.EnumName(OfpIpv6ExthdrFlags_name, int32(x))
+}
+
+func (OfpIpv6ExthdrFlags) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{15}
+}
+
+type OfpActionType int32
+
+const (
+	OfpActionType_OFPAT_OUTPUT       OfpActionType = 0
+	OfpActionType_OFPAT_COPY_TTL_OUT OfpActionType = 11
+	OfpActionType_OFPAT_COPY_TTL_IN  OfpActionType = 12
+	OfpActionType_OFPAT_SET_MPLS_TTL OfpActionType = 15
+	OfpActionType_OFPAT_DEC_MPLS_TTL OfpActionType = 16
+	OfpActionType_OFPAT_PUSH_VLAN    OfpActionType = 17
+	OfpActionType_OFPAT_POP_VLAN     OfpActionType = 18
+	OfpActionType_OFPAT_PUSH_MPLS    OfpActionType = 19
+	OfpActionType_OFPAT_POP_MPLS     OfpActionType = 20
+	OfpActionType_OFPAT_SET_QUEUE    OfpActionType = 21
+	OfpActionType_OFPAT_GROUP        OfpActionType = 22
+	OfpActionType_OFPAT_SET_NW_TTL   OfpActionType = 23
+	OfpActionType_OFPAT_DEC_NW_TTL   OfpActionType = 24
+	OfpActionType_OFPAT_SET_FIELD    OfpActionType = 25
+	OfpActionType_OFPAT_PUSH_PBB     OfpActionType = 26
+	OfpActionType_OFPAT_POP_PBB      OfpActionType = 27
+	OfpActionType_OFPAT_EXPERIMENTER OfpActionType = 65535
+)
+
+var OfpActionType_name = map[int32]string{
+	0:     "OFPAT_OUTPUT",
+	11:    "OFPAT_COPY_TTL_OUT",
+	12:    "OFPAT_COPY_TTL_IN",
+	15:    "OFPAT_SET_MPLS_TTL",
+	16:    "OFPAT_DEC_MPLS_TTL",
+	17:    "OFPAT_PUSH_VLAN",
+	18:    "OFPAT_POP_VLAN",
+	19:    "OFPAT_PUSH_MPLS",
+	20:    "OFPAT_POP_MPLS",
+	21:    "OFPAT_SET_QUEUE",
+	22:    "OFPAT_GROUP",
+	23:    "OFPAT_SET_NW_TTL",
+	24:    "OFPAT_DEC_NW_TTL",
+	25:    "OFPAT_SET_FIELD",
+	26:    "OFPAT_PUSH_PBB",
+	27:    "OFPAT_POP_PBB",
+	65535: "OFPAT_EXPERIMENTER",
+}
+
+var OfpActionType_value = map[string]int32{
+	"OFPAT_OUTPUT":       0,
+	"OFPAT_COPY_TTL_OUT": 11,
+	"OFPAT_COPY_TTL_IN":  12,
+	"OFPAT_SET_MPLS_TTL": 15,
+	"OFPAT_DEC_MPLS_TTL": 16,
+	"OFPAT_PUSH_VLAN":    17,
+	"OFPAT_POP_VLAN":     18,
+	"OFPAT_PUSH_MPLS":    19,
+	"OFPAT_POP_MPLS":     20,
+	"OFPAT_SET_QUEUE":    21,
+	"OFPAT_GROUP":        22,
+	"OFPAT_SET_NW_TTL":   23,
+	"OFPAT_DEC_NW_TTL":   24,
+	"OFPAT_SET_FIELD":    25,
+	"OFPAT_PUSH_PBB":     26,
+	"OFPAT_POP_PBB":      27,
+	"OFPAT_EXPERIMENTER": 65535,
+}
+
+func (x OfpActionType) String() string {
+	return proto.EnumName(OfpActionType_name, int32(x))
+}
+
+func (OfpActionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{16}
+}
+
+type OfpControllerMaxLen int32
+
+const (
+	OfpControllerMaxLen_OFPCML_INVALID   OfpControllerMaxLen = 0
+	OfpControllerMaxLen_OFPCML_MAX       OfpControllerMaxLen = 65509
+	OfpControllerMaxLen_OFPCML_NO_BUFFER OfpControllerMaxLen = 65535
+)
+
+var OfpControllerMaxLen_name = map[int32]string{
+	0:     "OFPCML_INVALID",
+	65509: "OFPCML_MAX",
+	65535: "OFPCML_NO_BUFFER",
+}
+
+var OfpControllerMaxLen_value = map[string]int32{
+	"OFPCML_INVALID":   0,
+	"OFPCML_MAX":       65509,
+	"OFPCML_NO_BUFFER": 65535,
+}
+
+func (x OfpControllerMaxLen) String() string {
+	return proto.EnumName(OfpControllerMaxLen_name, int32(x))
+}
+
+func (OfpControllerMaxLen) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{17}
+}
+
+type OfpInstructionType int32
+
+const (
+	OfpInstructionType_OFPIT_INVALID        OfpInstructionType = 0
+	OfpInstructionType_OFPIT_GOTO_TABLE     OfpInstructionType = 1
+	OfpInstructionType_OFPIT_WRITE_METADATA OfpInstructionType = 2
+	OfpInstructionType_OFPIT_WRITE_ACTIONS  OfpInstructionType = 3
+	OfpInstructionType_OFPIT_APPLY_ACTIONS  OfpInstructionType = 4
+	OfpInstructionType_OFPIT_CLEAR_ACTIONS  OfpInstructionType = 5
+	OfpInstructionType_OFPIT_METER          OfpInstructionType = 6
+	OfpInstructionType_OFPIT_EXPERIMENTER   OfpInstructionType = 65535
+)
+
+var OfpInstructionType_name = map[int32]string{
+	0:     "OFPIT_INVALID",
+	1:     "OFPIT_GOTO_TABLE",
+	2:     "OFPIT_WRITE_METADATA",
+	3:     "OFPIT_WRITE_ACTIONS",
+	4:     "OFPIT_APPLY_ACTIONS",
+	5:     "OFPIT_CLEAR_ACTIONS",
+	6:     "OFPIT_METER",
+	65535: "OFPIT_EXPERIMENTER",
+}
+
+var OfpInstructionType_value = map[string]int32{
+	"OFPIT_INVALID":        0,
+	"OFPIT_GOTO_TABLE":     1,
+	"OFPIT_WRITE_METADATA": 2,
+	"OFPIT_WRITE_ACTIONS":  3,
+	"OFPIT_APPLY_ACTIONS":  4,
+	"OFPIT_CLEAR_ACTIONS":  5,
+	"OFPIT_METER":          6,
+	"OFPIT_EXPERIMENTER":   65535,
+}
+
+func (x OfpInstructionType) String() string {
+	return proto.EnumName(OfpInstructionType_name, int32(x))
+}
+
+func (OfpInstructionType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{18}
+}
+
+type OfpFlowModCommand int32
+
+const (
+	OfpFlowModCommand_OFPFC_ADD           OfpFlowModCommand = 0
+	OfpFlowModCommand_OFPFC_MODIFY        OfpFlowModCommand = 1
+	OfpFlowModCommand_OFPFC_MODIFY_STRICT OfpFlowModCommand = 2
+	OfpFlowModCommand_OFPFC_DELETE        OfpFlowModCommand = 3
+	OfpFlowModCommand_OFPFC_DELETE_STRICT OfpFlowModCommand = 4
+)
+
+var OfpFlowModCommand_name = map[int32]string{
+	0: "OFPFC_ADD",
+	1: "OFPFC_MODIFY",
+	2: "OFPFC_MODIFY_STRICT",
+	3: "OFPFC_DELETE",
+	4: "OFPFC_DELETE_STRICT",
+}
+
+var OfpFlowModCommand_value = map[string]int32{
+	"OFPFC_ADD":           0,
+	"OFPFC_MODIFY":        1,
+	"OFPFC_MODIFY_STRICT": 2,
+	"OFPFC_DELETE":        3,
+	"OFPFC_DELETE_STRICT": 4,
+}
+
+func (x OfpFlowModCommand) String() string {
+	return proto.EnumName(OfpFlowModCommand_name, int32(x))
+}
+
+func (OfpFlowModCommand) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{19}
+}
+
+type OfpFlowModFlags int32
+
+const (
+	OfpFlowModFlags_OFPFF_INVALID       OfpFlowModFlags = 0
+	OfpFlowModFlags_OFPFF_SEND_FLOW_REM OfpFlowModFlags = 1
+	OfpFlowModFlags_OFPFF_CHECK_OVERLAP OfpFlowModFlags = 2
+	OfpFlowModFlags_OFPFF_RESET_COUNTS  OfpFlowModFlags = 4
+	OfpFlowModFlags_OFPFF_NO_PKT_COUNTS OfpFlowModFlags = 8
+	OfpFlowModFlags_OFPFF_NO_BYT_COUNTS OfpFlowModFlags = 16
+)
+
+var OfpFlowModFlags_name = map[int32]string{
+	0:  "OFPFF_INVALID",
+	1:  "OFPFF_SEND_FLOW_REM",
+	2:  "OFPFF_CHECK_OVERLAP",
+	4:  "OFPFF_RESET_COUNTS",
+	8:  "OFPFF_NO_PKT_COUNTS",
+	16: "OFPFF_NO_BYT_COUNTS",
+}
+
+var OfpFlowModFlags_value = map[string]int32{
+	"OFPFF_INVALID":       0,
+	"OFPFF_SEND_FLOW_REM": 1,
+	"OFPFF_CHECK_OVERLAP": 2,
+	"OFPFF_RESET_COUNTS":  4,
+	"OFPFF_NO_PKT_COUNTS": 8,
+	"OFPFF_NO_BYT_COUNTS": 16,
+}
+
+func (x OfpFlowModFlags) String() string {
+	return proto.EnumName(OfpFlowModFlags_name, int32(x))
+}
+
+func (OfpFlowModFlags) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{20}
+}
+
+// Group numbering. Groups can use any number up to OFPG_MAX.
+type OfpGroup int32
+
+const (
+	OfpGroup_OFPG_INVALID OfpGroup = 0
+	// Last usable group number.
+	OfpGroup_OFPG_MAX OfpGroup = 2147483392
+	// Fake groups.
+	OfpGroup_OFPG_ALL OfpGroup = 2147483644
+	OfpGroup_OFPG_ANY OfpGroup = 2147483647
+)
+
+var OfpGroup_name = map[int32]string{
+	0:          "OFPG_INVALID",
+	2147483392: "OFPG_MAX",
+	2147483644: "OFPG_ALL",
+	2147483647: "OFPG_ANY",
+}
+
+var OfpGroup_value = map[string]int32{
+	"OFPG_INVALID": 0,
+	"OFPG_MAX":     2147483392,
+	"OFPG_ALL":     2147483644,
+	"OFPG_ANY":     2147483647,
+}
+
+func (x OfpGroup) String() string {
+	return proto.EnumName(OfpGroup_name, int32(x))
+}
+
+func (OfpGroup) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{21}
+}
+
+// Group commands
+type OfpGroupModCommand int32
+
+const (
+	OfpGroupModCommand_OFPGC_ADD    OfpGroupModCommand = 0
+	OfpGroupModCommand_OFPGC_MODIFY OfpGroupModCommand = 1
+	OfpGroupModCommand_OFPGC_DELETE OfpGroupModCommand = 2
+)
+
+var OfpGroupModCommand_name = map[int32]string{
+	0: "OFPGC_ADD",
+	1: "OFPGC_MODIFY",
+	2: "OFPGC_DELETE",
+}
+
+var OfpGroupModCommand_value = map[string]int32{
+	"OFPGC_ADD":    0,
+	"OFPGC_MODIFY": 1,
+	"OFPGC_DELETE": 2,
+}
+
+func (x OfpGroupModCommand) String() string {
+	return proto.EnumName(OfpGroupModCommand_name, int32(x))
+}
+
+func (OfpGroupModCommand) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{22}
+}
+
+// Group types.  Values in the range [128; 255] are reserved for experimental
+// use.
+type OfpGroupType int32
+
+const (
+	OfpGroupType_OFPGT_ALL      OfpGroupType = 0
+	OfpGroupType_OFPGT_SELECT   OfpGroupType = 1
+	OfpGroupType_OFPGT_INDIRECT OfpGroupType = 2
+	OfpGroupType_OFPGT_FF       OfpGroupType = 3
+)
+
+var OfpGroupType_name = map[int32]string{
+	0: "OFPGT_ALL",
+	1: "OFPGT_SELECT",
+	2: "OFPGT_INDIRECT",
+	3: "OFPGT_FF",
+}
+
+var OfpGroupType_value = map[string]int32{
+	"OFPGT_ALL":      0,
+	"OFPGT_SELECT":   1,
+	"OFPGT_INDIRECT": 2,
+	"OFPGT_FF":       3,
+}
+
+func (x OfpGroupType) String() string {
+	return proto.EnumName(OfpGroupType_name, int32(x))
+}
+
+func (OfpGroupType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{23}
+}
+
+// Why is this packet being sent to the controller?
+type OfpPacketInReason int32
+
+const (
+	OfpPacketInReason_OFPR_NO_MATCH    OfpPacketInReason = 0
+	OfpPacketInReason_OFPR_ACTION      OfpPacketInReason = 1
+	OfpPacketInReason_OFPR_INVALID_TTL OfpPacketInReason = 2
+)
+
+var OfpPacketInReason_name = map[int32]string{
+	0: "OFPR_NO_MATCH",
+	1: "OFPR_ACTION",
+	2: "OFPR_INVALID_TTL",
+}
+
+var OfpPacketInReason_value = map[string]int32{
+	"OFPR_NO_MATCH":    0,
+	"OFPR_ACTION":      1,
+	"OFPR_INVALID_TTL": 2,
+}
+
+func (x OfpPacketInReason) String() string {
+	return proto.EnumName(OfpPacketInReason_name, int32(x))
+}
+
+func (OfpPacketInReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{24}
+}
+
+// Why was this flow removed?
+type OfpFlowRemovedReason int32
+
+const (
+	OfpFlowRemovedReason_OFPRR_IDLE_TIMEOUT OfpFlowRemovedReason = 0
+	OfpFlowRemovedReason_OFPRR_HARD_TIMEOUT OfpFlowRemovedReason = 1
+	OfpFlowRemovedReason_OFPRR_DELETE       OfpFlowRemovedReason = 2
+	OfpFlowRemovedReason_OFPRR_GROUP_DELETE OfpFlowRemovedReason = 3
+	OfpFlowRemovedReason_OFPRR_METER_DELETE OfpFlowRemovedReason = 4
+)
+
+var OfpFlowRemovedReason_name = map[int32]string{
+	0: "OFPRR_IDLE_TIMEOUT",
+	1: "OFPRR_HARD_TIMEOUT",
+	2: "OFPRR_DELETE",
+	3: "OFPRR_GROUP_DELETE",
+	4: "OFPRR_METER_DELETE",
+}
+
+var OfpFlowRemovedReason_value = map[string]int32{
+	"OFPRR_IDLE_TIMEOUT": 0,
+	"OFPRR_HARD_TIMEOUT": 1,
+	"OFPRR_DELETE":       2,
+	"OFPRR_GROUP_DELETE": 3,
+	"OFPRR_METER_DELETE": 4,
+}
+
+func (x OfpFlowRemovedReason) String() string {
+	return proto.EnumName(OfpFlowRemovedReason_name, int32(x))
+}
+
+func (OfpFlowRemovedReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{25}
+}
+
+// Meter numbering. Flow meters can use any number up to OFPM_MAX.
+type OfpMeter int32
+
+const (
+	OfpMeter_OFPM_ZERO OfpMeter = 0
+	// Last usable meter.
+	OfpMeter_OFPM_MAX OfpMeter = 2147418112
+	// Virtual meters.
+	OfpMeter_OFPM_SLOWPATH   OfpMeter = 2147483645
+	OfpMeter_OFPM_CONTROLLER OfpMeter = 2147483646
+	OfpMeter_OFPM_ALL        OfpMeter = 2147483647
+)
+
+var OfpMeter_name = map[int32]string{
+	0:          "OFPM_ZERO",
+	2147418112: "OFPM_MAX",
+	2147483645: "OFPM_SLOWPATH",
+	2147483646: "OFPM_CONTROLLER",
+	2147483647: "OFPM_ALL",
+}
+
+var OfpMeter_value = map[string]int32{
+	"OFPM_ZERO":       0,
+	"OFPM_MAX":        2147418112,
+	"OFPM_SLOWPATH":   2147483645,
+	"OFPM_CONTROLLER": 2147483646,
+	"OFPM_ALL":        2147483647,
+}
+
+func (x OfpMeter) String() string {
+	return proto.EnumName(OfpMeter_name, int32(x))
+}
+
+func (OfpMeter) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{26}
+}
+
+// Meter band types
+type OfpMeterBandType int32
+
+const (
+	OfpMeterBandType_OFPMBT_INVALID      OfpMeterBandType = 0
+	OfpMeterBandType_OFPMBT_DROP         OfpMeterBandType = 1
+	OfpMeterBandType_OFPMBT_DSCP_REMARK  OfpMeterBandType = 2
+	OfpMeterBandType_OFPMBT_EXPERIMENTER OfpMeterBandType = 65535
+)
+
+var OfpMeterBandType_name = map[int32]string{
+	0:     "OFPMBT_INVALID",
+	1:     "OFPMBT_DROP",
+	2:     "OFPMBT_DSCP_REMARK",
+	65535: "OFPMBT_EXPERIMENTER",
+}
+
+var OfpMeterBandType_value = map[string]int32{
+	"OFPMBT_INVALID":      0,
+	"OFPMBT_DROP":         1,
+	"OFPMBT_DSCP_REMARK":  2,
+	"OFPMBT_EXPERIMENTER": 65535,
+}
+
+func (x OfpMeterBandType) String() string {
+	return proto.EnumName(OfpMeterBandType_name, int32(x))
+}
+
+func (OfpMeterBandType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{27}
+}
+
+// Meter commands
+type OfpMeterModCommand int32
+
+const (
+	OfpMeterModCommand_OFPMC_ADD    OfpMeterModCommand = 0
+	OfpMeterModCommand_OFPMC_MODIFY OfpMeterModCommand = 1
+	OfpMeterModCommand_OFPMC_DELETE OfpMeterModCommand = 2
+)
+
+var OfpMeterModCommand_name = map[int32]string{
+	0: "OFPMC_ADD",
+	1: "OFPMC_MODIFY",
+	2: "OFPMC_DELETE",
+}
+
+var OfpMeterModCommand_value = map[string]int32{
+	"OFPMC_ADD":    0,
+	"OFPMC_MODIFY": 1,
+	"OFPMC_DELETE": 2,
+}
+
+func (x OfpMeterModCommand) String() string {
+	return proto.EnumName(OfpMeterModCommand_name, int32(x))
+}
+
+func (OfpMeterModCommand) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{28}
+}
+
+// Meter configuration flags
+type OfpMeterFlags int32
+
+const (
+	OfpMeterFlags_OFPMF_INVALID OfpMeterFlags = 0
+	OfpMeterFlags_OFPMF_KBPS    OfpMeterFlags = 1
+	OfpMeterFlags_OFPMF_PKTPS   OfpMeterFlags = 2
+	OfpMeterFlags_OFPMF_BURST   OfpMeterFlags = 4
+	OfpMeterFlags_OFPMF_STATS   OfpMeterFlags = 8
+)
+
+var OfpMeterFlags_name = map[int32]string{
+	0: "OFPMF_INVALID",
+	1: "OFPMF_KBPS",
+	2: "OFPMF_PKTPS",
+	4: "OFPMF_BURST",
+	8: "OFPMF_STATS",
+}
+
+var OfpMeterFlags_value = map[string]int32{
+	"OFPMF_INVALID": 0,
+	"OFPMF_KBPS":    1,
+	"OFPMF_PKTPS":   2,
+	"OFPMF_BURST":   4,
+	"OFPMF_STATS":   8,
+}
+
+func (x OfpMeterFlags) String() string {
+	return proto.EnumName(OfpMeterFlags_name, int32(x))
+}
+
+func (OfpMeterFlags) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{29}
+}
+
+// Values for 'type' in ofp_error_message.  These values are immutable: they
+// will not change in future versions of the protocol (although new values may
+// be added).
+type OfpErrorType int32
+
+const (
+	OfpErrorType_OFPET_HELLO_FAILED          OfpErrorType = 0
+	OfpErrorType_OFPET_BAD_REQUEST           OfpErrorType = 1
+	OfpErrorType_OFPET_BAD_ACTION            OfpErrorType = 2
+	OfpErrorType_OFPET_BAD_INSTRUCTION       OfpErrorType = 3
+	OfpErrorType_OFPET_BAD_MATCH             OfpErrorType = 4
+	OfpErrorType_OFPET_FLOW_MOD_FAILED       OfpErrorType = 5
+	OfpErrorType_OFPET_GROUP_MOD_FAILED      OfpErrorType = 6
+	OfpErrorType_OFPET_PORT_MOD_FAILED       OfpErrorType = 7
+	OfpErrorType_OFPET_TABLE_MOD_FAILED      OfpErrorType = 8
+	OfpErrorType_OFPET_QUEUE_OP_FAILED       OfpErrorType = 9
+	OfpErrorType_OFPET_SWITCH_CONFIG_FAILED  OfpErrorType = 10
+	OfpErrorType_OFPET_ROLE_REQUEST_FAILED   OfpErrorType = 11
+	OfpErrorType_OFPET_METER_MOD_FAILED      OfpErrorType = 12
+	OfpErrorType_OFPET_TABLE_FEATURES_FAILED OfpErrorType = 13
+	OfpErrorType_OFPET_EXPERIMENTER          OfpErrorType = 65535
+)
+
+var OfpErrorType_name = map[int32]string{
+	0:     "OFPET_HELLO_FAILED",
+	1:     "OFPET_BAD_REQUEST",
+	2:     "OFPET_BAD_ACTION",
+	3:     "OFPET_BAD_INSTRUCTION",
+	4:     "OFPET_BAD_MATCH",
+	5:     "OFPET_FLOW_MOD_FAILED",
+	6:     "OFPET_GROUP_MOD_FAILED",
+	7:     "OFPET_PORT_MOD_FAILED",
+	8:     "OFPET_TABLE_MOD_FAILED",
+	9:     "OFPET_QUEUE_OP_FAILED",
+	10:    "OFPET_SWITCH_CONFIG_FAILED",
+	11:    "OFPET_ROLE_REQUEST_FAILED",
+	12:    "OFPET_METER_MOD_FAILED",
+	13:    "OFPET_TABLE_FEATURES_FAILED",
+	65535: "OFPET_EXPERIMENTER",
+}
+
+var OfpErrorType_value = map[string]int32{
+	"OFPET_HELLO_FAILED":          0,
+	"OFPET_BAD_REQUEST":           1,
+	"OFPET_BAD_ACTION":            2,
+	"OFPET_BAD_INSTRUCTION":       3,
+	"OFPET_BAD_MATCH":             4,
+	"OFPET_FLOW_MOD_FAILED":       5,
+	"OFPET_GROUP_MOD_FAILED":      6,
+	"OFPET_PORT_MOD_FAILED":       7,
+	"OFPET_TABLE_MOD_FAILED":      8,
+	"OFPET_QUEUE_OP_FAILED":       9,
+	"OFPET_SWITCH_CONFIG_FAILED":  10,
+	"OFPET_ROLE_REQUEST_FAILED":   11,
+	"OFPET_METER_MOD_FAILED":      12,
+	"OFPET_TABLE_FEATURES_FAILED": 13,
+	"OFPET_EXPERIMENTER":          65535,
+}
+
+func (x OfpErrorType) String() string {
+	return proto.EnumName(OfpErrorType_name, int32(x))
+}
+
+func (OfpErrorType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{30}
+}
+
+// ofp_error_msg 'code' values for OFPET_HELLO_FAILED.  'data' contains an
+// ASCII text string that may give failure details.
+type OfpHelloFailedCode int32
+
+const (
+	OfpHelloFailedCode_OFPHFC_INCOMPATIBLE OfpHelloFailedCode = 0
+	OfpHelloFailedCode_OFPHFC_EPERM        OfpHelloFailedCode = 1
+)
+
+var OfpHelloFailedCode_name = map[int32]string{
+	0: "OFPHFC_INCOMPATIBLE",
+	1: "OFPHFC_EPERM",
+}
+
+var OfpHelloFailedCode_value = map[string]int32{
+	"OFPHFC_INCOMPATIBLE": 0,
+	"OFPHFC_EPERM":        1,
+}
+
+func (x OfpHelloFailedCode) String() string {
+	return proto.EnumName(OfpHelloFailedCode_name, int32(x))
+}
+
+func (OfpHelloFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{31}
+}
+
+// ofp_error_msg 'code' values for OFPET_BAD_REQUEST.  'data' contains at least
+// the first 64 bytes of the failed request.
+type OfpBadRequestCode int32
+
+const (
+	OfpBadRequestCode_OFPBRC_BAD_VERSION               OfpBadRequestCode = 0
+	OfpBadRequestCode_OFPBRC_BAD_TYPE                  OfpBadRequestCode = 1
+	OfpBadRequestCode_OFPBRC_BAD_MULTIPART             OfpBadRequestCode = 2
+	OfpBadRequestCode_OFPBRC_BAD_EXPERIMENTER          OfpBadRequestCode = 3
+	OfpBadRequestCode_OFPBRC_BAD_EXP_TYPE              OfpBadRequestCode = 4
+	OfpBadRequestCode_OFPBRC_EPERM                     OfpBadRequestCode = 5
+	OfpBadRequestCode_OFPBRC_BAD_LEN                   OfpBadRequestCode = 6
+	OfpBadRequestCode_OFPBRC_BUFFER_EMPTY              OfpBadRequestCode = 7
+	OfpBadRequestCode_OFPBRC_BUFFER_UNKNOWN            OfpBadRequestCode = 8
+	OfpBadRequestCode_OFPBRC_BAD_TABLE_ID              OfpBadRequestCode = 9
+	OfpBadRequestCode_OFPBRC_IS_SLAVE                  OfpBadRequestCode = 10
+	OfpBadRequestCode_OFPBRC_BAD_PORT                  OfpBadRequestCode = 11
+	OfpBadRequestCode_OFPBRC_BAD_PACKET                OfpBadRequestCode = 12
+	OfpBadRequestCode_OFPBRC_MULTIPART_BUFFER_OVERFLOW OfpBadRequestCode = 13
+)
+
+var OfpBadRequestCode_name = map[int32]string{
+	0:  "OFPBRC_BAD_VERSION",
+	1:  "OFPBRC_BAD_TYPE",
+	2:  "OFPBRC_BAD_MULTIPART",
+	3:  "OFPBRC_BAD_EXPERIMENTER",
+	4:  "OFPBRC_BAD_EXP_TYPE",
+	5:  "OFPBRC_EPERM",
+	6:  "OFPBRC_BAD_LEN",
+	7:  "OFPBRC_BUFFER_EMPTY",
+	8:  "OFPBRC_BUFFER_UNKNOWN",
+	9:  "OFPBRC_BAD_TABLE_ID",
+	10: "OFPBRC_IS_SLAVE",
+	11: "OFPBRC_BAD_PORT",
+	12: "OFPBRC_BAD_PACKET",
+	13: "OFPBRC_MULTIPART_BUFFER_OVERFLOW",
+}
+
+var OfpBadRequestCode_value = map[string]int32{
+	"OFPBRC_BAD_VERSION":               0,
+	"OFPBRC_BAD_TYPE":                  1,
+	"OFPBRC_BAD_MULTIPART":             2,
+	"OFPBRC_BAD_EXPERIMENTER":          3,
+	"OFPBRC_BAD_EXP_TYPE":              4,
+	"OFPBRC_EPERM":                     5,
+	"OFPBRC_BAD_LEN":                   6,
+	"OFPBRC_BUFFER_EMPTY":              7,
+	"OFPBRC_BUFFER_UNKNOWN":            8,
+	"OFPBRC_BAD_TABLE_ID":              9,
+	"OFPBRC_IS_SLAVE":                  10,
+	"OFPBRC_BAD_PORT":                  11,
+	"OFPBRC_BAD_PACKET":                12,
+	"OFPBRC_MULTIPART_BUFFER_OVERFLOW": 13,
+}
+
+func (x OfpBadRequestCode) String() string {
+	return proto.EnumName(OfpBadRequestCode_name, int32(x))
+}
+
+func (OfpBadRequestCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{32}
+}
+
+// ofp_error_msg 'code' values for OFPET_BAD_ACTION.  'data' contains at least
+// the first 64 bytes of the failed request.
+type OfpBadActionCode int32
+
+const (
+	OfpBadActionCode_OFPBAC_BAD_TYPE           OfpBadActionCode = 0
+	OfpBadActionCode_OFPBAC_BAD_LEN            OfpBadActionCode = 1
+	OfpBadActionCode_OFPBAC_BAD_EXPERIMENTER   OfpBadActionCode = 2
+	OfpBadActionCode_OFPBAC_BAD_EXP_TYPE       OfpBadActionCode = 3
+	OfpBadActionCode_OFPBAC_BAD_OUT_PORT       OfpBadActionCode = 4
+	OfpBadActionCode_OFPBAC_BAD_ARGUMENT       OfpBadActionCode = 5
+	OfpBadActionCode_OFPBAC_EPERM              OfpBadActionCode = 6
+	OfpBadActionCode_OFPBAC_TOO_MANY           OfpBadActionCode = 7
+	OfpBadActionCode_OFPBAC_BAD_QUEUE          OfpBadActionCode = 8
+	OfpBadActionCode_OFPBAC_BAD_OUT_GROUP      OfpBadActionCode = 9
+	OfpBadActionCode_OFPBAC_MATCH_INCONSISTENT OfpBadActionCode = 10
+	OfpBadActionCode_OFPBAC_UNSUPPORTED_ORDER  OfpBadActionCode = 11
+	OfpBadActionCode_OFPBAC_BAD_TAG            OfpBadActionCode = 12
+	OfpBadActionCode_OFPBAC_BAD_SET_TYPE       OfpBadActionCode = 13
+	OfpBadActionCode_OFPBAC_BAD_SET_LEN        OfpBadActionCode = 14
+	OfpBadActionCode_OFPBAC_BAD_SET_ARGUMENT   OfpBadActionCode = 15
+)
+
+var OfpBadActionCode_name = map[int32]string{
+	0:  "OFPBAC_BAD_TYPE",
+	1:  "OFPBAC_BAD_LEN",
+	2:  "OFPBAC_BAD_EXPERIMENTER",
+	3:  "OFPBAC_BAD_EXP_TYPE",
+	4:  "OFPBAC_BAD_OUT_PORT",
+	5:  "OFPBAC_BAD_ARGUMENT",
+	6:  "OFPBAC_EPERM",
+	7:  "OFPBAC_TOO_MANY",
+	8:  "OFPBAC_BAD_QUEUE",
+	9:  "OFPBAC_BAD_OUT_GROUP",
+	10: "OFPBAC_MATCH_INCONSISTENT",
+	11: "OFPBAC_UNSUPPORTED_ORDER",
+	12: "OFPBAC_BAD_TAG",
+	13: "OFPBAC_BAD_SET_TYPE",
+	14: "OFPBAC_BAD_SET_LEN",
+	15: "OFPBAC_BAD_SET_ARGUMENT",
+}
+
+var OfpBadActionCode_value = map[string]int32{
+	"OFPBAC_BAD_TYPE":           0,
+	"OFPBAC_BAD_LEN":            1,
+	"OFPBAC_BAD_EXPERIMENTER":   2,
+	"OFPBAC_BAD_EXP_TYPE":       3,
+	"OFPBAC_BAD_OUT_PORT":       4,
+	"OFPBAC_BAD_ARGUMENT":       5,
+	"OFPBAC_EPERM":              6,
+	"OFPBAC_TOO_MANY":           7,
+	"OFPBAC_BAD_QUEUE":          8,
+	"OFPBAC_BAD_OUT_GROUP":      9,
+	"OFPBAC_MATCH_INCONSISTENT": 10,
+	"OFPBAC_UNSUPPORTED_ORDER":  11,
+	"OFPBAC_BAD_TAG":            12,
+	"OFPBAC_BAD_SET_TYPE":       13,
+	"OFPBAC_BAD_SET_LEN":        14,
+	"OFPBAC_BAD_SET_ARGUMENT":   15,
+}
+
+func (x OfpBadActionCode) String() string {
+	return proto.EnumName(OfpBadActionCode_name, int32(x))
+}
+
+func (OfpBadActionCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{33}
+}
+
+// ofp_error_msg 'code' values for OFPET_BAD_INSTRUCTION.  'data' contains at
+// least the first 64 bytes of the failed request.
+type OfpBadInstructionCode int32
+
+const (
+	OfpBadInstructionCode_OFPBIC_UNKNOWN_INST        OfpBadInstructionCode = 0
+	OfpBadInstructionCode_OFPBIC_UNSUP_INST          OfpBadInstructionCode = 1
+	OfpBadInstructionCode_OFPBIC_BAD_TABLE_ID        OfpBadInstructionCode = 2
+	OfpBadInstructionCode_OFPBIC_UNSUP_METADATA      OfpBadInstructionCode = 3
+	OfpBadInstructionCode_OFPBIC_UNSUP_METADATA_MASK OfpBadInstructionCode = 4
+	OfpBadInstructionCode_OFPBIC_BAD_EXPERIMENTER    OfpBadInstructionCode = 5
+	OfpBadInstructionCode_OFPBIC_BAD_EXP_TYPE        OfpBadInstructionCode = 6
+	OfpBadInstructionCode_OFPBIC_BAD_LEN             OfpBadInstructionCode = 7
+	OfpBadInstructionCode_OFPBIC_EPERM               OfpBadInstructionCode = 8
+)
+
+var OfpBadInstructionCode_name = map[int32]string{
+	0: "OFPBIC_UNKNOWN_INST",
+	1: "OFPBIC_UNSUP_INST",
+	2: "OFPBIC_BAD_TABLE_ID",
+	3: "OFPBIC_UNSUP_METADATA",
+	4: "OFPBIC_UNSUP_METADATA_MASK",
+	5: "OFPBIC_BAD_EXPERIMENTER",
+	6: "OFPBIC_BAD_EXP_TYPE",
+	7: "OFPBIC_BAD_LEN",
+	8: "OFPBIC_EPERM",
+}
+
+var OfpBadInstructionCode_value = map[string]int32{
+	"OFPBIC_UNKNOWN_INST":        0,
+	"OFPBIC_UNSUP_INST":          1,
+	"OFPBIC_BAD_TABLE_ID":        2,
+	"OFPBIC_UNSUP_METADATA":      3,
+	"OFPBIC_UNSUP_METADATA_MASK": 4,
+	"OFPBIC_BAD_EXPERIMENTER":    5,
+	"OFPBIC_BAD_EXP_TYPE":        6,
+	"OFPBIC_BAD_LEN":             7,
+	"OFPBIC_EPERM":               8,
+}
+
+func (x OfpBadInstructionCode) String() string {
+	return proto.EnumName(OfpBadInstructionCode_name, int32(x))
+}
+
+func (OfpBadInstructionCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{34}
+}
+
+// ofp_error_msg 'code' values for OFPET_BAD_MATCH.  'data' contains at least
+// the first 64 bytes of the failed request.
+type OfpBadMatchCode int32
+
+const (
+	OfpBadMatchCode_OFPBMC_BAD_TYPE         OfpBadMatchCode = 0
+	OfpBadMatchCode_OFPBMC_BAD_LEN          OfpBadMatchCode = 1
+	OfpBadMatchCode_OFPBMC_BAD_TAG          OfpBadMatchCode = 2
+	OfpBadMatchCode_OFPBMC_BAD_DL_ADDR_MASK OfpBadMatchCode = 3
+	OfpBadMatchCode_OFPBMC_BAD_NW_ADDR_MASK OfpBadMatchCode = 4
+	OfpBadMatchCode_OFPBMC_BAD_WILDCARDS    OfpBadMatchCode = 5
+	OfpBadMatchCode_OFPBMC_BAD_FIELD        OfpBadMatchCode = 6
+	OfpBadMatchCode_OFPBMC_BAD_VALUE        OfpBadMatchCode = 7
+	OfpBadMatchCode_OFPBMC_BAD_MASK         OfpBadMatchCode = 8
+	OfpBadMatchCode_OFPBMC_BAD_PREREQ       OfpBadMatchCode = 9
+	OfpBadMatchCode_OFPBMC_DUP_FIELD        OfpBadMatchCode = 10
+	OfpBadMatchCode_OFPBMC_EPERM            OfpBadMatchCode = 11
+)
+
+var OfpBadMatchCode_name = map[int32]string{
+	0:  "OFPBMC_BAD_TYPE",
+	1:  "OFPBMC_BAD_LEN",
+	2:  "OFPBMC_BAD_TAG",
+	3:  "OFPBMC_BAD_DL_ADDR_MASK",
+	4:  "OFPBMC_BAD_NW_ADDR_MASK",
+	5:  "OFPBMC_BAD_WILDCARDS",
+	6:  "OFPBMC_BAD_FIELD",
+	7:  "OFPBMC_BAD_VALUE",
+	8:  "OFPBMC_BAD_MASK",
+	9:  "OFPBMC_BAD_PREREQ",
+	10: "OFPBMC_DUP_FIELD",
+	11: "OFPBMC_EPERM",
+}
+
+var OfpBadMatchCode_value = map[string]int32{
+	"OFPBMC_BAD_TYPE":         0,
+	"OFPBMC_BAD_LEN":          1,
+	"OFPBMC_BAD_TAG":          2,
+	"OFPBMC_BAD_DL_ADDR_MASK": 3,
+	"OFPBMC_BAD_NW_ADDR_MASK": 4,
+	"OFPBMC_BAD_WILDCARDS":    5,
+	"OFPBMC_BAD_FIELD":        6,
+	"OFPBMC_BAD_VALUE":        7,
+	"OFPBMC_BAD_MASK":         8,
+	"OFPBMC_BAD_PREREQ":       9,
+	"OFPBMC_DUP_FIELD":        10,
+	"OFPBMC_EPERM":            11,
+}
+
+func (x OfpBadMatchCode) String() string {
+	return proto.EnumName(OfpBadMatchCode_name, int32(x))
+}
+
+func (OfpBadMatchCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{35}
+}
+
+// ofp_error_msg 'code' values for OFPET_FLOW_MOD_FAILED.  'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpFlowModFailedCode int32
+
+const (
+	OfpFlowModFailedCode_OFPFMFC_UNKNOWN      OfpFlowModFailedCode = 0
+	OfpFlowModFailedCode_OFPFMFC_TABLE_FULL   OfpFlowModFailedCode = 1
+	OfpFlowModFailedCode_OFPFMFC_BAD_TABLE_ID OfpFlowModFailedCode = 2
+	OfpFlowModFailedCode_OFPFMFC_OVERLAP      OfpFlowModFailedCode = 3
+	OfpFlowModFailedCode_OFPFMFC_EPERM        OfpFlowModFailedCode = 4
+	OfpFlowModFailedCode_OFPFMFC_BAD_TIMEOUT  OfpFlowModFailedCode = 5
+	OfpFlowModFailedCode_OFPFMFC_BAD_COMMAND  OfpFlowModFailedCode = 6
+	OfpFlowModFailedCode_OFPFMFC_BAD_FLAGS    OfpFlowModFailedCode = 7
+)
+
+var OfpFlowModFailedCode_name = map[int32]string{
+	0: "OFPFMFC_UNKNOWN",
+	1: "OFPFMFC_TABLE_FULL",
+	2: "OFPFMFC_BAD_TABLE_ID",
+	3: "OFPFMFC_OVERLAP",
+	4: "OFPFMFC_EPERM",
+	5: "OFPFMFC_BAD_TIMEOUT",
+	6: "OFPFMFC_BAD_COMMAND",
+	7: "OFPFMFC_BAD_FLAGS",
+}
+
+var OfpFlowModFailedCode_value = map[string]int32{
+	"OFPFMFC_UNKNOWN":      0,
+	"OFPFMFC_TABLE_FULL":   1,
+	"OFPFMFC_BAD_TABLE_ID": 2,
+	"OFPFMFC_OVERLAP":      3,
+	"OFPFMFC_EPERM":        4,
+	"OFPFMFC_BAD_TIMEOUT":  5,
+	"OFPFMFC_BAD_COMMAND":  6,
+	"OFPFMFC_BAD_FLAGS":    7,
+}
+
+func (x OfpFlowModFailedCode) String() string {
+	return proto.EnumName(OfpFlowModFailedCode_name, int32(x))
+}
+
+func (OfpFlowModFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{36}
+}
+
+// ofp_error_msg 'code' values for OFPET_GROUP_MOD_FAILED.  'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpGroupModFailedCode int32
+
+const (
+	OfpGroupModFailedCode_OFPGMFC_GROUP_EXISTS         OfpGroupModFailedCode = 0
+	OfpGroupModFailedCode_OFPGMFC_INVALID_GROUP        OfpGroupModFailedCode = 1
+	OfpGroupModFailedCode_OFPGMFC_WEIGHT_UNSUPPORTED   OfpGroupModFailedCode = 2
+	OfpGroupModFailedCode_OFPGMFC_OUT_OF_GROUPS        OfpGroupModFailedCode = 3
+	OfpGroupModFailedCode_OFPGMFC_OUT_OF_BUCKETS       OfpGroupModFailedCode = 4
+	OfpGroupModFailedCode_OFPGMFC_CHAINING_UNSUPPORTED OfpGroupModFailedCode = 5
+	OfpGroupModFailedCode_OFPGMFC_WATCH_UNSUPPORTED    OfpGroupModFailedCode = 6
+	OfpGroupModFailedCode_OFPGMFC_LOOP                 OfpGroupModFailedCode = 7
+	OfpGroupModFailedCode_OFPGMFC_UNKNOWN_GROUP        OfpGroupModFailedCode = 8
+	OfpGroupModFailedCode_OFPGMFC_CHAINED_GROUP        OfpGroupModFailedCode = 9
+	OfpGroupModFailedCode_OFPGMFC_BAD_TYPE             OfpGroupModFailedCode = 10
+	OfpGroupModFailedCode_OFPGMFC_BAD_COMMAND          OfpGroupModFailedCode = 11
+	OfpGroupModFailedCode_OFPGMFC_BAD_BUCKET           OfpGroupModFailedCode = 12
+	OfpGroupModFailedCode_OFPGMFC_BAD_WATCH            OfpGroupModFailedCode = 13
+	OfpGroupModFailedCode_OFPGMFC_EPERM                OfpGroupModFailedCode = 14
+)
+
+var OfpGroupModFailedCode_name = map[int32]string{
+	0:  "OFPGMFC_GROUP_EXISTS",
+	1:  "OFPGMFC_INVALID_GROUP",
+	2:  "OFPGMFC_WEIGHT_UNSUPPORTED",
+	3:  "OFPGMFC_OUT_OF_GROUPS",
+	4:  "OFPGMFC_OUT_OF_BUCKETS",
+	5:  "OFPGMFC_CHAINING_UNSUPPORTED",
+	6:  "OFPGMFC_WATCH_UNSUPPORTED",
+	7:  "OFPGMFC_LOOP",
+	8:  "OFPGMFC_UNKNOWN_GROUP",
+	9:  "OFPGMFC_CHAINED_GROUP",
+	10: "OFPGMFC_BAD_TYPE",
+	11: "OFPGMFC_BAD_COMMAND",
+	12: "OFPGMFC_BAD_BUCKET",
+	13: "OFPGMFC_BAD_WATCH",
+	14: "OFPGMFC_EPERM",
+}
+
+var OfpGroupModFailedCode_value = map[string]int32{
+	"OFPGMFC_GROUP_EXISTS":         0,
+	"OFPGMFC_INVALID_GROUP":        1,
+	"OFPGMFC_WEIGHT_UNSUPPORTED":   2,
+	"OFPGMFC_OUT_OF_GROUPS":        3,
+	"OFPGMFC_OUT_OF_BUCKETS":       4,
+	"OFPGMFC_CHAINING_UNSUPPORTED": 5,
+	"OFPGMFC_WATCH_UNSUPPORTED":    6,
+	"OFPGMFC_LOOP":                 7,
+	"OFPGMFC_UNKNOWN_GROUP":        8,
+	"OFPGMFC_CHAINED_GROUP":        9,
+	"OFPGMFC_BAD_TYPE":             10,
+	"OFPGMFC_BAD_COMMAND":          11,
+	"OFPGMFC_BAD_BUCKET":           12,
+	"OFPGMFC_BAD_WATCH":            13,
+	"OFPGMFC_EPERM":                14,
+}
+
+func (x OfpGroupModFailedCode) String() string {
+	return proto.EnumName(OfpGroupModFailedCode_name, int32(x))
+}
+
+func (OfpGroupModFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{37}
+}
+
+// ofp_error_msg 'code' values for OFPET_PORT_MOD_FAILED.  'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpPortModFailedCode int32
+
+const (
+	OfpPortModFailedCode_OFPPMFC_BAD_PORT      OfpPortModFailedCode = 0
+	OfpPortModFailedCode_OFPPMFC_BAD_HW_ADDR   OfpPortModFailedCode = 1
+	OfpPortModFailedCode_OFPPMFC_BAD_CONFIG    OfpPortModFailedCode = 2
+	OfpPortModFailedCode_OFPPMFC_BAD_ADVERTISE OfpPortModFailedCode = 3
+	OfpPortModFailedCode_OFPPMFC_EPERM         OfpPortModFailedCode = 4
+)
+
+var OfpPortModFailedCode_name = map[int32]string{
+	0: "OFPPMFC_BAD_PORT",
+	1: "OFPPMFC_BAD_HW_ADDR",
+	2: "OFPPMFC_BAD_CONFIG",
+	3: "OFPPMFC_BAD_ADVERTISE",
+	4: "OFPPMFC_EPERM",
+}
+
+var OfpPortModFailedCode_value = map[string]int32{
+	"OFPPMFC_BAD_PORT":      0,
+	"OFPPMFC_BAD_HW_ADDR":   1,
+	"OFPPMFC_BAD_CONFIG":    2,
+	"OFPPMFC_BAD_ADVERTISE": 3,
+	"OFPPMFC_EPERM":         4,
+}
+
+func (x OfpPortModFailedCode) String() string {
+	return proto.EnumName(OfpPortModFailedCode_name, int32(x))
+}
+
+func (OfpPortModFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{38}
+}
+
+// ofp_error_msg 'code' values for OFPET_TABLE_MOD_FAILED.  'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpTableModFailedCode int32
+
+const (
+	OfpTableModFailedCode_OFPTMFC_BAD_TABLE  OfpTableModFailedCode = 0
+	OfpTableModFailedCode_OFPTMFC_BAD_CONFIG OfpTableModFailedCode = 1
+	OfpTableModFailedCode_OFPTMFC_EPERM      OfpTableModFailedCode = 2
+)
+
+var OfpTableModFailedCode_name = map[int32]string{
+	0: "OFPTMFC_BAD_TABLE",
+	1: "OFPTMFC_BAD_CONFIG",
+	2: "OFPTMFC_EPERM",
+}
+
+var OfpTableModFailedCode_value = map[string]int32{
+	"OFPTMFC_BAD_TABLE":  0,
+	"OFPTMFC_BAD_CONFIG": 1,
+	"OFPTMFC_EPERM":      2,
+}
+
+func (x OfpTableModFailedCode) String() string {
+	return proto.EnumName(OfpTableModFailedCode_name, int32(x))
+}
+
+func (OfpTableModFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{39}
+}
+
+// ofp_error msg 'code' values for OFPET_QUEUE_OP_FAILED. 'data' contains
+// at least the first 64 bytes of the failed request
+type OfpQueueOpFailedCode int32
+
+const (
+	OfpQueueOpFailedCode_OFPQOFC_BAD_PORT  OfpQueueOpFailedCode = 0
+	OfpQueueOpFailedCode_OFPQOFC_BAD_QUEUE OfpQueueOpFailedCode = 1
+	OfpQueueOpFailedCode_OFPQOFC_EPERM     OfpQueueOpFailedCode = 2
+)
+
+var OfpQueueOpFailedCode_name = map[int32]string{
+	0: "OFPQOFC_BAD_PORT",
+	1: "OFPQOFC_BAD_QUEUE",
+	2: "OFPQOFC_EPERM",
+}
+
+var OfpQueueOpFailedCode_value = map[string]int32{
+	"OFPQOFC_BAD_PORT":  0,
+	"OFPQOFC_BAD_QUEUE": 1,
+	"OFPQOFC_EPERM":     2,
+}
+
+func (x OfpQueueOpFailedCode) String() string {
+	return proto.EnumName(OfpQueueOpFailedCode_name, int32(x))
+}
+
+func (OfpQueueOpFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{40}
+}
+
+// ofp_error_msg 'code' values for OFPET_SWITCH_CONFIG_FAILED. 'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpSwitchConfigFailedCode int32
+
+const (
+	OfpSwitchConfigFailedCode_OFPSCFC_BAD_FLAGS OfpSwitchConfigFailedCode = 0
+	OfpSwitchConfigFailedCode_OFPSCFC_BAD_LEN   OfpSwitchConfigFailedCode = 1
+	OfpSwitchConfigFailedCode_OFPSCFC_EPERM     OfpSwitchConfigFailedCode = 2
+)
+
+var OfpSwitchConfigFailedCode_name = map[int32]string{
+	0: "OFPSCFC_BAD_FLAGS",
+	1: "OFPSCFC_BAD_LEN",
+	2: "OFPSCFC_EPERM",
+}
+
+var OfpSwitchConfigFailedCode_value = map[string]int32{
+	"OFPSCFC_BAD_FLAGS": 0,
+	"OFPSCFC_BAD_LEN":   1,
+	"OFPSCFC_EPERM":     2,
+}
+
+func (x OfpSwitchConfigFailedCode) String() string {
+	return proto.EnumName(OfpSwitchConfigFailedCode_name, int32(x))
+}
+
+func (OfpSwitchConfigFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{41}
+}
+
+// ofp_error_msg 'code' values for OFPET_ROLE_REQUEST_FAILED. 'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpRoleRequestFailedCode int32
+
+const (
+	OfpRoleRequestFailedCode_OFPRRFC_STALE    OfpRoleRequestFailedCode = 0
+	OfpRoleRequestFailedCode_OFPRRFC_UNSUP    OfpRoleRequestFailedCode = 1
+	OfpRoleRequestFailedCode_OFPRRFC_BAD_ROLE OfpRoleRequestFailedCode = 2
+)
+
+var OfpRoleRequestFailedCode_name = map[int32]string{
+	0: "OFPRRFC_STALE",
+	1: "OFPRRFC_UNSUP",
+	2: "OFPRRFC_BAD_ROLE",
+}
+
+var OfpRoleRequestFailedCode_value = map[string]int32{
+	"OFPRRFC_STALE":    0,
+	"OFPRRFC_UNSUP":    1,
+	"OFPRRFC_BAD_ROLE": 2,
+}
+
+func (x OfpRoleRequestFailedCode) String() string {
+	return proto.EnumName(OfpRoleRequestFailedCode_name, int32(x))
+}
+
+func (OfpRoleRequestFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{42}
+}
+
+// ofp_error_msg 'code' values for OFPET_METER_MOD_FAILED.  'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpMeterModFailedCode int32
+
+const (
+	OfpMeterModFailedCode_OFPMMFC_UNKNOWN        OfpMeterModFailedCode = 0
+	OfpMeterModFailedCode_OFPMMFC_METER_EXISTS   OfpMeterModFailedCode = 1
+	OfpMeterModFailedCode_OFPMMFC_INVALID_METER  OfpMeterModFailedCode = 2
+	OfpMeterModFailedCode_OFPMMFC_UNKNOWN_METER  OfpMeterModFailedCode = 3
+	OfpMeterModFailedCode_OFPMMFC_BAD_COMMAND    OfpMeterModFailedCode = 4
+	OfpMeterModFailedCode_OFPMMFC_BAD_FLAGS      OfpMeterModFailedCode = 5
+	OfpMeterModFailedCode_OFPMMFC_BAD_RATE       OfpMeterModFailedCode = 6
+	OfpMeterModFailedCode_OFPMMFC_BAD_BURST      OfpMeterModFailedCode = 7
+	OfpMeterModFailedCode_OFPMMFC_BAD_BAND       OfpMeterModFailedCode = 8
+	OfpMeterModFailedCode_OFPMMFC_BAD_BAND_VALUE OfpMeterModFailedCode = 9
+	OfpMeterModFailedCode_OFPMMFC_OUT_OF_METERS  OfpMeterModFailedCode = 10
+	OfpMeterModFailedCode_OFPMMFC_OUT_OF_BANDS   OfpMeterModFailedCode = 11
+)
+
+var OfpMeterModFailedCode_name = map[int32]string{
+	0:  "OFPMMFC_UNKNOWN",
+	1:  "OFPMMFC_METER_EXISTS",
+	2:  "OFPMMFC_INVALID_METER",
+	3:  "OFPMMFC_UNKNOWN_METER",
+	4:  "OFPMMFC_BAD_COMMAND",
+	5:  "OFPMMFC_BAD_FLAGS",
+	6:  "OFPMMFC_BAD_RATE",
+	7:  "OFPMMFC_BAD_BURST",
+	8:  "OFPMMFC_BAD_BAND",
+	9:  "OFPMMFC_BAD_BAND_VALUE",
+	10: "OFPMMFC_OUT_OF_METERS",
+	11: "OFPMMFC_OUT_OF_BANDS",
+}
+
+var OfpMeterModFailedCode_value = map[string]int32{
+	"OFPMMFC_UNKNOWN":        0,
+	"OFPMMFC_METER_EXISTS":   1,
+	"OFPMMFC_INVALID_METER":  2,
+	"OFPMMFC_UNKNOWN_METER":  3,
+	"OFPMMFC_BAD_COMMAND":    4,
+	"OFPMMFC_BAD_FLAGS":      5,
+	"OFPMMFC_BAD_RATE":       6,
+	"OFPMMFC_BAD_BURST":      7,
+	"OFPMMFC_BAD_BAND":       8,
+	"OFPMMFC_BAD_BAND_VALUE": 9,
+	"OFPMMFC_OUT_OF_METERS":  10,
+	"OFPMMFC_OUT_OF_BANDS":   11,
+}
+
+func (x OfpMeterModFailedCode) String() string {
+	return proto.EnumName(OfpMeterModFailedCode_name, int32(x))
+}
+
+func (OfpMeterModFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{43}
+}
+
+// ofp_error_msg 'code' values for OFPET_TABLE_FEATURES_FAILED. 'data' contains
+// at least the first 64 bytes of the failed request.
+type OfpTableFeaturesFailedCode int32
+
+const (
+	OfpTableFeaturesFailedCode_OFPTFFC_BAD_TABLE    OfpTableFeaturesFailedCode = 0
+	OfpTableFeaturesFailedCode_OFPTFFC_BAD_METADATA OfpTableFeaturesFailedCode = 1
+	OfpTableFeaturesFailedCode_OFPTFFC_BAD_TYPE     OfpTableFeaturesFailedCode = 2
+	OfpTableFeaturesFailedCode_OFPTFFC_BAD_LEN      OfpTableFeaturesFailedCode = 3
+	OfpTableFeaturesFailedCode_OFPTFFC_BAD_ARGUMENT OfpTableFeaturesFailedCode = 4
+	OfpTableFeaturesFailedCode_OFPTFFC_EPERM        OfpTableFeaturesFailedCode = 5
+)
+
+var OfpTableFeaturesFailedCode_name = map[int32]string{
+	0: "OFPTFFC_BAD_TABLE",
+	1: "OFPTFFC_BAD_METADATA",
+	2: "OFPTFFC_BAD_TYPE",
+	3: "OFPTFFC_BAD_LEN",
+	4: "OFPTFFC_BAD_ARGUMENT",
+	5: "OFPTFFC_EPERM",
+}
+
+var OfpTableFeaturesFailedCode_value = map[string]int32{
+	"OFPTFFC_BAD_TABLE":    0,
+	"OFPTFFC_BAD_METADATA": 1,
+	"OFPTFFC_BAD_TYPE":     2,
+	"OFPTFFC_BAD_LEN":      3,
+	"OFPTFFC_BAD_ARGUMENT": 4,
+	"OFPTFFC_EPERM":        5,
+}
+
+func (x OfpTableFeaturesFailedCode) String() string {
+	return proto.EnumName(OfpTableFeaturesFailedCode_name, int32(x))
+}
+
+func (OfpTableFeaturesFailedCode) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{44}
+}
+
+type OfpMultipartType int32
+
+const (
+	// Description of this OpenFlow switch.
+	// The request body is empty.
+	// The reply body is struct ofp_desc.
+	OfpMultipartType_OFPMP_DESC OfpMultipartType = 0
+	// Individual flow statistics.
+	// The request body is struct ofp_flow_stats_request.
+	// The reply body is an array of struct ofp_flow_stats.
+	OfpMultipartType_OFPMP_FLOW OfpMultipartType = 1
+	// Aggregate flow statistics.
+	// The request body is struct ofp_aggregate_stats_request.
+	// The reply body is struct ofp_aggregate_stats_reply.
+	OfpMultipartType_OFPMP_AGGREGATE OfpMultipartType = 2
+	// Flow table statistics.
+	// The request body is empty.
+	// The reply body is an array of struct ofp_table_stats.
+	OfpMultipartType_OFPMP_TABLE OfpMultipartType = 3
+	// Port statistics.
+	// The request body is struct ofp_port_stats_request.
+	// The reply body is an array of struct ofp_port_stats.
+	OfpMultipartType_OFPMP_PORT_STATS OfpMultipartType = 4
+	// Queue statistics for a port
+	// The request body is struct ofp_queue_stats_request.
+	// The reply body is an array of struct ofp_queue_stats
+	OfpMultipartType_OFPMP_QUEUE OfpMultipartType = 5
+	// Group counter statistics.
+	// The request body is struct ofp_group_stats_request.
+	// The reply is an array of struct ofp_group_stats.
+	OfpMultipartType_OFPMP_GROUP OfpMultipartType = 6
+	// Group description.
+	// The request body is empty.
+	// The reply body is an array of struct ofp_group_desc.
+	OfpMultipartType_OFPMP_GROUP_DESC OfpMultipartType = 7
+	// Group features.
+	// The request body is empty.
+	// The reply body is struct ofp_group_features.
+	OfpMultipartType_OFPMP_GROUP_FEATURES OfpMultipartType = 8
+	// Meter statistics.
+	// The request body is struct ofp_meter_multipart_requests.
+	// The reply body is an array of struct ofp_meter_stats.
+	OfpMultipartType_OFPMP_METER OfpMultipartType = 9
+	// Meter configuration.
+	// The request body is struct ofp_meter_multipart_requests.
+	// The reply body is an array of struct ofp_meter_config.
+	OfpMultipartType_OFPMP_METER_CONFIG OfpMultipartType = 10
+	// Meter features.
+	// The request body is empty.
+	// The reply body is struct ofp_meter_features.
+	OfpMultipartType_OFPMP_METER_FEATURES OfpMultipartType = 11
+	// Table features.
+	// The request body is either empty or contains an array of
+	// struct ofp_table_features containing the controller's
+	// desired view of the switch. If the switch is unable to
+	// set the specified view an error is returned.
+	// The reply body is an array of struct ofp_table_features.
+	OfpMultipartType_OFPMP_TABLE_FEATURES OfpMultipartType = 12
+	// Port description.
+	// The request body is empty.
+	// The reply body is an array of struct ofp_port.
+	OfpMultipartType_OFPMP_PORT_DESC OfpMultipartType = 13
+	// Experimenter extension.
+	// The request and reply bodies begin with
+	// struct ofp_experimenter_multipart_header.
+	// The request and reply bodies are otherwise experimenter-defined.
+	OfpMultipartType_OFPMP_EXPERIMENTER OfpMultipartType = 65535
+)
+
+var OfpMultipartType_name = map[int32]string{
+	0:     "OFPMP_DESC",
+	1:     "OFPMP_FLOW",
+	2:     "OFPMP_AGGREGATE",
+	3:     "OFPMP_TABLE",
+	4:     "OFPMP_PORT_STATS",
+	5:     "OFPMP_QUEUE",
+	6:     "OFPMP_GROUP",
+	7:     "OFPMP_GROUP_DESC",
+	8:     "OFPMP_GROUP_FEATURES",
+	9:     "OFPMP_METER",
+	10:    "OFPMP_METER_CONFIG",
+	11:    "OFPMP_METER_FEATURES",
+	12:    "OFPMP_TABLE_FEATURES",
+	13:    "OFPMP_PORT_DESC",
+	65535: "OFPMP_EXPERIMENTER",
+}
+
+var OfpMultipartType_value = map[string]int32{
+	"OFPMP_DESC":           0,
+	"OFPMP_FLOW":           1,
+	"OFPMP_AGGREGATE":      2,
+	"OFPMP_TABLE":          3,
+	"OFPMP_PORT_STATS":     4,
+	"OFPMP_QUEUE":          5,
+	"OFPMP_GROUP":          6,
+	"OFPMP_GROUP_DESC":     7,
+	"OFPMP_GROUP_FEATURES": 8,
+	"OFPMP_METER":          9,
+	"OFPMP_METER_CONFIG":   10,
+	"OFPMP_METER_FEATURES": 11,
+	"OFPMP_TABLE_FEATURES": 12,
+	"OFPMP_PORT_DESC":      13,
+	"OFPMP_EXPERIMENTER":   65535,
+}
+
+func (x OfpMultipartType) String() string {
+	return proto.EnumName(OfpMultipartType_name, int32(x))
+}
+
+func (OfpMultipartType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{45}
+}
+
+type OfpMultipartRequestFlags int32
+
+const (
+	OfpMultipartRequestFlags_OFPMPF_REQ_INVALID OfpMultipartRequestFlags = 0
+	OfpMultipartRequestFlags_OFPMPF_REQ_MORE    OfpMultipartRequestFlags = 1
+)
+
+var OfpMultipartRequestFlags_name = map[int32]string{
+	0: "OFPMPF_REQ_INVALID",
+	1: "OFPMPF_REQ_MORE",
+}
+
+var OfpMultipartRequestFlags_value = map[string]int32{
+	"OFPMPF_REQ_INVALID": 0,
+	"OFPMPF_REQ_MORE":    1,
+}
+
+func (x OfpMultipartRequestFlags) String() string {
+	return proto.EnumName(OfpMultipartRequestFlags_name, int32(x))
+}
+
+func (OfpMultipartRequestFlags) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{46}
+}
+
+type OfpMultipartReplyFlags int32
+
+const (
+	OfpMultipartReplyFlags_OFPMPF_REPLY_INVALID OfpMultipartReplyFlags = 0
+	OfpMultipartReplyFlags_OFPMPF_REPLY_MORE    OfpMultipartReplyFlags = 1
+)
+
+var OfpMultipartReplyFlags_name = map[int32]string{
+	0: "OFPMPF_REPLY_INVALID",
+	1: "OFPMPF_REPLY_MORE",
+}
+
+var OfpMultipartReplyFlags_value = map[string]int32{
+	"OFPMPF_REPLY_INVALID": 0,
+	"OFPMPF_REPLY_MORE":    1,
+}
+
+func (x OfpMultipartReplyFlags) String() string {
+	return proto.EnumName(OfpMultipartReplyFlags_name, int32(x))
+}
+
+func (OfpMultipartReplyFlags) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{47}
+}
+
+// Table Feature property types.
+// Low order bit cleared indicates a property for a regular Flow Entry.
+// Low order bit set indicates a property for the Table-Miss Flow Entry.
+type OfpTableFeaturePropType int32
+
+const (
+	OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS        OfpTableFeaturePropType = 0
+	OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS_MISS   OfpTableFeaturePropType = 1
+	OfpTableFeaturePropType_OFPTFPT_NEXT_TABLES         OfpTableFeaturePropType = 2
+	OfpTableFeaturePropType_OFPTFPT_NEXT_TABLES_MISS    OfpTableFeaturePropType = 3
+	OfpTableFeaturePropType_OFPTFPT_WRITE_ACTIONS       OfpTableFeaturePropType = 4
+	OfpTableFeaturePropType_OFPTFPT_WRITE_ACTIONS_MISS  OfpTableFeaturePropType = 5
+	OfpTableFeaturePropType_OFPTFPT_APPLY_ACTIONS       OfpTableFeaturePropType = 6
+	OfpTableFeaturePropType_OFPTFPT_APPLY_ACTIONS_MISS  OfpTableFeaturePropType = 7
+	OfpTableFeaturePropType_OFPTFPT_MATCH               OfpTableFeaturePropType = 8
+	OfpTableFeaturePropType_OFPTFPT_WILDCARDS           OfpTableFeaturePropType = 10
+	OfpTableFeaturePropType_OFPTFPT_WRITE_SETFIELD      OfpTableFeaturePropType = 12
+	OfpTableFeaturePropType_OFPTFPT_WRITE_SETFIELD_MISS OfpTableFeaturePropType = 13
+	OfpTableFeaturePropType_OFPTFPT_APPLY_SETFIELD      OfpTableFeaturePropType = 14
+	OfpTableFeaturePropType_OFPTFPT_APPLY_SETFIELD_MISS OfpTableFeaturePropType = 15
+	OfpTableFeaturePropType_OFPTFPT_EXPERIMENTER        OfpTableFeaturePropType = 65534
+	OfpTableFeaturePropType_OFPTFPT_EXPERIMENTER_MISS   OfpTableFeaturePropType = 65535
+)
+
+var OfpTableFeaturePropType_name = map[int32]string{
+	0:     "OFPTFPT_INSTRUCTIONS",
+	1:     "OFPTFPT_INSTRUCTIONS_MISS",
+	2:     "OFPTFPT_NEXT_TABLES",
+	3:     "OFPTFPT_NEXT_TABLES_MISS",
+	4:     "OFPTFPT_WRITE_ACTIONS",
+	5:     "OFPTFPT_WRITE_ACTIONS_MISS",
+	6:     "OFPTFPT_APPLY_ACTIONS",
+	7:     "OFPTFPT_APPLY_ACTIONS_MISS",
+	8:     "OFPTFPT_MATCH",
+	10:    "OFPTFPT_WILDCARDS",
+	12:    "OFPTFPT_WRITE_SETFIELD",
+	13:    "OFPTFPT_WRITE_SETFIELD_MISS",
+	14:    "OFPTFPT_APPLY_SETFIELD",
+	15:    "OFPTFPT_APPLY_SETFIELD_MISS",
+	65534: "OFPTFPT_EXPERIMENTER",
+	65535: "OFPTFPT_EXPERIMENTER_MISS",
+}
+
+var OfpTableFeaturePropType_value = map[string]int32{
+	"OFPTFPT_INSTRUCTIONS":        0,
+	"OFPTFPT_INSTRUCTIONS_MISS":   1,
+	"OFPTFPT_NEXT_TABLES":         2,
+	"OFPTFPT_NEXT_TABLES_MISS":    3,
+	"OFPTFPT_WRITE_ACTIONS":       4,
+	"OFPTFPT_WRITE_ACTIONS_MISS":  5,
+	"OFPTFPT_APPLY_ACTIONS":       6,
+	"OFPTFPT_APPLY_ACTIONS_MISS":  7,
+	"OFPTFPT_MATCH":               8,
+	"OFPTFPT_WILDCARDS":           10,
+	"OFPTFPT_WRITE_SETFIELD":      12,
+	"OFPTFPT_WRITE_SETFIELD_MISS": 13,
+	"OFPTFPT_APPLY_SETFIELD":      14,
+	"OFPTFPT_APPLY_SETFIELD_MISS": 15,
+	"OFPTFPT_EXPERIMENTER":        65534,
+	"OFPTFPT_EXPERIMENTER_MISS":   65535,
+}
+
+func (x OfpTableFeaturePropType) String() string {
+	return proto.EnumName(OfpTableFeaturePropType_name, int32(x))
+}
+
+func (OfpTableFeaturePropType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{48}
+}
+
+// Group configuration flags
+type OfpGroupCapabilities int32
+
+const (
+	OfpGroupCapabilities_OFPGFC_INVALID         OfpGroupCapabilities = 0
+	OfpGroupCapabilities_OFPGFC_SELECT_WEIGHT   OfpGroupCapabilities = 1
+	OfpGroupCapabilities_OFPGFC_SELECT_LIVENESS OfpGroupCapabilities = 2
+	OfpGroupCapabilities_OFPGFC_CHAINING        OfpGroupCapabilities = 4
+	OfpGroupCapabilities_OFPGFC_CHAINING_CHECKS OfpGroupCapabilities = 8
+)
+
+var OfpGroupCapabilities_name = map[int32]string{
+	0: "OFPGFC_INVALID",
+	1: "OFPGFC_SELECT_WEIGHT",
+	2: "OFPGFC_SELECT_LIVENESS",
+	4: "OFPGFC_CHAINING",
+	8: "OFPGFC_CHAINING_CHECKS",
+}
+
+var OfpGroupCapabilities_value = map[string]int32{
+	"OFPGFC_INVALID":         0,
+	"OFPGFC_SELECT_WEIGHT":   1,
+	"OFPGFC_SELECT_LIVENESS": 2,
+	"OFPGFC_CHAINING":        4,
+	"OFPGFC_CHAINING_CHECKS": 8,
+}
+
+func (x OfpGroupCapabilities) String() string {
+	return proto.EnumName(OfpGroupCapabilities_name, int32(x))
+}
+
+func (OfpGroupCapabilities) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{49}
+}
+
+type OfpQueueProperties int32
+
+const (
+	OfpQueueProperties_OFPQT_INVALID      OfpQueueProperties = 0
+	OfpQueueProperties_OFPQT_MIN_RATE     OfpQueueProperties = 1
+	OfpQueueProperties_OFPQT_MAX_RATE     OfpQueueProperties = 2
+	OfpQueueProperties_OFPQT_EXPERIMENTER OfpQueueProperties = 65535
+)
+
+var OfpQueueProperties_name = map[int32]string{
+	0:     "OFPQT_INVALID",
+	1:     "OFPQT_MIN_RATE",
+	2:     "OFPQT_MAX_RATE",
+	65535: "OFPQT_EXPERIMENTER",
+}
+
+var OfpQueueProperties_value = map[string]int32{
+	"OFPQT_INVALID":      0,
+	"OFPQT_MIN_RATE":     1,
+	"OFPQT_MAX_RATE":     2,
+	"OFPQT_EXPERIMENTER": 65535,
+}
+
+func (x OfpQueueProperties) String() string {
+	return proto.EnumName(OfpQueueProperties_name, int32(x))
+}
+
+func (OfpQueueProperties) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{50}
+}
+
+// Controller roles.
+type OfpControllerRole int32
+
+const (
+	OfpControllerRole_OFPCR_ROLE_NOCHANGE OfpControllerRole = 0
+	OfpControllerRole_OFPCR_ROLE_EQUAL    OfpControllerRole = 1
+	OfpControllerRole_OFPCR_ROLE_MASTER   OfpControllerRole = 2
+	OfpControllerRole_OFPCR_ROLE_SLAVE    OfpControllerRole = 3
+)
+
+var OfpControllerRole_name = map[int32]string{
+	0: "OFPCR_ROLE_NOCHANGE",
+	1: "OFPCR_ROLE_EQUAL",
+	2: "OFPCR_ROLE_MASTER",
+	3: "OFPCR_ROLE_SLAVE",
+}
+
+var OfpControllerRole_value = map[string]int32{
+	"OFPCR_ROLE_NOCHANGE": 0,
+	"OFPCR_ROLE_EQUAL":    1,
+	"OFPCR_ROLE_MASTER":   2,
+	"OFPCR_ROLE_SLAVE":    3,
+}
+
+func (x OfpControllerRole) String() string {
+	return proto.EnumName(OfpControllerRole_name, int32(x))
+}
+
+func (OfpControllerRole) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{51}
+}
+
+// Header on all OpenFlow packets.
+type OfpHeader struct {
+	Version              uint32   `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
+	Type                 OfpType  `protobuf:"varint,2,opt,name=type,proto3,enum=openflow_13.OfpType" json:"type,omitempty"`
+	Xid                  uint32   `protobuf:"varint,3,opt,name=xid,proto3" json:"xid,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpHeader) Reset()         { *m = OfpHeader{} }
+func (m *OfpHeader) String() string { return proto.CompactTextString(m) }
+func (*OfpHeader) ProtoMessage()    {}
+func (*OfpHeader) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{0}
+}
+
+func (m *OfpHeader) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpHeader.Unmarshal(m, b)
+}
+func (m *OfpHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpHeader.Marshal(b, m, deterministic)
+}
+func (m *OfpHeader) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpHeader.Merge(m, src)
+}
+func (m *OfpHeader) XXX_Size() int {
+	return xxx_messageInfo_OfpHeader.Size(m)
+}
+func (m *OfpHeader) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpHeader proto.InternalMessageInfo
+
+func (m *OfpHeader) GetVersion() uint32 {
+	if m != nil {
+		return m.Version
+	}
+	return 0
+}
+
+func (m *OfpHeader) GetType() OfpType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpType_OFPT_HELLO
+}
+
+func (m *OfpHeader) GetXid() uint32 {
+	if m != nil {
+		return m.Xid
+	}
+	return 0
+}
+
+// Common header for all Hello Elements
+type OfpHelloElemHeader struct {
+	Type OfpHelloElemType `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpHelloElemType" json:"type,omitempty"`
+	// Types that are valid to be assigned to Element:
+	//	*OfpHelloElemHeader_Versionbitmap
+	Element              isOfpHelloElemHeader_Element `protobuf_oneof:"element"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *OfpHelloElemHeader) Reset()         { *m = OfpHelloElemHeader{} }
+func (m *OfpHelloElemHeader) String() string { return proto.CompactTextString(m) }
+func (*OfpHelloElemHeader) ProtoMessage()    {}
+func (*OfpHelloElemHeader) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{1}
+}
+
+func (m *OfpHelloElemHeader) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpHelloElemHeader.Unmarshal(m, b)
+}
+func (m *OfpHelloElemHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpHelloElemHeader.Marshal(b, m, deterministic)
+}
+func (m *OfpHelloElemHeader) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpHelloElemHeader.Merge(m, src)
+}
+func (m *OfpHelloElemHeader) XXX_Size() int {
+	return xxx_messageInfo_OfpHelloElemHeader.Size(m)
+}
+func (m *OfpHelloElemHeader) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpHelloElemHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpHelloElemHeader proto.InternalMessageInfo
+
+func (m *OfpHelloElemHeader) GetType() OfpHelloElemType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpHelloElemType_OFPHET_INVALID
+}
+
+type isOfpHelloElemHeader_Element interface {
+	isOfpHelloElemHeader_Element()
+}
+
+type OfpHelloElemHeader_Versionbitmap struct {
+	Versionbitmap *OfpHelloElemVersionbitmap `protobuf:"bytes,2,opt,name=versionbitmap,proto3,oneof"`
+}
+
+func (*OfpHelloElemHeader_Versionbitmap) isOfpHelloElemHeader_Element() {}
+
+func (m *OfpHelloElemHeader) GetElement() isOfpHelloElemHeader_Element {
+	if m != nil {
+		return m.Element
+	}
+	return nil
+}
+
+func (m *OfpHelloElemHeader) GetVersionbitmap() *OfpHelloElemVersionbitmap {
+	if x, ok := m.GetElement().(*OfpHelloElemHeader_Versionbitmap); ok {
+		return x.Versionbitmap
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*OfpHelloElemHeader) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*OfpHelloElemHeader_Versionbitmap)(nil),
+	}
+}
+
+// Version bitmap Hello Element
+type OfpHelloElemVersionbitmap struct {
+	Bitmaps              []uint32 `protobuf:"varint,2,rep,packed,name=bitmaps,proto3" json:"bitmaps,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpHelloElemVersionbitmap) Reset()         { *m = OfpHelloElemVersionbitmap{} }
+func (m *OfpHelloElemVersionbitmap) String() string { return proto.CompactTextString(m) }
+func (*OfpHelloElemVersionbitmap) ProtoMessage()    {}
+func (*OfpHelloElemVersionbitmap) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{2}
+}
+
+func (m *OfpHelloElemVersionbitmap) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpHelloElemVersionbitmap.Unmarshal(m, b)
+}
+func (m *OfpHelloElemVersionbitmap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpHelloElemVersionbitmap.Marshal(b, m, deterministic)
+}
+func (m *OfpHelloElemVersionbitmap) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpHelloElemVersionbitmap.Merge(m, src)
+}
+func (m *OfpHelloElemVersionbitmap) XXX_Size() int {
+	return xxx_messageInfo_OfpHelloElemVersionbitmap.Size(m)
+}
+func (m *OfpHelloElemVersionbitmap) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpHelloElemVersionbitmap.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpHelloElemVersionbitmap proto.InternalMessageInfo
+
+func (m *OfpHelloElemVersionbitmap) GetBitmaps() []uint32 {
+	if m != nil {
+		return m.Bitmaps
+	}
+	return nil
+}
+
+// OFPT_HELLO.  This message includes zero or more hello elements having
+// variable size. Unknown elements types must be ignored/skipped, to allow
+// for future extensions.
+type OfpHello struct {
+	// Hello element list
+	Elements             []*OfpHelloElemHeader `protobuf:"bytes,1,rep,name=elements,proto3" json:"elements,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *OfpHello) Reset()         { *m = OfpHello{} }
+func (m *OfpHello) String() string { return proto.CompactTextString(m) }
+func (*OfpHello) ProtoMessage()    {}
+func (*OfpHello) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{3}
+}
+
+func (m *OfpHello) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpHello.Unmarshal(m, b)
+}
+func (m *OfpHello) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpHello.Marshal(b, m, deterministic)
+}
+func (m *OfpHello) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpHello.Merge(m, src)
+}
+func (m *OfpHello) XXX_Size() int {
+	return xxx_messageInfo_OfpHello.Size(m)
+}
+func (m *OfpHello) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpHello.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpHello proto.InternalMessageInfo
+
+func (m *OfpHello) GetElements() []*OfpHelloElemHeader {
+	if m != nil {
+		return m.Elements
+	}
+	return nil
+}
+
+// Switch configuration.
+type OfpSwitchConfig struct {
+	//ofp_header header;
+	Flags                uint32   `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"`
+	MissSendLen          uint32   `protobuf:"varint,2,opt,name=miss_send_len,json=missSendLen,proto3" json:"miss_send_len,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpSwitchConfig) Reset()         { *m = OfpSwitchConfig{} }
+func (m *OfpSwitchConfig) String() string { return proto.CompactTextString(m) }
+func (*OfpSwitchConfig) ProtoMessage()    {}
+func (*OfpSwitchConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{4}
+}
+
+func (m *OfpSwitchConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpSwitchConfig.Unmarshal(m, b)
+}
+func (m *OfpSwitchConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpSwitchConfig.Marshal(b, m, deterministic)
+}
+func (m *OfpSwitchConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpSwitchConfig.Merge(m, src)
+}
+func (m *OfpSwitchConfig) XXX_Size() int {
+	return xxx_messageInfo_OfpSwitchConfig.Size(m)
+}
+func (m *OfpSwitchConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpSwitchConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpSwitchConfig proto.InternalMessageInfo
+
+func (m *OfpSwitchConfig) GetFlags() uint32 {
+	if m != nil {
+		return m.Flags
+	}
+	return 0
+}
+
+func (m *OfpSwitchConfig) GetMissSendLen() uint32 {
+	if m != nil {
+		return m.MissSendLen
+	}
+	return 0
+}
+
+// Configure/Modify behavior of a flow table
+type OfpTableMod struct {
+	//ofp_header header;
+	TableId              uint32   `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	Config               uint32   `protobuf:"varint,2,opt,name=config,proto3" json:"config,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpTableMod) Reset()         { *m = OfpTableMod{} }
+func (m *OfpTableMod) String() string { return proto.CompactTextString(m) }
+func (*OfpTableMod) ProtoMessage()    {}
+func (*OfpTableMod) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{5}
+}
+
+func (m *OfpTableMod) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableMod.Unmarshal(m, b)
+}
+func (m *OfpTableMod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableMod.Marshal(b, m, deterministic)
+}
+func (m *OfpTableMod) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableMod.Merge(m, src)
+}
+func (m *OfpTableMod) XXX_Size() int {
+	return xxx_messageInfo_OfpTableMod.Size(m)
+}
+func (m *OfpTableMod) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableMod.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableMod proto.InternalMessageInfo
+
+func (m *OfpTableMod) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpTableMod) GetConfig() uint32 {
+	if m != nil {
+		return m.Config
+	}
+	return 0
+}
+
+// Description of a port
+type OfpPort struct {
+	PortNo uint32   `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	HwAddr []uint32 `protobuf:"varint,2,rep,packed,name=hw_addr,json=hwAddr,proto3" json:"hw_addr,omitempty"`
+	Name   string   `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+	Config uint32   `protobuf:"varint,4,opt,name=config,proto3" json:"config,omitempty"`
+	State  uint32   `protobuf:"varint,5,opt,name=state,proto3" json:"state,omitempty"`
+	// Bitmaps of OFPPF_* that describe features.  All bits zeroed if
+	// unsupported or unavailable.
+	Curr                 uint32   `protobuf:"varint,6,opt,name=curr,proto3" json:"curr,omitempty"`
+	Advertised           uint32   `protobuf:"varint,7,opt,name=advertised,proto3" json:"advertised,omitempty"`
+	Supported            uint32   `protobuf:"varint,8,opt,name=supported,proto3" json:"supported,omitempty"`
+	Peer                 uint32   `protobuf:"varint,9,opt,name=peer,proto3" json:"peer,omitempty"`
+	CurrSpeed            uint32   `protobuf:"varint,10,opt,name=curr_speed,json=currSpeed,proto3" json:"curr_speed,omitempty"`
+	MaxSpeed             uint32   `protobuf:"varint,11,opt,name=max_speed,json=maxSpeed,proto3" json:"max_speed,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpPort) Reset()         { *m = OfpPort{} }
+func (m *OfpPort) String() string { return proto.CompactTextString(m) }
+func (*OfpPort) ProtoMessage()    {}
+func (*OfpPort) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{6}
+}
+
+func (m *OfpPort) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPort.Unmarshal(m, b)
+}
+func (m *OfpPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPort.Marshal(b, m, deterministic)
+}
+func (m *OfpPort) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPort.Merge(m, src)
+}
+func (m *OfpPort) XXX_Size() int {
+	return xxx_messageInfo_OfpPort.Size(m)
+}
+func (m *OfpPort) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPort.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPort proto.InternalMessageInfo
+
+func (m *OfpPort) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+func (m *OfpPort) GetHwAddr() []uint32 {
+	if m != nil {
+		return m.HwAddr
+	}
+	return nil
+}
+
+func (m *OfpPort) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *OfpPort) GetConfig() uint32 {
+	if m != nil {
+		return m.Config
+	}
+	return 0
+}
+
+func (m *OfpPort) GetState() uint32 {
+	if m != nil {
+		return m.State
+	}
+	return 0
+}
+
+func (m *OfpPort) GetCurr() uint32 {
+	if m != nil {
+		return m.Curr
+	}
+	return 0
+}
+
+func (m *OfpPort) GetAdvertised() uint32 {
+	if m != nil {
+		return m.Advertised
+	}
+	return 0
+}
+
+func (m *OfpPort) GetSupported() uint32 {
+	if m != nil {
+		return m.Supported
+	}
+	return 0
+}
+
+func (m *OfpPort) GetPeer() uint32 {
+	if m != nil {
+		return m.Peer
+	}
+	return 0
+}
+
+func (m *OfpPort) GetCurrSpeed() uint32 {
+	if m != nil {
+		return m.CurrSpeed
+	}
+	return 0
+}
+
+func (m *OfpPort) GetMaxSpeed() uint32 {
+	if m != nil {
+		return m.MaxSpeed
+	}
+	return 0
+}
+
+// Switch features.
+type OfpSwitchFeatures struct {
+	//ofp_header header;
+	DatapathId  uint64 `protobuf:"varint,1,opt,name=datapath_id,json=datapathId,proto3" json:"datapath_id,omitempty"`
+	NBuffers    uint32 `protobuf:"varint,2,opt,name=n_buffers,json=nBuffers,proto3" json:"n_buffers,omitempty"`
+	NTables     uint32 `protobuf:"varint,3,opt,name=n_tables,json=nTables,proto3" json:"n_tables,omitempty"`
+	AuxiliaryId uint32 `protobuf:"varint,4,opt,name=auxiliary_id,json=auxiliaryId,proto3" json:"auxiliary_id,omitempty"`
+	// Features.
+	Capabilities         uint32   `protobuf:"varint,5,opt,name=capabilities,proto3" json:"capabilities,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpSwitchFeatures) Reset()         { *m = OfpSwitchFeatures{} }
+func (m *OfpSwitchFeatures) String() string { return proto.CompactTextString(m) }
+func (*OfpSwitchFeatures) ProtoMessage()    {}
+func (*OfpSwitchFeatures) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{7}
+}
+
+func (m *OfpSwitchFeatures) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpSwitchFeatures.Unmarshal(m, b)
+}
+func (m *OfpSwitchFeatures) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpSwitchFeatures.Marshal(b, m, deterministic)
+}
+func (m *OfpSwitchFeatures) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpSwitchFeatures.Merge(m, src)
+}
+func (m *OfpSwitchFeatures) XXX_Size() int {
+	return xxx_messageInfo_OfpSwitchFeatures.Size(m)
+}
+func (m *OfpSwitchFeatures) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpSwitchFeatures.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpSwitchFeatures proto.InternalMessageInfo
+
+func (m *OfpSwitchFeatures) GetDatapathId() uint64 {
+	if m != nil {
+		return m.DatapathId
+	}
+	return 0
+}
+
+func (m *OfpSwitchFeatures) GetNBuffers() uint32 {
+	if m != nil {
+		return m.NBuffers
+	}
+	return 0
+}
+
+func (m *OfpSwitchFeatures) GetNTables() uint32 {
+	if m != nil {
+		return m.NTables
+	}
+	return 0
+}
+
+func (m *OfpSwitchFeatures) GetAuxiliaryId() uint32 {
+	if m != nil {
+		return m.AuxiliaryId
+	}
+	return 0
+}
+
+func (m *OfpSwitchFeatures) GetCapabilities() uint32 {
+	if m != nil {
+		return m.Capabilities
+	}
+	return 0
+}
+
+// A physical port has changed in the datapath
+type OfpPortStatus struct {
+	//ofp_header header;
+	Reason               OfpPortReason `protobuf:"varint,1,opt,name=reason,proto3,enum=openflow_13.OfpPortReason" json:"reason,omitempty"`
+	Desc                 *OfpPort      `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *OfpPortStatus) Reset()         { *m = OfpPortStatus{} }
+func (m *OfpPortStatus) String() string { return proto.CompactTextString(m) }
+func (*OfpPortStatus) ProtoMessage()    {}
+func (*OfpPortStatus) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{8}
+}
+
+func (m *OfpPortStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPortStatus.Unmarshal(m, b)
+}
+func (m *OfpPortStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPortStatus.Marshal(b, m, deterministic)
+}
+func (m *OfpPortStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPortStatus.Merge(m, src)
+}
+func (m *OfpPortStatus) XXX_Size() int {
+	return xxx_messageInfo_OfpPortStatus.Size(m)
+}
+func (m *OfpPortStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPortStatus.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPortStatus proto.InternalMessageInfo
+
+func (m *OfpPortStatus) GetReason() OfpPortReason {
+	if m != nil {
+		return m.Reason
+	}
+	return OfpPortReason_OFPPR_ADD
+}
+
+func (m *OfpPortStatus) GetDesc() *OfpPort {
+	if m != nil {
+		return m.Desc
+	}
+	return nil
+}
+
+// Modify behavior of the physical port
+type OfpPortMod struct {
+	//ofp_header header;
+	PortNo uint32   `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	HwAddr []uint32 `protobuf:"varint,2,rep,packed,name=hw_addr,json=hwAddr,proto3" json:"hw_addr,omitempty"`
+	// The hardware address is not
+	//configurable.  This is used to
+	//sanity-check the request, so it must
+	//be the same as returned in an
+	//ofp_port struct.
+	Config               uint32   `protobuf:"varint,3,opt,name=config,proto3" json:"config,omitempty"`
+	Mask                 uint32   `protobuf:"varint,4,opt,name=mask,proto3" json:"mask,omitempty"`
+	Advertise            uint32   `protobuf:"varint,5,opt,name=advertise,proto3" json:"advertise,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpPortMod) Reset()         { *m = OfpPortMod{} }
+func (m *OfpPortMod) String() string { return proto.CompactTextString(m) }
+func (*OfpPortMod) ProtoMessage()    {}
+func (*OfpPortMod) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{9}
+}
+
+func (m *OfpPortMod) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPortMod.Unmarshal(m, b)
+}
+func (m *OfpPortMod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPortMod.Marshal(b, m, deterministic)
+}
+func (m *OfpPortMod) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPortMod.Merge(m, src)
+}
+func (m *OfpPortMod) XXX_Size() int {
+	return xxx_messageInfo_OfpPortMod.Size(m)
+}
+func (m *OfpPortMod) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPortMod.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPortMod proto.InternalMessageInfo
+
+func (m *OfpPortMod) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+func (m *OfpPortMod) GetHwAddr() []uint32 {
+	if m != nil {
+		return m.HwAddr
+	}
+	return nil
+}
+
+func (m *OfpPortMod) GetConfig() uint32 {
+	if m != nil {
+		return m.Config
+	}
+	return 0
+}
+
+func (m *OfpPortMod) GetMask() uint32 {
+	if m != nil {
+		return m.Mask
+	}
+	return 0
+}
+
+func (m *OfpPortMod) GetAdvertise() uint32 {
+	if m != nil {
+		return m.Advertise
+	}
+	return 0
+}
+
+// Fields to match against flows
+type OfpMatch struct {
+	Type                 OfpMatchType   `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpMatchType" json:"type,omitempty"`
+	OxmFields            []*OfpOxmField `protobuf:"bytes,2,rep,name=oxm_fields,json=oxmFields,proto3" json:"oxm_fields,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *OfpMatch) Reset()         { *m = OfpMatch{} }
+func (m *OfpMatch) String() string { return proto.CompactTextString(m) }
+func (*OfpMatch) ProtoMessage()    {}
+func (*OfpMatch) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{10}
+}
+
+func (m *OfpMatch) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMatch.Unmarshal(m, b)
+}
+func (m *OfpMatch) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMatch.Marshal(b, m, deterministic)
+}
+func (m *OfpMatch) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMatch.Merge(m, src)
+}
+func (m *OfpMatch) XXX_Size() int {
+	return xxx_messageInfo_OfpMatch.Size(m)
+}
+func (m *OfpMatch) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMatch.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMatch proto.InternalMessageInfo
+
+func (m *OfpMatch) GetType() OfpMatchType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpMatchType_OFPMT_STANDARD
+}
+
+func (m *OfpMatch) GetOxmFields() []*OfpOxmField {
+	if m != nil {
+		return m.OxmFields
+	}
+	return nil
+}
+
+// OXM Flow match fields
+type OfpOxmField struct {
+	OxmClass OfpOxmClass `protobuf:"varint,1,opt,name=oxm_class,json=oxmClass,proto3,enum=openflow_13.OfpOxmClass" json:"oxm_class,omitempty"`
+	// Types that are valid to be assigned to Field:
+	//	*OfpOxmField_OfbField
+	//	*OfpOxmField_ExperimenterField
+	Field                isOfpOxmField_Field `protobuf_oneof:"field"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *OfpOxmField) Reset()         { *m = OfpOxmField{} }
+func (m *OfpOxmField) String() string { return proto.CompactTextString(m) }
+func (*OfpOxmField) ProtoMessage()    {}
+func (*OfpOxmField) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{11}
+}
+
+func (m *OfpOxmField) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpOxmField.Unmarshal(m, b)
+}
+func (m *OfpOxmField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpOxmField.Marshal(b, m, deterministic)
+}
+func (m *OfpOxmField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpOxmField.Merge(m, src)
+}
+func (m *OfpOxmField) XXX_Size() int {
+	return xxx_messageInfo_OfpOxmField.Size(m)
+}
+func (m *OfpOxmField) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpOxmField.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpOxmField proto.InternalMessageInfo
+
+func (m *OfpOxmField) GetOxmClass() OfpOxmClass {
+	if m != nil {
+		return m.OxmClass
+	}
+	return OfpOxmClass_OFPXMC_NXM_0
+}
+
+type isOfpOxmField_Field interface {
+	isOfpOxmField_Field()
+}
+
+type OfpOxmField_OfbField struct {
+	OfbField *OfpOxmOfbField `protobuf:"bytes,4,opt,name=ofb_field,json=ofbField,proto3,oneof"`
+}
+
+type OfpOxmField_ExperimenterField struct {
+	ExperimenterField *OfpOxmExperimenterField `protobuf:"bytes,5,opt,name=experimenter_field,json=experimenterField,proto3,oneof"`
+}
+
+func (*OfpOxmField_OfbField) isOfpOxmField_Field() {}
+
+func (*OfpOxmField_ExperimenterField) isOfpOxmField_Field() {}
+
+func (m *OfpOxmField) GetField() isOfpOxmField_Field {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+func (m *OfpOxmField) GetOfbField() *OfpOxmOfbField {
+	if x, ok := m.GetField().(*OfpOxmField_OfbField); ok {
+		return x.OfbField
+	}
+	return nil
+}
+
+func (m *OfpOxmField) GetExperimenterField() *OfpOxmExperimenterField {
+	if x, ok := m.GetField().(*OfpOxmField_ExperimenterField); ok {
+		return x.ExperimenterField
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*OfpOxmField) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*OfpOxmField_OfbField)(nil),
+		(*OfpOxmField_ExperimenterField)(nil),
+	}
+}
+
+// OXM OpenFlow Basic Match Field
+type OfpOxmOfbField struct {
+	Type    OxmOfbFieldTypes `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OxmOfbFieldTypes" json:"type,omitempty"`
+	HasMask bool             `protobuf:"varint,2,opt,name=has_mask,json=hasMask,proto3" json:"has_mask,omitempty"`
+	// Types that are valid to be assigned to Value:
+	//	*OfpOxmOfbField_Port
+	//	*OfpOxmOfbField_PhysicalPort
+	//	*OfpOxmOfbField_TableMetadata
+	//	*OfpOxmOfbField_EthDst
+	//	*OfpOxmOfbField_EthSrc
+	//	*OfpOxmOfbField_EthType
+	//	*OfpOxmOfbField_VlanVid
+	//	*OfpOxmOfbField_VlanPcp
+	//	*OfpOxmOfbField_IpDscp
+	//	*OfpOxmOfbField_IpEcn
+	//	*OfpOxmOfbField_IpProto
+	//	*OfpOxmOfbField_Ipv4Src
+	//	*OfpOxmOfbField_Ipv4Dst
+	//	*OfpOxmOfbField_TcpSrc
+	//	*OfpOxmOfbField_TcpDst
+	//	*OfpOxmOfbField_UdpSrc
+	//	*OfpOxmOfbField_UdpDst
+	//	*OfpOxmOfbField_SctpSrc
+	//	*OfpOxmOfbField_SctpDst
+	//	*OfpOxmOfbField_Icmpv4Type
+	//	*OfpOxmOfbField_Icmpv4Code
+	//	*OfpOxmOfbField_ArpOp
+	//	*OfpOxmOfbField_ArpSpa
+	//	*OfpOxmOfbField_ArpTpa
+	//	*OfpOxmOfbField_ArpSha
+	//	*OfpOxmOfbField_ArpTha
+	//	*OfpOxmOfbField_Ipv6Src
+	//	*OfpOxmOfbField_Ipv6Dst
+	//	*OfpOxmOfbField_Ipv6Flabel
+	//	*OfpOxmOfbField_Icmpv6Type
+	//	*OfpOxmOfbField_Icmpv6Code
+	//	*OfpOxmOfbField_Ipv6NdTarget
+	//	*OfpOxmOfbField_Ipv6NdSsl
+	//	*OfpOxmOfbField_Ipv6NdTll
+	//	*OfpOxmOfbField_MplsLabel
+	//	*OfpOxmOfbField_MplsTc
+	//	*OfpOxmOfbField_MplsBos
+	//	*OfpOxmOfbField_PbbIsid
+	//	*OfpOxmOfbField_TunnelId
+	//	*OfpOxmOfbField_Ipv6Exthdr
+	Value isOfpOxmOfbField_Value `protobuf_oneof:"value"`
+	// Optional mask values (must be present when has_mask is true
+	//
+	// Types that are valid to be assigned to Mask:
+	//	*OfpOxmOfbField_TableMetadataMask
+	//	*OfpOxmOfbField_EthDstMask
+	//	*OfpOxmOfbField_EthSrcMask
+	//	*OfpOxmOfbField_VlanVidMask
+	//	*OfpOxmOfbField_Ipv4SrcMask
+	//	*OfpOxmOfbField_Ipv4DstMask
+	//	*OfpOxmOfbField_ArpSpaMask
+	//	*OfpOxmOfbField_ArpTpaMask
+	//	*OfpOxmOfbField_Ipv6SrcMask
+	//	*OfpOxmOfbField_Ipv6DstMask
+	//	*OfpOxmOfbField_Ipv6FlabelMask
+	//	*OfpOxmOfbField_PbbIsidMask
+	//	*OfpOxmOfbField_TunnelIdMask
+	//	*OfpOxmOfbField_Ipv6ExthdrMask
+	Mask                 isOfpOxmOfbField_Mask `protobuf_oneof:"mask"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *OfpOxmOfbField) Reset()         { *m = OfpOxmOfbField{} }
+func (m *OfpOxmOfbField) String() string { return proto.CompactTextString(m) }
+func (*OfpOxmOfbField) ProtoMessage()    {}
+func (*OfpOxmOfbField) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{12}
+}
+
+func (m *OfpOxmOfbField) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpOxmOfbField.Unmarshal(m, b)
+}
+func (m *OfpOxmOfbField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpOxmOfbField.Marshal(b, m, deterministic)
+}
+func (m *OfpOxmOfbField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpOxmOfbField.Merge(m, src)
+}
+func (m *OfpOxmOfbField) XXX_Size() int {
+	return xxx_messageInfo_OfpOxmOfbField.Size(m)
+}
+func (m *OfpOxmOfbField) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpOxmOfbField.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpOxmOfbField proto.InternalMessageInfo
+
+func (m *OfpOxmOfbField) GetType() OxmOfbFieldTypes {
+	if m != nil {
+		return m.Type
+	}
+	return OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT
+}
+
+func (m *OfpOxmOfbField) GetHasMask() bool {
+	if m != nil {
+		return m.HasMask
+	}
+	return false
+}
+
+type isOfpOxmOfbField_Value interface {
+	isOfpOxmOfbField_Value()
+}
+
+type OfpOxmOfbField_Port struct {
+	Port uint32 `protobuf:"varint,3,opt,name=port,proto3,oneof"`
+}
+
+type OfpOxmOfbField_PhysicalPort struct {
+	PhysicalPort uint32 `protobuf:"varint,4,opt,name=physical_port,json=physicalPort,proto3,oneof"`
+}
+
+type OfpOxmOfbField_TableMetadata struct {
+	TableMetadata uint64 `protobuf:"varint,5,opt,name=table_metadata,json=tableMetadata,proto3,oneof"`
+}
+
+type OfpOxmOfbField_EthDst struct {
+	EthDst []byte `protobuf:"bytes,6,opt,name=eth_dst,json=ethDst,proto3,oneof"`
+}
+
+type OfpOxmOfbField_EthSrc struct {
+	EthSrc []byte `protobuf:"bytes,7,opt,name=eth_src,json=ethSrc,proto3,oneof"`
+}
+
+type OfpOxmOfbField_EthType struct {
+	EthType uint32 `protobuf:"varint,8,opt,name=eth_type,json=ethType,proto3,oneof"`
+}
+
+type OfpOxmOfbField_VlanVid struct {
+	VlanVid uint32 `protobuf:"varint,9,opt,name=vlan_vid,json=vlanVid,proto3,oneof"`
+}
+
+type OfpOxmOfbField_VlanPcp struct {
+	VlanPcp uint32 `protobuf:"varint,10,opt,name=vlan_pcp,json=vlanPcp,proto3,oneof"`
+}
+
+type OfpOxmOfbField_IpDscp struct {
+	IpDscp uint32 `protobuf:"varint,11,opt,name=ip_dscp,json=ipDscp,proto3,oneof"`
+}
+
+type OfpOxmOfbField_IpEcn struct {
+	IpEcn uint32 `protobuf:"varint,12,opt,name=ip_ecn,json=ipEcn,proto3,oneof"`
+}
+
+type OfpOxmOfbField_IpProto struct {
+	IpProto uint32 `protobuf:"varint,13,opt,name=ip_proto,json=ipProto,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv4Src struct {
+	Ipv4Src uint32 `protobuf:"varint,14,opt,name=ipv4_src,json=ipv4Src,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv4Dst struct {
+	Ipv4Dst uint32 `protobuf:"varint,15,opt,name=ipv4_dst,json=ipv4Dst,proto3,oneof"`
+}
+
+type OfpOxmOfbField_TcpSrc struct {
+	TcpSrc uint32 `protobuf:"varint,16,opt,name=tcp_src,json=tcpSrc,proto3,oneof"`
+}
+
+type OfpOxmOfbField_TcpDst struct {
+	TcpDst uint32 `protobuf:"varint,17,opt,name=tcp_dst,json=tcpDst,proto3,oneof"`
+}
+
+type OfpOxmOfbField_UdpSrc struct {
+	UdpSrc uint32 `protobuf:"varint,18,opt,name=udp_src,json=udpSrc,proto3,oneof"`
+}
+
+type OfpOxmOfbField_UdpDst struct {
+	UdpDst uint32 `protobuf:"varint,19,opt,name=udp_dst,json=udpDst,proto3,oneof"`
+}
+
+type OfpOxmOfbField_SctpSrc struct {
+	SctpSrc uint32 `protobuf:"varint,20,opt,name=sctp_src,json=sctpSrc,proto3,oneof"`
+}
+
+type OfpOxmOfbField_SctpDst struct {
+	SctpDst uint32 `protobuf:"varint,21,opt,name=sctp_dst,json=sctpDst,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Icmpv4Type struct {
+	Icmpv4Type uint32 `protobuf:"varint,22,opt,name=icmpv4_type,json=icmpv4Type,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Icmpv4Code struct {
+	Icmpv4Code uint32 `protobuf:"varint,23,opt,name=icmpv4_code,json=icmpv4Code,proto3,oneof"`
+}
+
+type OfpOxmOfbField_ArpOp struct {
+	ArpOp uint32 `protobuf:"varint,24,opt,name=arp_op,json=arpOp,proto3,oneof"`
+}
+
+type OfpOxmOfbField_ArpSpa struct {
+	ArpSpa uint32 `protobuf:"varint,25,opt,name=arp_spa,json=arpSpa,proto3,oneof"`
+}
+
+type OfpOxmOfbField_ArpTpa struct {
+	ArpTpa uint32 `protobuf:"varint,26,opt,name=arp_tpa,json=arpTpa,proto3,oneof"`
+}
+
+type OfpOxmOfbField_ArpSha struct {
+	ArpSha []byte `protobuf:"bytes,27,opt,name=arp_sha,json=arpSha,proto3,oneof"`
+}
+
+type OfpOxmOfbField_ArpTha struct {
+	ArpTha []byte `protobuf:"bytes,28,opt,name=arp_tha,json=arpTha,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6Src struct {
+	Ipv6Src []byte `protobuf:"bytes,29,opt,name=ipv6_src,json=ipv6Src,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6Dst struct {
+	Ipv6Dst []byte `protobuf:"bytes,30,opt,name=ipv6_dst,json=ipv6Dst,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6Flabel struct {
+	Ipv6Flabel uint32 `protobuf:"varint,31,opt,name=ipv6_flabel,json=ipv6Flabel,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Icmpv6Type struct {
+	Icmpv6Type uint32 `protobuf:"varint,32,opt,name=icmpv6_type,json=icmpv6Type,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Icmpv6Code struct {
+	Icmpv6Code uint32 `protobuf:"varint,33,opt,name=icmpv6_code,json=icmpv6Code,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6NdTarget struct {
+	Ipv6NdTarget []byte `protobuf:"bytes,34,opt,name=ipv6_nd_target,json=ipv6NdTarget,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6NdSsl struct {
+	Ipv6NdSsl []byte `protobuf:"bytes,35,opt,name=ipv6_nd_ssl,json=ipv6NdSsl,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6NdTll struct {
+	Ipv6NdTll []byte `protobuf:"bytes,36,opt,name=ipv6_nd_tll,json=ipv6NdTll,proto3,oneof"`
+}
+
+type OfpOxmOfbField_MplsLabel struct {
+	MplsLabel uint32 `protobuf:"varint,37,opt,name=mpls_label,json=mplsLabel,proto3,oneof"`
+}
+
+type OfpOxmOfbField_MplsTc struct {
+	MplsTc uint32 `protobuf:"varint,38,opt,name=mpls_tc,json=mplsTc,proto3,oneof"`
+}
+
+type OfpOxmOfbField_MplsBos struct {
+	MplsBos uint32 `protobuf:"varint,39,opt,name=mpls_bos,json=mplsBos,proto3,oneof"`
+}
+
+type OfpOxmOfbField_PbbIsid struct {
+	PbbIsid uint32 `protobuf:"varint,40,opt,name=pbb_isid,json=pbbIsid,proto3,oneof"`
+}
+
+type OfpOxmOfbField_TunnelId struct {
+	TunnelId uint64 `protobuf:"varint,41,opt,name=tunnel_id,json=tunnelId,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6Exthdr struct {
+	Ipv6Exthdr uint32 `protobuf:"varint,42,opt,name=ipv6_exthdr,json=ipv6Exthdr,proto3,oneof"`
+}
+
+func (*OfpOxmOfbField_Port) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_PhysicalPort) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_TableMetadata) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_EthDst) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_EthSrc) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_EthType) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_VlanVid) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_VlanPcp) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_IpDscp) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_IpEcn) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_IpProto) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv4Src) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv4Dst) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_TcpSrc) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_TcpDst) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_UdpSrc) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_UdpDst) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_SctpSrc) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_SctpDst) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Icmpv4Type) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Icmpv4Code) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_ArpOp) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_ArpSpa) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_ArpTpa) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_ArpSha) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_ArpTha) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv6Src) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv6Dst) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv6Flabel) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Icmpv6Type) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Icmpv6Code) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv6NdTarget) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv6NdSsl) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv6NdTll) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_MplsLabel) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_MplsTc) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_MplsBos) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_PbbIsid) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_TunnelId) isOfpOxmOfbField_Value() {}
+
+func (*OfpOxmOfbField_Ipv6Exthdr) isOfpOxmOfbField_Value() {}
+
+func (m *OfpOxmOfbField) GetValue() isOfpOxmOfbField_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetPort() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Port); ok {
+		return x.Port
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetPhysicalPort() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_PhysicalPort); ok {
+		return x.PhysicalPort
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetTableMetadata() uint64 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_TableMetadata); ok {
+		return x.TableMetadata
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetEthDst() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_EthDst); ok {
+		return x.EthDst
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetEthSrc() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_EthSrc); ok {
+		return x.EthSrc
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetEthType() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_EthType); ok {
+		return x.EthType
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetVlanVid() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_VlanVid); ok {
+		return x.VlanVid
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetVlanPcp() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_VlanPcp); ok {
+		return x.VlanPcp
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpDscp() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_IpDscp); ok {
+		return x.IpDscp
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpEcn() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_IpEcn); ok {
+		return x.IpEcn
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpProto() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_IpProto); ok {
+		return x.IpProto
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv4Src() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv4Src); ok {
+		return x.Ipv4Src
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv4Dst() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv4Dst); ok {
+		return x.Ipv4Dst
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetTcpSrc() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_TcpSrc); ok {
+		return x.TcpSrc
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetTcpDst() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_TcpDst); ok {
+		return x.TcpDst
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetUdpSrc() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_UdpSrc); ok {
+		return x.UdpSrc
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetUdpDst() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_UdpDst); ok {
+		return x.UdpDst
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetSctpSrc() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_SctpSrc); ok {
+		return x.SctpSrc
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetSctpDst() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_SctpDst); ok {
+		return x.SctpDst
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIcmpv4Type() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Icmpv4Type); ok {
+		return x.Icmpv4Type
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIcmpv4Code() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Icmpv4Code); ok {
+		return x.Icmpv4Code
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetArpOp() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_ArpOp); ok {
+		return x.ArpOp
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetArpSpa() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_ArpSpa); ok {
+		return x.ArpSpa
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetArpTpa() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_ArpTpa); ok {
+		return x.ArpTpa
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetArpSha() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_ArpSha); ok {
+		return x.ArpSha
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetArpTha() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_ArpTha); ok {
+		return x.ArpTha
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetIpv6Src() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv6Src); ok {
+		return x.Ipv6Src
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetIpv6Dst() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv6Dst); ok {
+		return x.Ipv6Dst
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetIpv6Flabel() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv6Flabel); ok {
+		return x.Ipv6Flabel
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIcmpv6Type() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Icmpv6Type); ok {
+		return x.Icmpv6Type
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIcmpv6Code() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Icmpv6Code); ok {
+		return x.Icmpv6Code
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv6NdTarget() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv6NdTarget); ok {
+		return x.Ipv6NdTarget
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetIpv6NdSsl() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv6NdSsl); ok {
+		return x.Ipv6NdSsl
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetIpv6NdTll() []byte {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv6NdTll); ok {
+		return x.Ipv6NdTll
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetMplsLabel() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_MplsLabel); ok {
+		return x.MplsLabel
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetMplsTc() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_MplsTc); ok {
+		return x.MplsTc
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetMplsBos() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_MplsBos); ok {
+		return x.MplsBos
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetPbbIsid() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_PbbIsid); ok {
+		return x.PbbIsid
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetTunnelId() uint64 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_TunnelId); ok {
+		return x.TunnelId
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv6Exthdr() uint32 {
+	if x, ok := m.GetValue().(*OfpOxmOfbField_Ipv6Exthdr); ok {
+		return x.Ipv6Exthdr
+	}
+	return 0
+}
+
+type isOfpOxmOfbField_Mask interface {
+	isOfpOxmOfbField_Mask()
+}
+
+type OfpOxmOfbField_TableMetadataMask struct {
+	TableMetadataMask uint64 `protobuf:"varint,105,opt,name=table_metadata_mask,json=tableMetadataMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_EthDstMask struct {
+	EthDstMask []byte `protobuf:"bytes,106,opt,name=eth_dst_mask,json=ethDstMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_EthSrcMask struct {
+	EthSrcMask []byte `protobuf:"bytes,107,opt,name=eth_src_mask,json=ethSrcMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_VlanVidMask struct {
+	VlanVidMask uint32 `protobuf:"varint,109,opt,name=vlan_vid_mask,json=vlanVidMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv4SrcMask struct {
+	Ipv4SrcMask uint32 `protobuf:"varint,114,opt,name=ipv4_src_mask,json=ipv4SrcMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv4DstMask struct {
+	Ipv4DstMask uint32 `protobuf:"varint,115,opt,name=ipv4_dst_mask,json=ipv4DstMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_ArpSpaMask struct {
+	ArpSpaMask uint32 `protobuf:"varint,125,opt,name=arp_spa_mask,json=arpSpaMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_ArpTpaMask struct {
+	ArpTpaMask uint32 `protobuf:"varint,126,opt,name=arp_tpa_mask,json=arpTpaMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6SrcMask struct {
+	Ipv6SrcMask []byte `protobuf:"bytes,129,opt,name=ipv6_src_mask,json=ipv6SrcMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6DstMask struct {
+	Ipv6DstMask []byte `protobuf:"bytes,130,opt,name=ipv6_dst_mask,json=ipv6DstMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6FlabelMask struct {
+	Ipv6FlabelMask uint32 `protobuf:"varint,131,opt,name=ipv6_flabel_mask,json=ipv6FlabelMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_PbbIsidMask struct {
+	PbbIsidMask uint32 `protobuf:"varint,140,opt,name=pbb_isid_mask,json=pbbIsidMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_TunnelIdMask struct {
+	TunnelIdMask uint64 `protobuf:"varint,141,opt,name=tunnel_id_mask,json=tunnelIdMask,proto3,oneof"`
+}
+
+type OfpOxmOfbField_Ipv6ExthdrMask struct {
+	Ipv6ExthdrMask uint32 `protobuf:"varint,142,opt,name=ipv6_exthdr_mask,json=ipv6ExthdrMask,proto3,oneof"`
+}
+
+func (*OfpOxmOfbField_TableMetadataMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_EthDstMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_EthSrcMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_VlanVidMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_Ipv4SrcMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_Ipv4DstMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_ArpSpaMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_ArpTpaMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_Ipv6SrcMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_Ipv6DstMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_Ipv6FlabelMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_PbbIsidMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_TunnelIdMask) isOfpOxmOfbField_Mask() {}
+
+func (*OfpOxmOfbField_Ipv6ExthdrMask) isOfpOxmOfbField_Mask() {}
+
+func (m *OfpOxmOfbField) GetMask() isOfpOxmOfbField_Mask {
+	if m != nil {
+		return m.Mask
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetTableMetadataMask() uint64 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_TableMetadataMask); ok {
+		return x.TableMetadataMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetEthDstMask() []byte {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_EthDstMask); ok {
+		return x.EthDstMask
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetEthSrcMask() []byte {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_EthSrcMask); ok {
+		return x.EthSrcMask
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetVlanVidMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_VlanVidMask); ok {
+		return x.VlanVidMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv4SrcMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_Ipv4SrcMask); ok {
+		return x.Ipv4SrcMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv4DstMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_Ipv4DstMask); ok {
+		return x.Ipv4DstMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetArpSpaMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_ArpSpaMask); ok {
+		return x.ArpSpaMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetArpTpaMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_ArpTpaMask); ok {
+		return x.ArpTpaMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv6SrcMask() []byte {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_Ipv6SrcMask); ok {
+		return x.Ipv6SrcMask
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetIpv6DstMask() []byte {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_Ipv6DstMask); ok {
+		return x.Ipv6DstMask
+	}
+	return nil
+}
+
+func (m *OfpOxmOfbField) GetIpv6FlabelMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_Ipv6FlabelMask); ok {
+		return x.Ipv6FlabelMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetPbbIsidMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_PbbIsidMask); ok {
+		return x.PbbIsidMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetTunnelIdMask() uint64 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_TunnelIdMask); ok {
+		return x.TunnelIdMask
+	}
+	return 0
+}
+
+func (m *OfpOxmOfbField) GetIpv6ExthdrMask() uint32 {
+	if x, ok := m.GetMask().(*OfpOxmOfbField_Ipv6ExthdrMask); ok {
+		return x.Ipv6ExthdrMask
+	}
+	return 0
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*OfpOxmOfbField) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*OfpOxmOfbField_Port)(nil),
+		(*OfpOxmOfbField_PhysicalPort)(nil),
+		(*OfpOxmOfbField_TableMetadata)(nil),
+		(*OfpOxmOfbField_EthDst)(nil),
+		(*OfpOxmOfbField_EthSrc)(nil),
+		(*OfpOxmOfbField_EthType)(nil),
+		(*OfpOxmOfbField_VlanVid)(nil),
+		(*OfpOxmOfbField_VlanPcp)(nil),
+		(*OfpOxmOfbField_IpDscp)(nil),
+		(*OfpOxmOfbField_IpEcn)(nil),
+		(*OfpOxmOfbField_IpProto)(nil),
+		(*OfpOxmOfbField_Ipv4Src)(nil),
+		(*OfpOxmOfbField_Ipv4Dst)(nil),
+		(*OfpOxmOfbField_TcpSrc)(nil),
+		(*OfpOxmOfbField_TcpDst)(nil),
+		(*OfpOxmOfbField_UdpSrc)(nil),
+		(*OfpOxmOfbField_UdpDst)(nil),
+		(*OfpOxmOfbField_SctpSrc)(nil),
+		(*OfpOxmOfbField_SctpDst)(nil),
+		(*OfpOxmOfbField_Icmpv4Type)(nil),
+		(*OfpOxmOfbField_Icmpv4Code)(nil),
+		(*OfpOxmOfbField_ArpOp)(nil),
+		(*OfpOxmOfbField_ArpSpa)(nil),
+		(*OfpOxmOfbField_ArpTpa)(nil),
+		(*OfpOxmOfbField_ArpSha)(nil),
+		(*OfpOxmOfbField_ArpTha)(nil),
+		(*OfpOxmOfbField_Ipv6Src)(nil),
+		(*OfpOxmOfbField_Ipv6Dst)(nil),
+		(*OfpOxmOfbField_Ipv6Flabel)(nil),
+		(*OfpOxmOfbField_Icmpv6Type)(nil),
+		(*OfpOxmOfbField_Icmpv6Code)(nil),
+		(*OfpOxmOfbField_Ipv6NdTarget)(nil),
+		(*OfpOxmOfbField_Ipv6NdSsl)(nil),
+		(*OfpOxmOfbField_Ipv6NdTll)(nil),
+		(*OfpOxmOfbField_MplsLabel)(nil),
+		(*OfpOxmOfbField_MplsTc)(nil),
+		(*OfpOxmOfbField_MplsBos)(nil),
+		(*OfpOxmOfbField_PbbIsid)(nil),
+		(*OfpOxmOfbField_TunnelId)(nil),
+		(*OfpOxmOfbField_Ipv6Exthdr)(nil),
+		(*OfpOxmOfbField_TableMetadataMask)(nil),
+		(*OfpOxmOfbField_EthDstMask)(nil),
+		(*OfpOxmOfbField_EthSrcMask)(nil),
+		(*OfpOxmOfbField_VlanVidMask)(nil),
+		(*OfpOxmOfbField_Ipv4SrcMask)(nil),
+		(*OfpOxmOfbField_Ipv4DstMask)(nil),
+		(*OfpOxmOfbField_ArpSpaMask)(nil),
+		(*OfpOxmOfbField_ArpTpaMask)(nil),
+		(*OfpOxmOfbField_Ipv6SrcMask)(nil),
+		(*OfpOxmOfbField_Ipv6DstMask)(nil),
+		(*OfpOxmOfbField_Ipv6FlabelMask)(nil),
+		(*OfpOxmOfbField_PbbIsidMask)(nil),
+		(*OfpOxmOfbField_TunnelIdMask)(nil),
+		(*OfpOxmOfbField_Ipv6ExthdrMask)(nil),
+	}
+}
+
+// Header for OXM experimenter match fields.
+// The experimenter class should not use OXM_HEADER() macros for defining
+// fields due to this extra header.
+type OfpOxmExperimenterField struct {
+	OxmHeader            uint32   `protobuf:"varint,1,opt,name=oxm_header,json=oxmHeader,proto3" json:"oxm_header,omitempty"`
+	Experimenter         uint32   `protobuf:"varint,2,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpOxmExperimenterField) Reset()         { *m = OfpOxmExperimenterField{} }
+func (m *OfpOxmExperimenterField) String() string { return proto.CompactTextString(m) }
+func (*OfpOxmExperimenterField) ProtoMessage()    {}
+func (*OfpOxmExperimenterField) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{13}
+}
+
+func (m *OfpOxmExperimenterField) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpOxmExperimenterField.Unmarshal(m, b)
+}
+func (m *OfpOxmExperimenterField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpOxmExperimenterField.Marshal(b, m, deterministic)
+}
+func (m *OfpOxmExperimenterField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpOxmExperimenterField.Merge(m, src)
+}
+func (m *OfpOxmExperimenterField) XXX_Size() int {
+	return xxx_messageInfo_OfpOxmExperimenterField.Size(m)
+}
+func (m *OfpOxmExperimenterField) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpOxmExperimenterField.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpOxmExperimenterField proto.InternalMessageInfo
+
+func (m *OfpOxmExperimenterField) GetOxmHeader() uint32 {
+	if m != nil {
+		return m.OxmHeader
+	}
+	return 0
+}
+
+func (m *OfpOxmExperimenterField) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+// Action header that is common to all actions.  The length includes the
+// header and any padding used to make the action 64-bit aligned.
+// NB: The length of an action *must* always be a multiple of eight.
+type OfpAction struct {
+	Type OfpActionType `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpActionType" json:"type,omitempty"`
+	// Types that are valid to be assigned to Action:
+	//	*OfpAction_Output
+	//	*OfpAction_MplsTtl
+	//	*OfpAction_Push
+	//	*OfpAction_PopMpls
+	//	*OfpAction_Group
+	//	*OfpAction_NwTtl
+	//	*OfpAction_SetField
+	//	*OfpAction_Experimenter
+	Action               isOfpAction_Action `protobuf_oneof:"action"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *OfpAction) Reset()         { *m = OfpAction{} }
+func (m *OfpAction) String() string { return proto.CompactTextString(m) }
+func (*OfpAction) ProtoMessage()    {}
+func (*OfpAction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{14}
+}
+
+func (m *OfpAction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpAction.Unmarshal(m, b)
+}
+func (m *OfpAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpAction.Marshal(b, m, deterministic)
+}
+func (m *OfpAction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpAction.Merge(m, src)
+}
+func (m *OfpAction) XXX_Size() int {
+	return xxx_messageInfo_OfpAction.Size(m)
+}
+func (m *OfpAction) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpAction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpAction proto.InternalMessageInfo
+
+func (m *OfpAction) GetType() OfpActionType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpActionType_OFPAT_OUTPUT
+}
+
+type isOfpAction_Action interface {
+	isOfpAction_Action()
+}
+
+type OfpAction_Output struct {
+	Output *OfpActionOutput `protobuf:"bytes,2,opt,name=output,proto3,oneof"`
+}
+
+type OfpAction_MplsTtl struct {
+	MplsTtl *OfpActionMplsTtl `protobuf:"bytes,3,opt,name=mpls_ttl,json=mplsTtl,proto3,oneof"`
+}
+
+type OfpAction_Push struct {
+	Push *OfpActionPush `protobuf:"bytes,4,opt,name=push,proto3,oneof"`
+}
+
+type OfpAction_PopMpls struct {
+	PopMpls *OfpActionPopMpls `protobuf:"bytes,5,opt,name=pop_mpls,json=popMpls,proto3,oneof"`
+}
+
+type OfpAction_Group struct {
+	Group *OfpActionGroup `protobuf:"bytes,6,opt,name=group,proto3,oneof"`
+}
+
+type OfpAction_NwTtl struct {
+	NwTtl *OfpActionNwTtl `protobuf:"bytes,7,opt,name=nw_ttl,json=nwTtl,proto3,oneof"`
+}
+
+type OfpAction_SetField struct {
+	SetField *OfpActionSetField `protobuf:"bytes,8,opt,name=set_field,json=setField,proto3,oneof"`
+}
+
+type OfpAction_Experimenter struct {
+	Experimenter *OfpActionExperimenter `protobuf:"bytes,9,opt,name=experimenter,proto3,oneof"`
+}
+
+func (*OfpAction_Output) isOfpAction_Action() {}
+
+func (*OfpAction_MplsTtl) isOfpAction_Action() {}
+
+func (*OfpAction_Push) isOfpAction_Action() {}
+
+func (*OfpAction_PopMpls) isOfpAction_Action() {}
+
+func (*OfpAction_Group) isOfpAction_Action() {}
+
+func (*OfpAction_NwTtl) isOfpAction_Action() {}
+
+func (*OfpAction_SetField) isOfpAction_Action() {}
+
+func (*OfpAction_Experimenter) isOfpAction_Action() {}
+
+func (m *OfpAction) GetAction() isOfpAction_Action {
+	if m != nil {
+		return m.Action
+	}
+	return nil
+}
+
+func (m *OfpAction) GetOutput() *OfpActionOutput {
+	if x, ok := m.GetAction().(*OfpAction_Output); ok {
+		return x.Output
+	}
+	return nil
+}
+
+func (m *OfpAction) GetMplsTtl() *OfpActionMplsTtl {
+	if x, ok := m.GetAction().(*OfpAction_MplsTtl); ok {
+		return x.MplsTtl
+	}
+	return nil
+}
+
+func (m *OfpAction) GetPush() *OfpActionPush {
+	if x, ok := m.GetAction().(*OfpAction_Push); ok {
+		return x.Push
+	}
+	return nil
+}
+
+func (m *OfpAction) GetPopMpls() *OfpActionPopMpls {
+	if x, ok := m.GetAction().(*OfpAction_PopMpls); ok {
+		return x.PopMpls
+	}
+	return nil
+}
+
+func (m *OfpAction) GetGroup() *OfpActionGroup {
+	if x, ok := m.GetAction().(*OfpAction_Group); ok {
+		return x.Group
+	}
+	return nil
+}
+
+func (m *OfpAction) GetNwTtl() *OfpActionNwTtl {
+	if x, ok := m.GetAction().(*OfpAction_NwTtl); ok {
+		return x.NwTtl
+	}
+	return nil
+}
+
+func (m *OfpAction) GetSetField() *OfpActionSetField {
+	if x, ok := m.GetAction().(*OfpAction_SetField); ok {
+		return x.SetField
+	}
+	return nil
+}
+
+func (m *OfpAction) GetExperimenter() *OfpActionExperimenter {
+	if x, ok := m.GetAction().(*OfpAction_Experimenter); ok {
+		return x.Experimenter
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*OfpAction) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*OfpAction_Output)(nil),
+		(*OfpAction_MplsTtl)(nil),
+		(*OfpAction_Push)(nil),
+		(*OfpAction_PopMpls)(nil),
+		(*OfpAction_Group)(nil),
+		(*OfpAction_NwTtl)(nil),
+		(*OfpAction_SetField)(nil),
+		(*OfpAction_Experimenter)(nil),
+	}
+}
+
+// Action structure for OFPAT_OUTPUT, which sends packets out 'port'.
+// When the 'port' is the OFPP_CONTROLLER, 'max_len' indicates the max
+// number of bytes to send.  A 'max_len' of zero means no bytes of the
+// packet should be sent. A 'max_len' of OFPCML_NO_BUFFER means that
+// the packet is not buffered and the complete packet is to be sent to
+// the controller.
+type OfpActionOutput struct {
+	Port                 uint32   `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"`
+	MaxLen               uint32   `protobuf:"varint,2,opt,name=max_len,json=maxLen,proto3" json:"max_len,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionOutput) Reset()         { *m = OfpActionOutput{} }
+func (m *OfpActionOutput) String() string { return proto.CompactTextString(m) }
+func (*OfpActionOutput) ProtoMessage()    {}
+func (*OfpActionOutput) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{15}
+}
+
+func (m *OfpActionOutput) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionOutput.Unmarshal(m, b)
+}
+func (m *OfpActionOutput) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionOutput.Marshal(b, m, deterministic)
+}
+func (m *OfpActionOutput) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionOutput.Merge(m, src)
+}
+func (m *OfpActionOutput) XXX_Size() int {
+	return xxx_messageInfo_OfpActionOutput.Size(m)
+}
+func (m *OfpActionOutput) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionOutput.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionOutput proto.InternalMessageInfo
+
+func (m *OfpActionOutput) GetPort() uint32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+func (m *OfpActionOutput) GetMaxLen() uint32 {
+	if m != nil {
+		return m.MaxLen
+	}
+	return 0
+}
+
+// Action structure for OFPAT_SET_MPLS_TTL.
+type OfpActionMplsTtl struct {
+	MplsTtl              uint32   `protobuf:"varint,1,opt,name=mpls_ttl,json=mplsTtl,proto3" json:"mpls_ttl,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionMplsTtl) Reset()         { *m = OfpActionMplsTtl{} }
+func (m *OfpActionMplsTtl) String() string { return proto.CompactTextString(m) }
+func (*OfpActionMplsTtl) ProtoMessage()    {}
+func (*OfpActionMplsTtl) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{16}
+}
+
+func (m *OfpActionMplsTtl) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionMplsTtl.Unmarshal(m, b)
+}
+func (m *OfpActionMplsTtl) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionMplsTtl.Marshal(b, m, deterministic)
+}
+func (m *OfpActionMplsTtl) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionMplsTtl.Merge(m, src)
+}
+func (m *OfpActionMplsTtl) XXX_Size() int {
+	return xxx_messageInfo_OfpActionMplsTtl.Size(m)
+}
+func (m *OfpActionMplsTtl) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionMplsTtl.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionMplsTtl proto.InternalMessageInfo
+
+func (m *OfpActionMplsTtl) GetMplsTtl() uint32 {
+	if m != nil {
+		return m.MplsTtl
+	}
+	return 0
+}
+
+// Action structure for OFPAT_PUSH_VLAN/MPLS/PBB.
+type OfpActionPush struct {
+	Ethertype            uint32   `protobuf:"varint,1,opt,name=ethertype,proto3" json:"ethertype,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionPush) Reset()         { *m = OfpActionPush{} }
+func (m *OfpActionPush) String() string { return proto.CompactTextString(m) }
+func (*OfpActionPush) ProtoMessage()    {}
+func (*OfpActionPush) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{17}
+}
+
+func (m *OfpActionPush) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionPush.Unmarshal(m, b)
+}
+func (m *OfpActionPush) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionPush.Marshal(b, m, deterministic)
+}
+func (m *OfpActionPush) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionPush.Merge(m, src)
+}
+func (m *OfpActionPush) XXX_Size() int {
+	return xxx_messageInfo_OfpActionPush.Size(m)
+}
+func (m *OfpActionPush) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionPush.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionPush proto.InternalMessageInfo
+
+func (m *OfpActionPush) GetEthertype() uint32 {
+	if m != nil {
+		return m.Ethertype
+	}
+	return 0
+}
+
+// Action structure for OFPAT_POP_MPLS.
+type OfpActionPopMpls struct {
+	Ethertype            uint32   `protobuf:"varint,1,opt,name=ethertype,proto3" json:"ethertype,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionPopMpls) Reset()         { *m = OfpActionPopMpls{} }
+func (m *OfpActionPopMpls) String() string { return proto.CompactTextString(m) }
+func (*OfpActionPopMpls) ProtoMessage()    {}
+func (*OfpActionPopMpls) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{18}
+}
+
+func (m *OfpActionPopMpls) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionPopMpls.Unmarshal(m, b)
+}
+func (m *OfpActionPopMpls) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionPopMpls.Marshal(b, m, deterministic)
+}
+func (m *OfpActionPopMpls) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionPopMpls.Merge(m, src)
+}
+func (m *OfpActionPopMpls) XXX_Size() int {
+	return xxx_messageInfo_OfpActionPopMpls.Size(m)
+}
+func (m *OfpActionPopMpls) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionPopMpls.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionPopMpls proto.InternalMessageInfo
+
+func (m *OfpActionPopMpls) GetEthertype() uint32 {
+	if m != nil {
+		return m.Ethertype
+	}
+	return 0
+}
+
+// Action structure for OFPAT_GROUP.
+type OfpActionGroup struct {
+	GroupId              uint32   `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionGroup) Reset()         { *m = OfpActionGroup{} }
+func (m *OfpActionGroup) String() string { return proto.CompactTextString(m) }
+func (*OfpActionGroup) ProtoMessage()    {}
+func (*OfpActionGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{19}
+}
+
+func (m *OfpActionGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionGroup.Unmarshal(m, b)
+}
+func (m *OfpActionGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionGroup.Marshal(b, m, deterministic)
+}
+func (m *OfpActionGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionGroup.Merge(m, src)
+}
+func (m *OfpActionGroup) XXX_Size() int {
+	return xxx_messageInfo_OfpActionGroup.Size(m)
+}
+func (m *OfpActionGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionGroup proto.InternalMessageInfo
+
+func (m *OfpActionGroup) GetGroupId() uint32 {
+	if m != nil {
+		return m.GroupId
+	}
+	return 0
+}
+
+// Action structure for OFPAT_SET_NW_TTL.
+type OfpActionNwTtl struct {
+	NwTtl                uint32   `protobuf:"varint,1,opt,name=nw_ttl,json=nwTtl,proto3" json:"nw_ttl,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionNwTtl) Reset()         { *m = OfpActionNwTtl{} }
+func (m *OfpActionNwTtl) String() string { return proto.CompactTextString(m) }
+func (*OfpActionNwTtl) ProtoMessage()    {}
+func (*OfpActionNwTtl) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{20}
+}
+
+func (m *OfpActionNwTtl) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionNwTtl.Unmarshal(m, b)
+}
+func (m *OfpActionNwTtl) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionNwTtl.Marshal(b, m, deterministic)
+}
+func (m *OfpActionNwTtl) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionNwTtl.Merge(m, src)
+}
+func (m *OfpActionNwTtl) XXX_Size() int {
+	return xxx_messageInfo_OfpActionNwTtl.Size(m)
+}
+func (m *OfpActionNwTtl) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionNwTtl.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionNwTtl proto.InternalMessageInfo
+
+func (m *OfpActionNwTtl) GetNwTtl() uint32 {
+	if m != nil {
+		return m.NwTtl
+	}
+	return 0
+}
+
+// Action structure for OFPAT_SET_FIELD.
+type OfpActionSetField struct {
+	Field                *OfpOxmField `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *OfpActionSetField) Reset()         { *m = OfpActionSetField{} }
+func (m *OfpActionSetField) String() string { return proto.CompactTextString(m) }
+func (*OfpActionSetField) ProtoMessage()    {}
+func (*OfpActionSetField) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{21}
+}
+
+func (m *OfpActionSetField) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionSetField.Unmarshal(m, b)
+}
+func (m *OfpActionSetField) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionSetField.Marshal(b, m, deterministic)
+}
+func (m *OfpActionSetField) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionSetField.Merge(m, src)
+}
+func (m *OfpActionSetField) XXX_Size() int {
+	return xxx_messageInfo_OfpActionSetField.Size(m)
+}
+func (m *OfpActionSetField) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionSetField.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionSetField proto.InternalMessageInfo
+
+func (m *OfpActionSetField) GetField() *OfpOxmField {
+	if m != nil {
+		return m.Field
+	}
+	return nil
+}
+
+// Action header for OFPAT_EXPERIMENTER.
+// The rest of the body is experimenter-defined.
+type OfpActionExperimenter struct {
+	Experimenter         uint32   `protobuf:"varint,1,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	Data                 []byte   `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionExperimenter) Reset()         { *m = OfpActionExperimenter{} }
+func (m *OfpActionExperimenter) String() string { return proto.CompactTextString(m) }
+func (*OfpActionExperimenter) ProtoMessage()    {}
+func (*OfpActionExperimenter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{22}
+}
+
+func (m *OfpActionExperimenter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionExperimenter.Unmarshal(m, b)
+}
+func (m *OfpActionExperimenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionExperimenter.Marshal(b, m, deterministic)
+}
+func (m *OfpActionExperimenter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionExperimenter.Merge(m, src)
+}
+func (m *OfpActionExperimenter) XXX_Size() int {
+	return xxx_messageInfo_OfpActionExperimenter.Size(m)
+}
+func (m *OfpActionExperimenter) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionExperimenter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionExperimenter proto.InternalMessageInfo
+
+func (m *OfpActionExperimenter) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+func (m *OfpActionExperimenter) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Instruction header that is common to all instructions.  The length includes
+// the header and any padding used to make the instruction 64-bit aligned.
+// NB: The length of an instruction *must* always be a multiple of eight.
+type OfpInstruction struct {
+	Type uint32 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"`
+	// Types that are valid to be assigned to Data:
+	//	*OfpInstruction_GotoTable
+	//	*OfpInstruction_WriteMetadata
+	//	*OfpInstruction_Actions
+	//	*OfpInstruction_Meter
+	//	*OfpInstruction_Experimenter
+	Data                 isOfpInstruction_Data `protobuf_oneof:"data"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *OfpInstruction) Reset()         { *m = OfpInstruction{} }
+func (m *OfpInstruction) String() string { return proto.CompactTextString(m) }
+func (*OfpInstruction) ProtoMessage()    {}
+func (*OfpInstruction) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{23}
+}
+
+func (m *OfpInstruction) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpInstruction.Unmarshal(m, b)
+}
+func (m *OfpInstruction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpInstruction.Marshal(b, m, deterministic)
+}
+func (m *OfpInstruction) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpInstruction.Merge(m, src)
+}
+func (m *OfpInstruction) XXX_Size() int {
+	return xxx_messageInfo_OfpInstruction.Size(m)
+}
+func (m *OfpInstruction) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpInstruction.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpInstruction proto.InternalMessageInfo
+
+func (m *OfpInstruction) GetType() uint32 {
+	if m != nil {
+		return m.Type
+	}
+	return 0
+}
+
+type isOfpInstruction_Data interface {
+	isOfpInstruction_Data()
+}
+
+type OfpInstruction_GotoTable struct {
+	GotoTable *OfpInstructionGotoTable `protobuf:"bytes,2,opt,name=goto_table,json=gotoTable,proto3,oneof"`
+}
+
+type OfpInstruction_WriteMetadata struct {
+	WriteMetadata *OfpInstructionWriteMetadata `protobuf:"bytes,3,opt,name=write_metadata,json=writeMetadata,proto3,oneof"`
+}
+
+type OfpInstruction_Actions struct {
+	Actions *OfpInstructionActions `protobuf:"bytes,4,opt,name=actions,proto3,oneof"`
+}
+
+type OfpInstruction_Meter struct {
+	Meter *OfpInstructionMeter `protobuf:"bytes,5,opt,name=meter,proto3,oneof"`
+}
+
+type OfpInstruction_Experimenter struct {
+	Experimenter *OfpInstructionExperimenter `protobuf:"bytes,6,opt,name=experimenter,proto3,oneof"`
+}
+
+func (*OfpInstruction_GotoTable) isOfpInstruction_Data() {}
+
+func (*OfpInstruction_WriteMetadata) isOfpInstruction_Data() {}
+
+func (*OfpInstruction_Actions) isOfpInstruction_Data() {}
+
+func (*OfpInstruction_Meter) isOfpInstruction_Data() {}
+
+func (*OfpInstruction_Experimenter) isOfpInstruction_Data() {}
+
+func (m *OfpInstruction) GetData() isOfpInstruction_Data {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (m *OfpInstruction) GetGotoTable() *OfpInstructionGotoTable {
+	if x, ok := m.GetData().(*OfpInstruction_GotoTable); ok {
+		return x.GotoTable
+	}
+	return nil
+}
+
+func (m *OfpInstruction) GetWriteMetadata() *OfpInstructionWriteMetadata {
+	if x, ok := m.GetData().(*OfpInstruction_WriteMetadata); ok {
+		return x.WriteMetadata
+	}
+	return nil
+}
+
+func (m *OfpInstruction) GetActions() *OfpInstructionActions {
+	if x, ok := m.GetData().(*OfpInstruction_Actions); ok {
+		return x.Actions
+	}
+	return nil
+}
+
+func (m *OfpInstruction) GetMeter() *OfpInstructionMeter {
+	if x, ok := m.GetData().(*OfpInstruction_Meter); ok {
+		return x.Meter
+	}
+	return nil
+}
+
+func (m *OfpInstruction) GetExperimenter() *OfpInstructionExperimenter {
+	if x, ok := m.GetData().(*OfpInstruction_Experimenter); ok {
+		return x.Experimenter
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*OfpInstruction) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*OfpInstruction_GotoTable)(nil),
+		(*OfpInstruction_WriteMetadata)(nil),
+		(*OfpInstruction_Actions)(nil),
+		(*OfpInstruction_Meter)(nil),
+		(*OfpInstruction_Experimenter)(nil),
+	}
+}
+
+// Instruction structure for OFPIT_GOTO_TABLE
+type OfpInstructionGotoTable struct {
+	TableId              uint32   `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpInstructionGotoTable) Reset()         { *m = OfpInstructionGotoTable{} }
+func (m *OfpInstructionGotoTable) String() string { return proto.CompactTextString(m) }
+func (*OfpInstructionGotoTable) ProtoMessage()    {}
+func (*OfpInstructionGotoTable) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{24}
+}
+
+func (m *OfpInstructionGotoTable) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpInstructionGotoTable.Unmarshal(m, b)
+}
+func (m *OfpInstructionGotoTable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpInstructionGotoTable.Marshal(b, m, deterministic)
+}
+func (m *OfpInstructionGotoTable) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpInstructionGotoTable.Merge(m, src)
+}
+func (m *OfpInstructionGotoTable) XXX_Size() int {
+	return xxx_messageInfo_OfpInstructionGotoTable.Size(m)
+}
+func (m *OfpInstructionGotoTable) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpInstructionGotoTable.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpInstructionGotoTable proto.InternalMessageInfo
+
+func (m *OfpInstructionGotoTable) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+// Instruction structure for OFPIT_WRITE_METADATA
+type OfpInstructionWriteMetadata struct {
+	Metadata             uint64   `protobuf:"varint,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	MetadataMask         uint64   `protobuf:"varint,2,opt,name=metadata_mask,json=metadataMask,proto3" json:"metadata_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpInstructionWriteMetadata) Reset()         { *m = OfpInstructionWriteMetadata{} }
+func (m *OfpInstructionWriteMetadata) String() string { return proto.CompactTextString(m) }
+func (*OfpInstructionWriteMetadata) ProtoMessage()    {}
+func (*OfpInstructionWriteMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{25}
+}
+
+func (m *OfpInstructionWriteMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpInstructionWriteMetadata.Unmarshal(m, b)
+}
+func (m *OfpInstructionWriteMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpInstructionWriteMetadata.Marshal(b, m, deterministic)
+}
+func (m *OfpInstructionWriteMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpInstructionWriteMetadata.Merge(m, src)
+}
+func (m *OfpInstructionWriteMetadata) XXX_Size() int {
+	return xxx_messageInfo_OfpInstructionWriteMetadata.Size(m)
+}
+func (m *OfpInstructionWriteMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpInstructionWriteMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpInstructionWriteMetadata proto.InternalMessageInfo
+
+func (m *OfpInstructionWriteMetadata) GetMetadata() uint64 {
+	if m != nil {
+		return m.Metadata
+	}
+	return 0
+}
+
+func (m *OfpInstructionWriteMetadata) GetMetadataMask() uint64 {
+	if m != nil {
+		return m.MetadataMask
+	}
+	return 0
+}
+
+// Instruction structure for OFPIT_WRITE/APPLY/CLEAR_ACTIONS
+type OfpInstructionActions struct {
+	Actions              []*OfpAction `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *OfpInstructionActions) Reset()         { *m = OfpInstructionActions{} }
+func (m *OfpInstructionActions) String() string { return proto.CompactTextString(m) }
+func (*OfpInstructionActions) ProtoMessage()    {}
+func (*OfpInstructionActions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{26}
+}
+
+func (m *OfpInstructionActions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpInstructionActions.Unmarshal(m, b)
+}
+func (m *OfpInstructionActions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpInstructionActions.Marshal(b, m, deterministic)
+}
+func (m *OfpInstructionActions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpInstructionActions.Merge(m, src)
+}
+func (m *OfpInstructionActions) XXX_Size() int {
+	return xxx_messageInfo_OfpInstructionActions.Size(m)
+}
+func (m *OfpInstructionActions) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpInstructionActions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpInstructionActions proto.InternalMessageInfo
+
+func (m *OfpInstructionActions) GetActions() []*OfpAction {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+// Instruction structure for OFPIT_METER
+type OfpInstructionMeter struct {
+	MeterId              uint32   `protobuf:"varint,1,opt,name=meter_id,json=meterId,proto3" json:"meter_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpInstructionMeter) Reset()         { *m = OfpInstructionMeter{} }
+func (m *OfpInstructionMeter) String() string { return proto.CompactTextString(m) }
+func (*OfpInstructionMeter) ProtoMessage()    {}
+func (*OfpInstructionMeter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{27}
+}
+
+func (m *OfpInstructionMeter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpInstructionMeter.Unmarshal(m, b)
+}
+func (m *OfpInstructionMeter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpInstructionMeter.Marshal(b, m, deterministic)
+}
+func (m *OfpInstructionMeter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpInstructionMeter.Merge(m, src)
+}
+func (m *OfpInstructionMeter) XXX_Size() int {
+	return xxx_messageInfo_OfpInstructionMeter.Size(m)
+}
+func (m *OfpInstructionMeter) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpInstructionMeter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpInstructionMeter proto.InternalMessageInfo
+
+func (m *OfpInstructionMeter) GetMeterId() uint32 {
+	if m != nil {
+		return m.MeterId
+	}
+	return 0
+}
+
+// Instruction structure for experimental instructions
+type OfpInstructionExperimenter struct {
+	Experimenter uint32 `protobuf:"varint,1,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	// Experimenter-defined arbitrary additional data.
+	Data                 []byte   `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpInstructionExperimenter) Reset()         { *m = OfpInstructionExperimenter{} }
+func (m *OfpInstructionExperimenter) String() string { return proto.CompactTextString(m) }
+func (*OfpInstructionExperimenter) ProtoMessage()    {}
+func (*OfpInstructionExperimenter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{28}
+}
+
+func (m *OfpInstructionExperimenter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpInstructionExperimenter.Unmarshal(m, b)
+}
+func (m *OfpInstructionExperimenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpInstructionExperimenter.Marshal(b, m, deterministic)
+}
+func (m *OfpInstructionExperimenter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpInstructionExperimenter.Merge(m, src)
+}
+func (m *OfpInstructionExperimenter) XXX_Size() int {
+	return xxx_messageInfo_OfpInstructionExperimenter.Size(m)
+}
+func (m *OfpInstructionExperimenter) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpInstructionExperimenter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpInstructionExperimenter proto.InternalMessageInfo
+
+func (m *OfpInstructionExperimenter) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+func (m *OfpInstructionExperimenter) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Flow setup and teardown (controller -> datapath).
+type OfpFlowMod struct {
+	//ofp_header header;
+	Cookie               uint64            `protobuf:"varint,1,opt,name=cookie,proto3" json:"cookie,omitempty"`
+	CookieMask           uint64            `protobuf:"varint,2,opt,name=cookie_mask,json=cookieMask,proto3" json:"cookie_mask,omitempty"`
+	TableId              uint32            `protobuf:"varint,3,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	Command              OfpFlowModCommand `protobuf:"varint,4,opt,name=command,proto3,enum=openflow_13.OfpFlowModCommand" json:"command,omitempty"`
+	IdleTimeout          uint32            `protobuf:"varint,5,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
+	HardTimeout          uint32            `protobuf:"varint,6,opt,name=hard_timeout,json=hardTimeout,proto3" json:"hard_timeout,omitempty"`
+	Priority             uint32            `protobuf:"varint,7,opt,name=priority,proto3" json:"priority,omitempty"`
+	BufferId             uint32            `protobuf:"varint,8,opt,name=buffer_id,json=bufferId,proto3" json:"buffer_id,omitempty"`
+	OutPort              uint32            `protobuf:"varint,9,opt,name=out_port,json=outPort,proto3" json:"out_port,omitempty"`
+	OutGroup             uint32            `protobuf:"varint,10,opt,name=out_group,json=outGroup,proto3" json:"out_group,omitempty"`
+	Flags                uint32            `protobuf:"varint,11,opt,name=flags,proto3" json:"flags,omitempty"`
+	Match                *OfpMatch         `protobuf:"bytes,12,opt,name=match,proto3" json:"match,omitempty"`
+	Instructions         []*OfpInstruction `protobuf:"bytes,13,rep,name=instructions,proto3" json:"instructions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *OfpFlowMod) Reset()         { *m = OfpFlowMod{} }
+func (m *OfpFlowMod) String() string { return proto.CompactTextString(m) }
+func (*OfpFlowMod) ProtoMessage()    {}
+func (*OfpFlowMod) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{29}
+}
+
+func (m *OfpFlowMod) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpFlowMod.Unmarshal(m, b)
+}
+func (m *OfpFlowMod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpFlowMod.Marshal(b, m, deterministic)
+}
+func (m *OfpFlowMod) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpFlowMod.Merge(m, src)
+}
+func (m *OfpFlowMod) XXX_Size() int {
+	return xxx_messageInfo_OfpFlowMod.Size(m)
+}
+func (m *OfpFlowMod) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpFlowMod.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpFlowMod proto.InternalMessageInfo
+
+func (m *OfpFlowMod) GetCookie() uint64 {
+	if m != nil {
+		return m.Cookie
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetCookieMask() uint64 {
+	if m != nil {
+		return m.CookieMask
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetCommand() OfpFlowModCommand {
+	if m != nil {
+		return m.Command
+	}
+	return OfpFlowModCommand_OFPFC_ADD
+}
+
+func (m *OfpFlowMod) GetIdleTimeout() uint32 {
+	if m != nil {
+		return m.IdleTimeout
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetHardTimeout() uint32 {
+	if m != nil {
+		return m.HardTimeout
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetPriority() uint32 {
+	if m != nil {
+		return m.Priority
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetBufferId() uint32 {
+	if m != nil {
+		return m.BufferId
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetOutPort() uint32 {
+	if m != nil {
+		return m.OutPort
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetOutGroup() uint32 {
+	if m != nil {
+		return m.OutGroup
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetFlags() uint32 {
+	if m != nil {
+		return m.Flags
+	}
+	return 0
+}
+
+func (m *OfpFlowMod) GetMatch() *OfpMatch {
+	if m != nil {
+		return m.Match
+	}
+	return nil
+}
+
+func (m *OfpFlowMod) GetInstructions() []*OfpInstruction {
+	if m != nil {
+		return m.Instructions
+	}
+	return nil
+}
+
+// Bucket for use in groups.
+type OfpBucket struct {
+	Weight               uint32       `protobuf:"varint,1,opt,name=weight,proto3" json:"weight,omitempty"`
+	WatchPort            uint32       `protobuf:"varint,2,opt,name=watch_port,json=watchPort,proto3" json:"watch_port,omitempty"`
+	WatchGroup           uint32       `protobuf:"varint,3,opt,name=watch_group,json=watchGroup,proto3" json:"watch_group,omitempty"`
+	Actions              []*OfpAction `protobuf:"bytes,4,rep,name=actions,proto3" json:"actions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *OfpBucket) Reset()         { *m = OfpBucket{} }
+func (m *OfpBucket) String() string { return proto.CompactTextString(m) }
+func (*OfpBucket) ProtoMessage()    {}
+func (*OfpBucket) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{30}
+}
+
+func (m *OfpBucket) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpBucket.Unmarshal(m, b)
+}
+func (m *OfpBucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpBucket.Marshal(b, m, deterministic)
+}
+func (m *OfpBucket) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpBucket.Merge(m, src)
+}
+func (m *OfpBucket) XXX_Size() int {
+	return xxx_messageInfo_OfpBucket.Size(m)
+}
+func (m *OfpBucket) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpBucket.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpBucket proto.InternalMessageInfo
+
+func (m *OfpBucket) GetWeight() uint32 {
+	if m != nil {
+		return m.Weight
+	}
+	return 0
+}
+
+func (m *OfpBucket) GetWatchPort() uint32 {
+	if m != nil {
+		return m.WatchPort
+	}
+	return 0
+}
+
+func (m *OfpBucket) GetWatchGroup() uint32 {
+	if m != nil {
+		return m.WatchGroup
+	}
+	return 0
+}
+
+func (m *OfpBucket) GetActions() []*OfpAction {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+// Group setup and teardown (controller -> datapath).
+type OfpGroupMod struct {
+	//ofp_header header;
+	Command              OfpGroupModCommand `protobuf:"varint,1,opt,name=command,proto3,enum=openflow_13.OfpGroupModCommand" json:"command,omitempty"`
+	Type                 OfpGroupType       `protobuf:"varint,2,opt,name=type,proto3,enum=openflow_13.OfpGroupType" json:"type,omitempty"`
+	GroupId              uint32             `protobuf:"varint,3,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
+	Buckets              []*OfpBucket       `protobuf:"bytes,4,rep,name=buckets,proto3" json:"buckets,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *OfpGroupMod) Reset()         { *m = OfpGroupMod{} }
+func (m *OfpGroupMod) String() string { return proto.CompactTextString(m) }
+func (*OfpGroupMod) ProtoMessage()    {}
+func (*OfpGroupMod) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{31}
+}
+
+func (m *OfpGroupMod) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpGroupMod.Unmarshal(m, b)
+}
+func (m *OfpGroupMod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpGroupMod.Marshal(b, m, deterministic)
+}
+func (m *OfpGroupMod) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpGroupMod.Merge(m, src)
+}
+func (m *OfpGroupMod) XXX_Size() int {
+	return xxx_messageInfo_OfpGroupMod.Size(m)
+}
+func (m *OfpGroupMod) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpGroupMod.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpGroupMod proto.InternalMessageInfo
+
+func (m *OfpGroupMod) GetCommand() OfpGroupModCommand {
+	if m != nil {
+		return m.Command
+	}
+	return OfpGroupModCommand_OFPGC_ADD
+}
+
+func (m *OfpGroupMod) GetType() OfpGroupType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpGroupType_OFPGT_ALL
+}
+
+func (m *OfpGroupMod) GetGroupId() uint32 {
+	if m != nil {
+		return m.GroupId
+	}
+	return 0
+}
+
+func (m *OfpGroupMod) GetBuckets() []*OfpBucket {
+	if m != nil {
+		return m.Buckets
+	}
+	return nil
+}
+
+// Send packet (controller -> datapath).
+type OfpPacketOut struct {
+	//ofp_header header;
+	BufferId uint32       `protobuf:"varint,1,opt,name=buffer_id,json=bufferId,proto3" json:"buffer_id,omitempty"`
+	InPort   uint32       `protobuf:"varint,2,opt,name=in_port,json=inPort,proto3" json:"in_port,omitempty"`
+	Actions  []*OfpAction `protobuf:"bytes,3,rep,name=actions,proto3" json:"actions,omitempty"`
+	// The variable size action list is optionally followed by packet data.
+	// This data is only present and meaningful if buffer_id == -1.
+	Data                 []byte   `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpPacketOut) Reset()         { *m = OfpPacketOut{} }
+func (m *OfpPacketOut) String() string { return proto.CompactTextString(m) }
+func (*OfpPacketOut) ProtoMessage()    {}
+func (*OfpPacketOut) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{32}
+}
+
+func (m *OfpPacketOut) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPacketOut.Unmarshal(m, b)
+}
+func (m *OfpPacketOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPacketOut.Marshal(b, m, deterministic)
+}
+func (m *OfpPacketOut) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPacketOut.Merge(m, src)
+}
+func (m *OfpPacketOut) XXX_Size() int {
+	return xxx_messageInfo_OfpPacketOut.Size(m)
+}
+func (m *OfpPacketOut) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPacketOut.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPacketOut proto.InternalMessageInfo
+
+func (m *OfpPacketOut) GetBufferId() uint32 {
+	if m != nil {
+		return m.BufferId
+	}
+	return 0
+}
+
+func (m *OfpPacketOut) GetInPort() uint32 {
+	if m != nil {
+		return m.InPort
+	}
+	return 0
+}
+
+func (m *OfpPacketOut) GetActions() []*OfpAction {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+func (m *OfpPacketOut) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Packet received on port (datapath -> controller).
+type OfpPacketIn struct {
+	//ofp_header header;
+	BufferId             uint32            `protobuf:"varint,1,opt,name=buffer_id,json=bufferId,proto3" json:"buffer_id,omitempty"`
+	Reason               OfpPacketInReason `protobuf:"varint,2,opt,name=reason,proto3,enum=openflow_13.OfpPacketInReason" json:"reason,omitempty"`
+	TableId              uint32            `protobuf:"varint,3,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	Cookie               uint64            `protobuf:"varint,4,opt,name=cookie,proto3" json:"cookie,omitempty"`
+	Match                *OfpMatch         `protobuf:"bytes,5,opt,name=match,proto3" json:"match,omitempty"`
+	Data                 []byte            `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *OfpPacketIn) Reset()         { *m = OfpPacketIn{} }
+func (m *OfpPacketIn) String() string { return proto.CompactTextString(m) }
+func (*OfpPacketIn) ProtoMessage()    {}
+func (*OfpPacketIn) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{33}
+}
+
+func (m *OfpPacketIn) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPacketIn.Unmarshal(m, b)
+}
+func (m *OfpPacketIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPacketIn.Marshal(b, m, deterministic)
+}
+func (m *OfpPacketIn) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPacketIn.Merge(m, src)
+}
+func (m *OfpPacketIn) XXX_Size() int {
+	return xxx_messageInfo_OfpPacketIn.Size(m)
+}
+func (m *OfpPacketIn) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPacketIn.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPacketIn proto.InternalMessageInfo
+
+func (m *OfpPacketIn) GetBufferId() uint32 {
+	if m != nil {
+		return m.BufferId
+	}
+	return 0
+}
+
+func (m *OfpPacketIn) GetReason() OfpPacketInReason {
+	if m != nil {
+		return m.Reason
+	}
+	return OfpPacketInReason_OFPR_NO_MATCH
+}
+
+func (m *OfpPacketIn) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpPacketIn) GetCookie() uint64 {
+	if m != nil {
+		return m.Cookie
+	}
+	return 0
+}
+
+func (m *OfpPacketIn) GetMatch() *OfpMatch {
+	if m != nil {
+		return m.Match
+	}
+	return nil
+}
+
+func (m *OfpPacketIn) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Flow removed (datapath -> controller).
+type OfpFlowRemoved struct {
+	//ofp_header header;
+	Cookie               uint64               `protobuf:"varint,1,opt,name=cookie,proto3" json:"cookie,omitempty"`
+	Priority             uint32               `protobuf:"varint,2,opt,name=priority,proto3" json:"priority,omitempty"`
+	Reason               OfpFlowRemovedReason `protobuf:"varint,3,opt,name=reason,proto3,enum=openflow_13.OfpFlowRemovedReason" json:"reason,omitempty"`
+	TableId              uint32               `protobuf:"varint,4,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	DurationSec          uint32               `protobuf:"varint,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	DurationNsec         uint32               `protobuf:"varint,6,opt,name=duration_nsec,json=durationNsec,proto3" json:"duration_nsec,omitempty"`
+	IdleTimeout          uint32               `protobuf:"varint,7,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
+	HardTimeout          uint32               `protobuf:"varint,8,opt,name=hard_timeout,json=hardTimeout,proto3" json:"hard_timeout,omitempty"`
+	PacketCount          uint64               `protobuf:"varint,9,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"`
+	ByteCount            uint64               `protobuf:"varint,10,opt,name=byte_count,json=byteCount,proto3" json:"byte_count,omitempty"`
+	Match                *OfpMatch            `protobuf:"bytes,121,opt,name=match,proto3" json:"match,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *OfpFlowRemoved) Reset()         { *m = OfpFlowRemoved{} }
+func (m *OfpFlowRemoved) String() string { return proto.CompactTextString(m) }
+func (*OfpFlowRemoved) ProtoMessage()    {}
+func (*OfpFlowRemoved) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{34}
+}
+
+func (m *OfpFlowRemoved) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpFlowRemoved.Unmarshal(m, b)
+}
+func (m *OfpFlowRemoved) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpFlowRemoved.Marshal(b, m, deterministic)
+}
+func (m *OfpFlowRemoved) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpFlowRemoved.Merge(m, src)
+}
+func (m *OfpFlowRemoved) XXX_Size() int {
+	return xxx_messageInfo_OfpFlowRemoved.Size(m)
+}
+func (m *OfpFlowRemoved) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpFlowRemoved.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpFlowRemoved proto.InternalMessageInfo
+
+func (m *OfpFlowRemoved) GetCookie() uint64 {
+	if m != nil {
+		return m.Cookie
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetPriority() uint32 {
+	if m != nil {
+		return m.Priority
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetReason() OfpFlowRemovedReason {
+	if m != nil {
+		return m.Reason
+	}
+	return OfpFlowRemovedReason_OFPRR_IDLE_TIMEOUT
+}
+
+func (m *OfpFlowRemoved) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetDurationSec() uint32 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetDurationNsec() uint32 {
+	if m != nil {
+		return m.DurationNsec
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetIdleTimeout() uint32 {
+	if m != nil {
+		return m.IdleTimeout
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetHardTimeout() uint32 {
+	if m != nil {
+		return m.HardTimeout
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetPacketCount() uint64 {
+	if m != nil {
+		return m.PacketCount
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetByteCount() uint64 {
+	if m != nil {
+		return m.ByteCount
+	}
+	return 0
+}
+
+func (m *OfpFlowRemoved) GetMatch() *OfpMatch {
+	if m != nil {
+		return m.Match
+	}
+	return nil
+}
+
+// Common header for all meter bands
+type OfpMeterBandHeader struct {
+	Type      OfpMeterBandType `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpMeterBandType" json:"type,omitempty"`
+	Rate      uint32           `protobuf:"varint,2,opt,name=rate,proto3" json:"rate,omitempty"`
+	BurstSize uint32           `protobuf:"varint,3,opt,name=burst_size,json=burstSize,proto3" json:"burst_size,omitempty"`
+	// Types that are valid to be assigned to Data:
+	//	*OfpMeterBandHeader_Drop
+	//	*OfpMeterBandHeader_DscpRemark
+	//	*OfpMeterBandHeader_Experimenter
+	Data                 isOfpMeterBandHeader_Data `protobuf_oneof:"data"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *OfpMeterBandHeader) Reset()         { *m = OfpMeterBandHeader{} }
+func (m *OfpMeterBandHeader) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterBandHeader) ProtoMessage()    {}
+func (*OfpMeterBandHeader) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{35}
+}
+
+func (m *OfpMeterBandHeader) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterBandHeader.Unmarshal(m, b)
+}
+func (m *OfpMeterBandHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterBandHeader.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterBandHeader) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterBandHeader.Merge(m, src)
+}
+func (m *OfpMeterBandHeader) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterBandHeader.Size(m)
+}
+func (m *OfpMeterBandHeader) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterBandHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterBandHeader proto.InternalMessageInfo
+
+func (m *OfpMeterBandHeader) GetType() OfpMeterBandType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpMeterBandType_OFPMBT_INVALID
+}
+
+func (m *OfpMeterBandHeader) GetRate() uint32 {
+	if m != nil {
+		return m.Rate
+	}
+	return 0
+}
+
+func (m *OfpMeterBandHeader) GetBurstSize() uint32 {
+	if m != nil {
+		return m.BurstSize
+	}
+	return 0
+}
+
+type isOfpMeterBandHeader_Data interface {
+	isOfpMeterBandHeader_Data()
+}
+
+type OfpMeterBandHeader_Drop struct {
+	Drop *OfpMeterBandDrop `protobuf:"bytes,4,opt,name=drop,proto3,oneof"`
+}
+
+type OfpMeterBandHeader_DscpRemark struct {
+	DscpRemark *OfpMeterBandDscpRemark `protobuf:"bytes,5,opt,name=dscp_remark,json=dscpRemark,proto3,oneof"`
+}
+
+type OfpMeterBandHeader_Experimenter struct {
+	Experimenter *OfpMeterBandExperimenter `protobuf:"bytes,6,opt,name=experimenter,proto3,oneof"`
+}
+
+func (*OfpMeterBandHeader_Drop) isOfpMeterBandHeader_Data() {}
+
+func (*OfpMeterBandHeader_DscpRemark) isOfpMeterBandHeader_Data() {}
+
+func (*OfpMeterBandHeader_Experimenter) isOfpMeterBandHeader_Data() {}
+
+func (m *OfpMeterBandHeader) GetData() isOfpMeterBandHeader_Data {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (m *OfpMeterBandHeader) GetDrop() *OfpMeterBandDrop {
+	if x, ok := m.GetData().(*OfpMeterBandHeader_Drop); ok {
+		return x.Drop
+	}
+	return nil
+}
+
+func (m *OfpMeterBandHeader) GetDscpRemark() *OfpMeterBandDscpRemark {
+	if x, ok := m.GetData().(*OfpMeterBandHeader_DscpRemark); ok {
+		return x.DscpRemark
+	}
+	return nil
+}
+
+func (m *OfpMeterBandHeader) GetExperimenter() *OfpMeterBandExperimenter {
+	if x, ok := m.GetData().(*OfpMeterBandHeader_Experimenter); ok {
+		return x.Experimenter
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*OfpMeterBandHeader) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*OfpMeterBandHeader_Drop)(nil),
+		(*OfpMeterBandHeader_DscpRemark)(nil),
+		(*OfpMeterBandHeader_Experimenter)(nil),
+	}
+}
+
+// OFPMBT_DROP band - drop packets
+type OfpMeterBandDrop struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpMeterBandDrop) Reset()         { *m = OfpMeterBandDrop{} }
+func (m *OfpMeterBandDrop) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterBandDrop) ProtoMessage()    {}
+func (*OfpMeterBandDrop) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{36}
+}
+
+func (m *OfpMeterBandDrop) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterBandDrop.Unmarshal(m, b)
+}
+func (m *OfpMeterBandDrop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterBandDrop.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterBandDrop) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterBandDrop.Merge(m, src)
+}
+func (m *OfpMeterBandDrop) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterBandDrop.Size(m)
+}
+func (m *OfpMeterBandDrop) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterBandDrop.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterBandDrop proto.InternalMessageInfo
+
+// OFPMBT_DSCP_REMARK band - Remark DSCP in the IP header
+type OfpMeterBandDscpRemark struct {
+	PrecLevel            uint32   `protobuf:"varint,1,opt,name=prec_level,json=precLevel,proto3" json:"prec_level,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpMeterBandDscpRemark) Reset()         { *m = OfpMeterBandDscpRemark{} }
+func (m *OfpMeterBandDscpRemark) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterBandDscpRemark) ProtoMessage()    {}
+func (*OfpMeterBandDscpRemark) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{37}
+}
+
+func (m *OfpMeterBandDscpRemark) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterBandDscpRemark.Unmarshal(m, b)
+}
+func (m *OfpMeterBandDscpRemark) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterBandDscpRemark.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterBandDscpRemark) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterBandDscpRemark.Merge(m, src)
+}
+func (m *OfpMeterBandDscpRemark) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterBandDscpRemark.Size(m)
+}
+func (m *OfpMeterBandDscpRemark) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterBandDscpRemark.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterBandDscpRemark proto.InternalMessageInfo
+
+func (m *OfpMeterBandDscpRemark) GetPrecLevel() uint32 {
+	if m != nil {
+		return m.PrecLevel
+	}
+	return 0
+}
+
+// OFPMBT_EXPERIMENTER band - Experimenter type.
+// The rest of the band is experimenter-defined.
+type OfpMeterBandExperimenter struct {
+	Experimenter         uint32   `protobuf:"varint,1,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpMeterBandExperimenter) Reset()         { *m = OfpMeterBandExperimenter{} }
+func (m *OfpMeterBandExperimenter) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterBandExperimenter) ProtoMessage()    {}
+func (*OfpMeterBandExperimenter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{38}
+}
+
+func (m *OfpMeterBandExperimenter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterBandExperimenter.Unmarshal(m, b)
+}
+func (m *OfpMeterBandExperimenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterBandExperimenter.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterBandExperimenter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterBandExperimenter.Merge(m, src)
+}
+func (m *OfpMeterBandExperimenter) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterBandExperimenter.Size(m)
+}
+func (m *OfpMeterBandExperimenter) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterBandExperimenter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterBandExperimenter proto.InternalMessageInfo
+
+func (m *OfpMeterBandExperimenter) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+// Meter configuration. OFPT_METER_MOD.
+type OfpMeterMod struct {
+	Command              OfpMeterModCommand    `protobuf:"varint,1,opt,name=command,proto3,enum=openflow_13.OfpMeterModCommand" json:"command,omitempty"`
+	Flags                uint32                `protobuf:"varint,2,opt,name=flags,proto3" json:"flags,omitempty"`
+	MeterId              uint32                `protobuf:"varint,3,opt,name=meter_id,json=meterId,proto3" json:"meter_id,omitempty"`
+	Bands                []*OfpMeterBandHeader `protobuf:"bytes,4,rep,name=bands,proto3" json:"bands,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *OfpMeterMod) Reset()         { *m = OfpMeterMod{} }
+func (m *OfpMeterMod) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterMod) ProtoMessage()    {}
+func (*OfpMeterMod) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{39}
+}
+
+func (m *OfpMeterMod) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterMod.Unmarshal(m, b)
+}
+func (m *OfpMeterMod) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterMod.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterMod) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterMod.Merge(m, src)
+}
+func (m *OfpMeterMod) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterMod.Size(m)
+}
+func (m *OfpMeterMod) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterMod.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterMod proto.InternalMessageInfo
+
+func (m *OfpMeterMod) GetCommand() OfpMeterModCommand {
+	if m != nil {
+		return m.Command
+	}
+	return OfpMeterModCommand_OFPMC_ADD
+}
+
+func (m *OfpMeterMod) GetFlags() uint32 {
+	if m != nil {
+		return m.Flags
+	}
+	return 0
+}
+
+func (m *OfpMeterMod) GetMeterId() uint32 {
+	if m != nil {
+		return m.MeterId
+	}
+	return 0
+}
+
+func (m *OfpMeterMod) GetBands() []*OfpMeterBandHeader {
+	if m != nil {
+		return m.Bands
+	}
+	return nil
+}
+
+// OFPT_ERROR: Error message (datapath -> controller).
+type OfpErrorMsg struct {
+	//ofp_header header;
+	Type                 uint32   `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"`
+	Code                 uint32   `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"`
+	Data                 []byte   `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpErrorMsg) Reset()         { *m = OfpErrorMsg{} }
+func (m *OfpErrorMsg) String() string { return proto.CompactTextString(m) }
+func (*OfpErrorMsg) ProtoMessage()    {}
+func (*OfpErrorMsg) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{40}
+}
+
+func (m *OfpErrorMsg) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpErrorMsg.Unmarshal(m, b)
+}
+func (m *OfpErrorMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpErrorMsg.Marshal(b, m, deterministic)
+}
+func (m *OfpErrorMsg) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpErrorMsg.Merge(m, src)
+}
+func (m *OfpErrorMsg) XXX_Size() int {
+	return xxx_messageInfo_OfpErrorMsg.Size(m)
+}
+func (m *OfpErrorMsg) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpErrorMsg.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpErrorMsg proto.InternalMessageInfo
+
+func (m *OfpErrorMsg) GetType() uint32 {
+	if m != nil {
+		return m.Type
+	}
+	return 0
+}
+
+func (m *OfpErrorMsg) GetCode() uint32 {
+	if m != nil {
+		return m.Code
+	}
+	return 0
+}
+
+func (m *OfpErrorMsg) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// OFPET_EXPERIMENTER: Error message (datapath -> controller).
+type OfpErrorExperimenterMsg struct {
+	Type                 uint32   `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"`
+	ExpType              uint32   `protobuf:"varint,2,opt,name=exp_type,json=expType,proto3" json:"exp_type,omitempty"`
+	Experimenter         uint32   `protobuf:"varint,3,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	Data                 []byte   `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpErrorExperimenterMsg) Reset()         { *m = OfpErrorExperimenterMsg{} }
+func (m *OfpErrorExperimenterMsg) String() string { return proto.CompactTextString(m) }
+func (*OfpErrorExperimenterMsg) ProtoMessage()    {}
+func (*OfpErrorExperimenterMsg) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{41}
+}
+
+func (m *OfpErrorExperimenterMsg) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpErrorExperimenterMsg.Unmarshal(m, b)
+}
+func (m *OfpErrorExperimenterMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpErrorExperimenterMsg.Marshal(b, m, deterministic)
+}
+func (m *OfpErrorExperimenterMsg) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpErrorExperimenterMsg.Merge(m, src)
+}
+func (m *OfpErrorExperimenterMsg) XXX_Size() int {
+	return xxx_messageInfo_OfpErrorExperimenterMsg.Size(m)
+}
+func (m *OfpErrorExperimenterMsg) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpErrorExperimenterMsg.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpErrorExperimenterMsg proto.InternalMessageInfo
+
+func (m *OfpErrorExperimenterMsg) GetType() uint32 {
+	if m != nil {
+		return m.Type
+	}
+	return 0
+}
+
+func (m *OfpErrorExperimenterMsg) GetExpType() uint32 {
+	if m != nil {
+		return m.ExpType
+	}
+	return 0
+}
+
+func (m *OfpErrorExperimenterMsg) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+func (m *OfpErrorExperimenterMsg) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+type OfpMultipartRequest struct {
+	//ofp_header header;
+	Type                 OfpMultipartType `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpMultipartType" json:"type,omitempty"`
+	Flags                uint32           `protobuf:"varint,2,opt,name=flags,proto3" json:"flags,omitempty"`
+	Body                 []byte           `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *OfpMultipartRequest) Reset()         { *m = OfpMultipartRequest{} }
+func (m *OfpMultipartRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpMultipartRequest) ProtoMessage()    {}
+func (*OfpMultipartRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{42}
+}
+
+func (m *OfpMultipartRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMultipartRequest.Unmarshal(m, b)
+}
+func (m *OfpMultipartRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMultipartRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpMultipartRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMultipartRequest.Merge(m, src)
+}
+func (m *OfpMultipartRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpMultipartRequest.Size(m)
+}
+func (m *OfpMultipartRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMultipartRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMultipartRequest proto.InternalMessageInfo
+
+func (m *OfpMultipartRequest) GetType() OfpMultipartType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpMultipartType_OFPMP_DESC
+}
+
+func (m *OfpMultipartRequest) GetFlags() uint32 {
+	if m != nil {
+		return m.Flags
+	}
+	return 0
+}
+
+func (m *OfpMultipartRequest) GetBody() []byte {
+	if m != nil {
+		return m.Body
+	}
+	return nil
+}
+
+type OfpMultipartReply struct {
+	//ofp_header header;
+	Type                 OfpMultipartType `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpMultipartType" json:"type,omitempty"`
+	Flags                uint32           `protobuf:"varint,2,opt,name=flags,proto3" json:"flags,omitempty"`
+	Body                 []byte           `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *OfpMultipartReply) Reset()         { *m = OfpMultipartReply{} }
+func (m *OfpMultipartReply) String() string { return proto.CompactTextString(m) }
+func (*OfpMultipartReply) ProtoMessage()    {}
+func (*OfpMultipartReply) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{43}
+}
+
+func (m *OfpMultipartReply) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMultipartReply.Unmarshal(m, b)
+}
+func (m *OfpMultipartReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMultipartReply.Marshal(b, m, deterministic)
+}
+func (m *OfpMultipartReply) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMultipartReply.Merge(m, src)
+}
+func (m *OfpMultipartReply) XXX_Size() int {
+	return xxx_messageInfo_OfpMultipartReply.Size(m)
+}
+func (m *OfpMultipartReply) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMultipartReply.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMultipartReply proto.InternalMessageInfo
+
+func (m *OfpMultipartReply) GetType() OfpMultipartType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpMultipartType_OFPMP_DESC
+}
+
+func (m *OfpMultipartReply) GetFlags() uint32 {
+	if m != nil {
+		return m.Flags
+	}
+	return 0
+}
+
+func (m *OfpMultipartReply) GetBody() []byte {
+	if m != nil {
+		return m.Body
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_DESC request.  Each entry is a NULL-terminated
+// ASCII string.
+type OfpDesc struct {
+	MfrDesc              string   `protobuf:"bytes,1,opt,name=mfr_desc,json=mfrDesc,proto3" json:"mfr_desc,omitempty"`
+	HwDesc               string   `protobuf:"bytes,2,opt,name=hw_desc,json=hwDesc,proto3" json:"hw_desc,omitempty"`
+	SwDesc               string   `protobuf:"bytes,3,opt,name=sw_desc,json=swDesc,proto3" json:"sw_desc,omitempty"`
+	SerialNum            string   `protobuf:"bytes,4,opt,name=serial_num,json=serialNum,proto3" json:"serial_num,omitempty"`
+	DpDesc               string   `protobuf:"bytes,5,opt,name=dp_desc,json=dpDesc,proto3" json:"dp_desc,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpDesc) Reset()         { *m = OfpDesc{} }
+func (m *OfpDesc) String() string { return proto.CompactTextString(m) }
+func (*OfpDesc) ProtoMessage()    {}
+func (*OfpDesc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{44}
+}
+
+func (m *OfpDesc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpDesc.Unmarshal(m, b)
+}
+func (m *OfpDesc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpDesc.Marshal(b, m, deterministic)
+}
+func (m *OfpDesc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpDesc.Merge(m, src)
+}
+func (m *OfpDesc) XXX_Size() int {
+	return xxx_messageInfo_OfpDesc.Size(m)
+}
+func (m *OfpDesc) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpDesc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpDesc proto.InternalMessageInfo
+
+func (m *OfpDesc) GetMfrDesc() string {
+	if m != nil {
+		return m.MfrDesc
+	}
+	return ""
+}
+
+func (m *OfpDesc) GetHwDesc() string {
+	if m != nil {
+		return m.HwDesc
+	}
+	return ""
+}
+
+func (m *OfpDesc) GetSwDesc() string {
+	if m != nil {
+		return m.SwDesc
+	}
+	return ""
+}
+
+func (m *OfpDesc) GetSerialNum() string {
+	if m != nil {
+		return m.SerialNum
+	}
+	return ""
+}
+
+func (m *OfpDesc) GetDpDesc() string {
+	if m != nil {
+		return m.DpDesc
+	}
+	return ""
+}
+
+// Body for ofp_multipart_request of type OFPMP_FLOW.
+type OfpFlowStatsRequest struct {
+	TableId              uint32    `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	OutPort              uint32    `protobuf:"varint,2,opt,name=out_port,json=outPort,proto3" json:"out_port,omitempty"`
+	OutGroup             uint32    `protobuf:"varint,3,opt,name=out_group,json=outGroup,proto3" json:"out_group,omitempty"`
+	Cookie               uint64    `protobuf:"varint,4,opt,name=cookie,proto3" json:"cookie,omitempty"`
+	CookieMask           uint64    `protobuf:"varint,5,opt,name=cookie_mask,json=cookieMask,proto3" json:"cookie_mask,omitempty"`
+	Match                *OfpMatch `protobuf:"bytes,6,opt,name=match,proto3" json:"match,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *OfpFlowStatsRequest) Reset()         { *m = OfpFlowStatsRequest{} }
+func (m *OfpFlowStatsRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpFlowStatsRequest) ProtoMessage()    {}
+func (*OfpFlowStatsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{45}
+}
+
+func (m *OfpFlowStatsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpFlowStatsRequest.Unmarshal(m, b)
+}
+func (m *OfpFlowStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpFlowStatsRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpFlowStatsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpFlowStatsRequest.Merge(m, src)
+}
+func (m *OfpFlowStatsRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpFlowStatsRequest.Size(m)
+}
+func (m *OfpFlowStatsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpFlowStatsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpFlowStatsRequest proto.InternalMessageInfo
+
+func (m *OfpFlowStatsRequest) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpFlowStatsRequest) GetOutPort() uint32 {
+	if m != nil {
+		return m.OutPort
+	}
+	return 0
+}
+
+func (m *OfpFlowStatsRequest) GetOutGroup() uint32 {
+	if m != nil {
+		return m.OutGroup
+	}
+	return 0
+}
+
+func (m *OfpFlowStatsRequest) GetCookie() uint64 {
+	if m != nil {
+		return m.Cookie
+	}
+	return 0
+}
+
+func (m *OfpFlowStatsRequest) GetCookieMask() uint64 {
+	if m != nil {
+		return m.CookieMask
+	}
+	return 0
+}
+
+func (m *OfpFlowStatsRequest) GetMatch() *OfpMatch {
+	if m != nil {
+		return m.Match
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_FLOW request.
+type OfpFlowStats struct {
+	Id                   uint64            `protobuf:"varint,14,opt,name=id,proto3" json:"id,omitempty"`
+	TableId              uint32            `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	DurationSec          uint32            `protobuf:"varint,2,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	DurationNsec         uint32            `protobuf:"varint,3,opt,name=duration_nsec,json=durationNsec,proto3" json:"duration_nsec,omitempty"`
+	Priority             uint32            `protobuf:"varint,4,opt,name=priority,proto3" json:"priority,omitempty"`
+	IdleTimeout          uint32            `protobuf:"varint,5,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
+	HardTimeout          uint32            `protobuf:"varint,6,opt,name=hard_timeout,json=hardTimeout,proto3" json:"hard_timeout,omitempty"`
+	Flags                uint32            `protobuf:"varint,7,opt,name=flags,proto3" json:"flags,omitempty"`
+	Cookie               uint64            `protobuf:"varint,8,opt,name=cookie,proto3" json:"cookie,omitempty"`
+	PacketCount          uint64            `protobuf:"varint,9,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"`
+	ByteCount            uint64            `protobuf:"varint,10,opt,name=byte_count,json=byteCount,proto3" json:"byte_count,omitempty"`
+	Match                *OfpMatch         `protobuf:"bytes,12,opt,name=match,proto3" json:"match,omitempty"`
+	Instructions         []*OfpInstruction `protobuf:"bytes,13,rep,name=instructions,proto3" json:"instructions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *OfpFlowStats) Reset()         { *m = OfpFlowStats{} }
+func (m *OfpFlowStats) String() string { return proto.CompactTextString(m) }
+func (*OfpFlowStats) ProtoMessage()    {}
+func (*OfpFlowStats) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{46}
+}
+
+func (m *OfpFlowStats) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpFlowStats.Unmarshal(m, b)
+}
+func (m *OfpFlowStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpFlowStats.Marshal(b, m, deterministic)
+}
+func (m *OfpFlowStats) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpFlowStats.Merge(m, src)
+}
+func (m *OfpFlowStats) XXX_Size() int {
+	return xxx_messageInfo_OfpFlowStats.Size(m)
+}
+func (m *OfpFlowStats) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpFlowStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpFlowStats proto.InternalMessageInfo
+
+func (m *OfpFlowStats) GetId() uint64 {
+	if m != nil {
+		return m.Id
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetDurationSec() uint32 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetDurationNsec() uint32 {
+	if m != nil {
+		return m.DurationNsec
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetPriority() uint32 {
+	if m != nil {
+		return m.Priority
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetIdleTimeout() uint32 {
+	if m != nil {
+		return m.IdleTimeout
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetHardTimeout() uint32 {
+	if m != nil {
+		return m.HardTimeout
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetFlags() uint32 {
+	if m != nil {
+		return m.Flags
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetCookie() uint64 {
+	if m != nil {
+		return m.Cookie
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetPacketCount() uint64 {
+	if m != nil {
+		return m.PacketCount
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetByteCount() uint64 {
+	if m != nil {
+		return m.ByteCount
+	}
+	return 0
+}
+
+func (m *OfpFlowStats) GetMatch() *OfpMatch {
+	if m != nil {
+		return m.Match
+	}
+	return nil
+}
+
+func (m *OfpFlowStats) GetInstructions() []*OfpInstruction {
+	if m != nil {
+		return m.Instructions
+	}
+	return nil
+}
+
+// Body for ofp_multipart_request of type OFPMP_AGGREGATE.
+type OfpAggregateStatsRequest struct {
+	TableId              uint32    `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	OutPort              uint32    `protobuf:"varint,2,opt,name=out_port,json=outPort,proto3" json:"out_port,omitempty"`
+	OutGroup             uint32    `protobuf:"varint,3,opt,name=out_group,json=outGroup,proto3" json:"out_group,omitempty"`
+	Cookie               uint64    `protobuf:"varint,4,opt,name=cookie,proto3" json:"cookie,omitempty"`
+	CookieMask           uint64    `protobuf:"varint,5,opt,name=cookie_mask,json=cookieMask,proto3" json:"cookie_mask,omitempty"`
+	Match                *OfpMatch `protobuf:"bytes,6,opt,name=match,proto3" json:"match,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *OfpAggregateStatsRequest) Reset()         { *m = OfpAggregateStatsRequest{} }
+func (m *OfpAggregateStatsRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpAggregateStatsRequest) ProtoMessage()    {}
+func (*OfpAggregateStatsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{47}
+}
+
+func (m *OfpAggregateStatsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpAggregateStatsRequest.Unmarshal(m, b)
+}
+func (m *OfpAggregateStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpAggregateStatsRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpAggregateStatsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpAggregateStatsRequest.Merge(m, src)
+}
+func (m *OfpAggregateStatsRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpAggregateStatsRequest.Size(m)
+}
+func (m *OfpAggregateStatsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpAggregateStatsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpAggregateStatsRequest proto.InternalMessageInfo
+
+func (m *OfpAggregateStatsRequest) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpAggregateStatsRequest) GetOutPort() uint32 {
+	if m != nil {
+		return m.OutPort
+	}
+	return 0
+}
+
+func (m *OfpAggregateStatsRequest) GetOutGroup() uint32 {
+	if m != nil {
+		return m.OutGroup
+	}
+	return 0
+}
+
+func (m *OfpAggregateStatsRequest) GetCookie() uint64 {
+	if m != nil {
+		return m.Cookie
+	}
+	return 0
+}
+
+func (m *OfpAggregateStatsRequest) GetCookieMask() uint64 {
+	if m != nil {
+		return m.CookieMask
+	}
+	return 0
+}
+
+func (m *OfpAggregateStatsRequest) GetMatch() *OfpMatch {
+	if m != nil {
+		return m.Match
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_AGGREGATE request.
+type OfpAggregateStatsReply struct {
+	PacketCount          uint64   `protobuf:"varint,1,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"`
+	ByteCount            uint64   `protobuf:"varint,2,opt,name=byte_count,json=byteCount,proto3" json:"byte_count,omitempty"`
+	FlowCount            uint32   `protobuf:"varint,3,opt,name=flow_count,json=flowCount,proto3" json:"flow_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpAggregateStatsReply) Reset()         { *m = OfpAggregateStatsReply{} }
+func (m *OfpAggregateStatsReply) String() string { return proto.CompactTextString(m) }
+func (*OfpAggregateStatsReply) ProtoMessage()    {}
+func (*OfpAggregateStatsReply) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{48}
+}
+
+func (m *OfpAggregateStatsReply) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpAggregateStatsReply.Unmarshal(m, b)
+}
+func (m *OfpAggregateStatsReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpAggregateStatsReply.Marshal(b, m, deterministic)
+}
+func (m *OfpAggregateStatsReply) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpAggregateStatsReply.Merge(m, src)
+}
+func (m *OfpAggregateStatsReply) XXX_Size() int {
+	return xxx_messageInfo_OfpAggregateStatsReply.Size(m)
+}
+func (m *OfpAggregateStatsReply) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpAggregateStatsReply.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpAggregateStatsReply proto.InternalMessageInfo
+
+func (m *OfpAggregateStatsReply) GetPacketCount() uint64 {
+	if m != nil {
+		return m.PacketCount
+	}
+	return 0
+}
+
+func (m *OfpAggregateStatsReply) GetByteCount() uint64 {
+	if m != nil {
+		return m.ByteCount
+	}
+	return 0
+}
+
+func (m *OfpAggregateStatsReply) GetFlowCount() uint32 {
+	if m != nil {
+		return m.FlowCount
+	}
+	return 0
+}
+
+// Common header for all Table Feature Properties
+type OfpTableFeatureProperty struct {
+	Type OfpTableFeaturePropType `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpTableFeaturePropType" json:"type,omitempty"`
+	// Types that are valid to be assigned to Value:
+	//	*OfpTableFeatureProperty_Instructions
+	//	*OfpTableFeatureProperty_NextTables
+	//	*OfpTableFeatureProperty_Actions
+	//	*OfpTableFeatureProperty_Oxm
+	//	*OfpTableFeatureProperty_Experimenter
+	Value                isOfpTableFeatureProperty_Value `protobuf_oneof:"value"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *OfpTableFeatureProperty) Reset()         { *m = OfpTableFeatureProperty{} }
+func (m *OfpTableFeatureProperty) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeatureProperty) ProtoMessage()    {}
+func (*OfpTableFeatureProperty) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{49}
+}
+
+func (m *OfpTableFeatureProperty) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableFeatureProperty.Unmarshal(m, b)
+}
+func (m *OfpTableFeatureProperty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableFeatureProperty.Marshal(b, m, deterministic)
+}
+func (m *OfpTableFeatureProperty) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableFeatureProperty.Merge(m, src)
+}
+func (m *OfpTableFeatureProperty) XXX_Size() int {
+	return xxx_messageInfo_OfpTableFeatureProperty.Size(m)
+}
+func (m *OfpTableFeatureProperty) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableFeatureProperty.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableFeatureProperty proto.InternalMessageInfo
+
+func (m *OfpTableFeatureProperty) GetType() OfpTableFeaturePropType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS
+}
+
+type isOfpTableFeatureProperty_Value interface {
+	isOfpTableFeatureProperty_Value()
+}
+
+type OfpTableFeatureProperty_Instructions struct {
+	Instructions *OfpTableFeaturePropInstructions `protobuf:"bytes,2,opt,name=instructions,proto3,oneof"`
+}
+
+type OfpTableFeatureProperty_NextTables struct {
+	NextTables *OfpTableFeaturePropNextTables `protobuf:"bytes,3,opt,name=next_tables,json=nextTables,proto3,oneof"`
+}
+
+type OfpTableFeatureProperty_Actions struct {
+	Actions *OfpTableFeaturePropActions `protobuf:"bytes,4,opt,name=actions,proto3,oneof"`
+}
+
+type OfpTableFeatureProperty_Oxm struct {
+	Oxm *OfpTableFeaturePropOxm `protobuf:"bytes,5,opt,name=oxm,proto3,oneof"`
+}
+
+type OfpTableFeatureProperty_Experimenter struct {
+	Experimenter *OfpTableFeaturePropExperimenter `protobuf:"bytes,6,opt,name=experimenter,proto3,oneof"`
+}
+
+func (*OfpTableFeatureProperty_Instructions) isOfpTableFeatureProperty_Value() {}
+
+func (*OfpTableFeatureProperty_NextTables) isOfpTableFeatureProperty_Value() {}
+
+func (*OfpTableFeatureProperty_Actions) isOfpTableFeatureProperty_Value() {}
+
+func (*OfpTableFeatureProperty_Oxm) isOfpTableFeatureProperty_Value() {}
+
+func (*OfpTableFeatureProperty_Experimenter) isOfpTableFeatureProperty_Value() {}
+
+func (m *OfpTableFeatureProperty) GetValue() isOfpTableFeatureProperty_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+func (m *OfpTableFeatureProperty) GetInstructions() *OfpTableFeaturePropInstructions {
+	if x, ok := m.GetValue().(*OfpTableFeatureProperty_Instructions); ok {
+		return x.Instructions
+	}
+	return nil
+}
+
+func (m *OfpTableFeatureProperty) GetNextTables() *OfpTableFeaturePropNextTables {
+	if x, ok := m.GetValue().(*OfpTableFeatureProperty_NextTables); ok {
+		return x.NextTables
+	}
+	return nil
+}
+
+func (m *OfpTableFeatureProperty) GetActions() *OfpTableFeaturePropActions {
+	if x, ok := m.GetValue().(*OfpTableFeatureProperty_Actions); ok {
+		return x.Actions
+	}
+	return nil
+}
+
+func (m *OfpTableFeatureProperty) GetOxm() *OfpTableFeaturePropOxm {
+	if x, ok := m.GetValue().(*OfpTableFeatureProperty_Oxm); ok {
+		return x.Oxm
+	}
+	return nil
+}
+
+func (m *OfpTableFeatureProperty) GetExperimenter() *OfpTableFeaturePropExperimenter {
+	if x, ok := m.GetValue().(*OfpTableFeatureProperty_Experimenter); ok {
+		return x.Experimenter
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*OfpTableFeatureProperty) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*OfpTableFeatureProperty_Instructions)(nil),
+		(*OfpTableFeatureProperty_NextTables)(nil),
+		(*OfpTableFeatureProperty_Actions)(nil),
+		(*OfpTableFeatureProperty_Oxm)(nil),
+		(*OfpTableFeatureProperty_Experimenter)(nil),
+	}
+}
+
+// Instructions property
+type OfpTableFeaturePropInstructions struct {
+	// One of OFPTFPT_INSTRUCTIONS,
+	//OFPTFPT_INSTRUCTIONS_MISS.
+	Instructions         []*OfpInstruction `protobuf:"bytes,1,rep,name=instructions,proto3" json:"instructions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *OfpTableFeaturePropInstructions) Reset()         { *m = OfpTableFeaturePropInstructions{} }
+func (m *OfpTableFeaturePropInstructions) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropInstructions) ProtoMessage()    {}
+func (*OfpTableFeaturePropInstructions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{50}
+}
+
+func (m *OfpTableFeaturePropInstructions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableFeaturePropInstructions.Unmarshal(m, b)
+}
+func (m *OfpTableFeaturePropInstructions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableFeaturePropInstructions.Marshal(b, m, deterministic)
+}
+func (m *OfpTableFeaturePropInstructions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableFeaturePropInstructions.Merge(m, src)
+}
+func (m *OfpTableFeaturePropInstructions) XXX_Size() int {
+	return xxx_messageInfo_OfpTableFeaturePropInstructions.Size(m)
+}
+func (m *OfpTableFeaturePropInstructions) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableFeaturePropInstructions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableFeaturePropInstructions proto.InternalMessageInfo
+
+func (m *OfpTableFeaturePropInstructions) GetInstructions() []*OfpInstruction {
+	if m != nil {
+		return m.Instructions
+	}
+	return nil
+}
+
+// Next Tables property
+type OfpTableFeaturePropNextTables struct {
+	// One of OFPTFPT_NEXT_TABLES,
+	//OFPTFPT_NEXT_TABLES_MISS.
+	NextTableIds         []uint32 `protobuf:"varint,1,rep,packed,name=next_table_ids,json=nextTableIds,proto3" json:"next_table_ids,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpTableFeaturePropNextTables) Reset()         { *m = OfpTableFeaturePropNextTables{} }
+func (m *OfpTableFeaturePropNextTables) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropNextTables) ProtoMessage()    {}
+func (*OfpTableFeaturePropNextTables) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{51}
+}
+
+func (m *OfpTableFeaturePropNextTables) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableFeaturePropNextTables.Unmarshal(m, b)
+}
+func (m *OfpTableFeaturePropNextTables) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableFeaturePropNextTables.Marshal(b, m, deterministic)
+}
+func (m *OfpTableFeaturePropNextTables) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableFeaturePropNextTables.Merge(m, src)
+}
+func (m *OfpTableFeaturePropNextTables) XXX_Size() int {
+	return xxx_messageInfo_OfpTableFeaturePropNextTables.Size(m)
+}
+func (m *OfpTableFeaturePropNextTables) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableFeaturePropNextTables.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableFeaturePropNextTables proto.InternalMessageInfo
+
+func (m *OfpTableFeaturePropNextTables) GetNextTableIds() []uint32 {
+	if m != nil {
+		return m.NextTableIds
+	}
+	return nil
+}
+
+// Actions property
+type OfpTableFeaturePropActions struct {
+	// One of OFPTFPT_WRITE_ACTIONS,
+	//OFPTFPT_WRITE_ACTIONS_MISS,
+	//OFPTFPT_APPLY_ACTIONS,
+	//OFPTFPT_APPLY_ACTIONS_MISS.
+	Actions              []*OfpAction `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *OfpTableFeaturePropActions) Reset()         { *m = OfpTableFeaturePropActions{} }
+func (m *OfpTableFeaturePropActions) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropActions) ProtoMessage()    {}
+func (*OfpTableFeaturePropActions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{52}
+}
+
+func (m *OfpTableFeaturePropActions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableFeaturePropActions.Unmarshal(m, b)
+}
+func (m *OfpTableFeaturePropActions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableFeaturePropActions.Marshal(b, m, deterministic)
+}
+func (m *OfpTableFeaturePropActions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableFeaturePropActions.Merge(m, src)
+}
+func (m *OfpTableFeaturePropActions) XXX_Size() int {
+	return xxx_messageInfo_OfpTableFeaturePropActions.Size(m)
+}
+func (m *OfpTableFeaturePropActions) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableFeaturePropActions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableFeaturePropActions proto.InternalMessageInfo
+
+func (m *OfpTableFeaturePropActions) GetActions() []*OfpAction {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+// Match, Wildcard or Set-Field property
+type OfpTableFeaturePropOxm struct {
+	// TODO is this a uint32???
+	OxmIds               []uint32 `protobuf:"varint,3,rep,packed,name=oxm_ids,json=oxmIds,proto3" json:"oxm_ids,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpTableFeaturePropOxm) Reset()         { *m = OfpTableFeaturePropOxm{} }
+func (m *OfpTableFeaturePropOxm) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropOxm) ProtoMessage()    {}
+func (*OfpTableFeaturePropOxm) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{53}
+}
+
+func (m *OfpTableFeaturePropOxm) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableFeaturePropOxm.Unmarshal(m, b)
+}
+func (m *OfpTableFeaturePropOxm) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableFeaturePropOxm.Marshal(b, m, deterministic)
+}
+func (m *OfpTableFeaturePropOxm) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableFeaturePropOxm.Merge(m, src)
+}
+func (m *OfpTableFeaturePropOxm) XXX_Size() int {
+	return xxx_messageInfo_OfpTableFeaturePropOxm.Size(m)
+}
+func (m *OfpTableFeaturePropOxm) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableFeaturePropOxm.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableFeaturePropOxm proto.InternalMessageInfo
+
+func (m *OfpTableFeaturePropOxm) GetOxmIds() []uint32 {
+	if m != nil {
+		return m.OxmIds
+	}
+	return nil
+}
+
+// Experimenter table feature property
+type OfpTableFeaturePropExperimenter struct {
+	// One of OFPTFPT_EXPERIMENTER,
+	//OFPTFPT_EXPERIMENTER_MISS.
+	Experimenter         uint32   `protobuf:"varint,2,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	ExpType              uint32   `protobuf:"varint,3,opt,name=exp_type,json=expType,proto3" json:"exp_type,omitempty"`
+	ExperimenterData     []uint32 `protobuf:"varint,4,rep,packed,name=experimenter_data,json=experimenterData,proto3" json:"experimenter_data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpTableFeaturePropExperimenter) Reset()         { *m = OfpTableFeaturePropExperimenter{} }
+func (m *OfpTableFeaturePropExperimenter) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropExperimenter) ProtoMessage()    {}
+func (*OfpTableFeaturePropExperimenter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{54}
+}
+
+func (m *OfpTableFeaturePropExperimenter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableFeaturePropExperimenter.Unmarshal(m, b)
+}
+func (m *OfpTableFeaturePropExperimenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableFeaturePropExperimenter.Marshal(b, m, deterministic)
+}
+func (m *OfpTableFeaturePropExperimenter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableFeaturePropExperimenter.Merge(m, src)
+}
+func (m *OfpTableFeaturePropExperimenter) XXX_Size() int {
+	return xxx_messageInfo_OfpTableFeaturePropExperimenter.Size(m)
+}
+func (m *OfpTableFeaturePropExperimenter) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableFeaturePropExperimenter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableFeaturePropExperimenter proto.InternalMessageInfo
+
+func (m *OfpTableFeaturePropExperimenter) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+func (m *OfpTableFeaturePropExperimenter) GetExpType() uint32 {
+	if m != nil {
+		return m.ExpType
+	}
+	return 0
+}
+
+func (m *OfpTableFeaturePropExperimenter) GetExperimenterData() []uint32 {
+	if m != nil {
+		return m.ExperimenterData
+	}
+	return nil
+}
+
+// Body for ofp_multipart_request of type OFPMP_TABLE_FEATURES./
+// Body of reply to OFPMP_TABLE_FEATURES request.
+type OfpTableFeatures struct {
+	TableId       uint32 `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	Name          string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	MetadataMatch uint64 `protobuf:"varint,3,opt,name=metadata_match,json=metadataMatch,proto3" json:"metadata_match,omitempty"`
+	MetadataWrite uint64 `protobuf:"varint,4,opt,name=metadata_write,json=metadataWrite,proto3" json:"metadata_write,omitempty"`
+	Config        uint32 `protobuf:"varint,5,opt,name=config,proto3" json:"config,omitempty"`
+	MaxEntries    uint32 `protobuf:"varint,6,opt,name=max_entries,json=maxEntries,proto3" json:"max_entries,omitempty"`
+	// Table Feature Property list
+	Properties           []*OfpTableFeatureProperty `protobuf:"bytes,7,rep,name=properties,proto3" json:"properties,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
+	XXX_unrecognized     []byte                     `json:"-"`
+	XXX_sizecache        int32                      `json:"-"`
+}
+
+func (m *OfpTableFeatures) Reset()         { *m = OfpTableFeatures{} }
+func (m *OfpTableFeatures) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeatures) ProtoMessage()    {}
+func (*OfpTableFeatures) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{55}
+}
+
+func (m *OfpTableFeatures) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableFeatures.Unmarshal(m, b)
+}
+func (m *OfpTableFeatures) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableFeatures.Marshal(b, m, deterministic)
+}
+func (m *OfpTableFeatures) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableFeatures.Merge(m, src)
+}
+func (m *OfpTableFeatures) XXX_Size() int {
+	return xxx_messageInfo_OfpTableFeatures.Size(m)
+}
+func (m *OfpTableFeatures) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableFeatures.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableFeatures proto.InternalMessageInfo
+
+func (m *OfpTableFeatures) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpTableFeatures) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *OfpTableFeatures) GetMetadataMatch() uint64 {
+	if m != nil {
+		return m.MetadataMatch
+	}
+	return 0
+}
+
+func (m *OfpTableFeatures) GetMetadataWrite() uint64 {
+	if m != nil {
+		return m.MetadataWrite
+	}
+	return 0
+}
+
+func (m *OfpTableFeatures) GetConfig() uint32 {
+	if m != nil {
+		return m.Config
+	}
+	return 0
+}
+
+func (m *OfpTableFeatures) GetMaxEntries() uint32 {
+	if m != nil {
+		return m.MaxEntries
+	}
+	return 0
+}
+
+func (m *OfpTableFeatures) GetProperties() []*OfpTableFeatureProperty {
+	if m != nil {
+		return m.Properties
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_TABLE request.
+type OfpTableStats struct {
+	TableId              uint32   `protobuf:"varint,1,opt,name=table_id,json=tableId,proto3" json:"table_id,omitempty"`
+	ActiveCount          uint32   `protobuf:"varint,2,opt,name=active_count,json=activeCount,proto3" json:"active_count,omitempty"`
+	LookupCount          uint64   `protobuf:"varint,3,opt,name=lookup_count,json=lookupCount,proto3" json:"lookup_count,omitempty"`
+	MatchedCount         uint64   `protobuf:"varint,4,opt,name=matched_count,json=matchedCount,proto3" json:"matched_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpTableStats) Reset()         { *m = OfpTableStats{} }
+func (m *OfpTableStats) String() string { return proto.CompactTextString(m) }
+func (*OfpTableStats) ProtoMessage()    {}
+func (*OfpTableStats) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{56}
+}
+
+func (m *OfpTableStats) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpTableStats.Unmarshal(m, b)
+}
+func (m *OfpTableStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpTableStats.Marshal(b, m, deterministic)
+}
+func (m *OfpTableStats) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpTableStats.Merge(m, src)
+}
+func (m *OfpTableStats) XXX_Size() int {
+	return xxx_messageInfo_OfpTableStats.Size(m)
+}
+func (m *OfpTableStats) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpTableStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpTableStats proto.InternalMessageInfo
+
+func (m *OfpTableStats) GetTableId() uint32 {
+	if m != nil {
+		return m.TableId
+	}
+	return 0
+}
+
+func (m *OfpTableStats) GetActiveCount() uint32 {
+	if m != nil {
+		return m.ActiveCount
+	}
+	return 0
+}
+
+func (m *OfpTableStats) GetLookupCount() uint64 {
+	if m != nil {
+		return m.LookupCount
+	}
+	return 0
+}
+
+func (m *OfpTableStats) GetMatchedCount() uint64 {
+	if m != nil {
+		return m.MatchedCount
+	}
+	return 0
+}
+
+// Body for ofp_multipart_request of type OFPMP_PORT.
+type OfpPortStatsRequest struct {
+	PortNo               uint32   `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpPortStatsRequest) Reset()         { *m = OfpPortStatsRequest{} }
+func (m *OfpPortStatsRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpPortStatsRequest) ProtoMessage()    {}
+func (*OfpPortStatsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{57}
+}
+
+func (m *OfpPortStatsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPortStatsRequest.Unmarshal(m, b)
+}
+func (m *OfpPortStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPortStatsRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpPortStatsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPortStatsRequest.Merge(m, src)
+}
+func (m *OfpPortStatsRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpPortStatsRequest.Size(m)
+}
+func (m *OfpPortStatsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPortStatsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPortStatsRequest proto.InternalMessageInfo
+
+func (m *OfpPortStatsRequest) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+// Body of reply to OFPMP_PORT request. If a counter is unsupported, set
+// the field to all ones.
+type OfpPortStats struct {
+	PortNo               uint32   `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	RxPackets            uint64   `protobuf:"varint,2,opt,name=rx_packets,json=rxPackets,proto3" json:"rx_packets,omitempty"`
+	TxPackets            uint64   `protobuf:"varint,3,opt,name=tx_packets,json=txPackets,proto3" json:"tx_packets,omitempty"`
+	RxBytes              uint64   `protobuf:"varint,4,opt,name=rx_bytes,json=rxBytes,proto3" json:"rx_bytes,omitempty"`
+	TxBytes              uint64   `protobuf:"varint,5,opt,name=tx_bytes,json=txBytes,proto3" json:"tx_bytes,omitempty"`
+	RxDropped            uint64   `protobuf:"varint,6,opt,name=rx_dropped,json=rxDropped,proto3" json:"rx_dropped,omitempty"`
+	TxDropped            uint64   `protobuf:"varint,7,opt,name=tx_dropped,json=txDropped,proto3" json:"tx_dropped,omitempty"`
+	RxErrors             uint64   `protobuf:"varint,8,opt,name=rx_errors,json=rxErrors,proto3" json:"rx_errors,omitempty"`
+	TxErrors             uint64   `protobuf:"varint,9,opt,name=tx_errors,json=txErrors,proto3" json:"tx_errors,omitempty"`
+	RxFrameErr           uint64   `protobuf:"varint,10,opt,name=rx_frame_err,json=rxFrameErr,proto3" json:"rx_frame_err,omitempty"`
+	RxOverErr            uint64   `protobuf:"varint,11,opt,name=rx_over_err,json=rxOverErr,proto3" json:"rx_over_err,omitempty"`
+	RxCrcErr             uint64   `protobuf:"varint,12,opt,name=rx_crc_err,json=rxCrcErr,proto3" json:"rx_crc_err,omitempty"`
+	Collisions           uint64   `protobuf:"varint,13,opt,name=collisions,proto3" json:"collisions,omitempty"`
+	DurationSec          uint32   `protobuf:"varint,14,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	DurationNsec         uint32   `protobuf:"varint,15,opt,name=duration_nsec,json=durationNsec,proto3" json:"duration_nsec,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpPortStats) Reset()         { *m = OfpPortStats{} }
+func (m *OfpPortStats) String() string { return proto.CompactTextString(m) }
+func (*OfpPortStats) ProtoMessage()    {}
+func (*OfpPortStats) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{58}
+}
+
+func (m *OfpPortStats) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPortStats.Unmarshal(m, b)
+}
+func (m *OfpPortStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPortStats.Marshal(b, m, deterministic)
+}
+func (m *OfpPortStats) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPortStats.Merge(m, src)
+}
+func (m *OfpPortStats) XXX_Size() int {
+	return xxx_messageInfo_OfpPortStats.Size(m)
+}
+func (m *OfpPortStats) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPortStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPortStats proto.InternalMessageInfo
+
+func (m *OfpPortStats) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetRxPackets() uint64 {
+	if m != nil {
+		return m.RxPackets
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetTxPackets() uint64 {
+	if m != nil {
+		return m.TxPackets
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetRxBytes() uint64 {
+	if m != nil {
+		return m.RxBytes
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetTxBytes() uint64 {
+	if m != nil {
+		return m.TxBytes
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetRxDropped() uint64 {
+	if m != nil {
+		return m.RxDropped
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetTxDropped() uint64 {
+	if m != nil {
+		return m.TxDropped
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetRxErrors() uint64 {
+	if m != nil {
+		return m.RxErrors
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetTxErrors() uint64 {
+	if m != nil {
+		return m.TxErrors
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetRxFrameErr() uint64 {
+	if m != nil {
+		return m.RxFrameErr
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetRxOverErr() uint64 {
+	if m != nil {
+		return m.RxOverErr
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetRxCrcErr() uint64 {
+	if m != nil {
+		return m.RxCrcErr
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetCollisions() uint64 {
+	if m != nil {
+		return m.Collisions
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetDurationSec() uint32 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *OfpPortStats) GetDurationNsec() uint32 {
+	if m != nil {
+		return m.DurationNsec
+	}
+	return 0
+}
+
+// Body of OFPMP_GROUP request.
+type OfpGroupStatsRequest struct {
+	GroupId              uint32   `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpGroupStatsRequest) Reset()         { *m = OfpGroupStatsRequest{} }
+func (m *OfpGroupStatsRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpGroupStatsRequest) ProtoMessage()    {}
+func (*OfpGroupStatsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{59}
+}
+
+func (m *OfpGroupStatsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpGroupStatsRequest.Unmarshal(m, b)
+}
+func (m *OfpGroupStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpGroupStatsRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpGroupStatsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpGroupStatsRequest.Merge(m, src)
+}
+func (m *OfpGroupStatsRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpGroupStatsRequest.Size(m)
+}
+func (m *OfpGroupStatsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpGroupStatsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpGroupStatsRequest proto.InternalMessageInfo
+
+func (m *OfpGroupStatsRequest) GetGroupId() uint32 {
+	if m != nil {
+		return m.GroupId
+	}
+	return 0
+}
+
+// Used in group stats replies.
+type OfpBucketCounter struct {
+	PacketCount          uint64   `protobuf:"varint,1,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"`
+	ByteCount            uint64   `protobuf:"varint,2,opt,name=byte_count,json=byteCount,proto3" json:"byte_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpBucketCounter) Reset()         { *m = OfpBucketCounter{} }
+func (m *OfpBucketCounter) String() string { return proto.CompactTextString(m) }
+func (*OfpBucketCounter) ProtoMessage()    {}
+func (*OfpBucketCounter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{60}
+}
+
+func (m *OfpBucketCounter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpBucketCounter.Unmarshal(m, b)
+}
+func (m *OfpBucketCounter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpBucketCounter.Marshal(b, m, deterministic)
+}
+func (m *OfpBucketCounter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpBucketCounter.Merge(m, src)
+}
+func (m *OfpBucketCounter) XXX_Size() int {
+	return xxx_messageInfo_OfpBucketCounter.Size(m)
+}
+func (m *OfpBucketCounter) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpBucketCounter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpBucketCounter proto.InternalMessageInfo
+
+func (m *OfpBucketCounter) GetPacketCount() uint64 {
+	if m != nil {
+		return m.PacketCount
+	}
+	return 0
+}
+
+func (m *OfpBucketCounter) GetByteCount() uint64 {
+	if m != nil {
+		return m.ByteCount
+	}
+	return 0
+}
+
+// Body of reply to OFPMP_GROUP request.
+type OfpGroupStats struct {
+	GroupId              uint32              `protobuf:"varint,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
+	RefCount             uint32              `protobuf:"varint,2,opt,name=ref_count,json=refCount,proto3" json:"ref_count,omitempty"`
+	PacketCount          uint64              `protobuf:"varint,3,opt,name=packet_count,json=packetCount,proto3" json:"packet_count,omitempty"`
+	ByteCount            uint64              `protobuf:"varint,4,opt,name=byte_count,json=byteCount,proto3" json:"byte_count,omitempty"`
+	DurationSec          uint32              `protobuf:"varint,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	DurationNsec         uint32              `protobuf:"varint,6,opt,name=duration_nsec,json=durationNsec,proto3" json:"duration_nsec,omitempty"`
+	BucketStats          []*OfpBucketCounter `protobuf:"bytes,7,rep,name=bucket_stats,json=bucketStats,proto3" json:"bucket_stats,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *OfpGroupStats) Reset()         { *m = OfpGroupStats{} }
+func (m *OfpGroupStats) String() string { return proto.CompactTextString(m) }
+func (*OfpGroupStats) ProtoMessage()    {}
+func (*OfpGroupStats) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{61}
+}
+
+func (m *OfpGroupStats) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpGroupStats.Unmarshal(m, b)
+}
+func (m *OfpGroupStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpGroupStats.Marshal(b, m, deterministic)
+}
+func (m *OfpGroupStats) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpGroupStats.Merge(m, src)
+}
+func (m *OfpGroupStats) XXX_Size() int {
+	return xxx_messageInfo_OfpGroupStats.Size(m)
+}
+func (m *OfpGroupStats) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpGroupStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpGroupStats proto.InternalMessageInfo
+
+func (m *OfpGroupStats) GetGroupId() uint32 {
+	if m != nil {
+		return m.GroupId
+	}
+	return 0
+}
+
+func (m *OfpGroupStats) GetRefCount() uint32 {
+	if m != nil {
+		return m.RefCount
+	}
+	return 0
+}
+
+func (m *OfpGroupStats) GetPacketCount() uint64 {
+	if m != nil {
+		return m.PacketCount
+	}
+	return 0
+}
+
+func (m *OfpGroupStats) GetByteCount() uint64 {
+	if m != nil {
+		return m.ByteCount
+	}
+	return 0
+}
+
+func (m *OfpGroupStats) GetDurationSec() uint32 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *OfpGroupStats) GetDurationNsec() uint32 {
+	if m != nil {
+		return m.DurationNsec
+	}
+	return 0
+}
+
+func (m *OfpGroupStats) GetBucketStats() []*OfpBucketCounter {
+	if m != nil {
+		return m.BucketStats
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_GROUP_DESC request.
+type OfpGroupDesc struct {
+	Type                 OfpGroupType `protobuf:"varint,1,opt,name=type,proto3,enum=openflow_13.OfpGroupType" json:"type,omitempty"`
+	GroupId              uint32       `protobuf:"varint,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"`
+	Buckets              []*OfpBucket `protobuf:"bytes,3,rep,name=buckets,proto3" json:"buckets,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *OfpGroupDesc) Reset()         { *m = OfpGroupDesc{} }
+func (m *OfpGroupDesc) String() string { return proto.CompactTextString(m) }
+func (*OfpGroupDesc) ProtoMessage()    {}
+func (*OfpGroupDesc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{62}
+}
+
+func (m *OfpGroupDesc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpGroupDesc.Unmarshal(m, b)
+}
+func (m *OfpGroupDesc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpGroupDesc.Marshal(b, m, deterministic)
+}
+func (m *OfpGroupDesc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpGroupDesc.Merge(m, src)
+}
+func (m *OfpGroupDesc) XXX_Size() int {
+	return xxx_messageInfo_OfpGroupDesc.Size(m)
+}
+func (m *OfpGroupDesc) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpGroupDesc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpGroupDesc proto.InternalMessageInfo
+
+func (m *OfpGroupDesc) GetType() OfpGroupType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpGroupType_OFPGT_ALL
+}
+
+func (m *OfpGroupDesc) GetGroupId() uint32 {
+	if m != nil {
+		return m.GroupId
+	}
+	return 0
+}
+
+func (m *OfpGroupDesc) GetBuckets() []*OfpBucket {
+	if m != nil {
+		return m.Buckets
+	}
+	return nil
+}
+
+type OfpGroupEntry struct {
+	Desc                 *OfpGroupDesc  `protobuf:"bytes,1,opt,name=desc,proto3" json:"desc,omitempty"`
+	Stats                *OfpGroupStats `protobuf:"bytes,2,opt,name=stats,proto3" json:"stats,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *OfpGroupEntry) Reset()         { *m = OfpGroupEntry{} }
+func (m *OfpGroupEntry) String() string { return proto.CompactTextString(m) }
+func (*OfpGroupEntry) ProtoMessage()    {}
+func (*OfpGroupEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{63}
+}
+
+func (m *OfpGroupEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpGroupEntry.Unmarshal(m, b)
+}
+func (m *OfpGroupEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpGroupEntry.Marshal(b, m, deterministic)
+}
+func (m *OfpGroupEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpGroupEntry.Merge(m, src)
+}
+func (m *OfpGroupEntry) XXX_Size() int {
+	return xxx_messageInfo_OfpGroupEntry.Size(m)
+}
+func (m *OfpGroupEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpGroupEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpGroupEntry proto.InternalMessageInfo
+
+func (m *OfpGroupEntry) GetDesc() *OfpGroupDesc {
+	if m != nil {
+		return m.Desc
+	}
+	return nil
+}
+
+func (m *OfpGroupEntry) GetStats() *OfpGroupStats {
+	if m != nil {
+		return m.Stats
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_GROUP_FEATURES request. Group features.
+type OfpGroupFeatures struct {
+	Types                uint32   `protobuf:"varint,1,opt,name=types,proto3" json:"types,omitempty"`
+	Capabilities         uint32   `protobuf:"varint,2,opt,name=capabilities,proto3" json:"capabilities,omitempty"`
+	MaxGroups            []uint32 `protobuf:"varint,3,rep,packed,name=max_groups,json=maxGroups,proto3" json:"max_groups,omitempty"`
+	Actions              []uint32 `protobuf:"varint,4,rep,packed,name=actions,proto3" json:"actions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpGroupFeatures) Reset()         { *m = OfpGroupFeatures{} }
+func (m *OfpGroupFeatures) String() string { return proto.CompactTextString(m) }
+func (*OfpGroupFeatures) ProtoMessage()    {}
+func (*OfpGroupFeatures) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{64}
+}
+
+func (m *OfpGroupFeatures) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpGroupFeatures.Unmarshal(m, b)
+}
+func (m *OfpGroupFeatures) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpGroupFeatures.Marshal(b, m, deterministic)
+}
+func (m *OfpGroupFeatures) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpGroupFeatures.Merge(m, src)
+}
+func (m *OfpGroupFeatures) XXX_Size() int {
+	return xxx_messageInfo_OfpGroupFeatures.Size(m)
+}
+func (m *OfpGroupFeatures) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpGroupFeatures.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpGroupFeatures proto.InternalMessageInfo
+
+func (m *OfpGroupFeatures) GetTypes() uint32 {
+	if m != nil {
+		return m.Types
+	}
+	return 0
+}
+
+func (m *OfpGroupFeatures) GetCapabilities() uint32 {
+	if m != nil {
+		return m.Capabilities
+	}
+	return 0
+}
+
+func (m *OfpGroupFeatures) GetMaxGroups() []uint32 {
+	if m != nil {
+		return m.MaxGroups
+	}
+	return nil
+}
+
+func (m *OfpGroupFeatures) GetActions() []uint32 {
+	if m != nil {
+		return m.Actions
+	}
+	return nil
+}
+
+// Body of OFPMP_METER and OFPMP_METER_CONFIG requests.
+type OfpMeterMultipartRequest struct {
+	MeterId              uint32   `protobuf:"varint,1,opt,name=meter_id,json=meterId,proto3" json:"meter_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpMeterMultipartRequest) Reset()         { *m = OfpMeterMultipartRequest{} }
+func (m *OfpMeterMultipartRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterMultipartRequest) ProtoMessage()    {}
+func (*OfpMeterMultipartRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{65}
+}
+
+func (m *OfpMeterMultipartRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterMultipartRequest.Unmarshal(m, b)
+}
+func (m *OfpMeterMultipartRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterMultipartRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterMultipartRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterMultipartRequest.Merge(m, src)
+}
+func (m *OfpMeterMultipartRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterMultipartRequest.Size(m)
+}
+func (m *OfpMeterMultipartRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterMultipartRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterMultipartRequest proto.InternalMessageInfo
+
+func (m *OfpMeterMultipartRequest) GetMeterId() uint32 {
+	if m != nil {
+		return m.MeterId
+	}
+	return 0
+}
+
+// Statistics for each meter band
+type OfpMeterBandStats struct {
+	PacketBandCount      uint64   `protobuf:"varint,1,opt,name=packet_band_count,json=packetBandCount,proto3" json:"packet_band_count,omitempty"`
+	ByteBandCount        uint64   `protobuf:"varint,2,opt,name=byte_band_count,json=byteBandCount,proto3" json:"byte_band_count,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpMeterBandStats) Reset()         { *m = OfpMeterBandStats{} }
+func (m *OfpMeterBandStats) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterBandStats) ProtoMessage()    {}
+func (*OfpMeterBandStats) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{66}
+}
+
+func (m *OfpMeterBandStats) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterBandStats.Unmarshal(m, b)
+}
+func (m *OfpMeterBandStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterBandStats.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterBandStats) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterBandStats.Merge(m, src)
+}
+func (m *OfpMeterBandStats) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterBandStats.Size(m)
+}
+func (m *OfpMeterBandStats) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterBandStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterBandStats proto.InternalMessageInfo
+
+func (m *OfpMeterBandStats) GetPacketBandCount() uint64 {
+	if m != nil {
+		return m.PacketBandCount
+	}
+	return 0
+}
+
+func (m *OfpMeterBandStats) GetByteBandCount() uint64 {
+	if m != nil {
+		return m.ByteBandCount
+	}
+	return 0
+}
+
+// Body of reply to OFPMP_METER request. Meter statistics.
+type OfpMeterStats struct {
+	MeterId              uint32               `protobuf:"varint,1,opt,name=meter_id,json=meterId,proto3" json:"meter_id,omitempty"`
+	FlowCount            uint32               `protobuf:"varint,2,opt,name=flow_count,json=flowCount,proto3" json:"flow_count,omitempty"`
+	PacketInCount        uint64               `protobuf:"varint,3,opt,name=packet_in_count,json=packetInCount,proto3" json:"packet_in_count,omitempty"`
+	ByteInCount          uint64               `protobuf:"varint,4,opt,name=byte_in_count,json=byteInCount,proto3" json:"byte_in_count,omitempty"`
+	DurationSec          uint32               `protobuf:"varint,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	DurationNsec         uint32               `protobuf:"varint,6,opt,name=duration_nsec,json=durationNsec,proto3" json:"duration_nsec,omitempty"`
+	BandStats            []*OfpMeterBandStats `protobuf:"bytes,7,rep,name=band_stats,json=bandStats,proto3" json:"band_stats,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *OfpMeterStats) Reset()         { *m = OfpMeterStats{} }
+func (m *OfpMeterStats) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterStats) ProtoMessage()    {}
+func (*OfpMeterStats) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{67}
+}
+
+func (m *OfpMeterStats) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterStats.Unmarshal(m, b)
+}
+func (m *OfpMeterStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterStats.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterStats) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterStats.Merge(m, src)
+}
+func (m *OfpMeterStats) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterStats.Size(m)
+}
+func (m *OfpMeterStats) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterStats proto.InternalMessageInfo
+
+func (m *OfpMeterStats) GetMeterId() uint32 {
+	if m != nil {
+		return m.MeterId
+	}
+	return 0
+}
+
+func (m *OfpMeterStats) GetFlowCount() uint32 {
+	if m != nil {
+		return m.FlowCount
+	}
+	return 0
+}
+
+func (m *OfpMeterStats) GetPacketInCount() uint64 {
+	if m != nil {
+		return m.PacketInCount
+	}
+	return 0
+}
+
+func (m *OfpMeterStats) GetByteInCount() uint64 {
+	if m != nil {
+		return m.ByteInCount
+	}
+	return 0
+}
+
+func (m *OfpMeterStats) GetDurationSec() uint32 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *OfpMeterStats) GetDurationNsec() uint32 {
+	if m != nil {
+		return m.DurationNsec
+	}
+	return 0
+}
+
+func (m *OfpMeterStats) GetBandStats() []*OfpMeterBandStats {
+	if m != nil {
+		return m.BandStats
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_METER_CONFIG request. Meter configuration.
+type OfpMeterConfig struct {
+	Flags                uint32                `protobuf:"varint,1,opt,name=flags,proto3" json:"flags,omitempty"`
+	MeterId              uint32                `protobuf:"varint,2,opt,name=meter_id,json=meterId,proto3" json:"meter_id,omitempty"`
+	Bands                []*OfpMeterBandHeader `protobuf:"bytes,3,rep,name=bands,proto3" json:"bands,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *OfpMeterConfig) Reset()         { *m = OfpMeterConfig{} }
+func (m *OfpMeterConfig) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterConfig) ProtoMessage()    {}
+func (*OfpMeterConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{68}
+}
+
+func (m *OfpMeterConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterConfig.Unmarshal(m, b)
+}
+func (m *OfpMeterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterConfig.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterConfig.Merge(m, src)
+}
+func (m *OfpMeterConfig) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterConfig.Size(m)
+}
+func (m *OfpMeterConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterConfig proto.InternalMessageInfo
+
+func (m *OfpMeterConfig) GetFlags() uint32 {
+	if m != nil {
+		return m.Flags
+	}
+	return 0
+}
+
+func (m *OfpMeterConfig) GetMeterId() uint32 {
+	if m != nil {
+		return m.MeterId
+	}
+	return 0
+}
+
+func (m *OfpMeterConfig) GetBands() []*OfpMeterBandHeader {
+	if m != nil {
+		return m.Bands
+	}
+	return nil
+}
+
+// Body of reply to OFPMP_METER_FEATURES request. Meter features.
+type OfpMeterFeatures struct {
+	MaxMeter             uint32   `protobuf:"varint,1,opt,name=max_meter,json=maxMeter,proto3" json:"max_meter,omitempty"`
+	BandTypes            uint32   `protobuf:"varint,2,opt,name=band_types,json=bandTypes,proto3" json:"band_types,omitempty"`
+	Capabilities         uint32   `protobuf:"varint,3,opt,name=capabilities,proto3" json:"capabilities,omitempty"`
+	MaxBands             uint32   `protobuf:"varint,4,opt,name=max_bands,json=maxBands,proto3" json:"max_bands,omitempty"`
+	MaxColor             uint32   `protobuf:"varint,5,opt,name=max_color,json=maxColor,proto3" json:"max_color,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpMeterFeatures) Reset()         { *m = OfpMeterFeatures{} }
+func (m *OfpMeterFeatures) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterFeatures) ProtoMessage()    {}
+func (*OfpMeterFeatures) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{69}
+}
+
+func (m *OfpMeterFeatures) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterFeatures.Unmarshal(m, b)
+}
+func (m *OfpMeterFeatures) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterFeatures.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterFeatures) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterFeatures.Merge(m, src)
+}
+func (m *OfpMeterFeatures) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterFeatures.Size(m)
+}
+func (m *OfpMeterFeatures) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterFeatures.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterFeatures proto.InternalMessageInfo
+
+func (m *OfpMeterFeatures) GetMaxMeter() uint32 {
+	if m != nil {
+		return m.MaxMeter
+	}
+	return 0
+}
+
+func (m *OfpMeterFeatures) GetBandTypes() uint32 {
+	if m != nil {
+		return m.BandTypes
+	}
+	return 0
+}
+
+func (m *OfpMeterFeatures) GetCapabilities() uint32 {
+	if m != nil {
+		return m.Capabilities
+	}
+	return 0
+}
+
+func (m *OfpMeterFeatures) GetMaxBands() uint32 {
+	if m != nil {
+		return m.MaxBands
+	}
+	return 0
+}
+
+func (m *OfpMeterFeatures) GetMaxColor() uint32 {
+	if m != nil {
+		return m.MaxColor
+	}
+	return 0
+}
+
+type OfpMeterEntry struct {
+	Config               *OfpMeterConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"`
+	Stats                *OfpMeterStats  `protobuf:"bytes,2,opt,name=stats,proto3" json:"stats,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *OfpMeterEntry) Reset()         { *m = OfpMeterEntry{} }
+func (m *OfpMeterEntry) String() string { return proto.CompactTextString(m) }
+func (*OfpMeterEntry) ProtoMessage()    {}
+func (*OfpMeterEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{70}
+}
+
+func (m *OfpMeterEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpMeterEntry.Unmarshal(m, b)
+}
+func (m *OfpMeterEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpMeterEntry.Marshal(b, m, deterministic)
+}
+func (m *OfpMeterEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpMeterEntry.Merge(m, src)
+}
+func (m *OfpMeterEntry) XXX_Size() int {
+	return xxx_messageInfo_OfpMeterEntry.Size(m)
+}
+func (m *OfpMeterEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpMeterEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpMeterEntry proto.InternalMessageInfo
+
+func (m *OfpMeterEntry) GetConfig() *OfpMeterConfig {
+	if m != nil {
+		return m.Config
+	}
+	return nil
+}
+
+func (m *OfpMeterEntry) GetStats() *OfpMeterStats {
+	if m != nil {
+		return m.Stats
+	}
+	return nil
+}
+
+// Body for ofp_multipart_request/reply of type OFPMP_EXPERIMENTER.
+type OfpExperimenterMultipartHeader struct {
+	Experimenter         uint32   `protobuf:"varint,1,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	ExpType              uint32   `protobuf:"varint,2,opt,name=exp_type,json=expType,proto3" json:"exp_type,omitempty"`
+	Data                 []byte   `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpExperimenterMultipartHeader) Reset()         { *m = OfpExperimenterMultipartHeader{} }
+func (m *OfpExperimenterMultipartHeader) String() string { return proto.CompactTextString(m) }
+func (*OfpExperimenterMultipartHeader) ProtoMessage()    {}
+func (*OfpExperimenterMultipartHeader) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{71}
+}
+
+func (m *OfpExperimenterMultipartHeader) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpExperimenterMultipartHeader.Unmarshal(m, b)
+}
+func (m *OfpExperimenterMultipartHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpExperimenterMultipartHeader.Marshal(b, m, deterministic)
+}
+func (m *OfpExperimenterMultipartHeader) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpExperimenterMultipartHeader.Merge(m, src)
+}
+func (m *OfpExperimenterMultipartHeader) XXX_Size() int {
+	return xxx_messageInfo_OfpExperimenterMultipartHeader.Size(m)
+}
+func (m *OfpExperimenterMultipartHeader) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpExperimenterMultipartHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpExperimenterMultipartHeader proto.InternalMessageInfo
+
+func (m *OfpExperimenterMultipartHeader) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+func (m *OfpExperimenterMultipartHeader) GetExpType() uint32 {
+	if m != nil {
+		return m.ExpType
+	}
+	return 0
+}
+
+func (m *OfpExperimenterMultipartHeader) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Experimenter extension.
+type OfpExperimenterHeader struct {
+	//ofp_header header;  /* Type OFPT_EXPERIMENTER. */
+	Experimenter         uint32   `protobuf:"varint,1,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	ExpType              uint32   `protobuf:"varint,2,opt,name=exp_type,json=expType,proto3" json:"exp_type,omitempty"`
+	Data                 []byte   `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpExperimenterHeader) Reset()         { *m = OfpExperimenterHeader{} }
+func (m *OfpExperimenterHeader) String() string { return proto.CompactTextString(m) }
+func (*OfpExperimenterHeader) ProtoMessage()    {}
+func (*OfpExperimenterHeader) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{72}
+}
+
+func (m *OfpExperimenterHeader) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpExperimenterHeader.Unmarshal(m, b)
+}
+func (m *OfpExperimenterHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpExperimenterHeader.Marshal(b, m, deterministic)
+}
+func (m *OfpExperimenterHeader) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpExperimenterHeader.Merge(m, src)
+}
+func (m *OfpExperimenterHeader) XXX_Size() int {
+	return xxx_messageInfo_OfpExperimenterHeader.Size(m)
+}
+func (m *OfpExperimenterHeader) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpExperimenterHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpExperimenterHeader proto.InternalMessageInfo
+
+func (m *OfpExperimenterHeader) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+func (m *OfpExperimenterHeader) GetExpType() uint32 {
+	if m != nil {
+		return m.ExpType
+	}
+	return 0
+}
+
+func (m *OfpExperimenterHeader) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Common description for a queue.
+type OfpQueuePropHeader struct {
+	Property             uint32   `protobuf:"varint,1,opt,name=property,proto3" json:"property,omitempty"`
+	Len                  uint32   `protobuf:"varint,2,opt,name=len,proto3" json:"len,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpQueuePropHeader) Reset()         { *m = OfpQueuePropHeader{} }
+func (m *OfpQueuePropHeader) String() string { return proto.CompactTextString(m) }
+func (*OfpQueuePropHeader) ProtoMessage()    {}
+func (*OfpQueuePropHeader) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{73}
+}
+
+func (m *OfpQueuePropHeader) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueuePropHeader.Unmarshal(m, b)
+}
+func (m *OfpQueuePropHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueuePropHeader.Marshal(b, m, deterministic)
+}
+func (m *OfpQueuePropHeader) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueuePropHeader.Merge(m, src)
+}
+func (m *OfpQueuePropHeader) XXX_Size() int {
+	return xxx_messageInfo_OfpQueuePropHeader.Size(m)
+}
+func (m *OfpQueuePropHeader) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueuePropHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueuePropHeader proto.InternalMessageInfo
+
+func (m *OfpQueuePropHeader) GetProperty() uint32 {
+	if m != nil {
+		return m.Property
+	}
+	return 0
+}
+
+func (m *OfpQueuePropHeader) GetLen() uint32 {
+	if m != nil {
+		return m.Len
+	}
+	return 0
+}
+
+// Min-Rate queue property description.
+type OfpQueuePropMinRate struct {
+	PropHeader           *OfpQueuePropHeader `protobuf:"bytes,1,opt,name=prop_header,json=propHeader,proto3" json:"prop_header,omitempty"`
+	Rate                 uint32              `protobuf:"varint,2,opt,name=rate,proto3" json:"rate,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *OfpQueuePropMinRate) Reset()         { *m = OfpQueuePropMinRate{} }
+func (m *OfpQueuePropMinRate) String() string { return proto.CompactTextString(m) }
+func (*OfpQueuePropMinRate) ProtoMessage()    {}
+func (*OfpQueuePropMinRate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{74}
+}
+
+func (m *OfpQueuePropMinRate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueuePropMinRate.Unmarshal(m, b)
+}
+func (m *OfpQueuePropMinRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueuePropMinRate.Marshal(b, m, deterministic)
+}
+func (m *OfpQueuePropMinRate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueuePropMinRate.Merge(m, src)
+}
+func (m *OfpQueuePropMinRate) XXX_Size() int {
+	return xxx_messageInfo_OfpQueuePropMinRate.Size(m)
+}
+func (m *OfpQueuePropMinRate) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueuePropMinRate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueuePropMinRate proto.InternalMessageInfo
+
+func (m *OfpQueuePropMinRate) GetPropHeader() *OfpQueuePropHeader {
+	if m != nil {
+		return m.PropHeader
+	}
+	return nil
+}
+
+func (m *OfpQueuePropMinRate) GetRate() uint32 {
+	if m != nil {
+		return m.Rate
+	}
+	return 0
+}
+
+// Max-Rate queue property description.
+type OfpQueuePropMaxRate struct {
+	PropHeader           *OfpQueuePropHeader `protobuf:"bytes,1,opt,name=prop_header,json=propHeader,proto3" json:"prop_header,omitempty"`
+	Rate                 uint32              `protobuf:"varint,2,opt,name=rate,proto3" json:"rate,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *OfpQueuePropMaxRate) Reset()         { *m = OfpQueuePropMaxRate{} }
+func (m *OfpQueuePropMaxRate) String() string { return proto.CompactTextString(m) }
+func (*OfpQueuePropMaxRate) ProtoMessage()    {}
+func (*OfpQueuePropMaxRate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{75}
+}
+
+func (m *OfpQueuePropMaxRate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueuePropMaxRate.Unmarshal(m, b)
+}
+func (m *OfpQueuePropMaxRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueuePropMaxRate.Marshal(b, m, deterministic)
+}
+func (m *OfpQueuePropMaxRate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueuePropMaxRate.Merge(m, src)
+}
+func (m *OfpQueuePropMaxRate) XXX_Size() int {
+	return xxx_messageInfo_OfpQueuePropMaxRate.Size(m)
+}
+func (m *OfpQueuePropMaxRate) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueuePropMaxRate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueuePropMaxRate proto.InternalMessageInfo
+
+func (m *OfpQueuePropMaxRate) GetPropHeader() *OfpQueuePropHeader {
+	if m != nil {
+		return m.PropHeader
+	}
+	return nil
+}
+
+func (m *OfpQueuePropMaxRate) GetRate() uint32 {
+	if m != nil {
+		return m.Rate
+	}
+	return 0
+}
+
+// Experimenter queue property description.
+type OfpQueuePropExperimenter struct {
+	PropHeader           *OfpQueuePropHeader `protobuf:"bytes,1,opt,name=prop_header,json=propHeader,proto3" json:"prop_header,omitempty"`
+	Experimenter         uint32              `protobuf:"varint,2,opt,name=experimenter,proto3" json:"experimenter,omitempty"`
+	Data                 []byte              `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *OfpQueuePropExperimenter) Reset()         { *m = OfpQueuePropExperimenter{} }
+func (m *OfpQueuePropExperimenter) String() string { return proto.CompactTextString(m) }
+func (*OfpQueuePropExperimenter) ProtoMessage()    {}
+func (*OfpQueuePropExperimenter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{76}
+}
+
+func (m *OfpQueuePropExperimenter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueuePropExperimenter.Unmarshal(m, b)
+}
+func (m *OfpQueuePropExperimenter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueuePropExperimenter.Marshal(b, m, deterministic)
+}
+func (m *OfpQueuePropExperimenter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueuePropExperimenter.Merge(m, src)
+}
+func (m *OfpQueuePropExperimenter) XXX_Size() int {
+	return xxx_messageInfo_OfpQueuePropExperimenter.Size(m)
+}
+func (m *OfpQueuePropExperimenter) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueuePropExperimenter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueuePropExperimenter proto.InternalMessageInfo
+
+func (m *OfpQueuePropExperimenter) GetPropHeader() *OfpQueuePropHeader {
+	if m != nil {
+		return m.PropHeader
+	}
+	return nil
+}
+
+func (m *OfpQueuePropExperimenter) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+func (m *OfpQueuePropExperimenter) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+// Full description for a queue.
+type OfpPacketQueue struct {
+	QueueId              uint32                `protobuf:"varint,1,opt,name=queue_id,json=queueId,proto3" json:"queue_id,omitempty"`
+	Port                 uint32                `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"`
+	Properties           []*OfpQueuePropHeader `protobuf:"bytes,4,rep,name=properties,proto3" json:"properties,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *OfpPacketQueue) Reset()         { *m = OfpPacketQueue{} }
+func (m *OfpPacketQueue) String() string { return proto.CompactTextString(m) }
+func (*OfpPacketQueue) ProtoMessage()    {}
+func (*OfpPacketQueue) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{77}
+}
+
+func (m *OfpPacketQueue) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpPacketQueue.Unmarshal(m, b)
+}
+func (m *OfpPacketQueue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpPacketQueue.Marshal(b, m, deterministic)
+}
+func (m *OfpPacketQueue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpPacketQueue.Merge(m, src)
+}
+func (m *OfpPacketQueue) XXX_Size() int {
+	return xxx_messageInfo_OfpPacketQueue.Size(m)
+}
+func (m *OfpPacketQueue) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpPacketQueue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpPacketQueue proto.InternalMessageInfo
+
+func (m *OfpPacketQueue) GetQueueId() uint32 {
+	if m != nil {
+		return m.QueueId
+	}
+	return 0
+}
+
+func (m *OfpPacketQueue) GetPort() uint32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+func (m *OfpPacketQueue) GetProperties() []*OfpQueuePropHeader {
+	if m != nil {
+		return m.Properties
+	}
+	return nil
+}
+
+// Query for port queue configuration.
+type OfpQueueGetConfigRequest struct {
+	//ofp_header header;
+	Port                 uint32   `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpQueueGetConfigRequest) Reset()         { *m = OfpQueueGetConfigRequest{} }
+func (m *OfpQueueGetConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpQueueGetConfigRequest) ProtoMessage()    {}
+func (*OfpQueueGetConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{78}
+}
+
+func (m *OfpQueueGetConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueueGetConfigRequest.Unmarshal(m, b)
+}
+func (m *OfpQueueGetConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueueGetConfigRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpQueueGetConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueueGetConfigRequest.Merge(m, src)
+}
+func (m *OfpQueueGetConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpQueueGetConfigRequest.Size(m)
+}
+func (m *OfpQueueGetConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueueGetConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueueGetConfigRequest proto.InternalMessageInfo
+
+func (m *OfpQueueGetConfigRequest) GetPort() uint32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+// Queue configuration for a given port.
+type OfpQueueGetConfigReply struct {
+	//ofp_header header;
+	Port                 uint32            `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"`
+	Queues               []*OfpPacketQueue `protobuf:"bytes,2,rep,name=queues,proto3" json:"queues,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *OfpQueueGetConfigReply) Reset()         { *m = OfpQueueGetConfigReply{} }
+func (m *OfpQueueGetConfigReply) String() string { return proto.CompactTextString(m) }
+func (*OfpQueueGetConfigReply) ProtoMessage()    {}
+func (*OfpQueueGetConfigReply) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{79}
+}
+
+func (m *OfpQueueGetConfigReply) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueueGetConfigReply.Unmarshal(m, b)
+}
+func (m *OfpQueueGetConfigReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueueGetConfigReply.Marshal(b, m, deterministic)
+}
+func (m *OfpQueueGetConfigReply) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueueGetConfigReply.Merge(m, src)
+}
+func (m *OfpQueueGetConfigReply) XXX_Size() int {
+	return xxx_messageInfo_OfpQueueGetConfigReply.Size(m)
+}
+func (m *OfpQueueGetConfigReply) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueueGetConfigReply.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueueGetConfigReply proto.InternalMessageInfo
+
+func (m *OfpQueueGetConfigReply) GetPort() uint32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+func (m *OfpQueueGetConfigReply) GetQueues() []*OfpPacketQueue {
+	if m != nil {
+		return m.Queues
+	}
+	return nil
+}
+
+// OFPAT_SET_QUEUE action struct: send packets to given queue on port.
+type OfpActionSetQueue struct {
+	Type                 uint32   `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"`
+	QueueId              uint32   `protobuf:"varint,3,opt,name=queue_id,json=queueId,proto3" json:"queue_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpActionSetQueue) Reset()         { *m = OfpActionSetQueue{} }
+func (m *OfpActionSetQueue) String() string { return proto.CompactTextString(m) }
+func (*OfpActionSetQueue) ProtoMessage()    {}
+func (*OfpActionSetQueue) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{80}
+}
+
+func (m *OfpActionSetQueue) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpActionSetQueue.Unmarshal(m, b)
+}
+func (m *OfpActionSetQueue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpActionSetQueue.Marshal(b, m, deterministic)
+}
+func (m *OfpActionSetQueue) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpActionSetQueue.Merge(m, src)
+}
+func (m *OfpActionSetQueue) XXX_Size() int {
+	return xxx_messageInfo_OfpActionSetQueue.Size(m)
+}
+func (m *OfpActionSetQueue) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpActionSetQueue.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpActionSetQueue proto.InternalMessageInfo
+
+func (m *OfpActionSetQueue) GetType() uint32 {
+	if m != nil {
+		return m.Type
+	}
+	return 0
+}
+
+func (m *OfpActionSetQueue) GetQueueId() uint32 {
+	if m != nil {
+		return m.QueueId
+	}
+	return 0
+}
+
+type OfpQueueStatsRequest struct {
+	PortNo               uint32   `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	QueueId              uint32   `protobuf:"varint,2,opt,name=queue_id,json=queueId,proto3" json:"queue_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpQueueStatsRequest) Reset()         { *m = OfpQueueStatsRequest{} }
+func (m *OfpQueueStatsRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpQueueStatsRequest) ProtoMessage()    {}
+func (*OfpQueueStatsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{81}
+}
+
+func (m *OfpQueueStatsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueueStatsRequest.Unmarshal(m, b)
+}
+func (m *OfpQueueStatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueueStatsRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpQueueStatsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueueStatsRequest.Merge(m, src)
+}
+func (m *OfpQueueStatsRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpQueueStatsRequest.Size(m)
+}
+func (m *OfpQueueStatsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueueStatsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueueStatsRequest proto.InternalMessageInfo
+
+func (m *OfpQueueStatsRequest) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+func (m *OfpQueueStatsRequest) GetQueueId() uint32 {
+	if m != nil {
+		return m.QueueId
+	}
+	return 0
+}
+
+type OfpQueueStats struct {
+	PortNo               uint32   `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	QueueId              uint32   `protobuf:"varint,2,opt,name=queue_id,json=queueId,proto3" json:"queue_id,omitempty"`
+	TxBytes              uint64   `protobuf:"varint,3,opt,name=tx_bytes,json=txBytes,proto3" json:"tx_bytes,omitempty"`
+	TxPackets            uint64   `protobuf:"varint,4,opt,name=tx_packets,json=txPackets,proto3" json:"tx_packets,omitempty"`
+	TxErrors             uint64   `protobuf:"varint,5,opt,name=tx_errors,json=txErrors,proto3" json:"tx_errors,omitempty"`
+	DurationSec          uint32   `protobuf:"varint,6,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"`
+	DurationNsec         uint32   `protobuf:"varint,7,opt,name=duration_nsec,json=durationNsec,proto3" json:"duration_nsec,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpQueueStats) Reset()         { *m = OfpQueueStats{} }
+func (m *OfpQueueStats) String() string { return proto.CompactTextString(m) }
+func (*OfpQueueStats) ProtoMessage()    {}
+func (*OfpQueueStats) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{82}
+}
+
+func (m *OfpQueueStats) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpQueueStats.Unmarshal(m, b)
+}
+func (m *OfpQueueStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpQueueStats.Marshal(b, m, deterministic)
+}
+func (m *OfpQueueStats) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpQueueStats.Merge(m, src)
+}
+func (m *OfpQueueStats) XXX_Size() int {
+	return xxx_messageInfo_OfpQueueStats.Size(m)
+}
+func (m *OfpQueueStats) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpQueueStats.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpQueueStats proto.InternalMessageInfo
+
+func (m *OfpQueueStats) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+func (m *OfpQueueStats) GetQueueId() uint32 {
+	if m != nil {
+		return m.QueueId
+	}
+	return 0
+}
+
+func (m *OfpQueueStats) GetTxBytes() uint64 {
+	if m != nil {
+		return m.TxBytes
+	}
+	return 0
+}
+
+func (m *OfpQueueStats) GetTxPackets() uint64 {
+	if m != nil {
+		return m.TxPackets
+	}
+	return 0
+}
+
+func (m *OfpQueueStats) GetTxErrors() uint64 {
+	if m != nil {
+		return m.TxErrors
+	}
+	return 0
+}
+
+func (m *OfpQueueStats) GetDurationSec() uint32 {
+	if m != nil {
+		return m.DurationSec
+	}
+	return 0
+}
+
+func (m *OfpQueueStats) GetDurationNsec() uint32 {
+	if m != nil {
+		return m.DurationNsec
+	}
+	return 0
+}
+
+// Role request and reply message.
+type OfpRoleRequest struct {
+	//ofp_header header;        /* Type OFPT_ROLE_REQUEST/OFPT_ROLE_REPLY. */
+	Role                 OfpControllerRole `protobuf:"varint,1,opt,name=role,proto3,enum=openflow_13.OfpControllerRole" json:"role,omitempty"`
+	GenerationId         uint64            `protobuf:"varint,2,opt,name=generation_id,json=generationId,proto3" json:"generation_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *OfpRoleRequest) Reset()         { *m = OfpRoleRequest{} }
+func (m *OfpRoleRequest) String() string { return proto.CompactTextString(m) }
+func (*OfpRoleRequest) ProtoMessage()    {}
+func (*OfpRoleRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{83}
+}
+
+func (m *OfpRoleRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpRoleRequest.Unmarshal(m, b)
+}
+func (m *OfpRoleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpRoleRequest.Marshal(b, m, deterministic)
+}
+func (m *OfpRoleRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpRoleRequest.Merge(m, src)
+}
+func (m *OfpRoleRequest) XXX_Size() int {
+	return xxx_messageInfo_OfpRoleRequest.Size(m)
+}
+func (m *OfpRoleRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpRoleRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpRoleRequest proto.InternalMessageInfo
+
+func (m *OfpRoleRequest) GetRole() OfpControllerRole {
+	if m != nil {
+		return m.Role
+	}
+	return OfpControllerRole_OFPCR_ROLE_NOCHANGE
+}
+
+func (m *OfpRoleRequest) GetGenerationId() uint64 {
+	if m != nil {
+		return m.GenerationId
+	}
+	return 0
+}
+
+// Asynchronous message configuration.
+type OfpAsyncConfig struct {
+	//ofp_header header;    /* OFPT_GET_ASYNC_REPLY or OFPT_SET_ASYNC. */
+	PacketInMask         []uint32 `protobuf:"varint,1,rep,packed,name=packet_in_mask,json=packetInMask,proto3" json:"packet_in_mask,omitempty"`
+	PortStatusMask       []uint32 `protobuf:"varint,2,rep,packed,name=port_status_mask,json=portStatusMask,proto3" json:"port_status_mask,omitempty"`
+	FlowRemovedMask      []uint32 `protobuf:"varint,3,rep,packed,name=flow_removed_mask,json=flowRemovedMask,proto3" json:"flow_removed_mask,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfpAsyncConfig) Reset()         { *m = OfpAsyncConfig{} }
+func (m *OfpAsyncConfig) String() string { return proto.CompactTextString(m) }
+func (*OfpAsyncConfig) ProtoMessage()    {}
+func (*OfpAsyncConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{84}
+}
+
+func (m *OfpAsyncConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfpAsyncConfig.Unmarshal(m, b)
+}
+func (m *OfpAsyncConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfpAsyncConfig.Marshal(b, m, deterministic)
+}
+func (m *OfpAsyncConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfpAsyncConfig.Merge(m, src)
+}
+func (m *OfpAsyncConfig) XXX_Size() int {
+	return xxx_messageInfo_OfpAsyncConfig.Size(m)
+}
+func (m *OfpAsyncConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfpAsyncConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfpAsyncConfig proto.InternalMessageInfo
+
+func (m *OfpAsyncConfig) GetPacketInMask() []uint32 {
+	if m != nil {
+		return m.PacketInMask
+	}
+	return nil
+}
+
+func (m *OfpAsyncConfig) GetPortStatusMask() []uint32 {
+	if m != nil {
+		return m.PortStatusMask
+	}
+	return nil
+}
+
+func (m *OfpAsyncConfig) GetFlowRemovedMask() []uint32 {
+	if m != nil {
+		return m.FlowRemovedMask
+	}
+	return nil
+}
+
+type MeterModUpdate struct {
+	Id                   string       `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	MeterMod             *OfpMeterMod `protobuf:"bytes,2,opt,name=meter_mod,json=meterMod,proto3" json:"meter_mod,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *MeterModUpdate) Reset()         { *m = MeterModUpdate{} }
+func (m *MeterModUpdate) String() string { return proto.CompactTextString(m) }
+func (*MeterModUpdate) ProtoMessage()    {}
+func (*MeterModUpdate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{85}
+}
+
+func (m *MeterModUpdate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MeterModUpdate.Unmarshal(m, b)
+}
+func (m *MeterModUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MeterModUpdate.Marshal(b, m, deterministic)
+}
+func (m *MeterModUpdate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MeterModUpdate.Merge(m, src)
+}
+func (m *MeterModUpdate) XXX_Size() int {
+	return xxx_messageInfo_MeterModUpdate.Size(m)
+}
+func (m *MeterModUpdate) XXX_DiscardUnknown() {
+	xxx_messageInfo_MeterModUpdate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MeterModUpdate proto.InternalMessageInfo
+
+func (m *MeterModUpdate) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *MeterModUpdate) GetMeterMod() *OfpMeterMod {
+	if m != nil {
+		return m.MeterMod
+	}
+	return nil
+}
+
+type MeterStatsReply struct {
+	MeterStats           []*OfpMeterStats `protobuf:"bytes,1,rep,name=meter_stats,json=meterStats,proto3" json:"meter_stats,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *MeterStatsReply) Reset()         { *m = MeterStatsReply{} }
+func (m *MeterStatsReply) String() string { return proto.CompactTextString(m) }
+func (*MeterStatsReply) ProtoMessage()    {}
+func (*MeterStatsReply) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{86}
+}
+
+func (m *MeterStatsReply) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MeterStatsReply.Unmarshal(m, b)
+}
+func (m *MeterStatsReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MeterStatsReply.Marshal(b, m, deterministic)
+}
+func (m *MeterStatsReply) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MeterStatsReply.Merge(m, src)
+}
+func (m *MeterStatsReply) XXX_Size() int {
+	return xxx_messageInfo_MeterStatsReply.Size(m)
+}
+func (m *MeterStatsReply) XXX_DiscardUnknown() {
+	xxx_messageInfo_MeterStatsReply.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MeterStatsReply proto.InternalMessageInfo
+
+func (m *MeterStatsReply) GetMeterStats() []*OfpMeterStats {
+	if m != nil {
+		return m.MeterStats
+	}
+	return nil
+}
+
+type FlowTableUpdate struct {
+	Id                   string      `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	FlowMod              *OfpFlowMod `protobuf:"bytes,2,opt,name=flow_mod,json=flowMod,proto3" json:"flow_mod,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *FlowTableUpdate) Reset()         { *m = FlowTableUpdate{} }
+func (m *FlowTableUpdate) String() string { return proto.CompactTextString(m) }
+func (*FlowTableUpdate) ProtoMessage()    {}
+func (*FlowTableUpdate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{87}
+}
+
+func (m *FlowTableUpdate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlowTableUpdate.Unmarshal(m, b)
+}
+func (m *FlowTableUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlowTableUpdate.Marshal(b, m, deterministic)
+}
+func (m *FlowTableUpdate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlowTableUpdate.Merge(m, src)
+}
+func (m *FlowTableUpdate) XXX_Size() int {
+	return xxx_messageInfo_FlowTableUpdate.Size(m)
+}
+func (m *FlowTableUpdate) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlowTableUpdate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlowTableUpdate proto.InternalMessageInfo
+
+func (m *FlowTableUpdate) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *FlowTableUpdate) GetFlowMod() *OfpFlowMod {
+	if m != nil {
+		return m.FlowMod
+	}
+	return nil
+}
+
+type FlowGroupTableUpdate struct {
+	Id                   string       `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	GroupMod             *OfpGroupMod `protobuf:"bytes,2,opt,name=group_mod,json=groupMod,proto3" json:"group_mod,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *FlowGroupTableUpdate) Reset()         { *m = FlowGroupTableUpdate{} }
+func (m *FlowGroupTableUpdate) String() string { return proto.CompactTextString(m) }
+func (*FlowGroupTableUpdate) ProtoMessage()    {}
+func (*FlowGroupTableUpdate) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{88}
+}
+
+func (m *FlowGroupTableUpdate) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlowGroupTableUpdate.Unmarshal(m, b)
+}
+func (m *FlowGroupTableUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlowGroupTableUpdate.Marshal(b, m, deterministic)
+}
+func (m *FlowGroupTableUpdate) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlowGroupTableUpdate.Merge(m, src)
+}
+func (m *FlowGroupTableUpdate) XXX_Size() int {
+	return xxx_messageInfo_FlowGroupTableUpdate.Size(m)
+}
+func (m *FlowGroupTableUpdate) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlowGroupTableUpdate.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlowGroupTableUpdate proto.InternalMessageInfo
+
+func (m *FlowGroupTableUpdate) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *FlowGroupTableUpdate) GetGroupMod() *OfpGroupMod {
+	if m != nil {
+		return m.GroupMod
+	}
+	return nil
+}
+
+type Flows struct {
+	Items                []*OfpFlowStats `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *Flows) Reset()         { *m = Flows{} }
+func (m *Flows) String() string { return proto.CompactTextString(m) }
+func (*Flows) ProtoMessage()    {}
+func (*Flows) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{89}
+}
+
+func (m *Flows) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Flows.Unmarshal(m, b)
+}
+func (m *Flows) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Flows.Marshal(b, m, deterministic)
+}
+func (m *Flows) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Flows.Merge(m, src)
+}
+func (m *Flows) XXX_Size() int {
+	return xxx_messageInfo_Flows.Size(m)
+}
+func (m *Flows) XXX_DiscardUnknown() {
+	xxx_messageInfo_Flows.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Flows proto.InternalMessageInfo
+
+func (m *Flows) GetItems() []*OfpFlowStats {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type Meters struct {
+	Items                []*OfpMeterEntry `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *Meters) Reset()         { *m = Meters{} }
+func (m *Meters) String() string { return proto.CompactTextString(m) }
+func (*Meters) ProtoMessage()    {}
+func (*Meters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{90}
+}
+
+func (m *Meters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Meters.Unmarshal(m, b)
+}
+func (m *Meters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Meters.Marshal(b, m, deterministic)
+}
+func (m *Meters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Meters.Merge(m, src)
+}
+func (m *Meters) XXX_Size() int {
+	return xxx_messageInfo_Meters.Size(m)
+}
+func (m *Meters) XXX_DiscardUnknown() {
+	xxx_messageInfo_Meters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Meters proto.InternalMessageInfo
+
+func (m *Meters) GetItems() []*OfpMeterEntry {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type FlowGroups struct {
+	Items                []*OfpGroupEntry `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *FlowGroups) Reset()         { *m = FlowGroups{} }
+func (m *FlowGroups) String() string { return proto.CompactTextString(m) }
+func (*FlowGroups) ProtoMessage()    {}
+func (*FlowGroups) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{91}
+}
+
+func (m *FlowGroups) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlowGroups.Unmarshal(m, b)
+}
+func (m *FlowGroups) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlowGroups.Marshal(b, m, deterministic)
+}
+func (m *FlowGroups) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlowGroups.Merge(m, src)
+}
+func (m *FlowGroups) XXX_Size() int {
+	return xxx_messageInfo_FlowGroups.Size(m)
+}
+func (m *FlowGroups) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlowGroups.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlowGroups proto.InternalMessageInfo
+
+func (m *FlowGroups) GetItems() []*OfpGroupEntry {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type FlowChanges struct {
+	ToAdd                *Flows   `protobuf:"bytes,1,opt,name=to_add,json=toAdd,proto3" json:"to_add,omitempty"`
+	ToRemove             *Flows   `protobuf:"bytes,2,opt,name=to_remove,json=toRemove,proto3" json:"to_remove,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FlowChanges) Reset()         { *m = FlowChanges{} }
+func (m *FlowChanges) String() string { return proto.CompactTextString(m) }
+func (*FlowChanges) ProtoMessage()    {}
+func (*FlowChanges) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{92}
+}
+
+func (m *FlowChanges) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlowChanges.Unmarshal(m, b)
+}
+func (m *FlowChanges) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlowChanges.Marshal(b, m, deterministic)
+}
+func (m *FlowChanges) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlowChanges.Merge(m, src)
+}
+func (m *FlowChanges) XXX_Size() int {
+	return xxx_messageInfo_FlowChanges.Size(m)
+}
+func (m *FlowChanges) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlowChanges.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlowChanges proto.InternalMessageInfo
+
+func (m *FlowChanges) GetToAdd() *Flows {
+	if m != nil {
+		return m.ToAdd
+	}
+	return nil
+}
+
+func (m *FlowChanges) GetToRemove() *Flows {
+	if m != nil {
+		return m.ToRemove
+	}
+	return nil
+}
+
+type FlowGroupChanges struct {
+	ToAdd                *FlowGroups `protobuf:"bytes,1,opt,name=to_add,json=toAdd,proto3" json:"to_add,omitempty"`
+	ToRemove             *FlowGroups `protobuf:"bytes,2,opt,name=to_remove,json=toRemove,proto3" json:"to_remove,omitempty"`
+	ToUpdate             *FlowGroups `protobuf:"bytes,3,opt,name=to_update,json=toUpdate,proto3" json:"to_update,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *FlowGroupChanges) Reset()         { *m = FlowGroupChanges{} }
+func (m *FlowGroupChanges) String() string { return proto.CompactTextString(m) }
+func (*FlowGroupChanges) ProtoMessage()    {}
+func (*FlowGroupChanges) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{93}
+}
+
+func (m *FlowGroupChanges) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlowGroupChanges.Unmarshal(m, b)
+}
+func (m *FlowGroupChanges) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlowGroupChanges.Marshal(b, m, deterministic)
+}
+func (m *FlowGroupChanges) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlowGroupChanges.Merge(m, src)
+}
+func (m *FlowGroupChanges) XXX_Size() int {
+	return xxx_messageInfo_FlowGroupChanges.Size(m)
+}
+func (m *FlowGroupChanges) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlowGroupChanges.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlowGroupChanges proto.InternalMessageInfo
+
+func (m *FlowGroupChanges) GetToAdd() *FlowGroups {
+	if m != nil {
+		return m.ToAdd
+	}
+	return nil
+}
+
+func (m *FlowGroupChanges) GetToRemove() *FlowGroups {
+	if m != nil {
+		return m.ToRemove
+	}
+	return nil
+}
+
+func (m *FlowGroupChanges) GetToUpdate() *FlowGroups {
+	if m != nil {
+		return m.ToUpdate
+	}
+	return nil
+}
+
+type PacketIn struct {
+	Id                   string       `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	PacketIn             *OfpPacketIn `protobuf:"bytes,2,opt,name=packet_in,json=packetIn,proto3" json:"packet_in,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *PacketIn) Reset()         { *m = PacketIn{} }
+func (m *PacketIn) String() string { return proto.CompactTextString(m) }
+func (*PacketIn) ProtoMessage()    {}
+func (*PacketIn) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{94}
+}
+
+func (m *PacketIn) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PacketIn.Unmarshal(m, b)
+}
+func (m *PacketIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PacketIn.Marshal(b, m, deterministic)
+}
+func (m *PacketIn) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PacketIn.Merge(m, src)
+}
+func (m *PacketIn) XXX_Size() int {
+	return xxx_messageInfo_PacketIn.Size(m)
+}
+func (m *PacketIn) XXX_DiscardUnknown() {
+	xxx_messageInfo_PacketIn.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PacketIn proto.InternalMessageInfo
+
+func (m *PacketIn) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *PacketIn) GetPacketIn() *OfpPacketIn {
+	if m != nil {
+		return m.PacketIn
+	}
+	return nil
+}
+
+type PacketOut struct {
+	Id                   string        `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	PacketOut            *OfpPacketOut `protobuf:"bytes,2,opt,name=packet_out,json=packetOut,proto3" json:"packet_out,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *PacketOut) Reset()         { *m = PacketOut{} }
+func (m *PacketOut) String() string { return proto.CompactTextString(m) }
+func (*PacketOut) ProtoMessage()    {}
+func (*PacketOut) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{95}
+}
+
+func (m *PacketOut) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PacketOut.Unmarshal(m, b)
+}
+func (m *PacketOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PacketOut.Marshal(b, m, deterministic)
+}
+func (m *PacketOut) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PacketOut.Merge(m, src)
+}
+func (m *PacketOut) XXX_Size() int {
+	return xxx_messageInfo_PacketOut.Size(m)
+}
+func (m *PacketOut) XXX_DiscardUnknown() {
+	xxx_messageInfo_PacketOut.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PacketOut proto.InternalMessageInfo
+
+func (m *PacketOut) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *PacketOut) GetPacketOut() *OfpPacketOut {
+	if m != nil {
+		return m.PacketOut
+	}
+	return nil
+}
+
+type ChangeEvent struct {
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Types that are valid to be assigned to Event:
+	//	*ChangeEvent_PortStatus
+	Event                isChangeEvent_Event `protobuf_oneof:"event"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *ChangeEvent) Reset()         { *m = ChangeEvent{} }
+func (m *ChangeEvent) String() string { return proto.CompactTextString(m) }
+func (*ChangeEvent) ProtoMessage()    {}
+func (*ChangeEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_08e3a4e375aeddc7, []int{96}
+}
+
+func (m *ChangeEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChangeEvent.Unmarshal(m, b)
+}
+func (m *ChangeEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChangeEvent.Marshal(b, m, deterministic)
+}
+func (m *ChangeEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChangeEvent.Merge(m, src)
+}
+func (m *ChangeEvent) XXX_Size() int {
+	return xxx_messageInfo_ChangeEvent.Size(m)
+}
+func (m *ChangeEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChangeEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChangeEvent proto.InternalMessageInfo
+
+func (m *ChangeEvent) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+type isChangeEvent_Event interface {
+	isChangeEvent_Event()
+}
+
+type ChangeEvent_PortStatus struct {
+	PortStatus *OfpPortStatus `protobuf:"bytes,2,opt,name=port_status,json=portStatus,proto3,oneof"`
+}
+
+func (*ChangeEvent_PortStatus) isChangeEvent_Event() {}
+
+func (m *ChangeEvent) GetEvent() isChangeEvent_Event {
+	if m != nil {
+		return m.Event
+	}
+	return nil
+}
+
+func (m *ChangeEvent) GetPortStatus() *OfpPortStatus {
+	if x, ok := m.GetEvent().(*ChangeEvent_PortStatus); ok {
+		return x.PortStatus
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*ChangeEvent) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*ChangeEvent_PortStatus)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterEnum("openflow_13.OfpPortNo", OfpPortNo_name, OfpPortNo_value)
+	proto.RegisterEnum("openflow_13.OfpType", OfpType_name, OfpType_value)
+	proto.RegisterEnum("openflow_13.OfpHelloElemType", OfpHelloElemType_name, OfpHelloElemType_value)
+	proto.RegisterEnum("openflow_13.OfpConfigFlags", OfpConfigFlags_name, OfpConfigFlags_value)
+	proto.RegisterEnum("openflow_13.OfpTableConfig", OfpTableConfig_name, OfpTableConfig_value)
+	proto.RegisterEnum("openflow_13.OfpTable", OfpTable_name, OfpTable_value)
+	proto.RegisterEnum("openflow_13.OfpCapabilities", OfpCapabilities_name, OfpCapabilities_value)
+	proto.RegisterEnum("openflow_13.OfpPortConfig", OfpPortConfig_name, OfpPortConfig_value)
+	proto.RegisterEnum("openflow_13.OfpPortState", OfpPortState_name, OfpPortState_value)
+	proto.RegisterEnum("openflow_13.OfpPortFeatures", OfpPortFeatures_name, OfpPortFeatures_value)
+	proto.RegisterEnum("openflow_13.OfpPortReason", OfpPortReason_name, OfpPortReason_value)
+	proto.RegisterEnum("openflow_13.OfpMatchType", OfpMatchType_name, OfpMatchType_value)
+	proto.RegisterEnum("openflow_13.OfpOxmClass", OfpOxmClass_name, OfpOxmClass_value)
+	proto.RegisterEnum("openflow_13.OxmOfbFieldTypes", OxmOfbFieldTypes_name, OxmOfbFieldTypes_value)
+	proto.RegisterEnum("openflow_13.OfpVlanId", OfpVlanId_name, OfpVlanId_value)
+	proto.RegisterEnum("openflow_13.OfpIpv6ExthdrFlags", OfpIpv6ExthdrFlags_name, OfpIpv6ExthdrFlags_value)
+	proto.RegisterEnum("openflow_13.OfpActionType", OfpActionType_name, OfpActionType_value)
+	proto.RegisterEnum("openflow_13.OfpControllerMaxLen", OfpControllerMaxLen_name, OfpControllerMaxLen_value)
+	proto.RegisterEnum("openflow_13.OfpInstructionType", OfpInstructionType_name, OfpInstructionType_value)
+	proto.RegisterEnum("openflow_13.OfpFlowModCommand", OfpFlowModCommand_name, OfpFlowModCommand_value)
+	proto.RegisterEnum("openflow_13.OfpFlowModFlags", OfpFlowModFlags_name, OfpFlowModFlags_value)
+	proto.RegisterEnum("openflow_13.OfpGroup", OfpGroup_name, OfpGroup_value)
+	proto.RegisterEnum("openflow_13.OfpGroupModCommand", OfpGroupModCommand_name, OfpGroupModCommand_value)
+	proto.RegisterEnum("openflow_13.OfpGroupType", OfpGroupType_name, OfpGroupType_value)
+	proto.RegisterEnum("openflow_13.OfpPacketInReason", OfpPacketInReason_name, OfpPacketInReason_value)
+	proto.RegisterEnum("openflow_13.OfpFlowRemovedReason", OfpFlowRemovedReason_name, OfpFlowRemovedReason_value)
+	proto.RegisterEnum("openflow_13.OfpMeter", OfpMeter_name, OfpMeter_value)
+	proto.RegisterEnum("openflow_13.OfpMeterBandType", OfpMeterBandType_name, OfpMeterBandType_value)
+	proto.RegisterEnum("openflow_13.OfpMeterModCommand", OfpMeterModCommand_name, OfpMeterModCommand_value)
+	proto.RegisterEnum("openflow_13.OfpMeterFlags", OfpMeterFlags_name, OfpMeterFlags_value)
+	proto.RegisterEnum("openflow_13.OfpErrorType", OfpErrorType_name, OfpErrorType_value)
+	proto.RegisterEnum("openflow_13.OfpHelloFailedCode", OfpHelloFailedCode_name, OfpHelloFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpBadRequestCode", OfpBadRequestCode_name, OfpBadRequestCode_value)
+	proto.RegisterEnum("openflow_13.OfpBadActionCode", OfpBadActionCode_name, OfpBadActionCode_value)
+	proto.RegisterEnum("openflow_13.OfpBadInstructionCode", OfpBadInstructionCode_name, OfpBadInstructionCode_value)
+	proto.RegisterEnum("openflow_13.OfpBadMatchCode", OfpBadMatchCode_name, OfpBadMatchCode_value)
+	proto.RegisterEnum("openflow_13.OfpFlowModFailedCode", OfpFlowModFailedCode_name, OfpFlowModFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpGroupModFailedCode", OfpGroupModFailedCode_name, OfpGroupModFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpPortModFailedCode", OfpPortModFailedCode_name, OfpPortModFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpTableModFailedCode", OfpTableModFailedCode_name, OfpTableModFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpQueueOpFailedCode", OfpQueueOpFailedCode_name, OfpQueueOpFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpSwitchConfigFailedCode", OfpSwitchConfigFailedCode_name, OfpSwitchConfigFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpRoleRequestFailedCode", OfpRoleRequestFailedCode_name, OfpRoleRequestFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpMeterModFailedCode", OfpMeterModFailedCode_name, OfpMeterModFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpTableFeaturesFailedCode", OfpTableFeaturesFailedCode_name, OfpTableFeaturesFailedCode_value)
+	proto.RegisterEnum("openflow_13.OfpMultipartType", OfpMultipartType_name, OfpMultipartType_value)
+	proto.RegisterEnum("openflow_13.OfpMultipartRequestFlags", OfpMultipartRequestFlags_name, OfpMultipartRequestFlags_value)
+	proto.RegisterEnum("openflow_13.OfpMultipartReplyFlags", OfpMultipartReplyFlags_name, OfpMultipartReplyFlags_value)
+	proto.RegisterEnum("openflow_13.OfpTableFeaturePropType", OfpTableFeaturePropType_name, OfpTableFeaturePropType_value)
+	proto.RegisterEnum("openflow_13.OfpGroupCapabilities", OfpGroupCapabilities_name, OfpGroupCapabilities_value)
+	proto.RegisterEnum("openflow_13.OfpQueueProperties", OfpQueueProperties_name, OfpQueueProperties_value)
+	proto.RegisterEnum("openflow_13.OfpControllerRole", OfpControllerRole_name, OfpControllerRole_value)
+	proto.RegisterType((*OfpHeader)(nil), "openflow_13.ofp_header")
+	proto.RegisterType((*OfpHelloElemHeader)(nil), "openflow_13.ofp_hello_elem_header")
+	proto.RegisterType((*OfpHelloElemVersionbitmap)(nil), "openflow_13.ofp_hello_elem_versionbitmap")
+	proto.RegisterType((*OfpHello)(nil), "openflow_13.ofp_hello")
+	proto.RegisterType((*OfpSwitchConfig)(nil), "openflow_13.ofp_switch_config")
+	proto.RegisterType((*OfpTableMod)(nil), "openflow_13.ofp_table_mod")
+	proto.RegisterType((*OfpPort)(nil), "openflow_13.ofp_port")
+	proto.RegisterType((*OfpSwitchFeatures)(nil), "openflow_13.ofp_switch_features")
+	proto.RegisterType((*OfpPortStatus)(nil), "openflow_13.ofp_port_status")
+	proto.RegisterType((*OfpPortMod)(nil), "openflow_13.ofp_port_mod")
+	proto.RegisterType((*OfpMatch)(nil), "openflow_13.ofp_match")
+	proto.RegisterType((*OfpOxmField)(nil), "openflow_13.ofp_oxm_field")
+	proto.RegisterType((*OfpOxmOfbField)(nil), "openflow_13.ofp_oxm_ofb_field")
+	proto.RegisterType((*OfpOxmExperimenterField)(nil), "openflow_13.ofp_oxm_experimenter_field")
+	proto.RegisterType((*OfpAction)(nil), "openflow_13.ofp_action")
+	proto.RegisterType((*OfpActionOutput)(nil), "openflow_13.ofp_action_output")
+	proto.RegisterType((*OfpActionMplsTtl)(nil), "openflow_13.ofp_action_mpls_ttl")
+	proto.RegisterType((*OfpActionPush)(nil), "openflow_13.ofp_action_push")
+	proto.RegisterType((*OfpActionPopMpls)(nil), "openflow_13.ofp_action_pop_mpls")
+	proto.RegisterType((*OfpActionGroup)(nil), "openflow_13.ofp_action_group")
+	proto.RegisterType((*OfpActionNwTtl)(nil), "openflow_13.ofp_action_nw_ttl")
+	proto.RegisterType((*OfpActionSetField)(nil), "openflow_13.ofp_action_set_field")
+	proto.RegisterType((*OfpActionExperimenter)(nil), "openflow_13.ofp_action_experimenter")
+	proto.RegisterType((*OfpInstruction)(nil), "openflow_13.ofp_instruction")
+	proto.RegisterType((*OfpInstructionGotoTable)(nil), "openflow_13.ofp_instruction_goto_table")
+	proto.RegisterType((*OfpInstructionWriteMetadata)(nil), "openflow_13.ofp_instruction_write_metadata")
+	proto.RegisterType((*OfpInstructionActions)(nil), "openflow_13.ofp_instruction_actions")
+	proto.RegisterType((*OfpInstructionMeter)(nil), "openflow_13.ofp_instruction_meter")
+	proto.RegisterType((*OfpInstructionExperimenter)(nil), "openflow_13.ofp_instruction_experimenter")
+	proto.RegisterType((*OfpFlowMod)(nil), "openflow_13.ofp_flow_mod")
+	proto.RegisterType((*OfpBucket)(nil), "openflow_13.ofp_bucket")
+	proto.RegisterType((*OfpGroupMod)(nil), "openflow_13.ofp_group_mod")
+	proto.RegisterType((*OfpPacketOut)(nil), "openflow_13.ofp_packet_out")
+	proto.RegisterType((*OfpPacketIn)(nil), "openflow_13.ofp_packet_in")
+	proto.RegisterType((*OfpFlowRemoved)(nil), "openflow_13.ofp_flow_removed")
+	proto.RegisterType((*OfpMeterBandHeader)(nil), "openflow_13.ofp_meter_band_header")
+	proto.RegisterType((*OfpMeterBandDrop)(nil), "openflow_13.ofp_meter_band_drop")
+	proto.RegisterType((*OfpMeterBandDscpRemark)(nil), "openflow_13.ofp_meter_band_dscp_remark")
+	proto.RegisterType((*OfpMeterBandExperimenter)(nil), "openflow_13.ofp_meter_band_experimenter")
+	proto.RegisterType((*OfpMeterMod)(nil), "openflow_13.ofp_meter_mod")
+	proto.RegisterType((*OfpErrorMsg)(nil), "openflow_13.ofp_error_msg")
+	proto.RegisterType((*OfpErrorExperimenterMsg)(nil), "openflow_13.ofp_error_experimenter_msg")
+	proto.RegisterType((*OfpMultipartRequest)(nil), "openflow_13.ofp_multipart_request")
+	proto.RegisterType((*OfpMultipartReply)(nil), "openflow_13.ofp_multipart_reply")
+	proto.RegisterType((*OfpDesc)(nil), "openflow_13.ofp_desc")
+	proto.RegisterType((*OfpFlowStatsRequest)(nil), "openflow_13.ofp_flow_stats_request")
+	proto.RegisterType((*OfpFlowStats)(nil), "openflow_13.ofp_flow_stats")
+	proto.RegisterType((*OfpAggregateStatsRequest)(nil), "openflow_13.ofp_aggregate_stats_request")
+	proto.RegisterType((*OfpAggregateStatsReply)(nil), "openflow_13.ofp_aggregate_stats_reply")
+	proto.RegisterType((*OfpTableFeatureProperty)(nil), "openflow_13.ofp_table_feature_property")
+	proto.RegisterType((*OfpTableFeaturePropInstructions)(nil), "openflow_13.ofp_table_feature_prop_instructions")
+	proto.RegisterType((*OfpTableFeaturePropNextTables)(nil), "openflow_13.ofp_table_feature_prop_next_tables")
+	proto.RegisterType((*OfpTableFeaturePropActions)(nil), "openflow_13.ofp_table_feature_prop_actions")
+	proto.RegisterType((*OfpTableFeaturePropOxm)(nil), "openflow_13.ofp_table_feature_prop_oxm")
+	proto.RegisterType((*OfpTableFeaturePropExperimenter)(nil), "openflow_13.ofp_table_feature_prop_experimenter")
+	proto.RegisterType((*OfpTableFeatures)(nil), "openflow_13.ofp_table_features")
+	proto.RegisterType((*OfpTableStats)(nil), "openflow_13.ofp_table_stats")
+	proto.RegisterType((*OfpPortStatsRequest)(nil), "openflow_13.ofp_port_stats_request")
+	proto.RegisterType((*OfpPortStats)(nil), "openflow_13.ofp_port_stats")
+	proto.RegisterType((*OfpGroupStatsRequest)(nil), "openflow_13.ofp_group_stats_request")
+	proto.RegisterType((*OfpBucketCounter)(nil), "openflow_13.ofp_bucket_counter")
+	proto.RegisterType((*OfpGroupStats)(nil), "openflow_13.ofp_group_stats")
+	proto.RegisterType((*OfpGroupDesc)(nil), "openflow_13.ofp_group_desc")
+	proto.RegisterType((*OfpGroupEntry)(nil), "openflow_13.ofp_group_entry")
+	proto.RegisterType((*OfpGroupFeatures)(nil), "openflow_13.ofp_group_features")
+	proto.RegisterType((*OfpMeterMultipartRequest)(nil), "openflow_13.ofp_meter_multipart_request")
+	proto.RegisterType((*OfpMeterBandStats)(nil), "openflow_13.ofp_meter_band_stats")
+	proto.RegisterType((*OfpMeterStats)(nil), "openflow_13.ofp_meter_stats")
+	proto.RegisterType((*OfpMeterConfig)(nil), "openflow_13.ofp_meter_config")
+	proto.RegisterType((*OfpMeterFeatures)(nil), "openflow_13.ofp_meter_features")
+	proto.RegisterType((*OfpMeterEntry)(nil), "openflow_13.ofp_meter_entry")
+	proto.RegisterType((*OfpExperimenterMultipartHeader)(nil), "openflow_13.ofp_experimenter_multipart_header")
+	proto.RegisterType((*OfpExperimenterHeader)(nil), "openflow_13.ofp_experimenter_header")
+	proto.RegisterType((*OfpQueuePropHeader)(nil), "openflow_13.ofp_queue_prop_header")
+	proto.RegisterType((*OfpQueuePropMinRate)(nil), "openflow_13.ofp_queue_prop_min_rate")
+	proto.RegisterType((*OfpQueuePropMaxRate)(nil), "openflow_13.ofp_queue_prop_max_rate")
+	proto.RegisterType((*OfpQueuePropExperimenter)(nil), "openflow_13.ofp_queue_prop_experimenter")
+	proto.RegisterType((*OfpPacketQueue)(nil), "openflow_13.ofp_packet_queue")
+	proto.RegisterType((*OfpQueueGetConfigRequest)(nil), "openflow_13.ofp_queue_get_config_request")
+	proto.RegisterType((*OfpQueueGetConfigReply)(nil), "openflow_13.ofp_queue_get_config_reply")
+	proto.RegisterType((*OfpActionSetQueue)(nil), "openflow_13.ofp_action_set_queue")
+	proto.RegisterType((*OfpQueueStatsRequest)(nil), "openflow_13.ofp_queue_stats_request")
+	proto.RegisterType((*OfpQueueStats)(nil), "openflow_13.ofp_queue_stats")
+	proto.RegisterType((*OfpRoleRequest)(nil), "openflow_13.ofp_role_request")
+	proto.RegisterType((*OfpAsyncConfig)(nil), "openflow_13.ofp_async_config")
+	proto.RegisterType((*MeterModUpdate)(nil), "openflow_13.MeterModUpdate")
+	proto.RegisterType((*MeterStatsReply)(nil), "openflow_13.MeterStatsReply")
+	proto.RegisterType((*FlowTableUpdate)(nil), "openflow_13.FlowTableUpdate")
+	proto.RegisterType((*FlowGroupTableUpdate)(nil), "openflow_13.FlowGroupTableUpdate")
+	proto.RegisterType((*Flows)(nil), "openflow_13.Flows")
+	proto.RegisterType((*Meters)(nil), "openflow_13.Meters")
+	proto.RegisterType((*FlowGroups)(nil), "openflow_13.FlowGroups")
+	proto.RegisterType((*FlowChanges)(nil), "openflow_13.FlowChanges")
+	proto.RegisterType((*FlowGroupChanges)(nil), "openflow_13.FlowGroupChanges")
+	proto.RegisterType((*PacketIn)(nil), "openflow_13.PacketIn")
+	proto.RegisterType((*PacketOut)(nil), "openflow_13.PacketOut")
+	proto.RegisterType((*ChangeEvent)(nil), "openflow_13.ChangeEvent")
+}
+
+func init() { proto.RegisterFile("voltha_protos/openflow_13.proto", fileDescriptor_08e3a4e375aeddc7) }
+
+var fileDescriptor_08e3a4e375aeddc7 = []byte{
+	// 8456 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7d, 0x5b, 0x8c, 0x1b, 0x4b,
+	0x76, 0x98, 0xf8, 0x98, 0x19, 0xb2, 0x38, 0x33, 0x6a, 0xb5, 0x5e, 0x94, 0x46, 0xba, 0x92, 0x78,
+	0x75, 0x77, 0xef, 0x72, 0xbd, 0x2b, 0x5d, 0x5d, 0xad, 0x76, 0xbd, 0x0f, 0x47, 0x4d, 0xb2, 0x39,
+	0xe4, 0x15, 0x1f, 0xad, 0xee, 0x9e, 0x91, 0xb4, 0x81, 0xd3, 0xe0, 0x90, 0xad, 0x19, 0xfa, 0xf2,
+	0xb5, 0xdd, 0x3d, 0xa3, 0x91, 0x13, 0x07, 0x8a, 0x8d, 0x20, 0x40, 0x12, 0xdb, 0x09, 0xfc, 0xb1,
+	0x40, 0xe0, 0x00, 0x31, 0xe2, 0x7c, 0x04, 0x01, 0xf2, 0x11, 0x20, 0x40, 0x80, 0xfc, 0x26, 0x40,
+	0x02, 0xe4, 0x01, 0x18, 0x08, 0xfc, 0x63, 0xff, 0x39, 0x3f, 0x01, 0xfc, 0x9d, 0xc4, 0xd9, 0xac,
+	0x82, 0x53, 0xe7, 0x54, 0x75, 0x35, 0x1f, 0x73, 0x67, 0x37, 0x77, 0xf3, 0x91, 0x2f, 0xb1, 0xcf,
+	0xab, 0x4e, 0x9d, 0x3a, 0xe7, 0xd4, 0xa9, 0xd3, 0xd5, 0x23, 0x76, 0xe7, 0x64, 0x3a, 0x8a, 0x8e,
+	0x7a, 0xde, 0x2c, 0x98, 0x46, 0xd3, 0xf0, 0xc1, 0x74, 0xe6, 0x4f, 0x5e, 0x8f, 0xa6, 0x6f, 0xbc,
+	0x4f, 0x3e, 0xfd, 0x26, 0x07, 0xe9, 0x05, 0x05, 0x74, 0xf3, 0xd6, 0xe1, 0x74, 0x7a, 0x38, 0xf2,
+	0x1f, 0xf4, 0x66, 0xc3, 0x07, 0xbd, 0xc9, 0x64, 0x1a, 0xf5, 0xa2, 0xe1, 0x74, 0x12, 0x22, 0xe9,
+	0xcd, 0xbb, 0x49, 0x59, 0x6f, 0x7b, 0x93, 0x43, 0x6f, 0x3a, 0x53, 0x28, 0x4a, 0x7d, 0xc6, 0xa6,
+	0xaf, 0x67, 0xde, 0x91, 0xdf, 0x1b, 0xf8, 0x81, 0x5e, 0x64, 0x1b, 0x27, 0x7e, 0x10, 0x0e, 0xa7,
+	0x93, 0x62, 0xea, 0x6e, 0xea, 0xe3, 0x2d, 0x5b, 0x3c, 0xea, 0x5f, 0x63, 0xd9, 0xe8, 0xed, 0xcc,
+	0x2f, 0xa6, 0xef, 0xa6, 0x3e, 0xde, 0x7e, 0x74, 0xf5, 0x9b, 0xaa, 0x5a, 0x20, 0x00, 0x90, 0x36,
+	0x27, 0xd1, 0x35, 0x96, 0x39, 0x1d, 0x0e, 0x8a, 0x19, 0x2e, 0x00, 0x7e, 0x96, 0xfe, 0x59, 0x8a,
+	0x5d, 0xc5, 0x51, 0x46, 0xa3, 0xa9, 0xe7, 0x8f, 0xfc, 0xb1, 0x18, 0xf0, 0x31, 0x89, 0x4d, 0x71,
+	0xb1, 0x77, 0x17, 0xc4, 0x2a, 0x1c, 0xca, 0x08, 0xcf, 0xd9, 0x16, 0xe9, 0x75, 0x30, 0x8c, 0xc6,
+	0xbd, 0x19, 0xd7, 0xaa, 0xf0, 0xe8, 0x6b, 0x67, 0xb1, 0x27, 0x18, 0x1a, 0x17, 0xec, 0xa4, 0x84,
+	0x4a, 0x9e, 0x6d, 0x00, 0x99, 0x3f, 0x89, 0x4a, 0xdf, 0x61, 0xb7, 0xce, 0xe2, 0x05, 0x23, 0xe1,
+	0xaf, 0xb0, 0x98, 0xbe, 0x9b, 0x01, 0x23, 0xd1, 0x63, 0xe9, 0x19, 0xcb, 0x4b, 0x4e, 0xfd, 0x57,
+	0x58, 0x8e, 0x24, 0x86, 0xc5, 0xd4, 0xdd, 0xcc, 0xc7, 0x85, 0x47, 0xa5, 0xb3, 0xf4, 0x43, 0x83,
+	0xd8, 0x92, 0xa7, 0xd4, 0x66, 0x97, 0x80, 0x24, 0x7c, 0x33, 0x8c, 0xfa, 0x47, 0x5e, 0x7f, 0x3a,
+	0x79, 0x3d, 0x3c, 0xd4, 0xaf, 0xb0, 0xb5, 0xd7, 0xa3, 0xde, 0x61, 0x48, 0xcb, 0x83, 0x0f, 0x7a,
+	0x89, 0x6d, 0x8d, 0x87, 0x61, 0xe8, 0x85, 0xfe, 0x64, 0xe0, 0x8d, 0xfc, 0x09, 0xb7, 0xc7, 0x96,
+	0x5d, 0x00, 0xa0, 0xe3, 0x4f, 0x06, 0x2d, 0x7f, 0x52, 0xaa, 0xb0, 0x2d, 0xbe, 0x4e, 0xbd, 0x83,
+	0x91, 0xef, 0x8d, 0xa7, 0x03, 0xfd, 0x06, 0xcb, 0xe1, 0xc3, 0x70, 0x20, 0x16, 0x9b, 0x3f, 0x37,
+	0x07, 0xfa, 0x35, 0xb6, 0x8e, 0xe3, 0x91, 0x20, 0x7a, 0x2a, 0xfd, 0xa3, 0x34, 0xcb, 0x81, 0x90,
+	0xd9, 0x34, 0x88, 0xf4, 0xeb, 0x6c, 0x03, 0xfe, 0xf5, 0x26, 0x53, 0x62, 0x5f, 0x87, 0xc7, 0xce,
+	0x14, 0x10, 0x47, 0x6f, 0xbc, 0xde, 0x60, 0x10, 0x90, 0x7d, 0xd6, 0x8f, 0xde, 0x18, 0x83, 0x41,
+	0xa0, 0xeb, 0x2c, 0x3b, 0xe9, 0x8d, 0x7d, 0xee, 0x19, 0x79, 0x9b, 0xff, 0x56, 0x86, 0xca, 0xaa,
+	0x43, 0xc1, 0x44, 0xc3, 0xa8, 0x17, 0xf9, 0xc5, 0x35, 0x9c, 0x28, 0x7f, 0x00, 0x09, 0xfd, 0xe3,
+	0x20, 0x28, 0xae, 0x73, 0x20, 0xff, 0xad, 0x7f, 0xc0, 0x58, 0x6f, 0x70, 0xe2, 0x07, 0xd1, 0x30,
+	0xf4, 0x07, 0xc5, 0x0d, 0x8e, 0x51, 0x20, 0xfa, 0x2d, 0x96, 0x0f, 0x8f, 0x67, 0xa0, 0x9b, 0x3f,
+	0x28, 0xe6, 0x38, 0x3a, 0x06, 0x80, 0xc4, 0x99, 0xef, 0x07, 0xc5, 0x3c, 0x4a, 0x84, 0xdf, 0xfa,
+	0x6d, 0xc6, 0x40, 0xb2, 0x17, 0xce, 0x7c, 0x7f, 0x50, 0x64, 0xc8, 0x02, 0x10, 0x07, 0x00, 0xfa,
+	0x0e, 0xcb, 0x8f, 0x7b, 0xa7, 0x84, 0x2d, 0x70, 0x6c, 0x6e, 0xdc, 0x3b, 0xe5, 0xc8, 0xd2, 0xbf,
+	0x4c, 0xb1, 0xcb, 0xca, 0xb2, 0xbd, 0xf6, 0x7b, 0xd1, 0x71, 0xe0, 0x87, 0xfa, 0x1d, 0x56, 0x18,
+	0xf4, 0xa2, 0xde, 0xac, 0x17, 0x1d, 0x09, 0x83, 0x67, 0x6d, 0x26, 0x40, 0x4d, 0x2e, 0x75, 0xe2,
+	0x1d, 0x1c, 0xbf, 0x7e, 0xed, 0x07, 0x21, 0x99, 0x3d, 0x37, 0xa9, 0xe0, 0x33, 0xac, 0xd5, 0x04,
+	0x97, 0x2e, 0xa4, 0xb8, 0xda, 0x98, 0xb8, 0xfc, 0x51, 0xbf, 0xc7, 0x36, 0x7b, 0xc7, 0xa7, 0xc3,
+	0xd1, 0xb0, 0x17, 0xbc, 0x05, 0xc9, 0x68, 0xc6, 0x82, 0x84, 0x35, 0x07, 0x7a, 0x89, 0x6d, 0xf6,
+	0x7b, 0xb3, 0xde, 0xc1, 0x70, 0x34, 0x8c, 0x86, 0x7e, 0x48, 0x26, 0x4d, 0xc0, 0x4a, 0x01, 0xbb,
+	0x28, 0x56, 0xd6, 0x03, 0x5b, 0x1f, 0x87, 0xfa, 0x63, 0xb6, 0x1e, 0xf8, 0xbd, 0x90, 0x72, 0xc1,
+	0xf6, 0xa3, 0x5b, 0x0b, 0xee, 0xcb, 0xa9, 0x91, 0xc6, 0x26, 0x5a, 0x48, 0x14, 0x03, 0x3f, 0xec,
+	0x53, 0x48, 0x5e, 0x5d, 0xca, 0x63, 0x73, 0x92, 0xd2, 0xdf, 0x4e, 0xb1, 0x4d, 0x29, 0x06, 0x5c,
+	0xf2, 0x67, 0x77, 0xa9, 0xd8, 0x7d, 0x32, 0x09, 0xf7, 0xd1, 0x59, 0x76, 0xdc, 0x0b, 0x3f, 0x27,
+	0x6b, 0xf0, 0xdf, 0xe0, 0x08, 0xd2, 0x2d, 0xc8, 0x06, 0x31, 0xa0, 0xf4, 0x06, 0x63, 0x77, 0xdc,
+	0x8b, 0xfa, 0x47, 0xfa, 0x83, 0x44, 0x5a, 0xda, 0x59, 0x98, 0x04, 0xa7, 0x52, 0x33, 0xd2, 0x2f,
+	0x33, 0x36, 0x3d, 0x1d, 0x7b, 0xaf, 0x87, 0xfe, 0x68, 0x80, 0x69, 0xa1, 0xf0, 0xe8, 0xe6, 0x02,
+	0x9b, 0x24, 0xb1, 0xf3, 0xd3, 0xd3, 0x71, 0x9d, 0x13, 0x97, 0xfe, 0x5b, 0x0a, 0x23, 0x53, 0x22,
+	0xf5, 0x6f, 0x33, 0x40, 0x7b, 0xfd, 0x51, 0x2f, 0x0c, 0x49, 0x85, 0xe5, 0xb2, 0x38, 0x85, 0x9d,
+	0x9b, 0x9e, 0x8e, 0xab, 0xf0, 0x4b, 0xff, 0x01, 0xcc, 0xe1, 0x00, 0xa5, 0xf0, 0xa9, 0x17, 0x1e,
+	0x7d, 0xb0, 0x94, 0x51, 0x52, 0x35, 0x2e, 0xd8, 0xb9, 0xe9, 0xeb, 0x03, 0xae, 0x8a, 0xfe, 0x92,
+	0xe9, 0xfe, 0xe9, 0xcc, 0x0f, 0x86, 0x90, 0x80, 0xfc, 0x80, 0xe4, 0xac, 0x71, 0x39, 0x5f, 0x5d,
+	0x2a, 0x67, 0x91, 0xbc, 0x71, 0xc1, 0xbe, 0xa4, 0x42, 0xb9, 0xe4, 0xca, 0x06, 0x5b, 0xe3, 0xd8,
+	0xd2, 0x1f, 0x6f, 0x63, 0x56, 0x4b, 0x28, 0x71, 0xf6, 0x2e, 0xa0, 0x52, 0x72, 0x93, 0x87, 0x64,
+	0xf3, 0x1b, 0x2c, 0x77, 0xd4, 0x0b, 0x3d, 0xbe, 0xce, 0xe0, 0x6d, 0x39, 0x7b, 0xe3, 0xa8, 0x17,
+	0xb6, 0x61, 0xa9, 0xaf, 0xb0, 0x2c, 0x78, 0x0e, 0x3a, 0x45, 0xe3, 0x82, 0xcd, 0x9f, 0xf4, 0x8f,
+	0xd8, 0xd6, 0xec, 0xe8, 0x6d, 0x38, 0xec, 0xf7, 0x46, 0xdc, 0xe7, 0xd0, 0x3b, 0x1a, 0x17, 0xec,
+	0x4d, 0x01, 0xb6, 0x80, 0xec, 0xab, 0x6c, 0x9b, 0xb2, 0xa4, 0x1f, 0xf5, 0x20, 0x42, 0xb9, 0x09,
+	0xb2, 0xb0, 0x67, 0x70, 0x78, 0x9b, 0xc0, 0xfa, 0x0d, 0xb6, 0xe1, 0x47, 0x47, 0xde, 0x20, 0x8c,
+	0x78, 0x42, 0xda, 0x6c, 0x5c, 0xb0, 0xd7, 0xfd, 0xe8, 0xa8, 0x16, 0x46, 0x02, 0x15, 0x06, 0x7d,
+	0x9e, 0x91, 0x04, 0xca, 0x09, 0xfa, 0xfa, 0x0e, 0xcb, 0x01, 0x8a, 0x4f, 0x38, 0x47, 0x0a, 0x00,
+	0xb1, 0x0b, 0x73, 0xda, 0x61, 0xb9, 0x93, 0x51, 0x6f, 0xe2, 0x9d, 0x0c, 0x07, 0x98, 0x92, 0x00,
+	0x09, 0x90, 0xfd, 0xe1, 0x40, 0x22, 0x67, 0xfd, 0x19, 0x66, 0x25, 0x81, 0xb4, 0xfa, 0x33, 0x18,
+	0x71, 0x38, 0xf3, 0x06, 0x61, 0x7f, 0x86, 0x39, 0x09, 0x46, 0x1c, 0xce, 0x6a, 0x61, 0x7f, 0xa6,
+	0x5f, 0x67, 0xeb, 0xc3, 0x99, 0xe7, 0xf7, 0x27, 0xc5, 0x4d, 0xc2, 0xac, 0x0d, 0x67, 0x66, 0x7f,
+	0x02, 0x02, 0x87, 0x33, 0x2c, 0x0e, 0x8a, 0x5b, 0x42, 0xe0, 0x70, 0x66, 0xf1, 0x32, 0x83, 0x23,
+	0x4f, 0x1e, 0xf3, 0x39, 0x6c, 0xc7, 0xc8, 0x93, 0xc7, 0x34, 0x09, 0x8e, 0x84, 0xb9, 0x5f, 0x54,
+	0x91, 0x34, 0xf9, 0xa8, 0x3f, 0xe3, 0x8c, 0x9a, 0x50, 0x25, 0xea, 0xcf, 0x80, 0x8f, 0x50, 0xc0,
+	0x76, 0x49, 0x41, 0x11, 0xd7, 0xf1, 0x00, 0xb9, 0x74, 0x81, 0x3a, 0x1e, 0x08, 0x2e, 0x40, 0x01,
+	0xd7, 0x65, 0x05, 0x05, 0x5c, 0x3b, 0x2c, 0x17, 0xf6, 0x23, 0x64, 0xbb, 0x22, 0x14, 0x01, 0x08,
+	0x69, 0xc9, 0x91, 0xc0, 0x78, 0x55, 0x45, 0x02, 0xe7, 0x3d, 0x56, 0x18, 0xf6, 0xc7, 0x30, 0x09,
+	0xbe, 0x14, 0xd7, 0x08, 0xcf, 0x10, 0xc8, 0x57, 0x23, 0x26, 0xe9, 0x4f, 0x07, 0x7e, 0xf1, 0x7a,
+	0x92, 0xa4, 0x3a, 0x1d, 0xf8, 0x60, 0xdb, 0x5e, 0x30, 0xf3, 0xa6, 0xb3, 0x62, 0x51, 0xd8, 0xb6,
+	0x17, 0xcc, 0xba, 0x7c, 0x3d, 0x00, 0x11, 0xce, 0x7a, 0xc5, 0x1b, 0x42, 0xe7, 0x5e, 0x30, 0x73,
+	0x66, 0x3d, 0x81, 0x8a, 0x66, 0xbd, 0xe2, 0x4d, 0x05, 0xe5, 0xc6, 0xa8, 0xf0, 0xa8, 0x57, 0xdc,
+	0x11, 0x7e, 0x03, 0x5c, 0x47, 0x31, 0xd7, 0x51, 0xaf, 0x78, 0x4b, 0x41, 0xb9, 0x47, 0x3d, 0x5a,
+	0x8d, 0x27, 0xdc, 0x08, 0xb7, 0x09, 0x07, 0xab, 0xf1, 0x24, 0x5e, 0xaa, 0x27, 0xdc, 0x08, 0x1f,
+	0xa8, 0x48, 0x61, 0x04, 0x40, 0xbe, 0x1e, 0xf5, 0x0e, 0xfc, 0x51, 0xf1, 0x8e, 0x9c, 0xe1, 0xec,
+	0xe4, 0x49, 0x9d, 0xc3, 0xa4, 0x11, 0x9e, 0xa0, 0x9d, 0xee, 0x26, 0x8c, 0xf0, 0x24, 0x61, 0xa7,
+	0x27, 0x68, 0xa7, 0x7b, 0x49, 0x12, 0x6e, 0xa7, 0xaf, 0xb0, 0x6d, 0x3e, 0xd0, 0x64, 0xe0, 0x45,
+	0xbd, 0xe0, 0xd0, 0x8f, 0x8a, 0x25, 0xd2, 0x65, 0x13, 0xe0, 0x9d, 0x81, 0xcb, 0xa1, 0xfa, 0x5d,
+	0x52, 0x68, 0x32, 0xf0, 0xc2, 0x70, 0x54, 0xfc, 0x90, 0x88, 0xf2, 0x48, 0xe4, 0x84, 0x23, 0x95,
+	0x22, 0x1a, 0x8d, 0x8a, 0xf7, 0x93, 0x14, 0xee, 0x68, 0xa4, 0xdf, 0x61, 0x6c, 0x3c, 0x1b, 0x85,
+	0x1e, 0xce, 0xe9, 0x23, 0xd2, 0x26, 0x0f, 0xb0, 0x16, 0x9f, 0xd2, 0x0d, 0xb6, 0xc1, 0x09, 0xa2,
+	0x7e, 0xf1, 0x2b, 0x62, 0x01, 0x00, 0xe0, 0x72, 0x6b, 0x71, 0xd4, 0xc1, 0x34, 0x2c, 0x7e, 0x55,
+	0xb8, 0x0c, 0x40, 0x2a, 0xd3, 0x10, 0x90, 0xb3, 0x83, 0x03, 0x6f, 0x18, 0x0e, 0x07, 0xc5, 0x8f,
+	0x05, 0x72, 0x76, 0x70, 0xd0, 0x0c, 0x87, 0x03, 0xfd, 0x36, 0xcb, 0x47, 0xc7, 0x93, 0x89, 0x3f,
+	0x82, 0x5d, 0xf8, 0x6b, 0x94, 0x31, 0x72, 0x08, 0x6a, 0x0e, 0xa4, 0xa5, 0xfd, 0xd3, 0xe8, 0x68,
+	0x10, 0x14, 0xcb, 0xaa, 0xa5, 0x4d, 0x0e, 0xd3, 0x1f, 0xb2, 0xcb, 0xc9, 0xc4, 0x83, 0xb9, 0x6d,
+	0xc8, 0x65, 0xa5, 0xec, 0x4b, 0x89, 0xec, 0xc3, 0xf3, 0x5c, 0x89, 0x6d, 0x52, 0x06, 0x42, 0xd2,
+	0x5f, 0xe3, 0xc6, 0x48, 0xd9, 0x0c, 0xd3, 0x90, 0x4a, 0x13, 0x06, 0x7d, 0xa4, 0xf9, 0x5c, 0xa1,
+	0x71, 0x82, 0x3e, 0xa7, 0xb9, 0xcf, 0xb6, 0x44, 0xda, 0x41, 0xa2, 0x31, 0x57, 0x2f, 0x65, 0x17,
+	0x28, 0xf7, 0x08, 0x2a, 0x91, 0x11, 0x90, 0x2a, 0x10, 0x54, 0x94, 0x16, 0x12, 0x54, 0x52, 0xa9,
+	0x50, 0xa5, 0x52, 0xb4, 0xa2, 0xf0, 0x40, 0xa2, 0xdf, 0x20, 0x22, 0x86, 0x31, 0xa2, 0xd2, 0x44,
+	0x82, 0xe6, 0xaf, 0x2b, 0x34, 0x2e, 0xd1, 0x7c, 0xc4, 0x47, 0x7b, 0x12, 0xeb, 0xf4, 0x37, 0x52,
+	0x34, 0xbf, 0x02, 0x05, 0x40, 0x82, 0x4c, 0x2a, 0xf5, 0x9b, 0x09, 0x32, 0xa1, 0xd5, 0xd7, 0x99,
+	0xa6, 0x84, 0x03, 0x52, 0xfe, 0x56, 0x8a, 0x86, 0xdd, 0x8e, 0x83, 0x42, 0xc8, 0x14, 0xde, 0x80,
+	0x94, 0x7f, 0x57, 0x50, 0x16, 0xc8, 0x27, 0x38, 0x19, 0x6c, 0x27, 0xc2, 0x2f, 0x90, 0xee, 0xb7,
+	0x53, 0xb4, 0xa2, 0x9b, 0xc2, 0x3b, 0x12, 0x83, 0xa3, 0x87, 0x20, 0xe9, 0xef, 0x24, 0x06, 0x47,
+	0x3f, 0x01, 0x62, 0xd8, 0x51, 0x4f, 0x7a, 0xa3, 0x63, 0xbf, 0xb2, 0x8e, 0x95, 0x4e, 0xc9, 0x63,
+	0x37, 0x57, 0xef, 0xca, 0x50, 0xd2, 0x02, 0x06, 0x0f, 0x19, 0x54, 0x5c, 0x41, 0x91, 0xd1, 0xc0,
+	0x63, 0x18, 0xf8, 0x88, 0xc2, 0x44, 0xf5, 0x67, 0x02, 0x56, 0xfa, 0x17, 0x59, 0x3c, 0x2a, 0xf6,
+	0xfa, 0x70, 0x7e, 0xd4, 0x1f, 0x26, 0xf6, 0xec, 0xc5, 0xda, 0x10, 0xc9, 0xd4, 0x1a, 0xe9, 0x3b,
+	0x6c, 0x7d, 0x7a, 0x1c, 0xcd, 0x8e, 0x23, 0xaa, 0x0d, 0x3f, 0x58, 0xc5, 0x83, 0x54, 0x10, 0x94,
+	0xf8, 0x4b, 0xff, 0x01, 0x05, 0x65, 0x14, 0x8d, 0xf8, 0x96, 0x5e, 0x58, 0x72, 0x52, 0x24, 0x5e,
+	0x41, 0x27, 0xc2, 0xd6, 0x8d, 0x46, 0xfa, 0x23, 0x96, 0x9d, 0x1d, 0x87, 0x47, 0x54, 0x11, 0xad,
+	0x54, 0x15, 0x68, 0x78, 0xad, 0x70, 0x1c, 0x1e, 0xc1, 0x90, 0xb3, 0xe9, 0x8c, 0x8b, 0xa3, 0x0a,
+	0x68, 0xe5, 0x90, 0x82, 0x8e, 0x27, 0x83, 0xe9, 0xac, 0x3d, 0x1b, 0x85, 0xfa, 0xb7, 0xd8, 0xda,
+	0x61, 0x30, 0x3d, 0x9e, 0xf1, 0xc2, 0xa0, 0xf0, 0xe8, 0xf6, 0x2a, 0x5e, 0x4e, 0x04, 0x9b, 0x06,
+	0xff, 0xa1, 0x7f, 0x9b, 0xad, 0x4f, 0xde, 0xf0, 0x69, 0x6e, 0x9c, 0x6d, 0x22, 0xa4, 0x02, 0xc6,
+	0xc9, 0x1b, 0x98, 0xe2, 0x53, 0x96, 0x0f, 0xfd, 0x88, 0x2a, 0xb6, 0x1c, 0xe7, 0xbd, 0xb7, 0x8a,
+	0x57, 0x12, 0x42, 0x7e, 0x0a, 0xfd, 0x08, 0x8b, 0xbf, 0xcf, 0xe6, 0x5c, 0x20, 0xcf, 0x85, 0xdc,
+	0x5f, 0x25, 0x44, 0xa5, 0x85, 0x24, 0xae, 0x3e, 0x57, 0x72, 0x6c, 0x1d, 0xc9, 0x4a, 0x4f, 0xb1,
+	0xdc, 0x4b, 0x2c, 0x2c, 0x3f, 0x73, 0x41, 0xf9, 0x95, 0xa2, 0x33, 0x17, 0x9d, 0x26, 0xe1, 0x50,
+	0x15, 0x1f, 0x5e, 0xd7, 0xc7, 0xbd, 0x53, 0x38, 0xb7, 0x3e, 0xc4, 0xf3, 0xd4, 0xdc, 0xf2, 0x42,
+	0xf1, 0x27, 0x5d, 0x82, 0x4e, 0xaf, 0xb4, 0xdc, 0xa5, 0x07, 0x78, 0x94, 0x51, 0x56, 0x15, 0x4a,
+	0x7f, 0x3f, 0x3a, 0xf2, 0x03, 0xe9, 0xb1, 0x5b, 0x76, 0x0c, 0x28, 0x7d, 0x9a, 0x18, 0x42, 0x2c,
+	0xe7, 0x17, 0x30, 0x7d, 0x83, 0x69, 0xf3, 0xeb, 0x08, 0x4a, 0xf1, 0x1f, 0xca, 0x91, 0x9a, 0x3f,
+	0x37, 0x07, 0xa5, 0x72, 0xc2, 0x10, 0xb8, 0x7c, 0xfa, 0x55, 0xb9, 0xdc, 0x74, 0x9c, 0xe7, 0x8b,
+	0x59, 0x6a, 0xb0, 0x2b, 0xcb, 0x96, 0x4b, 0x7f, 0x48, 0x55, 0x34, 0xa7, 0x3e, 0xfb, 0x7c, 0x41,
+	0xe5, 0xf6, 0x73, 0x76, 0x7d, 0xc5, 0x9a, 0x2d, 0x84, 0x7c, 0x6a, 0x31, 0xe4, 0x61, 0xa1, 0x78,
+	0xfd, 0x0b, 0x2b, 0xb2, 0x69, 0xf3, 0xdf, 0xa5, 0xdf, 0xcf, 0xa0, 0x79, 0x87, 0x93, 0x30, 0x0a,
+	0x8e, 0x31, 0x17, 0xe8, 0x4a, 0x2e, 0xd8, 0xa2, 0x68, 0x6f, 0x30, 0x76, 0x38, 0x8d, 0xa6, 0x78,
+	0x6a, 0xa5, 0x88, 0x5f, 0x3c, 0x44, 0x28, 0x52, 0xbc, 0x98, 0x1c, 0x76, 0x6b, 0x78, 0xe2, 0x47,
+	0x5c, 0xdd, 0x65, 0xdb, 0x6f, 0x82, 0x61, 0xa4, 0xd4, 0xe3, 0x98, 0x03, 0xbe, 0x7e, 0xa6, 0xb4,
+	0x24, 0x0b, 0x14, 0xef, 0x1c, 0x22, 0x8b, 0xf7, 0xa7, 0x6c, 0x03, 0xcd, 0x12, 0x52, 0x5e, 0xb8,
+	0x7f, 0xa6, 0x38, 0xa2, 0x85, 0x18, 0xa7, 0x9f, 0xfa, 0x77, 0xd9, 0xda, 0xd8, 0x07, 0xd3, 0x61,
+	0x7e, 0x28, 0x9d, 0xc9, 0xcf, 0x29, 0x21, 0x5e, 0xf9, 0x0f, 0xbd, 0x3b, 0x67, 0xfd, 0xf5, 0x15,
+	0x0d, 0x2c, 0x55, 0xc4, 0x99, 0x21, 0xb7, 0x8e, 0x4b, 0x55, 0xfa, 0x36, 0x6e, 0x03, 0xcb, 0xed,
+	0x7a, 0x46, 0xcf, 0xa7, 0xd4, 0x63, 0x1f, 0x9c, 0x6d, 0x42, 0xfd, 0x26, 0xcb, 0xc9, 0x15, 0xc0,
+	0xfe, 0x85, 0x7c, 0xd6, 0x3f, 0x64, 0x5b, 0xc9, 0xa2, 0x25, 0xcd, 0x09, 0x36, 0xc7, 0x4a, 0xb5,
+	0x52, 0x6a, 0xa1, 0x37, 0x2e, 0x31, 0xab, 0xfe, 0x49, 0xbc, 0x1a, 0xd8, 0x2b, 0xbb, 0xbe, 0x22,
+	0xf1, 0x48, 0xf3, 0x97, 0x1e, 0x61, 0x4f, 0x71, 0xc1, 0xc8, 0x3c, 0x35, 0xc0, 0x0f, 0x65, 0x92,
+	0xfc, 0xb9, 0x39, 0x28, 0xed, 0x63, 0x6b, 0x6f, 0x95, 0x55, 0x7f, 0xee, 0xa0, 0xf8, 0x93, 0x0c,
+	0x76, 0x32, 0xb8, 0xbe, 0xe3, 0x29, 0x75, 0xd0, 0xa6, 0x9f, 0x0f, 0x7d, 0xb2, 0x14, 0x3d, 0xe9,
+	0x77, 0x58, 0x01, 0x7f, 0xa9, 0x56, 0x62, 0x08, 0xe2, 0x45, 0x80, 0xba, 0x42, 0x99, 0x64, 0x57,
+	0xee, 0x7b, 0x6c, 0xa3, 0x3f, 0x1d, 0x8f, 0x7b, 0x13, 0x3c, 0xdb, 0x6f, 0x2f, 0xc9, 0xf0, 0x62,
+	0x7c, 0x8f, 0x08, 0x6d, 0xc1, 0xa1, 0xdf, 0x63, 0x9b, 0xc3, 0xc1, 0xc8, 0xf7, 0xa2, 0xe1, 0xd8,
+	0x9f, 0x1e, 0x47, 0xd4, 0xff, 0x28, 0x00, 0xcc, 0x45, 0x10, 0x90, 0x1c, 0xf5, 0x82, 0x81, 0x24,
+	0xc1, 0x26, 0x5b, 0x01, 0x60, 0x82, 0xe4, 0x26, 0xcb, 0xcd, 0x82, 0xe1, 0x34, 0x18, 0x46, 0x6f,
+	0xa9, 0xd3, 0x26, 0x9f, 0xf5, 0x1d, 0x96, 0xc7, 0xf6, 0x15, 0xa8, 0x8e, 0x7d, 0xb6, 0x1c, 0x02,
+	0x9a, 0xbc, 0xd9, 0x38, 0x3d, 0x8e, 0xf0, 0xd4, 0x8d, 0xad, 0xb6, 0x8d, 0xe9, 0x71, 0xc4, 0x8f,
+	0xdb, 0x3b, 0x2c, 0x0f, 0x28, 0xdc, 0x2e, 0xb1, 0xd9, 0x06, 0xb4, 0xbb, 0x3c, 0xa3, 0xca, 0x7e,
+	0x67, 0x41, 0xed, 0x77, 0xfe, 0x12, 0x5b, 0xe3, 0x1d, 0x18, 0x7e, 0x9e, 0x2d, 0x3c, 0xba, 0xb6,
+	0xbc, 0x3f, 0x63, 0x23, 0x91, 0xfe, 0x94, 0x6d, 0x2a, 0x0b, 0x1e, 0x16, 0xb7, 0xb8, 0x83, 0xdd,
+	0x3a, 0x2b, 0xd6, 0xec, 0x04, 0x47, 0xe9, 0xc7, 0x29, 0x2c, 0x7d, 0x0e, 0x8e, 0xfb, 0x9f, 0xfb,
+	0x11, 0x2c, 0xee, 0x1b, 0x7f, 0x78, 0x78, 0x24, 0x76, 0x30, 0x7a, 0x82, 0x22, 0xeb, 0x0d, 0x6f,
+	0x0c, 0xf1, 0x69, 0xe2, 0x36, 0x96, 0xe7, 0x10, 0x3e, 0xd1, 0x3b, 0xac, 0x80, 0x68, 0x9c, 0x2a,
+	0xae, 0x2e, 0x72, 0xe0, 0x64, 0x3f, 0x51, 0x53, 0xd2, 0xf9, 0x82, 0xe0, 0x3f, 0x50, 0xf3, 0x08,
+	0xb7, 0x1d, 0xf0, 0xbc, 0xef, 0xc7, 0x5e, 0x82, 0xa5, 0xd9, 0x62, 0x5e, 0x92, 0xc4, 0x8b, 0x6e,
+	0xf2, 0x20, 0xd1, 0xe6, 0xdf, 0x59, 0xc1, 0xaa, 0x14, 0x75, 0xea, 0x96, 0x97, 0x49, 0x6c, 0x79,
+	0x30, 0x1d, 0x34, 0xd8, 0xea, 0xe9, 0x20, 0xde, 0x16, 0x74, 0xa5, 0xdf, 0x4e, 0xb1, 0x6d, 0xde,
+	0x11, 0xec, 0xc1, 0x33, 0xd4, 0x0b, 0x49, 0xb7, 0x4a, 0xcd, 0xb9, 0xd5, 0x75, 0xb6, 0x31, 0x9c,
+	0xa8, 0xe6, 0x5e, 0x1f, 0x4e, 0xb8, 0xad, 0x15, 0x53, 0x66, 0xce, 0x67, 0x4a, 0x19, 0xd7, 0x59,
+	0x35, 0xae, 0xc9, 0xbc, 0xa4, 0xcf, 0x70, 0x72, 0xb6, 0x3a, 0xbf, 0x2c, 0x3b, 0xa6, 0xe9, 0x15,
+	0x01, 0x2a, 0x05, 0xcd, 0xb7, 0x4d, 0xcf, 0x88, 0xfb, 0x38, 0x97, 0x64, 0x13, 0xb9, 0x44, 0x46,
+	0xc1, 0xda, 0x79, 0xa2, 0x40, 0x4c, 0x6f, 0x5d, 0x99, 0xde, 0x3f, 0xcc, 0x60, 0x11, 0xc3, 0x99,
+	0x02, 0x7f, 0x3c, 0x3d, 0xf1, 0x57, 0xa7, 0x2e, 0x35, 0xf6, 0xd3, 0x73, 0xb1, 0xff, 0x7d, 0x39,
+	0xf1, 0x0c, 0x9f, 0xf8, 0xfd, 0xe5, 0x99, 0x89, 0x86, 0x38, 0x6b, 0xee, 0xd9, 0xe4, 0xdc, 0xef,
+	0xb1, 0xcd, 0xc1, 0x71, 0xd0, 0xa3, 0x42, 0xa8, 0x2f, 0xd2, 0x96, 0x80, 0x39, 0x7e, 0x1f, 0xb6,
+	0x1e, 0x49, 0x32, 0x01, 0x1a, 0xcc, 0x5b, 0x92, 0xaf, 0x13, 0xfa, 0xfd, 0x85, 0xf4, 0xb7, 0xf1,
+	0xc5, 0xe9, 0x2f, 0xb7, 0x98, 0xfe, 0xee, 0xb1, 0x4d, 0x5a, 0xc0, 0xfe, 0xf4, 0x78, 0x82, 0x99,
+	0x2c, 0x6b, 0x17, 0x10, 0x56, 0x05, 0x10, 0xe4, 0x80, 0x83, 0xb7, 0x91, 0x4f, 0x04, 0x8c, 0x13,
+	0xe4, 0x01, 0x82, 0x68, 0xb9, 0x66, 0x6f, 0xcf, 0xb1, 0x66, 0xa5, 0x3f, 0x49, 0xe3, 0x1e, 0x87,
+	0xdb, 0xd9, 0x41, 0x6f, 0x32, 0x38, 0xef, 0x7b, 0x33, 0x85, 0x43, 0x09, 0x56, 0x9d, 0x65, 0x83,
+	0x5e, 0xe4, 0xd3, 0xf2, 0xf1, 0xdf, 0x5c, 0xe1, 0xe3, 0x20, 0x8c, 0xbc, 0x70, 0xf8, 0xeb, 0x3e,
+	0xb9, 0x5e, 0x9e, 0x43, 0x9c, 0xe1, 0xaf, 0xfb, 0xfa, 0x13, 0x96, 0x1d, 0x04, 0xd3, 0x19, 0xd5,
+	0x48, 0x67, 0x0e, 0x04, 0x74, 0x70, 0x7e, 0x82, 0x7f, 0xf5, 0xcf, 0x58, 0x61, 0x10, 0xf6, 0x67,
+	0xb0, 0xe4, 0xbd, 0xe0, 0xf3, 0x95, 0x4d, 0x64, 0x95, 0x3d, 0x26, 0x6f, 0x5c, 0xb0, 0x19, 0x3c,
+	0xda, 0xfc, 0x49, 0xef, 0x2c, 0x2d, 0x96, 0x3e, 0x3e, 0x4b, 0xd8, 0xb9, 0x6a, 0xa5, 0xab, 0x58,
+	0xf7, 0xcf, 0x4d, 0xa1, 0xf4, 0x3d, 0x2c, 0xa1, 0x96, 0xab, 0x06, 0xf6, 0x9a, 0x05, 0x7e, 0xdf,
+	0x1b, 0xf9, 0x27, 0xbe, 0xa8, 0xdb, 0xf3, 0x00, 0x69, 0x01, 0xa0, 0x64, 0xb0, 0x9d, 0x33, 0x54,
+	0x39, 0x4f, 0x81, 0x51, 0xfa, 0x57, 0x94, 0x74, 0x50, 0xc6, 0x39, 0x73, 0xba, 0x24, 0x5e, 0xcc,
+	0xe9, 0x72, 0x0f, 0x4d, 0xab, 0x7b, 0xa8, 0x5a, 0x25, 0x65, 0x12, 0x55, 0x92, 0xfe, 0x1d, 0xb6,
+	0x06, 0x9a, 0x8b, 0xb4, 0x5d, 0x3a, 0xcb, 0xd0, 0xf4, 0xda, 0x12, 0x19, 0x4a, 0xcf, 0x50, 0x73,
+	0x3f, 0x08, 0xa6, 0x81, 0x37, 0x0e, 0x0f, 0x97, 0x9e, 0x0c, 0x74, 0x96, 0xe5, 0x6d, 0x42, 0xf2,
+	0x42, 0xf8, 0x2d, 0xb3, 0x53, 0x46, 0xc9, 0x4e, 0xbf, 0x95, 0xc2, 0x85, 0x40, 0x69, 0x89, 0xa6,
+	0xc6, 0x2a, 0xd1, 0x37, 0x58, 0xce, 0x3f, 0xc5, 0xfd, 0x89, 0xc4, 0x6f, 0xf8, 0xa7, 0x33, 0xde,
+	0xa3, 0x9c, 0xb7, 0x7c, 0xe6, 0x8c, 0xd2, 0x4e, 0xdd, 0x02, 0x4e, 0x28, 0x04, 0x8f, 0x47, 0xd1,
+	0x70, 0xd6, 0xe3, 0xef, 0xbb, 0x7e, 0x74, 0xec, 0x87, 0x91, 0xfe, 0x69, 0x22, 0x04, 0xef, 0x2c,
+	0x1a, 0x49, 0x72, 0x28, 0x11, 0xb8, 0x7c, 0x2d, 0x74, 0x96, 0x3d, 0x98, 0x0e, 0xde, 0x8a, 0xd9,
+	0xc3, 0xef, 0x52, 0x44, 0xce, 0xa9, 0x8c, 0x3b, 0x1b, 0xbd, 0xfd, 0x45, 0x8f, 0xfa, 0xbb, 0x29,
+	0x7c, 0xc3, 0x3b, 0xf0, 0xc3, 0x3e, 0x77, 0x91, 0xd7, 0x01, 0xff, 0xcd, 0xc7, 0xcb, 0xdb, 0x1b,
+	0xe3, 0xd7, 0x41, 0x0d, 0x50, 0xf8, 0x42, 0x4e, 0xbe, 0xe8, 0xcb, 0xdb, 0xeb, 0x47, 0x6f, 0x04,
+	0x22, 0x24, 0x04, 0xbe, 0xe6, 0x5d, 0x0f, 0x11, 0x71, 0x9b, 0xb1, 0xd0, 0x0f, 0x86, 0xbd, 0x91,
+	0x37, 0x39, 0x1e, 0x73, 0x0b, 0xe7, 0xed, 0x3c, 0x42, 0x3a, 0xc7, 0x63, 0xe0, 0x1b, 0xe0, 0xb0,
+	0x3c, 0x57, 0xe4, 0xed, 0xf5, 0xc1, 0x0c, 0xf8, 0x4a, 0x7f, 0x94, 0x62, 0xd7, 0xe4, 0x06, 0x12,
+	0x46, 0xbd, 0x28, 0x94, 0x2b, 0x70, 0xc6, 0x1b, 0x6c, 0xb5, 0xde, 0x4c, 0x9f, 0x51, 0x6f, 0x66,
+	0xe6, 0xea, 0xcd, 0x55, 0x7b, 0xed, 0x5c, 0xdd, 0xbe, 0xb6, 0x50, 0xb7, 0xcb, 0xc4, 0xbe, 0x7e,
+	0x9e, 0xc4, 0xfe, 0x6f, 0x33, 0x58, 0xe7, 0xc4, 0x93, 0xd2, 0xb7, 0x59, 0x7a, 0x38, 0xe0, 0x2f,
+	0x5a, 0xb2, 0x76, 0x7a, 0x78, 0xe6, 0xeb, 0xf9, 0xf9, 0x4d, 0x31, 0x7d, 0x8e, 0x4d, 0x31, 0xb3,
+	0x64, 0x53, 0x54, 0x77, 0xf4, 0xec, 0xdc, 0x8e, 0xfe, 0xe5, 0x9c, 0x17, 0xa4, 0xe3, 0x6d, 0xa8,
+	0x8e, 0x17, 0x1b, 0x39, 0x97, 0x30, 0xf2, 0x97, 0xb8, 0xbd, 0xfe, 0x3f, 0x3a, 0x18, 0xfc, 0x71,
+	0x0a, 0xd3, 0x7d, 0xef, 0xf0, 0x30, 0xf0, 0x0f, 0x7b, 0x91, 0xff, 0xff, 0x8d, 0x87, 0xfe, 0x35,
+	0x76, 0x63, 0xf9, 0xc4, 0x20, 0x09, 0xcd, 0x2f, 0x54, 0xea, 0x8b, 0x16, 0x2a, 0x3d, 0xbf, 0x50,
+	0xb7, 0x19, 0xe3, 0x43, 0x23, 0x9a, 0xaa, 0x0e, 0x80, 0x70, 0x74, 0xe9, 0xcf, 0x33, 0x98, 0xfa,
+	0xd1, 0x78, 0x74, 0x89, 0xc2, 0x9b, 0x05, 0xd3, 0x99, 0x1f, 0xf0, 0x72, 0x53, 0x4d, 0x82, 0x8b,
+	0x85, 0xc0, 0x22, 0x9b, 0x9a, 0x0d, 0xf7, 0xe7, 0x96, 0x1d, 0x7b, 0x53, 0x0f, 0xcf, 0x23, 0x45,
+	0xe5, 0xe3, 0xaf, 0xae, 0x94, 0x67, 0xdd, 0x66, 0x85, 0x89, 0x7f, 0x1a, 0xa9, 0xf7, 0x34, 0x0a,
+	0x8f, 0x1e, 0x9c, 0x47, 0xac, 0xc2, 0x06, 0xa5, 0x0f, 0x3c, 0xd2, 0xed, 0x8e, 0xdd, 0xf9, 0x2e,
+	0xd5, 0xd7, 0xcf, 0x23, 0x6f, 0x49, 0xb3, 0xea, 0x7b, 0x2c, 0x33, 0x3d, 0x1d, 0xaf, 0xac, 0xc3,
+	0x96, 0x08, 0x99, 0x9e, 0x8e, 0x1b, 0x17, 0x6c, 0xe0, 0x02, 0x8b, 0x2d, 0x29, 0xc0, 0xce, 0x65,
+	0xb1, 0x33, 0x0b, 0x31, 0xf1, 0x12, 0xa3, 0x74, 0xc8, 0x3e, 0x3c, 0x87, 0xc5, 0x17, 0x02, 0x36,
+	0xf5, 0x33, 0x07, 0xec, 0x67, 0xac, 0xf4, 0xc5, 0x6b, 0xa0, 0xdf, 0x67, 0xdb, 0xf1, 0xa3, 0x37,
+	0x1c, 0xe0, 0x48, 0x5b, 0xf6, 0xa6, 0x5c, 0x99, 0xe6, 0x20, 0x2c, 0x39, 0xd8, 0x31, 0x5b, 0x6d,
+	0xff, 0x9f, 0xa7, 0xab, 0xf5, 0xad, 0x55, 0x8e, 0x0f, 0xeb, 0x01, 0xbb, 0xe4, 0xf4, 0x74, 0xcc,
+	0x35, 0xca, 0xe0, 0x3d, 0x98, 0xe9, 0xe9, 0x18, 0x74, 0xf9, 0xfb, 0xa9, 0x95, 0x16, 0x3c, 0xb3,
+	0xfe, 0x5c, 0xf2, 0xa2, 0x27, 0x51, 0x44, 0x65, 0x92, 0x45, 0xd4, 0xd7, 0x59, 0xe2, 0x72, 0x87,
+	0x47, 0xd5, 0x12, 0x68, 0xa2, 0xa9, 0x88, 0x1a, 0x54, 0x4e, 0xbf, 0x97, 0x66, 0xfa, 0x82, 0x4e,
+	0xe1, 0x59, 0x39, 0x51, 0x5c, 0x10, 0x4b, 0x2b, 0x17, 0xc4, 0x3e, 0x62, 0xdb, 0x4a, 0x67, 0x11,
+	0xf2, 0x57, 0x86, 0x27, 0x93, 0xad, 0xb8, 0xb5, 0x08, 0xb9, 0x5c, 0x25, 0xe3, 0x7d, 0x4b, 0x4a,
+	0x8f, 0x92, 0xec, 0x05, 0x00, 0x95, 0xfb, 0x42, 0x6b, 0x89, 0xfb, 0x42, 0x77, 0x58, 0x61, 0xdc,
+	0x3b, 0xf5, 0xfc, 0x49, 0x14, 0x0c, 0xfd, 0x90, 0xb6, 0x32, 0x36, 0xee, 0x9d, 0x9a, 0x08, 0xd1,
+	0x77, 0xa1, 0xec, 0xe7, 0xe9, 0x07, 0xf0, 0x1b, 0x7c, 0x35, 0xcf, 0x13, 0x46, 0x90, 0xaf, 0x6c,
+	0x85, 0xb5, 0xf4, 0xe3, 0x14, 0xf6, 0xcf, 0x91, 0x14, 0xf7, 0xfe, 0xb3, 0xf7, 0x7a, 0x70, 0x8d,
+	0x13, 0x35, 0x93, 0x6e, 0xd9, 0x05, 0x84, 0x61, 0x2e, 0xbd, 0xc7, 0x36, 0x47, 0xd3, 0xe9, 0xe7,
+	0xc7, 0x33, 0x25, 0x9b, 0x66, 0xed, 0x02, 0xc2, 0x90, 0xe4, 0x43, 0xb6, 0xc5, 0x6d, 0xe7, 0x0f,
+	0x88, 0x26, 0x4b, 0xed, 0x59, 0x04, 0x62, 0xd2, 0xfd, 0x04, 0x0b, 0x2d, 0x79, 0x05, 0x2c, 0xde,
+	0xc6, 0x56, 0xdd, 0xcb, 0x2a, 0xfd, 0x29, 0xd5, 0x31, 0x31, 0xcf, 0xea, 0x3b, 0x5c, 0xb7, 0x19,
+	0x0b, 0x4e, 0xa9, 0x01, 0x12, 0x8a, 0x1d, 0x21, 0x38, 0xb5, 0x10, 0x00, 0xe8, 0x28, 0x46, 0xe3,
+	0x1c, 0xf2, 0x91, 0x44, 0xdf, 0x60, 0xb9, 0xe0, 0xd4, 0x83, 0x0d, 0x24, 0x24, 0xe5, 0x37, 0x82,
+	0xd3, 0x0a, 0x3c, 0x72, 0xeb, 0x09, 0x14, 0x6e, 0x7b, 0x1b, 0x11, 0xa1, 0x70, 0x4c, 0x38, 0xd5,
+	0xcd, 0xfc, 0x01, 0x5f, 0x55, 0x3e, 0x66, 0x0d, 0x01, 0x34, 0xa6, 0x40, 0x6f, 0x88, 0x31, 0x05,
+	0x7a, 0x87, 0xe5, 0x83, 0x53, 0x3c, 0x7e, 0x84, 0x54, 0xaa, 0xe4, 0x82, 0x53, 0x93, 0x3f, 0x03,
+	0x32, 0x92, 0x48, 0xac, 0x54, 0x72, 0x91, 0x40, 0xde, 0x65, 0x9b, 0xc1, 0xa9, 0xf7, 0x3a, 0xe8,
+	0x8d, 0x7d, 0x20, 0xa1, 0x42, 0x85, 0x05, 0xa7, 0x75, 0x00, 0x99, 0xfc, 0xd6, 0x62, 0x21, 0x38,
+	0xf5, 0xa6, 0x27, 0x7e, 0xc0, 0x09, 0x0a, 0x42, 0xb5, 0xee, 0x89, 0x1f, 0x00, 0xfe, 0x16, 0xd7,
+	0xbc, 0x1f, 0xf4, 0x39, 0x7a, 0x53, 0x0c, 0x5e, 0x0d, 0xfa, 0xc8, 0xcd, 0xfa, 0xd3, 0xd1, 0x68,
+	0x18, 0x52, 0xdd, 0x42, 0x7b, 0xbd, 0x80, 0x2c, 0x54, 0x88, 0xdb, 0xe7, 0xa8, 0x10, 0x2f, 0x2e,
+	0x56, 0x88, 0xa5, 0xc7, 0xd8, 0xb1, 0xc7, 0x0e, 0xdf, 0x42, 0x69, 0xb3, 0xea, 0x5d, 0xd7, 0x3e,
+	0xc6, 0x3d, 0x36, 0xf5, 0xd0, 0xe1, 0xfc, 0xe0, 0xff, 0xbe, 0x68, 0x28, 0xfd, 0x38, 0x8d, 0xa1,
+	0xa3, 0xa8, 0x73, 0x86, 0x1a, 0x7c, 0xf9, 0xfc, 0xd7, 0x89, 0xb8, 0xc9, 0x05, 0xfe, 0x6b, 0x19,
+	0x34, 0x09, 0x6d, 0x32, 0x5f, 0xa4, 0x4d, 0x76, 0xbe, 0x84, 0xf9, 0xb2, 0x5a, 0x53, 0x15, 0xb6,
+	0x49, 0x96, 0xe2, 0x33, 0xa2, 0xdc, 0x72, 0x67, 0x45, 0xaf, 0x54, 0x98, 0xd3, 0x2e, 0xe0, 0xb3,
+	0x03, 0x3c, 0x70, 0x6c, 0xdb, 0x8e, 0x2d, 0xc3, 0x0f, 0x6f, 0x5f, 0x74, 0x85, 0xf1, 0xcc, 0x4e,
+	0x6e, 0x7a, 0x65, 0x27, 0x37, 0x73, 0xce, 0x4e, 0xee, 0x1f, 0xa6, 0xd4, 0xb5, 0x82, 0xbc, 0xfa,
+	0x56, 0xff, 0x55, 0xba, 0x1a, 0x8a, 0xaf, 0x2f, 0x57, 0xa9, 0x04, 0x24, 0x95, 0x5f, 0xfa, 0xcd,
+	0xff, 0xfe, 0x1f, 0x6f, 0xaf, 0x23, 0x3d, 0xfc, 0xbc, 0xa5, 0xdf, 0x54, 0xa8, 0xbf, 0x91, 0xa4,
+	0xc6, 0xeb, 0xa4, 0xfa, 0x23, 0xbc, 0x32, 0x2c, 0x0a, 0xba, 0x5b, 0x2b, 0xe4, 0x73, 0x1a, 0xbc,
+	0x50, 0x1c, 0x96, 0xfe, 0x56, 0x0a, 0x7d, 0x15, 0x51, 0x72, 0x8f, 0xba, 0xc2, 0xd6, 0xf8, 0x4d,
+	0x43, 0xf1, 0x5e, 0x96, 0x3f, 0x2c, 0xdc, 0xa3, 0x4d, 0x2f, 0xde, 0xa3, 0x05, 0xa7, 0x81, 0x8d,
+	0x84, 0xcb, 0x13, 0x9b, 0x74, 0x7e, 0xdc, 0x3b, 0xe5, 0xc5, 0x7b, 0xa8, 0x17, 0x93, 0x2d, 0xfe,
+	0xad, 0x78, 0xe3, 0xff, 0x8e, 0xda, 0x38, 0x5a, 0xec, 0x36, 0x9c, 0xf1, 0x52, 0xeb, 0xd7, 0xf0,
+	0x75, 0xb1, 0xd2, 0x94, 0xc1, 0xd0, 0x28, 0xb3, 0x4b, 0xe4, 0xe2, 0x1c, 0xa8, 0x46, 0xdd, 0x45,
+	0x44, 0x54, 0x7a, 0x13, 0xcc, 0xfd, 0xfa, 0x57, 0xd8, 0x45, 0xee, 0xeb, 0x0a, 0x25, 0x86, 0xdf,
+	0x16, 0x80, 0x25, 0x5d, 0xe9, 0x0f, 0x28, 0x04, 0x71, 0x30, 0x19, 0x82, 0x2b, 0x54, 0x9b, 0x2b,
+	0xf3, 0xd3, 0x73, 0x65, 0x3e, 0x8c, 0x1a, 0x37, 0xc4, 0xd5, 0x38, 0xdc, 0x42, 0x70, 0x73, 0x82,
+	0x74, 0x25, 0xc6, 0xd5, 0x88, 0xa9, 0x30, 0x18, 0x0b, 0x00, 0x14, 0x34, 0x5f, 0x56, 0x38, 0x3e,
+	0x65, 0x2c, 0xb6, 0x21, 0x05, 0xe3, 0xbd, 0xb3, 0x3a, 0x60, 0xe8, 0x4f, 0x79, 0xf8, 0x8d, 0xc1,
+	0xf8, 0x1b, 0xd8, 0x54, 0x47, 0x92, 0x33, 0xef, 0xed, 0xab, 0x96, 0x4b, 0xaf, 0xe8, 0xc1, 0x65,
+	0x7e, 0xd6, 0x1e, 0xdc, 0x3f, 0x27, 0x97, 0x46, 0x02, 0xe9, 0xd2, 0x74, 0x6b, 0x1d, 0xdf, 0x58,
+	0xa7, 0xe4, 0xad, 0xf5, 0x36, 0x7f, 0x65, 0x7a, 0x9b, 0x26, 0x8d, 0x4e, 0x4f, 0xeb, 0x04, 0x10,
+	0x77, 0xa9, 0xe3, 0x67, 0x96, 0x38, 0x3e, 0xc9, 0x17, 0x8d, 0x43, 0x21, 0x1f, 0x5c, 0x47, 0x22,
+	0xfb, 0xd3, 0xd1, 0x34, 0xa0, 0x95, 0x01, 0x64, 0x15, 0x9e, 0x41, 0x61, 0xc5, 0xa7, 0x30, 0x55,
+	0x1c, 0xca, 0x3a, 0x2d, 0xb5, 0xe2, 0x02, 0x8d, 0x6a, 0xde, 0xca, 0x43, 0xc8, 0x11, 0x39, 0xc1,
+	0x03, 0x0f, 0x1f, 0xe8, 0xb7, 0xe6, 0x13, 0x86, 0xca, 0x21, 0x0b, 0xbf, 0x2f, 0x4c, 0x1a, 0x8a,
+	0xa7, 0x8b, 0xa4, 0x71, 0xc2, 0xee, 0xf1, 0xbe, 0x64, 0xa2, 0x23, 0x29, 0x23, 0xf6, 0x68, 0xf9,
+	0x95, 0xaa, 0xd4, 0x17, 0x54, 0xda, 0x73, 0xed, 0xca, 0x65, 0x0d, 0xd1, 0x11, 0xee, 0xc6, 0x89,
+	0x71, 0x7f, 0x71, 0xa3, 0x99, 0xd8, 0xf8, 0xfc, 0xd1, 0xb1, 0x7f, 0x4c, 0x27, 0x09, 0x1a, 0x8b,
+	0xb7, 0x8d, 0xb0, 0xb2, 0x15, 0x8e, 0x24, 0x4f, 0xe6, 0x1a, 0xcb, 0xc4, 0x57, 0x78, 0xe0, 0x67,
+	0x29, 0x40, 0xa5, 0x15, 0x31, 0xe3, 0xe1, 0xc4, 0xe3, 0xaf, 0x1e, 0xaa, 0xac, 0xa0, 0xc8, 0xa5,
+	0x95, 0x5e, 0xf4, 0xf4, 0x05, 0x0d, 0xb0, 0x9e, 0xa6, 0xab, 0x6b, 0x4b, 0xde, 0x69, 0x2c, 0x1b,
+	0xb3, 0x77, 0xfa, 0x0b, 0x1e, 0xf3, 0x1f, 0x50, 0x2b, 0x48, 0xe1, 0x4c, 0x58, 0xff, 0x4b, 0x19,
+	0xf8, 0x3c, 0xc7, 0xb7, 0x65, 0x6b, 0xf9, 0x37, 0x53, 0x98, 0x93, 0x28, 0xdb, 0xf2, 0x41, 0xc0,
+	0x1f, 0x70, 0xb4, 0x38, 0x6f, 0xf3, 0x67, 0x3c, 0x88, 0x29, 0x8d, 0x29, 0xbc, 0xa1, 0x55, 0x49,
+	0x9c, 0x80, 0x56, 0xbd, 0x1a, 0x58, 0xa1, 0x3f, 0x1d, 0x7e, 0x1e, 0xe1, 0xfd, 0x0b, 0x24, 0x3a,
+	0xe4, 0xd5, 0x0c, 0x44, 0xa1, 0xdc, 0xe5, 0x96, 0xdc, 0x0c, 0x2b, 0x1d, 0xe2, 0x89, 0x78, 0x09,
+	0xcf, 0x6c, 0xf4, 0x76, 0xe9, 0x5d, 0xb2, 0x6f, 0xb1, 0x75, 0x4e, 0x2d, 0x3e, 0xc4, 0xb8, 0xbd,
+	0xea, 0x35, 0x2c, 0xa7, 0xb2, 0x89, 0xb8, 0x64, 0x2e, 0x5c, 0xbb, 0x42, 0x3b, 0xad, 0x78, 0xd1,
+	0x20, 0x6d, 0x97, 0x49, 0xd8, 0xae, 0xd4, 0x56, 0x9d, 0xef, 0x7c, 0xe7, 0xa8, 0x84, 0xb8, 0x74,
+	0x52, 0xdc, 0x9f, 0x51, 0x76, 0x54, 0xe4, 0xfd, 0x3c, 0x72, 0x12, 0xa7, 0xa4, 0xcc, 0xc2, 0x29,
+	0x49, 0x39, 0x7a, 0x65, 0xe7, 0x8f, 0x5e, 0x89, 0x93, 0xce, 0xda, 0xdc, 0x49, 0x67, 0x7e, 0xdb,
+	0x5d, 0x3f, 0xc7, 0xb6, 0xbb, 0xb1, 0xe4, 0xa4, 0x31, 0x46, 0x07, 0x0d, 0xa6, 0x23, 0x5f, 0x9a,
+	0xeb, 0x31, 0xcb, 0xc2, 0xf3, 0xca, 0x97, 0x9c, 0xfd, 0xe9, 0x24, 0x0a, 0xa6, 0xa3, 0x91, 0x1f,
+	0x70, 0x3e, 0x9b, 0x53, 0xc3, 0x70, 0x87, 0xfe, 0xc4, 0xa7, 0x01, 0xc9, 0x10, 0x59, 0x7b, 0x33,
+	0x06, 0x36, 0x07, 0xa5, 0xdf, 0xa1, 0x80, 0xe8, 0x85, 0x6f, 0x27, 0x7d, 0xb1, 0x49, 0xdf, 0x67,
+	0xdb, 0x71, 0x39, 0xc2, 0xbb, 0xa8, 0xd4, 0xf6, 0x11, 0xd5, 0x08, 0xef, 0xa3, 0x7e, 0xcc, 0x34,
+	0xe5, 0x2b, 0x29, 0x71, 0x8f, 0x07, 0xe8, 0xb6, 0x01, 0xee, 0x70, 0x30, 0xa7, 0x2c, 0xb3, 0x4b,
+	0x89, 0xd7, 0xde, 0x9c, 0x14, 0x4b, 0xc2, 0x8b, 0x80, 0xb0, 0x11, 0xce, 0xef, 0x46, 0xbd, 0x62,
+	0xdb, 0x7c, 0x2b, 0x6e, 0x4f, 0x07, 0x7b, 0xb3, 0x01, 0x64, 0x2a, 0x7c, 0x21, 0x80, 0xef, 0x5d,
+	0xd2, 0x43, 0xfe, 0x55, 0x90, 0x7c, 0xc9, 0x47, 0xbb, 0xd5, 0xcd, 0xd5, 0xaf, 0x01, 0x6d, 0xac,
+	0x2c, 0xda, 0xd3, 0x41, 0xc9, 0x62, 0x17, 0xb9, 0x68, 0x5e, 0x9d, 0xd8, 0x3c, 0x6a, 0x7e, 0xc0,
+	0x0a, 0xca, 0xbe, 0xb6, 0xb2, 0x8f, 0xa6, 0xee, 0x7d, 0x6c, 0x2c, 0x65, 0x94, 0x5e, 0xb0, 0x8b,
+	0xf5, 0xd1, 0xf4, 0x0d, 0xef, 0x84, 0xad, 0xd0, 0xf6, 0x31, 0xcb, 0x89, 0xcb, 0x48, 0xa4, 0xec,
+	0x8d, 0x95, 0xb7, 0x95, 0xec, 0x0d, 0xf8, 0x05, 0xaa, 0x7a, 0xec, 0x0a, 0x08, 0xe6, 0xc5, 0xf2,
+	0x59, 0xd2, 0xbf, 0xcd, 0xf2, 0xf2, 0x12, 0xcb, 0x4a, 0x5b, 0x48, 0x0a, 0x1b, 0x0f, 0x36, 0x30,
+	0xc0, 0x77, 0xd9, 0x1a, 0x0c, 0x10, 0xea, 0x9f, 0xb0, 0xb5, 0x61, 0xe4, 0x8f, 0xc5, 0xdc, 0x77,
+	0x96, 0x2b, 0x47, 0xdb, 0x3e, 0xa7, 0x2c, 0x7d, 0x9f, 0xad, 0x73, 0x3b, 0x86, 0x50, 0x34, 0xa8,
+	0xcc, 0xab, 0x0c, 0xc7, 0x4b, 0x19, 0xc1, 0xfd, 0x94, 0x31, 0x39, 0xb5, 0x73, 0x48, 0x50, 0xce,
+	0x4d, 0x42, 0xc2, 0x90, 0x15, 0x40, 0x42, 0xf5, 0xa8, 0x37, 0x39, 0xf4, 0x43, 0xfd, 0x6b, 0x6c,
+	0x3d, 0x9a, 0x7a, 0xbd, 0x81, 0xb8, 0x0e, 0xaa, 0x27, 0x64, 0xf0, 0x59, 0xda, 0x6b, 0xd1, 0xd4,
+	0x18, 0x0c, 0xf4, 0x07, 0x2c, 0x1f, 0x4d, 0xc9, 0x0d, 0xc9, 0x5c, 0xcb, 0xa8, 0x73, 0xd1, 0x14,
+	0x5d, 0x12, 0x4a, 0x32, 0x4d, 0x6a, 0x2b, 0x06, 0xfc, 0xe6, 0xdc, 0x80, 0xd7, 0x17, 0x44, 0xe0,
+	0xe4, 0xc4, 0xa8, 0x8f, 0x17, 0x47, 0x5d, 0xc9, 0x22, 0x87, 0x26, 0xae, 0x63, 0xbe, 0xee, 0xd4,
+	0x43, 0x3f, 0x8b, 0x0b, 0x1d, 0xa4, 0xe4, 0xb0, 0x9c, 0x45, 0x41, 0xba, 0xcc, 0x59, 0x64, 0x58,
+	0xaf, 0x74, 0x16, 0x49, 0x61, 0xe7, 0x44, 0xb4, 0x97, 0x5e, 0xb0, 0x3c, 0x0a, 0xed, 0x1e, 0x47,
+	0x0b, 0x52, 0xbf, 0xcb, 0x58, 0x7c, 0x4b, 0x89, 0xc4, 0xee, 0xac, 0x12, 0x3b, 0x3d, 0x8e, 0x6c,
+	0x52, 0xa2, 0x7b, 0x0c, 0x5b, 0x5a, 0x01, 0x8d, 0x6a, 0x9e, 0xf8, 0x93, 0x45, 0xd1, 0x7f, 0x89,
+	0x15, 0x94, 0x0c, 0xb3, 0xb2, 0x32, 0x55, 0x68, 0x1a, 0x17, 0x6c, 0x16, 0x27, 0x9f, 0xca, 0x06,
+	0x5b, 0xf3, 0x41, 0x72, 0xf9, 0xbf, 0xa4, 0x58, 0x41, 0x92, 0x4e, 0xa6, 0xba, 0xc6, 0x36, 0xbb,
+	0x75, 0xcb, 0xf2, 0x9a, 0x9d, 0x7d, 0xa3, 0xd5, 0xac, 0x69, 0x17, 0x74, 0x8d, 0xe5, 0x38, 0xa4,
+	0x6d, 0xbc, 0xd4, 0xde, 0xfd, 0xf4, 0xfd, 0xfb, 0x0d, 0xfd, 0x8a, 0xa4, 0xf1, 0xac, 0xae, 0xed,
+	0x6a, 0xff, 0xe3, 0x3d, 0x40, 0x75, 0xc6, 0x38, 0xd4, 0x35, 0x2a, 0x2d, 0x53, 0xfb, 0x9f, 0x1c,
+	0x76, 0x99, 0x15, 0x38, 0xac, 0xd3, 0xb5, 0xdb, 0x46, 0x4b, 0xfb, 0x8b, 0x04, 0x61, 0xbd, 0xd5,
+	0xed, 0xd6, 0xb4, 0xff, 0xc5, 0x61, 0x62, 0x10, 0xa3, 0xd5, 0xd2, 0x7e, 0xc2, 0x21, 0xd7, 0xd9,
+	0x45, 0x0e, 0xa9, 0x76, 0x3b, 0xae, 0xdd, 0x6d, 0xb5, 0x4c, 0x5b, 0xfb, 0xdf, 0x09, 0xf6, 0x56,
+	0xb7, 0x6a, 0xb4, 0xb4, 0x9f, 0x26, 0xd9, 0x3b, 0xaf, 0xb4, 0xf7, 0x00, 0x29, 0xff, 0xbb, 0x35,
+	0x7c, 0x4d, 0xcd, 0xf7, 0xe2, 0x6d, 0xce, 0xe2, 0x7a, 0x0d, 0xb3, 0xd5, 0xea, 0x6a, 0x17, 0xe4,
+	0xb3, 0x69, 0xdb, 0x5d, 0x5b, 0x4b, 0xe9, 0x57, 0xd9, 0x25, 0x7c, 0xae, 0x36, 0xba, 0x9e, 0x6d,
+	0x3e, 0xdf, 0x33, 0x1d, 0x57, 0x4b, 0xeb, 0x97, 0xb9, 0x0a, 0x12, 0x6c, 0xb5, 0x5e, 0x69, 0x99,
+	0x98, 0xf6, 0xa5, 0x65, 0xda, 0xcd, 0xb6, 0xd9, 0x71, 0x4d, 0x5b, 0xcb, 0xea, 0x37, 0xd8, 0x55,
+	0x0e, 0xae, 0x9b, 0x86, 0xbb, 0x67, 0x9b, 0x8e, 0x14, 0xb3, 0xa6, 0x5f, 0x67, 0x97, 0xe7, 0x51,
+	0x20, 0x6a, 0x5d, 0xdf, 0x61, 0xd7, 0x39, 0x62, 0xd7, 0x74, 0x61, 0x9a, 0xf5, 0xe6, 0xae, 0xe4,
+	0xda, 0x90, 0x02, 0x13, 0x48, 0xe0, 0xcb, 0x49, 0xbd, 0x1c, 0x89, 0xd2, 0xf2, 0xba, 0xce, 0xb6,
+	0x39, 0xd0, 0x32, 0xaa, 0xcf, 0x4c, 0xd7, 0x6b, 0x76, 0x34, 0x26, 0x75, 0xad, 0xb7, 0xba, 0x2f,
+	0x3c, 0xdb, 0x6c, 0x77, 0xf7, 0xcd, 0x9a, 0x56, 0xd0, 0xaf, 0x30, 0x0d, 0x49, 0xbb, 0xb6, 0xeb,
+	0x39, 0xae, 0xe1, 0xee, 0x39, 0xda, 0xa6, 0x94, 0x4a, 0x02, 0xba, 0x7b, 0xae, 0xb6, 0xa5, 0x5f,
+	0x62, 0x5b, 0xb1, 0x84, 0x76, 0xb7, 0xa6, 0x6d, 0xcb, 0x81, 0x76, 0xed, 0xee, 0x9e, 0xc5, 0x61,
+	0x17, 0x25, 0x19, 0x97, 0x08, 0x20, 0x4d, 0x92, 0x71, 0x77, 0xe0, 0xb0, 0x4b, 0xfa, 0x4d, 0x76,
+	0x8d, 0xc3, 0xda, 0x7b, 0x2d, 0xb7, 0x69, 0x19, 0xb6, 0x2b, 0xe7, 0xab, 0xeb, 0x45, 0x76, 0x65,
+	0x01, 0x07, 0xd3, 0xbd, 0x2c, 0x31, 0x15, 0xc3, 0xb6, 0x9b, 0xa6, 0x2d, 0x79, 0xae, 0xe8, 0xd7,
+	0x98, 0x3e, 0x87, 0x01, 0x8e, 0xab, 0xfa, 0x3d, 0x76, 0x9b, 0xc3, 0x9f, 0xef, 0x99, 0x7b, 0xe6,
+	0x32, 0xf3, 0x5e, 0xd3, 0xef, 0xb0, 0x9d, 0x55, 0x24, 0x20, 0xe3, 0xba, 0xb4, 0x9d, 0xdd, 0x6d,
+	0x99, 0x92, 0xaf, 0x28, 0xad, 0x44, 0x60, 0xa0, 0xbd, 0x21, 0xe7, 0x05, 0x62, 0x0c, 0xe7, 0x55,
+	0xa7, 0x2a, 0x19, 0x6e, 0x4a, 0xed, 0x55, 0x1c, 0x70, 0xed, 0x48, 0x0b, 0x39, 0x02, 0xa3, 0xdd,
+	0x92, 0xb0, 0xb6, 0xe9, 0x9a, 0x36, 0xb7, 0xda, 0xed, 0x72, 0x15, 0xef, 0x79, 0xcc, 0xfd, 0xa1,
+	0x03, 0x22, 0x6d, 0xf0, 0xb5, 0x16, 0xb1, 0x8a, 0x83, 0x01, 0x6c, 0xdf, 0xb4, 0x9d, 0x66, 0xb7,
+	0x53, 0x69, 0xba, 0x6d, 0xc3, 0xd2, 0x52, 0x65, 0x1f, 0xab, 0x19, 0xaa, 0x8c, 0xb1, 0xb9, 0x80,
+	0x7e, 0x50, 0xf5, 0xea, 0xb6, 0xb1, 0x2b, 0x42, 0xf4, 0x02, 0xc9, 0x25, 0x68, 0xcd, 0xee, 0x5a,
+	0x5a, 0x8a, 0x66, 0x4d, 0x30, 0xdb, 0x34, 0x9c, 0xb6, 0x96, 0x4e, 0x12, 0xb6, 0x0d, 0xe7, 0x99,
+	0x96, 0x29, 0x3f, 0xc5, 0x61, 0xf0, 0x5d, 0x05, 0x15, 0x4d, 0xe4, 0x1c, 0x55, 0x45, 0x4f, 0x72,
+	0xee, 0xaa, 0x57, 0x33, 0x2d, 0xdb, 0xac, 0x1a, 0xae, 0x59, 0x13, 0x12, 0x7e, 0x05, 0xbf, 0xb2,
+	0xc6, 0xdb, 0xe8, 0xc4, 0xaa, 0x4e, 0x71, 0x9b, 0xe5, 0x11, 0x04, 0xf9, 0xe8, 0xa7, 0xa9, 0xf8,
+	0x19, 0x52, 0xc7, 0xfb, 0x54, 0xf9, 0x5f, 0x53, 0xdd, 0x96, 0x68, 0x3d, 0x60, 0x56, 0x53, 0x35,
+	0x90, 0x33, 0x02, 0xc7, 0x86, 0x18, 0x70, 0xb4, 0x94, 0x34, 0x08, 0xfa, 0x2c, 0x42, 0xd3, 0x92,
+	0x54, 0x86, 0x8b, 0xa3, 0x65, 0x25, 0x29, 0x46, 0x01, 0x42, 0x73, 0xa4, 0x6f, 0xd5, 0x6b, 0x5a,
+	0x64, 0xa5, 0xbb, 0x92, 0x10, 0x1d, 0x0d, 0x09, 0x9f, 0xea, 0xd7, 0xb8, 0x77, 0x91, 0xcc, 0x4a,
+	0xab, 0x5b, 0x7d, 0x66, 0xd6, 0xb4, 0x77, 0xe9, 0xf2, 0x89, 0xf2, 0x91, 0x7d, 0xc2, 0x7c, 0x4b,
+	0x94, 0x17, 0xec, 0xb5, 0xee, 0x8b, 0x8e, 0x96, 0x8a, 0xe9, 0x3a, 0x90, 0xac, 0xaa, 0xfb, 0x5a,
+	0x56, 0x24, 0x73, 0x0e, 0xaa, 0xbf, 0xa8, 0x69, 0x77, 0x29, 0x62, 0x10, 0x12, 0x67, 0x8a, 0xa7,
+	0xe5, 0xbf, 0x3c, 0xf7, 0x96, 0x46, 0x98, 0xde, 0x72, 0x16, 0x87, 0x75, 0xbc, 0x56, 0xb3, 0xf3,
+	0x6c, 0x6e, 0x58, 0x47, 0xce, 0x22, 0x4d, 0xe9, 0x95, 0xd3, 0xed, 0x9b, 0x5a, 0xb6, 0xfc, 0xa7,
+	0x69, 0xfc, 0xb4, 0x85, 0x4b, 0x97, 0xed, 0x26, 0x62, 0xac, 0x2b, 0x03, 0x48, 0xd0, 0x27, 0x0f,
+	0xdb, 0x15, 0xaf, 0x51, 0x8b, 0xc5, 0x13, 0xa8, 0x5e, 0x93, 0x7e, 0xc7, 0x41, 0x44, 0x96, 0x9d,
+	0x87, 0xd5, 0x6b, 0x5a, 0x4e, 0xcc, 0xbe, 0xee, 0x7d, 0xb2, 0xcb, 0xa9, 0xb4, 0x24, 0xa4, 0x0e,
+	0xf6, 0x50, 0xc4, 0x23, 0xe8, 0xa9, 0xae, 0x0b, 0xd0, 0x63, 0x02, 0xbd, 0x03, 0xff, 0x8f, 0xc5,
+	0x13, 0x30, 0xad, 0x5f, 0x92, 0xd2, 0x5c, 0x04, 0x81, 0xc1, 0x0b, 0x08, 0xea, 0xba, 0x0d, 0xd3,
+	0xd6, 0xde, 0xe5, 0x62, 0xa2, 0x6a, 0xd7, 0xb2, 0x00, 0xa4, 0xc5, 0x44, 0xf5, 0x66, 0x05, 0x20,
+	0x77, 0xe3, 0x21, 0x8d, 0x3d, 0xb7, 0xdb, 0x31, 0x77, 0xb5, 0x77, 0x4f, 0xf5, 0x4b, 0x82, 0xca,
+	0x32, 0xf6, 0x1c, 0x53, 0x7b, 0xf7, 0x2e, 0xa5, 0x5f, 0xe3, 0xae, 0x24, 0x40, 0x90, 0x33, 0xda,
+	0xda, 0xbb, 0x77, 0xe9, 0x72, 0x4d, 0x71, 0x1a, 0xba, 0x30, 0xbb, 0xc5, 0xa3, 0xc2, 0xb2, 0x3d,
+	0xa3, 0x86, 0x7b, 0xf8, 0x26, 0x3e, 0xd6, 0xcc, 0x96, 0xe9, 0x9a, 0x5a, 0x2a, 0x86, 0xb4, 0xbb,
+	0xb5, 0x66, 0xfd, 0x95, 0x96, 0x2e, 0x7f, 0x8a, 0x2e, 0x10, 0xff, 0xe1, 0x02, 0x32, 0x6a, 0x9b,
+	0x3b, 0x7d, 0xa7, 0x66, 0xd8, 0x20, 0x09, 0x05, 0xb7, 0x5d, 0xaf, 0xfb, 0xb2, 0xad, 0xa5, 0xca,
+	0x9f, 0xc7, 0x7f, 0x99, 0x80, 0xff, 0xa9, 0x01, 0x92, 0xfb, 0xb2, 0x5d, 0xf5, 0x3a, 0x2f, 0xdb,
+	0xde, 0x43, 0x39, 0xb6, 0x80, 0x7c, 0xa2, 0xa5, 0xf4, 0x1d, 0x1e, 0xfd, 0x00, 0xe9, 0x5a, 0x66,
+	0x87, 0x47, 0x60, 0xc5, 0x70, 0x9a, 0x55, 0x98, 0x8c, 0x7e, 0x83, 0xef, 0x96, 0x80, 0x4c, 0xec,
+	0xb0, 0xef, 0xdf, 0x67, 0xca, 0x7f, 0x2f, 0xc7, 0x2e, 0x2f, 0xf9, 0xd8, 0x9f, 0x9c, 0xfa, 0x25,
+	0x28, 0x55, 0xaf, 0xc8, 0xaa, 0xe4, 0x02, 0xa5, 0x65, 0x15, 0xde, 0x78, 0x85, 0xb8, 0x14, 0x6d,
+	0xca, 0x02, 0xd7, 0x36, 0x5d, 0xa3, 0x66, 0xb8, 0x86, 0x96, 0x9e, 0x13, 0x66, 0xba, 0x0d, 0xaf,
+	0xe6, 0xb8, 0x5a, 0x66, 0x09, 0xdc, 0xb1, 0xab, 0x5a, 0x76, 0x4e, 0x10, 0xc0, 0xdd, 0x57, 0x96,
+	0x29, 0xb7, 0x7d, 0x81, 0xd8, 0x6f, 0x19, 0x1d, 0x6f, 0xbf, 0x59, 0xd3, 0xd6, 0x97, 0x21, 0xac,
+	0xaa, 0xa5, 0x6d, 0xcc, 0xcf, 0xc3, 0xf2, 0x6a, 0x4e, 0xd5, 0xd2, 0x72, 0xb4, 0x15, 0x29, 0x70,
+	0xb3, 0xda, 0xd1, 0xf2, 0x73, 0x72, 0x9a, 0x96, 0x67, 0xd9, 0x5d, 0xb7, 0xab, 0xb1, 0x05, 0xc4,
+	0xfe, 0x63, 0xae, 0x6b, 0x61, 0x19, 0x02, 0x26, 0xb7, 0x39, 0x37, 0xb2, 0x5b, 0xb5, 0x38, 0xc3,
+	0xd6, 0x12, 0x38, 0xd0, 0x6f, 0xcf, 0xc1, 0xf7, 0x6a, 0x48, 0x7f, 0x71, 0x09, 0x1c, 0xe8, 0xb5,
+	0xb9, 0x81, 0x9d, 0xaa, 0x8b, 0x0c, 0x97, 0x96, 0x21, 0x6a, 0xbc, 0x1c, 0x98, 0x5b, 0xbb, 0x6a,
+	0x1b, 0x94, 0xe5, 0x96, 0xbd, 0xbc, 0x1c, 0x57, 0xed, 0xd6, 0x4c, 0xed, 0xca, 0x9c, 0xad, 0x0c,
+	0xdb, 0xf2, 0xba, 0x96, 0x76, 0x75, 0x4e, 0x31, 0x00, 0x3b, 0x96, 0xa1, 0x5d, 0x5b, 0x02, 0x77,
+	0x2d, 0x43, 0xbb, 0xbe, 0x8c, 0xbe, 0x61, 0x68, 0xc5, 0x65, 0xf4, 0x0d, 0x43, 0xbb, 0xb1, 0x68,
+	0xd9, 0x27, 0x7c, 0x82, 0x37, 0x97, 0x21, 0x60, 0x82, 0x3b, 0xf3, 0x93, 0x00, 0x44, 0xbd, 0x65,
+	0x54, 0xcc, 0x96, 0x76, 0x6b, 0xd9, 0x04, 0x9f, 0xe0, 0xe4, 0x6f, 0x2f, 0xc7, 0xf1, 0xc9, 0x7f,
+	0xa0, 0xdf, 0x66, 0x37, 0xe6, 0x65, 0x76, 0x6a, 0x9e, 0x6b, 0xd8, 0xbb, 0xa6, 0xab, 0xdd, 0x59,
+	0x36, 0x64, 0xa7, 0xe6, 0x39, 0xad, 0x96, 0x76, 0x77, 0x05, 0xce, 0x6d, 0xb5, 0xb4, 0x7b, 0xb4,
+	0x5b, 0xcb, 0x58, 0xb1, 0x5a, 0x8e, 0x87, 0x9a, 0x96, 0xe6, 0xec, 0xc1, 0x51, 0x6e, 0x55, 0xfb,
+	0x70, 0x3e, 0xbc, 0x00, 0x5e, 0xe9, 0x3a, 0xda, 0xfd, 0x39, 0x84, 0x55, 0xa9, 0x78, 0x4d, 0xa7,
+	0x59, 0xd3, 0x3e, 0xa2, 0xd2, 0x45, 0xba, 0xda, 0x5e, 0xa7, 0x63, 0xb6, 0xbc, 0x66, 0x4d, 0xfb,
+	0xca, 0x32, 0xd5, 0xcc, 0x97, 0x6e, 0xa3, 0x66, 0x6b, 0x5f, 0x2d, 0x7f, 0x8a, 0xa7, 0x17, 0xfe,
+	0x69, 0xfa, 0x70, 0xa0, 0x5f, 0xe4, 0x49, 0x73, 0xbf, 0x59, 0xf3, 0x3a, 0xdd, 0x8e, 0xc9, 0xb7,
+	0xac, 0x6d, 0x02, 0x58, 0xb6, 0xe9, 0x98, 0x1d, 0x57, 0x7b, 0x77, 0xb7, 0xfc, 0xef, 0x53, 0xd8,
+	0xc7, 0x1b, 0xce, 0x4e, 0x9e, 0xd0, 0xa7, 0xd4, 0xe2, 0xbe, 0x2b, 0x50, 0x37, 0xcd, 0xc6, 0xc2,
+	0x9e, 0x04, 0x30, 0x10, 0xf9, 0x12, 0x72, 0x07, 0xee, 0x6f, 0x00, 0x32, 0x1d, 0x4b, 0x4b, 0xd3,
+	0xa8, 0xf0, 0x6c, 0xec, 0xb9, 0x0d, 0x2d, 0xab, 0x00, 0x6a, 0x50, 0x04, 0xe6, 0x14, 0x00, 0x14,
+	0x4b, 0x9a, 0xa6, 0x48, 0xb5, 0xbb, 0x7b, 0x90, 0xdf, 0xee, 0x2a, 0x52, 0x1b, 0x5d, 0x4b, 0x7b,
+	0x4a, 0x3b, 0x07, 0x3c, 0xef, 0x75, 0x6c, 0xd3, 0x82, 0x6d, 0x48, 0x05, 0x39, 0xe6, 0x73, 0x28,
+	0x18, 0x7e, 0x92, 0x4e, 0x7c, 0xcb, 0x4a, 0x7f, 0x5e, 0x0b, 0xc8, 0x0c, 0x5e, 0xc3, 0x5b, 0x7b,
+	0x90, 0x09, 0x71, 0x99, 0x0c, 0x28, 0x72, 0xad, 0x57, 0x9e, 0xeb, 0xb6, 0x78, 0x79, 0x5f, 0xa0,
+	0x68, 0x51, 0xe1, 0xcd, 0x8e, 0x4c, 0x07, 0x06, 0x96, 0xa6, 0xb8, 0xa8, 0x6e, 0x4b, 0x86, 0xb7,
+	0xe1, 0x7a, 0x35, 0xb3, 0x1a, 0xc3, 0x35, 0x2a, 0x0c, 0x0c, 0xd7, 0xb3, 0xf6, 0x9c, 0x06, 0xcf,
+	0x68, 0xda, 0x25, 0x32, 0x26, 0x00, 0xbb, 0x16, 0xc2, 0xf4, 0x39, 0x42, 0x90, 0xa0, 0x5d, 0x4e,
+	0x12, 0x72, 0xd8, 0x95, 0x98, 0x10, 0x34, 0xe0, 0xa5, 0x93, 0x76, 0x95, 0xac, 0x68, 0xd0, 0xd1,
+	0x43, 0xbb, 0x46, 0xb5, 0x15, 0x51, 0x75, 0x5e, 0x70, 0x6d, 0xae, 0xc7, 0x50, 0xd0, 0x92, 0xa0,
+	0xc5, 0xa4, 0xc4, 0x7a, 0xd3, 0x6c, 0xd5, 0xb4, 0x1b, 0xca, 0xd0, 0xa0, 0x8f, 0x55, 0xa9, 0x68,
+	0x37, 0x69, 0x69, 0x48, 0x1d, 0x00, 0xed, 0xe8, 0x45, 0x31, 0xef, 0x85, 0x2d, 0x69, 0x1f, 0x6f,
+	0xc4, 0x28, 0x7d, 0x46, 0xfa, 0x46, 0x59, 0x54, 0xc7, 0xed, 0x56, 0xe2, 0x28, 0xcd, 0x08, 0x06,
+	0xc5, 0xeb, 0x7f, 0x7d, 0x9f, 0xa1, 0x2d, 0x1d, 0x20, 0x9d, 0xae, 0x57, 0xd9, 0xab, 0xd7, 0x49,
+	0xee, 0x7f, 0x16, 0x2e, 0xaa, 0x7c, 0x87, 0xc8, 0xd7, 0x96, 0x1c, 0x47, 0xad, 0x88, 0x71, 0xbe,
+	0x4d, 0xd7, 0xdb, 0xed, 0xba, 0x5d, 0x3a, 0x7e, 0xa7, 0x28, 0x9e, 0x9a, 0xae, 0xf7, 0xc2, 0x6e,
+	0xba, 0xa6, 0xba, 0xc3, 0x61, 0x08, 0x4a, 0x8c, 0x51, 0x75, 0x9b, 0xdd, 0x8e, 0xa3, 0x65, 0x62,
+	0x84, 0x61, 0x59, 0xad, 0x57, 0x12, 0x91, 0x8d, 0x11, 0xd5, 0x96, 0x69, 0xd8, 0x12, 0xb1, 0x26,
+	0xfc, 0x9a, 0xce, 0x2b, 0xda, 0x3a, 0x59, 0xaa, 0xb9, 0xc4, 0x52, 0x7f, 0x15, 0x27, 0x34, 0xff,
+	0xfd, 0x21, 0x15, 0x14, 0xf5, 0x6a, 0xa2, 0x52, 0xa9, 0x57, 0x45, 0x5d, 0x22, 0x76, 0x6a, 0x09,
+	0xf1, 0x1c, 0xd7, 0x6e, 0x56, 0xe1, 0x78, 0x2e, 0x49, 0xa9, 0xa8, 0xc9, 0xc4, 0xa4, 0x08, 0x11,
+	0xa4, 0xd9, 0xf2, 0x3f, 0xa6, 0x37, 0x9e, 0x72, 0x74, 0x8c, 0x77, 0x34, 0x66, 0x5d, 0x2d, 0x41,
+	0x49, 0x44, 0xdd, 0x73, 0xcc, 0x4e, 0x4d, 0x1e, 0x9c, 0x63, 0x35, 0xea, 0x5e, 0xb5, 0x61, 0x56,
+	0x9f, 0x79, 0xdd, 0x7d, 0xd3, 0x6e, 0x19, 0x96, 0x2c, 0x18, 0xea, 0x75, 0x0f, 0x12, 0x0c, 0x44,
+	0xd2, 0x5e, 0xc7, 0x8d, 0x8d, 0x56, 0xaf, 0xf3, 0x52, 0xfb, 0x99, 0x44, 0xe4, 0x12, 0x88, 0xca,
+	0x2b, 0x89, 0xd0, 0xca, 0x0e, 0x1e, 0x7d, 0xf0, 0x4b, 0x71, 0x9c, 0xdd, 0xee, 0x42, 0x23, 0x66,
+	0x57, 0x69, 0xc4, 0x08, 0x48, 0xdc, 0x35, 0x91, 0x10, 0xd9, 0x08, 0xf9, 0x0c, 0x5f, 0xd2, 0x2d,
+	0x7c, 0xd1, 0x47, 0x86, 0xdf, 0x4d, 0x1a, 0x7e, 0x57, 0x31, 0xbc, 0x84, 0x90, 0x7d, 0xd3, 0x65,
+	0x47, 0xbd, 0x43, 0xc2, 0xdd, 0x91, 0x84, 0xe0, 0xe9, 0x4b, 0x0a, 0x81, 0x20, 0x6b, 0x99, 0x55,
+	0xc8, 0x95, 0x18, 0x06, 0xbb, 0xe0, 0xaf, 0xb5, 0xa6, 0x6d, 0xf2, 0x85, 0xdb, 0x44, 0x25, 0x5d,
+	0xaf, 0x5e, 0xd7, 0x32, 0x65, 0x0b, 0x1d, 0x63, 0xfe, 0xbb, 0x37, 0x5a, 0x1c, 0x1b, 0xac, 0xd4,
+	0x36, 0xdc, 0x6a, 0x43, 0xbb, 0x40, 0xee, 0x26, 0x1c, 0x50, 0x1e, 0xd8, 0x6c, 0x61, 0x24, 0x1e,
+	0xea, 0xe9, 0xf2, 0xdf, 0x49, 0xe1, 0x0b, 0x96, 0x25, 0x5f, 0x94, 0xd1, 0x6a, 0xd9, 0xb6, 0xd7,
+	0xac, 0xb5, 0x4c, 0xcf, 0x6d, 0xb6, 0xcd, 0xae, 0x92, 0x21, 0x6d, 0xdb, 0x6b, 0x18, 0x76, 0x4d,
+	0xc2, 0x85, 0x11, 0x6c, 0x59, 0x39, 0xa7, 0x63, 0x4a, 0x3c, 0xfa, 0x49, 0xe7, 0x93, 0x70, 0x3c,
+	0xbb, 0x13, 0x3c, 0x5b, 0x9e, 0xd0, 0x9f, 0x0d, 0xe3, 0xaf, 0xd1, 0xa9, 0x7c, 0xf6, 0x7e, 0x68,
+	0xda, 0x5d, 0xb9, 0xa4, 0x6d, 0x5c, 0xd2, 0x77, 0x3f, 0x79, 0xbf, 0xa1, 0x5f, 0xe5, 0xb3, 0x6e,
+	0x7b, 0x4e, 0xab, 0xfb, 0xc2, 0x32, 0xdc, 0x06, 0x35, 0xbd, 0xb0, 0x1b, 0xd6, 0x56, 0xbb, 0x61,
+	0x6a, 0xe7, 0xab, 0x8d, 0xa7, 0x5f, 0xbe, 0xe0, 0xe3, 0x85, 0x6f, 0x96, 0xd4, 0x62, 0xbe, 0xa2,
+	0x66, 0x0e, 0xb4, 0x27, 0xc0, 0xe8, 0x9c, 0x8f, 0x73, 0xe0, 0x00, 0xa7, 0x0a, 0x67, 0xd8, 0xb6,
+	0x61, 0x3f, 0xd3, 0x44, 0x51, 0x0e, 0xf0, 0x85, 0xb8, 0xfe, 0x4c, 0xfd, 0x00, 0x6d, 0xd1, 0xbf,
+	0xda, 0x49, 0xff, 0x6a, 0x2f, 0xf8, 0x57, 0x5b, 0xf1, 0xaf, 0x43, 0xf5, 0x35, 0xbf, 0x1a, 0xa2,
+	0xed, 0x7a, 0xa2, 0x03, 0xc0, 0x10, 0xf4, 0xac, 0x62, 0xc1, 0xa9, 0x9d, 0x66, 0x51, 0x87, 0x28,
+	0xb3, 0x1c, 0xb9, 0x1f, 0xb7, 0xeb, 0x5e, 0x65, 0xcf, 0x76, 0x5c, 0xb9, 0x1f, 0xb7, 0xeb, 0xe2,
+	0x9c, 0x5e, 0xfe, 0x43, 0xba, 0x95, 0x88, 0x1f, 0x0e, 0x71, 0xfb, 0xe0, 0xd4, 0x4d, 0x6a, 0x12,
+	0x7a, 0x75, 0xa3, 0xd9, 0x32, 0x61, 0x34, 0xdc, 0x22, 0x4d, 0xd7, 0xab, 0x18, 0x35, 0xd9, 0xd6,
+	0x11, 0x9e, 0x47, 0x60, 0xf2, 0xc7, 0x34, 0x55, 0x4a, 0x04, 0x6d, 0x76, 0x1c, 0xd7, 0xde, 0x43,
+	0x54, 0x86, 0xf6, 0x1f, 0x42, 0xa1, 0x43, 0x67, 0x63, 0x7a, 0xd1, 0x5f, 0x13, 0xe3, 0xae, 0x51,
+	0xd5, 0x63, 0x2a, 0x7d, 0x36, 0x81, 0x5b, 0x8f, 0xd9, 0x44, 0xbf, 0x4d, 0xa0, 0x36, 0x62, 0x36,
+	0xd9, 0x77, 0x13, 0xb8, 0x5c, 0xcc, 0x86, 0xbd, 0x88, 0xae, 0x25, 0x50, 0x79, 0xfd, 0x03, 0x76,
+	0x13, 0x51, 0xce, 0x8b, 0xa6, 0x5b, 0x6d, 0x88, 0x66, 0x18, 0xe1, 0x19, 0x55, 0x96, 0x66, 0xb2,
+	0x1d, 0x26, 0xd0, 0x85, 0x78, 0x54, 0xd9, 0xb7, 0x12, 0xb8, 0x4d, 0xea, 0xb4, 0x49, 0x8d, 0x64,
+	0x17, 0x94, 0x08, 0xb6, 0x68, 0xcf, 0x30, 0x97, 0xf8, 0x56, 0x45, 0xfd, 0xa3, 0xa0, 0xaf, 0x7b,
+	0xc3, 0x11, 0xbf, 0x9d, 0xca, 0xff, 0xa6, 0x16, 0xf8, 0x63, 0xa3, 0x5e, 0xf5, 0x9a, 0x9d, 0x6a,
+	0xb7, 0x6d, 0x19, 0x6e, 0x13, 0x76, 0x3d, 0xe1, 0x65, 0x80, 0x30, 0x2d, 0xd3, 0x86, 0x13, 0xea,
+	0x9f, 0xa7, 0x31, 0xbf, 0x1c, 0xf4, 0x06, 0xe2, 0xb5, 0x21, 0xca, 0xc0, 0x05, 0xaf, 0xd8, 0x55,
+	0xbe, 0x22, 0xd4, 0x2f, 0x93, 0x5d, 0x0e, 0x01, 0xe7, 0x55, 0xb7, 0xd8, 0x4d, 0x05, 0x50, 0xf6,
+	0x28, 0xb5, 0x34, 0x35, 0x71, 0x05, 0x26, 0x31, 0x05, 0xb1, 0x21, 0x29, 0x48, 0x94, 0x27, 0x3a,
+	0x33, 0x80, 0x40, 0x3d, 0xd7, 0x28, 0x3e, 0x05, 0x69, 0xcb, 0xec, 0xc8, 0x93, 0x22, 0x87, 0xf1,
+	0xd2, 0xc0, 0x33, 0xdb, 0x96, 0xfb, 0x4a, 0x36, 0x87, 0x15, 0xc4, 0x5e, 0xe7, 0x59, 0xa7, 0xfb,
+	0xa2, 0x23, 0x77, 0x17, 0xa9, 0x3e, 0xb7, 0x79, 0x13, 0x96, 0x38, 0x9e, 0x57, 0xd3, 0xf1, 0x9c,
+	0x96, 0xb1, 0x6f, 0x6a, 0x6c, 0x6e, 0xb2, 0xfc, 0x6c, 0x2c, 0xaa, 0x42, 0x09, 0xe4, 0x6d, 0x22,
+	0x6d, 0x53, 0xbf, 0xcf, 0xee, 0x12, 0x38, 0xee, 0xd1, 0xd2, 0xf0, 0xb0, 0x1b, 0x82, 0x0b, 0x6b,
+	0x5b, 0xe5, 0xdf, 0xcf, 0x60, 0xfe, 0x01, 0x7b, 0x53, 0x51, 0xca, 0xcd, 0x4d, 0x23, 0x19, 0x8a,
+	0x59, 0x45, 0xaf, 0x51, 0x00, 0x61, 0xd2, 0x29, 0x61, 0x50, 0x63, 0x89, 0x41, 0x45, 0xed, 0xa2,
+	0x20, 0x51, 0x52, 0x66, 0x0e, 0xd1, 0xdd, 0xc3, 0xd8, 0x90, 0xdb, 0xb0, 0x40, 0x18, 0xf6, 0xee,
+	0x1e, 0x08, 0xd3, 0xd6, 0xc4, 0x12, 0x18, 0x62, 0x09, 0xd6, 0x15, 0x15, 0xdd, 0x2e, 0x6c, 0x3a,
+	0x1d, 0x30, 0x35, 0x06, 0xba, 0xe0, 0xc7, 0x52, 0x34, 0x27, 0xfc, 0x41, 0x19, 0x0e, 0x6b, 0xd2,
+	0x3c, 0x45, 0x0a, 0x60, 0x78, 0x90, 0x73, 0x07, 0xed, 0x38, 0x4d, 0xc7, 0x85, 0x51, 0x99, 0x7e,
+	0x8b, 0x15, 0x09, 0xbd, 0xd7, 0x71, 0xf6, 0x2c, 0x50, 0xd2, 0xac, 0x79, 0x5d, 0xbb, 0x66, 0xda,
+	0x5a, 0x61, 0xce, 0x1e, 0xae, 0xb1, 0xab, 0x6d, 0xce, 0x4d, 0x00, 0x4a, 0x0c, 0x3e, 0x65, 0x71,
+	0x38, 0x57, 0x11, 0x60, 0xc0, 0xed, 0x39, 0x03, 0xf2, 0xee, 0xb2, 0x98, 0xf5, 0xc5, 0xf2, 0x5f,
+	0xa4, 0x58, 0x51, 0x2c, 0x8f, 0x5a, 0x5c, 0x2a, 0x61, 0x55, 0x69, 0x56, 0x85, 0x3f, 0xf1, 0x1c,
+	0x26, 0x93, 0x20, 0x22, 0x9c, 0x3d, 0x0b, 0xc1, 0x29, 0x85, 0x3e, 0xe1, 0x6b, 0x22, 0x0f, 0xc6,
+	0xf4, 0xb2, 0xfa, 0xcc, 0x50, 0xa6, 0x59, 0x44, 0x61, 0xff, 0x37, 0x2b, 0xb4, 0x6f, 0x2e, 0x59,
+	0xfe, 0xb5, 0xb9, 0x01, 0xe5, 0xf2, 0xaf, 0x0b, 0xc3, 0x35, 0x63, 0x47, 0xda, 0x10, 0x0b, 0xdc,
+	0x14, 0x0b, 0x9c, 0x2b, 0xff, 0x13, 0xfa, 0xde, 0x00, 0x26, 0x8f, 0x7d, 0x2e, 0xd5, 0x35, 0xdb,
+	0xcb, 0x5c, 0xb3, 0xad, 0xba, 0x66, 0x12, 0x06, 0xcb, 0x23, 0xe3, 0x9f, 0x60, 0xb5, 0x16, 0x6c,
+	0x77, 0x36, 0x35, 0xb3, 0xe7, 0x90, 0x9d, 0x17, 0x0a, 0x32, 0x2b, 0x7c, 0x88, 0x90, 0x2f, 0x9a,
+	0xad, 0x5a, 0xd5, 0xb0, 0x6b, 0x50, 0x56, 0x93, 0xcf, 0x11, 0x06, 0x0f, 0x2b, 0xeb, 0x73, 0xd0,
+	0x7d, 0xa3, 0xb5, 0x67, 0x6a, 0x1b, 0x73, 0xca, 0x73, 0xd1, 0xa2, 0x63, 0x24, 0x80, 0x96, 0x6d,
+	0xda, 0xe6, 0x73, 0x2d, 0xaf, 0x48, 0xa8, 0xed, 0x59, 0x24, 0x97, 0x09, 0x3b, 0xb5, 0x85, 0x9d,
+	0x0a, 0xe5, 0x3f, 0x22, 0x27, 0x89, 0xcb, 0x65, 0x25, 0xf7, 0xe2, 0x80, 0xf5, 0x76, 0x5d, 0x7a,
+	0x89, 0x2c, 0x9f, 0x38, 0x90, 0xd2, 0xfc, 0x5e, 0xab, 0x25, 0xf3, 0x26, 0x87, 0xcf, 0xb9, 0x88,
+	0x22, 0x46, 0xd4, 0xd2, 0x19, 0x51, 0x90, 0xb7, 0x65, 0xfe, 0x96, 0x65, 0xb4, 0x94, 0x40, 0x95,
+	0xd9, 0xda, 0x3c, 0xa2, 0xda, 0x6d, 0xb7, 0x8d, 0x0e, 0xd8, 0x09, 0x27, 0x2f, 0x11, 0xf5, 0x96,
+	0xb1, 0xeb, 0x68, 0x1b, 0xe5, 0x3f, 0xc8, 0xe0, 0x07, 0x6b, 0x71, 0x25, 0xac, 0xce, 0x0a, 0x15,
+	0xdd, 0x05, 0x26, 0xdc, 0x70, 0xcd, 0x97, 0x4d, 0xc7, 0x75, 0xe4, 0xbb, 0x0a, 0x8e, 0x11, 0x65,
+	0x26, 0xc6, 0x7a, 0x8a, 0x7c, 0x99, 0xa3, 0x5e, 0x98, 0xcd, 0xdd, 0x86, 0xab, 0x06, 0xb5, 0x0c,
+	0x03, 0x8e, 0x87, 0x14, 0xd1, 0xad, 0x23, 0x27, 0x9c, 0xb5, 0x70, 0xc7, 0x54, 0x51, 0x95, 0x3d,
+	0xc8, 0xb3, 0x70, 0x72, 0xb8, 0xcb, 0x6e, 0x09, 0x5c, 0xb5, 0x61, 0x34, 0x3b, 0xcd, 0xce, 0x6e,
+	0x42, 0xf0, 0x1a, 0x25, 0x19, 0x1c, 0x98, 0x67, 0x19, 0x15, 0xbd, 0x2e, 0xca, 0x70, 0x40, 0xb7,
+	0xba, 0x5d, 0x4b, 0x6e, 0x18, 0xbb, 0xca, 0xa2, 0xd1, 0x24, 0x72, 0x2a, 0x8a, 0x8f, 0x66, 0xd6,
+	0x64, 0x2e, 0x43, 0x7f, 0xd9, 0x95, 0xb6, 0x87, 0xc8, 0x10, 0xed, 0xc5, 0xdd, 0x79, 0xc3, 0x17,
+	0xc8, 0x09, 0x24, 0x02, 0x27, 0xa4, 0x6d, 0xd2, 0x82, 0x48, 0x38, 0xd7, 0x58, 0xbe, 0x5b, 0xdc,
+	0x8d, 0x17, 0x7b, 0xbb, 0xfc, 0xbb, 0xe4, 0x78, 0xe2, 0xef, 0xfd, 0x26, 0x96, 0x08, 0xb5, 0xb1,
+	0x84, 0x18, 0x6a, 0xf2, 0xa2, 0x36, 0x12, 0xda, 0xc0, 0x18, 0x93, 0xb5, 0xac, 0x15, 0xab, 0xc9,
+	0x5f, 0x94, 0x8a, 0x45, 0x91, 0x70, 0xa3, 0xb6, 0x6f, 0xda, 0x6e, 0xd3, 0x31, 0xa5, 0xfb, 0x59,
+	0x8a, 0xfb, 0x95, 0x7f, 0x15, 0x9d, 0x46, 0xfe, 0x51, 0xec, 0x84, 0x46, 0xf4, 0x8e, 0x30, 0xe1,
+	0xdd, 0x32, 0x18, 0xdc, 0xb9, 0x91, 0xc5, 0xbb, 0x0c, 0x37, 0x16, 0x9f, 0x2e, 0xff, 0x10, 0xe7,
+	0x8b, 0x57, 0xb2, 0xa6, 0xb3, 0x25, 0xf3, 0x7d, 0xde, 0x4d, 0xce, 0x17, 0xc7, 0x94, 0x50, 0xdc,
+	0x90, 0x84, 0x6c, 0x0e, 0x16, 0xb2, 0xff, 0x0a, 0xbb, 0xbd, 0xf0, 0xe7, 0xc1, 0x97, 0xa8, 0xef,
+	0x54, 0x13, 0x81, 0x22, 0x0a, 0x20, 0x09, 0xc6, 0xd4, 0x87, 0xf2, 0x39, 0x30, 0xd6, 0xfd, 0xd6,
+	0xfc, 0x85, 0xac, 0x84, 0x78, 0x3a, 0xc0, 0xd9, 0xf5, 0x2a, 0xd4, 0xdd, 0xdc, 0x32, 0x0a, 0x88,
+	0x7b, 0x6c, 0x7c, 0x84, 0xb3, 0x69, 0x34, 0xa8, 0x2f, 0xb5, 0x74, 0xf9, 0xdf, 0xa4, 0xd1, 0xee,
+	0xf1, 0xb1, 0x62, 0x31, 0x05, 0xb5, 0x93, 0x29, 0x08, 0x23, 0x98, 0x03, 0xb1, 0x0a, 0xa5, 0x08,
+	0x4e, 0xd1, 0x8a, 0xb7, 0xd5, 0x08, 0xc6, 0x7e, 0x45, 0x5a, 0x45, 0x89, 0xb8, 0x40, 0x94, 0xa8,
+	0x28, 0xda, 0xf3, 0x6e, 0x9e, 0x25, 0xb3, 0xb5, 0x93, 0xf9, 0x45, 0x24, 0x6d, 0x09, 0xb6, 0x0d,
+	0xd7, 0x94, 0xc9, 0xa8, 0x1d, 0xc7, 0x84, 0xcd, 0xdf, 0xee, 0xcf, 0x11, 0x57, 0x40, 0x72, 0x8e,
+	0x92, 0x42, 0x02, 0x4a, 0x79, 0x3e, 0xaf, 0x6a, 0x4a, 0x09, 0x83, 0x2b, 0xea, 0x68, 0x4c, 0x9d,
+	0xb9, 0xc8, 0x25, 0x46, 0xa7, 0xe6, 0x68, 0x85, 0xf2, 0x3f, 0x4d, 0x2d, 0xf9, 0x02, 0x31, 0x5c,
+	0xe6, 0xc3, 0xf5, 0x39, 0x1f, 0xa6, 0xd7, 0xd6, 0x02, 0x2c, 0x37, 0x70, 0xb1, 0x60, 0x31, 0x03,
+	0x24, 0x05, 0x79, 0x57, 0xa2, 0xae, 0x38, 0x4d, 0x66, 0x5e, 0x88, 0x2c, 0x43, 0xb2, 0x22, 0x14,
+	0xea, 0xd2, 0x9d, 0xd6, 0xca, 0xff, 0x89, 0x36, 0xe7, 0xe4, 0xdf, 0x27, 0x10, 0xa7, 0x3d, 0x38,
+	0x68, 0x3b, 0xd5, 0xf8, 0xf4, 0xc7, 0xaf, 0x8f, 0xbc, 0x90, 0xaf, 0xa6, 0xdb, 0x96, 0x67, 0xec,
+	0xee, 0xda, 0xe6, 0xae, 0xc1, 0xcf, 0xe8, 0x74, 0xe0, 0x13, 0x97, 0x51, 0x32, 0xc2, 0xde, 0x56,
+	0xf2, 0x25, 0xae, 0x24, 0xc3, 0x28, 0x5a, 0x8b, 0x01, 0x98, 0x01, 0xd7, 0x63, 0x3e, 0x71, 0xd8,
+	0x77, 0xaa, 0xda, 0x86, 0x30, 0xb8, 0x80, 0x8a, 0x23, 0x8d, 0x6c, 0xf4, 0xb6, 0x2d, 0xf2, 0xa2,
+	0xbc, 0x38, 0x51, 0x13, 0x40, 0xe4, 0x02, 0x16, 0x8b, 0x40, 0xb8, 0x14, 0x51, 0x88, 0x31, 0xc9,
+	0xf3, 0x92, 0xbc, 0xa1, 0x21, 0x26, 0xc1, 0x75, 0x11, 0xa7, 0xa7, 0xb6, 0xb5, 0xec, 0x64, 0xbe,
+	0xb3, 0xf4, 0xef, 0x52, 0x78, 0xe2, 0x1b, 0x7b, 0x64, 0xac, 0xc3, 0x71, 0x6e, 0xe1, 0x2d, 0xaf,
+	0x80, 0xb7, 0xbb, 0xb6, 0xa9, 0xa5, 0xca, 0x2d, 0x0a, 0xc7, 0xe4, 0xdf, 0x9a, 0x20, 0x49, 0x42,
+	0xe3, 0x3a, 0x5e, 0x6d, 0x50, 0x64, 0x91, 0xf7, 0x4b, 0x0c, 0x49, 0xfb, 0xb3, 0x0c, 0xaa, 0xb6,
+	0xe2, 0x2b, 0x6c, 0xe9, 0x37, 0x96, 0xab, 0x1e, 0xa2, 0x21, 0x37, 0xe1, 0xc6, 0xb7, 0x80, 0xf1,
+	0xda, 0x4d, 0xc7, 0x91, 0x05, 0x29, 0x47, 0x77, 0xcc, 0x97, 0x74, 0xe4, 0x74, 0xb4, 0x34, 0x95,
+	0xdd, 0xf3, 0x08, 0x64, 0xcb, 0x88, 0xeb, 0x08, 0x80, 0x4d, 0xf6, 0x44, 0xb3, 0xb4, 0xc5, 0x2f,
+	0xa2, 0x90, 0x75, 0x4d, 0x65, 0x4d, 0x76, 0x4d, 0xd7, 0x55, 0xd6, 0x04, 0x0a, 0x59, 0x37, 0x64,
+	0x0c, 0x58, 0x2e, 0xf5, 0x03, 0x72, 0x32, 0x18, 0x61, 0x34, 0x59, 0x0f, 0x32, 0x71, 0xbf, 0x24,
+	0x56, 0xc2, 0x31, 0x5d, 0xac, 0xde, 0xc4, 0xf1, 0x7a, 0x09, 0x0e, 0x87, 0xd9, 0x52, 0x99, 0x51,
+	0x0d, 0xc9, 0xbc, 0xad, 0x32, 0x27, 0x71, 0xc8, 0x7c, 0x51, 0xbf, 0x19, 0xaf, 0x44, 0xc2, 0xbf,
+	0x7e, 0xfa, 0x3e, 0xa3, 0xdf, 0x89, 0xd7, 0x42, 0xc5, 0x21, 0x2b, 0x38, 0xe0, 0xef, 0xd1, 0x1f,
+	0xe6, 0xc0, 0x8a, 0x2b, 0x71, 0x21, 0x83, 0xda, 0x82, 0xf5, 0xea, 0xc2, 0xe5, 0x15, 0x80, 0x61,
+	0xf7, 0x90, 0x6a, 0x2a, 0x2d, 0x25, 0x8a, 0xa5, 0x18, 0xd3, 0x6a, 0xee, 0x9b, 0x1d, 0xd3, 0x89,
+	0x6f, 0x67, 0xec, 0x2a, 0xb5, 0x92, 0x96, 0x55, 0x18, 0x64, 0x01, 0xc5, 0xdb, 0xb6, 0x8e, 0x96,
+	0x2b, 0x7f, 0x8e, 0xfd, 0x80, 0xf8, 0x1a, 0x3a, 0xde, 0x3c, 0x17, 0x3b, 0xa8, 0xda, 0x1f, 0x43,
+	0x2d, 0x9f, 0xbb, 0x5e, 0xbb, 0xd9, 0xc1, 0x84, 0x9e, 0x52, 0x60, 0xc6, 0x4b, 0x84, 0xa5, 0x29,
+	0x06, 0x9f, 0x2f, 0xe9, 0x60, 0xfc, 0x08, 0x0f, 0xc3, 0x73, 0xf7, 0x90, 0xc9, 0x4f, 0xab, 0x36,
+	0xb6, 0x53, 0x3a, 0xdd, 0x6a, 0xc3, 0xe8, 0xec, 0x9a, 0xb2, 0x97, 0x2f, 0x10, 0xe6, 0xf3, 0x3d,
+	0xa3, 0x25, 0xef, 0xa7, 0x09, 0x68, 0xdb, 0x70, 0x70, 0xf3, 0x4a, 0x12, 0xe3, 0x91, 0x3e, 0x53,
+	0x79, 0xf4, 0xc3, 0x87, 0x87, 0xc3, 0xe8, 0xe8, 0xf8, 0xe0, 0x9b, 0xfd, 0xe9, 0x98, 0xff, 0xe7,
+	0x30, 0xfd, 0x69, 0x30, 0x78, 0x80, 0xff, 0xcf, 0xcb, 0x37, 0xe8, 0xff, 0x79, 0x39, 0x9c, 0xaa,
+	0xff, 0x6d, 0x8c, 0x95, 0x3a, 0x58, 0xe7, 0x88, 0x4f, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff,
+	0x90, 0x3e, 0x10, 0x56, 0x5c, 0x66, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/voltha/adapter.pb.go b/vendor/github.com/opencord/voltha-protos/go/voltha/adapter.pb.go
new file mode 100644
index 0000000..6f98ee0
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/voltha/adapter.pb.go
@@ -0,0 +1,231 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/adapter.proto
+
+package voltha
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	any "github.com/golang/protobuf/ptypes/any"
+	common "github.com/opencord/voltha-protos/go/common"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type AdapterConfig struct {
+	// Common adapter config attributes here
+	LogLevel common.LogLevel_LogLevel `protobuf:"varint,1,opt,name=log_level,json=logLevel,proto3,enum=common.LogLevel_LogLevel" json:"log_level,omitempty"`
+	// Custom (vendor-specific) configuration attributes
+	AdditionalConfig     *any.Any `protobuf:"bytes,64,opt,name=additional_config,json=additionalConfig,proto3" json:"additional_config,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AdapterConfig) Reset()         { *m = AdapterConfig{} }
+func (m *AdapterConfig) String() string { return proto.CompactTextString(m) }
+func (*AdapterConfig) ProtoMessage()    {}
+func (*AdapterConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7e998ce153307274, []int{0}
+}
+
+func (m *AdapterConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AdapterConfig.Unmarshal(m, b)
+}
+func (m *AdapterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AdapterConfig.Marshal(b, m, deterministic)
+}
+func (m *AdapterConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AdapterConfig.Merge(m, src)
+}
+func (m *AdapterConfig) XXX_Size() int {
+	return xxx_messageInfo_AdapterConfig.Size(m)
+}
+func (m *AdapterConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_AdapterConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AdapterConfig proto.InternalMessageInfo
+
+func (m *AdapterConfig) GetLogLevel() common.LogLevel_LogLevel {
+	if m != nil {
+		return m.LogLevel
+	}
+	return common.LogLevel_DEBUG
+}
+
+func (m *AdapterConfig) GetAdditionalConfig() *any.Any {
+	if m != nil {
+		return m.AdditionalConfig
+	}
+	return nil
+}
+
+// Adapter (software plugin)
+type Adapter struct {
+	// Unique name of adapter, matching the python package name under
+	// voltha/adapters.
+	Id      string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Vendor  string `protobuf:"bytes,2,opt,name=vendor,proto3" json:"vendor,omitempty"`
+	Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
+	// Adapter configuration
+	Config *AdapterConfig `protobuf:"bytes,16,opt,name=config,proto3" json:"config,omitempty"`
+	// Custom descriptors and custom configuration
+	AdditionalDescription *any.Any `protobuf:"bytes,64,opt,name=additional_description,json=additionalDescription,proto3" json:"additional_description,omitempty"`
+	LogicalDeviceIds      []string `protobuf:"bytes,4,rep,name=logical_device_ids,json=logicalDeviceIds,proto3" json:"logical_device_ids,omitempty"`
+	XXX_NoUnkeyedLiteral  struct{} `json:"-"`
+	XXX_unrecognized      []byte   `json:"-"`
+	XXX_sizecache         int32    `json:"-"`
+}
+
+func (m *Adapter) Reset()         { *m = Adapter{} }
+func (m *Adapter) String() string { return proto.CompactTextString(m) }
+func (*Adapter) ProtoMessage()    {}
+func (*Adapter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7e998ce153307274, []int{1}
+}
+
+func (m *Adapter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Adapter.Unmarshal(m, b)
+}
+func (m *Adapter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Adapter.Marshal(b, m, deterministic)
+}
+func (m *Adapter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Adapter.Merge(m, src)
+}
+func (m *Adapter) XXX_Size() int {
+	return xxx_messageInfo_Adapter.Size(m)
+}
+func (m *Adapter) XXX_DiscardUnknown() {
+	xxx_messageInfo_Adapter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Adapter proto.InternalMessageInfo
+
+func (m *Adapter) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *Adapter) GetVendor() string {
+	if m != nil {
+		return m.Vendor
+	}
+	return ""
+}
+
+func (m *Adapter) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *Adapter) GetConfig() *AdapterConfig {
+	if m != nil {
+		return m.Config
+	}
+	return nil
+}
+
+func (m *Adapter) GetAdditionalDescription() *any.Any {
+	if m != nil {
+		return m.AdditionalDescription
+	}
+	return nil
+}
+
+func (m *Adapter) GetLogicalDeviceIds() []string {
+	if m != nil {
+		return m.LogicalDeviceIds
+	}
+	return nil
+}
+
+type Adapters struct {
+	Items                []*Adapter `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *Adapters) Reset()         { *m = Adapters{} }
+func (m *Adapters) String() string { return proto.CompactTextString(m) }
+func (*Adapters) ProtoMessage()    {}
+func (*Adapters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7e998ce153307274, []int{2}
+}
+
+func (m *Adapters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Adapters.Unmarshal(m, b)
+}
+func (m *Adapters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Adapters.Marshal(b, m, deterministic)
+}
+func (m *Adapters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Adapters.Merge(m, src)
+}
+func (m *Adapters) XXX_Size() int {
+	return xxx_messageInfo_Adapters.Size(m)
+}
+func (m *Adapters) XXX_DiscardUnknown() {
+	xxx_messageInfo_Adapters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Adapters proto.InternalMessageInfo
+
+func (m *Adapters) GetItems() []*Adapter {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*AdapterConfig)(nil), "voltha.AdapterConfig")
+	proto.RegisterType((*Adapter)(nil), "voltha.Adapter")
+	proto.RegisterType((*Adapters)(nil), "voltha.Adapters")
+}
+
+func init() { proto.RegisterFile("voltha_protos/adapter.proto", fileDescriptor_7e998ce153307274) }
+
+var fileDescriptor_7e998ce153307274 = []byte{
+	// 378 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x6e, 0xe2, 0x30,
+	0x10, 0x86, 0x95, 0xb0, 0x04, 0x30, 0xda, 0x5d, 0xd6, 0x5a, 0x56, 0x81, 0x15, 0x6a, 0x84, 0x54,
+	0x29, 0x52, 0x4b, 0xa2, 0x52, 0xa9, 0xe7, 0x42, 0xb9, 0x54, 0xe2, 0x94, 0x63, 0x2f, 0x51, 0x88,
+	0x8d, 0xb1, 0xe4, 0x78, 0xa2, 0x24, 0x44, 0xe2, 0x15, 0x7a, 0xeb, 0x83, 0xf5, 0x3d, 0xfa, 0x04,
+	0x3d, 0x57, 0xd8, 0xa6, 0x40, 0x0f, 0xbd, 0xd9, 0xff, 0x37, 0x33, 0xff, 0xef, 0x49, 0xd0, 0xff,
+	0x1a, 0x44, 0xb5, 0x49, 0xe2, 0xbc, 0x80, 0x0a, 0xca, 0x30, 0x21, 0x49, 0x5e, 0xd1, 0x22, 0x50,
+	0x57, 0xec, 0x68, 0x38, 0x1c, 0x30, 0x00, 0x26, 0x68, 0xa8, 0xd4, 0xd5, 0x76, 0x1d, 0x26, 0x72,
+	0xa7, 0x4b, 0x86, 0xc3, 0xf3, 0xfe, 0x14, 0xb2, 0x0c, 0xa4, 0x61, 0xee, 0x39, 0xcb, 0x68, 0x95,
+	0x68, 0x32, 0x7e, 0xb6, 0xd0, 0xcf, 0x99, 0xb6, 0x7a, 0x00, 0xb9, 0xe6, 0x0c, 0xdf, 0xa1, 0x8e,
+	0x00, 0x16, 0x0b, 0x5a, 0x53, 0xe1, 0x5a, 0x9e, 0xe5, 0xff, 0x9a, 0x0e, 0x02, 0x33, 0x6d, 0x09,
+	0x6c, 0xb9, 0xd7, 0x3f, 0x0f, 0x51, 0x5b, 0x98, 0x13, 0x9e, 0xa1, 0x3f, 0x09, 0x21, 0xbc, 0xe2,
+	0x20, 0x13, 0x11, 0xa7, 0x6a, 0x98, 0x7b, 0xef, 0x59, 0x7e, 0x77, 0xfa, 0x37, 0xd0, 0xb1, 0x83,
+	0x43, 0xec, 0x60, 0x26, 0x77, 0x51, 0xef, 0x58, 0xae, 0xad, 0xc7, 0x2f, 0x36, 0x6a, 0x99, 0x30,
+	0xb8, 0x8f, 0x6c, 0x4e, 0x94, 0x7f, 0x67, 0xde, 0x7c, 0x7b, 0x7f, 0x1d, 0x59, 0x91, 0xcd, 0x09,
+	0x1e, 0x21, 0xa7, 0xa6, 0x92, 0x40, 0xe1, 0xda, 0xa7, 0xc8, 0x88, 0xf8, 0x02, 0xb5, 0x6a, 0x5a,
+	0x94, 0x1c, 0xa4, 0xdb, 0x38, 0xe5, 0x07, 0x15, 0x4f, 0x90, 0x63, 0xa2, 0xf5, 0x54, 0xb4, 0x7e,
+	0xa0, 0x57, 0x13, 0x9c, 0x2d, 0x21, 0x32, 0x45, 0x38, 0x42, 0xff, 0x4e, 0x1e, 0x45, 0x68, 0x99,
+	0x16, 0x3c, 0xdf, 0xdf, 0xbe, 0x7b, 0xd9, 0xc1, 0xb4, 0x7f, 0x6c, 0x5d, 0x1c, 0x3b, 0xf1, 0x35,
+	0xc2, 0x02, 0x18, 0x4f, 0xd5, 0xc0, 0x9a, 0xa7, 0x34, 0xe6, 0xa4, 0x74, 0x7f, 0x78, 0x0d, 0xbf,
+	0x13, 0xf5, 0x0c, 0x59, 0x28, 0xf0, 0x48, 0xca, 0xf1, 0x0d, 0x6a, 0x9b, 0x68, 0x25, 0xbe, 0x44,
+	0x4d, 0x5e, 0xd1, 0xac, 0x74, 0x2d, 0xaf, 0xe1, 0x77, 0xa7, 0xbf, 0xbf, 0x64, 0x8f, 0x34, 0x9d,
+	0x4f, 0x9e, 0xae, 0x18, 0xaf, 0x36, 0xdb, 0xd5, 0xfe, 0xb3, 0x85, 0x90, 0x53, 0x99, 0x42, 0x41,
+	0x42, 0x5d, 0x3c, 0x31, 0xff, 0x00, 0x03, 0x23, 0xac, 0x1c, 0xa5, 0xdc, 0x7e, 0x04, 0x00, 0x00,
+	0xff, 0xff, 0x27, 0xb1, 0x00, 0x9e, 0x81, 0x02, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/voltha/device.pb.go b/vendor/github.com/opencord/voltha-protos/go/voltha/device.pb.go
new file mode 100644
index 0000000..de0e1a8
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/voltha/device.pb.go
@@ -0,0 +1,1866 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/device.proto
+
+package voltha
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	any "github.com/golang/protobuf/ptypes/any"
+	common "github.com/opencord/voltha-protos/go/common"
+	openflow_13 "github.com/opencord/voltha-protos/go/openflow_13"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type PmConfig_PmType int32
+
+const (
+	PmConfig_COUNTER PmConfig_PmType = 0
+	PmConfig_GAUGE   PmConfig_PmType = 1
+	PmConfig_STATE   PmConfig_PmType = 2
+	PmConfig_CONTEXT PmConfig_PmType = 3
+)
+
+var PmConfig_PmType_name = map[int32]string{
+	0: "COUNTER",
+	1: "GAUGE",
+	2: "STATE",
+	3: "CONTEXT",
+}
+
+var PmConfig_PmType_value = map[string]int32{
+	"COUNTER": 0,
+	"GAUGE":   1,
+	"STATE":   2,
+	"CONTEXT": 3,
+}
+
+func (x PmConfig_PmType) String() string {
+	return proto.EnumName(PmConfig_PmType_name, int32(x))
+}
+
+func (PmConfig_PmType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{2, 0}
+}
+
+type ImageDownload_ImageDownloadState int32
+
+const (
+	ImageDownload_DOWNLOAD_UNKNOWN     ImageDownload_ImageDownloadState = 0
+	ImageDownload_DOWNLOAD_SUCCEEDED   ImageDownload_ImageDownloadState = 1
+	ImageDownload_DOWNLOAD_REQUESTED   ImageDownload_ImageDownloadState = 2
+	ImageDownload_DOWNLOAD_STARTED     ImageDownload_ImageDownloadState = 3
+	ImageDownload_DOWNLOAD_FAILED      ImageDownload_ImageDownloadState = 4
+	ImageDownload_DOWNLOAD_UNSUPPORTED ImageDownload_ImageDownloadState = 5
+	ImageDownload_DOWNLOAD_CANCELLED   ImageDownload_ImageDownloadState = 6
+)
+
+var ImageDownload_ImageDownloadState_name = map[int32]string{
+	0: "DOWNLOAD_UNKNOWN",
+	1: "DOWNLOAD_SUCCEEDED",
+	2: "DOWNLOAD_REQUESTED",
+	3: "DOWNLOAD_STARTED",
+	4: "DOWNLOAD_FAILED",
+	5: "DOWNLOAD_UNSUPPORTED",
+	6: "DOWNLOAD_CANCELLED",
+}
+
+var ImageDownload_ImageDownloadState_value = map[string]int32{
+	"DOWNLOAD_UNKNOWN":     0,
+	"DOWNLOAD_SUCCEEDED":   1,
+	"DOWNLOAD_REQUESTED":   2,
+	"DOWNLOAD_STARTED":     3,
+	"DOWNLOAD_FAILED":      4,
+	"DOWNLOAD_UNSUPPORTED": 5,
+	"DOWNLOAD_CANCELLED":   6,
+}
+
+func (x ImageDownload_ImageDownloadState) String() string {
+	return proto.EnumName(ImageDownload_ImageDownloadState_name, int32(x))
+}
+
+func (ImageDownload_ImageDownloadState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{7, 0}
+}
+
+type ImageDownload_ImageDownloadFailureReason int32
+
+const (
+	ImageDownload_NO_ERROR           ImageDownload_ImageDownloadFailureReason = 0
+	ImageDownload_INVALID_URL        ImageDownload_ImageDownloadFailureReason = 1
+	ImageDownload_DEVICE_BUSY        ImageDownload_ImageDownloadFailureReason = 2
+	ImageDownload_INSUFFICIENT_SPACE ImageDownload_ImageDownloadFailureReason = 3
+	ImageDownload_UNKNOWN_ERROR      ImageDownload_ImageDownloadFailureReason = 4
+	ImageDownload_CANCELLED          ImageDownload_ImageDownloadFailureReason = 5
+)
+
+var ImageDownload_ImageDownloadFailureReason_name = map[int32]string{
+	0: "NO_ERROR",
+	1: "INVALID_URL",
+	2: "DEVICE_BUSY",
+	3: "INSUFFICIENT_SPACE",
+	4: "UNKNOWN_ERROR",
+	5: "CANCELLED",
+}
+
+var ImageDownload_ImageDownloadFailureReason_value = map[string]int32{
+	"NO_ERROR":           0,
+	"INVALID_URL":        1,
+	"DEVICE_BUSY":        2,
+	"INSUFFICIENT_SPACE": 3,
+	"UNKNOWN_ERROR":      4,
+	"CANCELLED":          5,
+}
+
+func (x ImageDownload_ImageDownloadFailureReason) String() string {
+	return proto.EnumName(ImageDownload_ImageDownloadFailureReason_name, int32(x))
+}
+
+func (ImageDownload_ImageDownloadFailureReason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{7, 1}
+}
+
+type ImageDownload_ImageActivateState int32
+
+const (
+	ImageDownload_IMAGE_UNKNOWN    ImageDownload_ImageActivateState = 0
+	ImageDownload_IMAGE_INACTIVE   ImageDownload_ImageActivateState = 1
+	ImageDownload_IMAGE_ACTIVATING ImageDownload_ImageActivateState = 2
+	ImageDownload_IMAGE_ACTIVE     ImageDownload_ImageActivateState = 3
+	ImageDownload_IMAGE_REVERTING  ImageDownload_ImageActivateState = 4
+	ImageDownload_IMAGE_REVERTED   ImageDownload_ImageActivateState = 5
+)
+
+var ImageDownload_ImageActivateState_name = map[int32]string{
+	0: "IMAGE_UNKNOWN",
+	1: "IMAGE_INACTIVE",
+	2: "IMAGE_ACTIVATING",
+	3: "IMAGE_ACTIVE",
+	4: "IMAGE_REVERTING",
+	5: "IMAGE_REVERTED",
+}
+
+var ImageDownload_ImageActivateState_value = map[string]int32{
+	"IMAGE_UNKNOWN":    0,
+	"IMAGE_INACTIVE":   1,
+	"IMAGE_ACTIVATING": 2,
+	"IMAGE_ACTIVE":     3,
+	"IMAGE_REVERTING":  4,
+	"IMAGE_REVERTED":   5,
+}
+
+func (x ImageDownload_ImageActivateState) String() string {
+	return proto.EnumName(ImageDownload_ImageActivateState_name, int32(x))
+}
+
+func (ImageDownload_ImageActivateState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{7, 2}
+}
+
+type Port_PortType int32
+
+const (
+	Port_UNKNOWN      Port_PortType = 0
+	Port_ETHERNET_NNI Port_PortType = 1
+	Port_ETHERNET_UNI Port_PortType = 2
+	Port_PON_OLT      Port_PortType = 3
+	Port_PON_ONU      Port_PortType = 4
+	Port_VENET_OLT    Port_PortType = 5
+	Port_VENET_ONU    Port_PortType = 6
+)
+
+var Port_PortType_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "ETHERNET_NNI",
+	2: "ETHERNET_UNI",
+	3: "PON_OLT",
+	4: "PON_ONU",
+	5: "VENET_OLT",
+	6: "VENET_ONU",
+}
+
+var Port_PortType_value = map[string]int32{
+	"UNKNOWN":      0,
+	"ETHERNET_NNI": 1,
+	"ETHERNET_UNI": 2,
+	"PON_OLT":      3,
+	"PON_ONU":      4,
+	"VENET_OLT":    5,
+	"VENET_ONU":    6,
+}
+
+func (x Port_PortType) String() string {
+	return proto.EnumName(Port_PortType_name, int32(x))
+}
+
+func (Port_PortType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{9, 0}
+}
+
+type SimulateAlarmRequest_OperationType int32
+
+const (
+	SimulateAlarmRequest_RAISE SimulateAlarmRequest_OperationType = 0
+	SimulateAlarmRequest_CLEAR SimulateAlarmRequest_OperationType = 1
+)
+
+var SimulateAlarmRequest_OperationType_name = map[int32]string{
+	0: "RAISE",
+	1: "CLEAR",
+}
+
+var SimulateAlarmRequest_OperationType_value = map[string]int32{
+	"RAISE": 0,
+	"CLEAR": 1,
+}
+
+func (x SimulateAlarmRequest_OperationType) String() string {
+	return proto.EnumName(SimulateAlarmRequest_OperationType_name, int32(x))
+}
+
+func (SimulateAlarmRequest_OperationType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{13, 0}
+}
+
+// A Device Type
+type DeviceType struct {
+	// Unique name for the device type
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Unique vendor id for the device type applicable to ONU
+	// 4 bytes of vendor id from ONU serial number
+	VendorId  string   `protobuf:"bytes,5,opt,name=vendor_id,json=vendorId,proto3" json:"vendor_id,omitempty"`
+	VendorIds []string `protobuf:"bytes,6,rep,name=vendor_ids,json=vendorIds,proto3" json:"vendor_ids,omitempty"`
+	// Name of the adapter that handles device type
+	Adapter string `protobuf:"bytes,2,opt,name=adapter,proto3" json:"adapter,omitempty"`
+	// Capabilities
+	AcceptsBulkFlowUpdate           bool     `protobuf:"varint,3,opt,name=accepts_bulk_flow_update,json=acceptsBulkFlowUpdate,proto3" json:"accepts_bulk_flow_update,omitempty"`
+	AcceptsAddRemoveFlowUpdates     bool     `protobuf:"varint,4,opt,name=accepts_add_remove_flow_updates,json=acceptsAddRemoveFlowUpdates,proto3" json:"accepts_add_remove_flow_updates,omitempty"`
+	AcceptsDirectLogicalFlowsUpdate bool     `protobuf:"varint,7,opt,name=accepts_direct_logical_flows_update,json=acceptsDirectLogicalFlowsUpdate,proto3" json:"accepts_direct_logical_flows_update,omitempty"`
+	XXX_NoUnkeyedLiteral            struct{} `json:"-"`
+	XXX_unrecognized                []byte   `json:"-"`
+	XXX_sizecache                   int32    `json:"-"`
+}
+
+func (m *DeviceType) Reset()         { *m = DeviceType{} }
+func (m *DeviceType) String() string { return proto.CompactTextString(m) }
+func (*DeviceType) ProtoMessage()    {}
+func (*DeviceType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{0}
+}
+
+func (m *DeviceType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceType.Unmarshal(m, b)
+}
+func (m *DeviceType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceType.Marshal(b, m, deterministic)
+}
+func (m *DeviceType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceType.Merge(m, src)
+}
+func (m *DeviceType) XXX_Size() int {
+	return xxx_messageInfo_DeviceType.Size(m)
+}
+func (m *DeviceType) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceType proto.InternalMessageInfo
+
+func (m *DeviceType) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *DeviceType) GetVendorId() string {
+	if m != nil {
+		return m.VendorId
+	}
+	return ""
+}
+
+func (m *DeviceType) GetVendorIds() []string {
+	if m != nil {
+		return m.VendorIds
+	}
+	return nil
+}
+
+func (m *DeviceType) GetAdapter() string {
+	if m != nil {
+		return m.Adapter
+	}
+	return ""
+}
+
+func (m *DeviceType) GetAcceptsBulkFlowUpdate() bool {
+	if m != nil {
+		return m.AcceptsBulkFlowUpdate
+	}
+	return false
+}
+
+func (m *DeviceType) GetAcceptsAddRemoveFlowUpdates() bool {
+	if m != nil {
+		return m.AcceptsAddRemoveFlowUpdates
+	}
+	return false
+}
+
+func (m *DeviceType) GetAcceptsDirectLogicalFlowsUpdate() bool {
+	if m != nil {
+		return m.AcceptsDirectLogicalFlowsUpdate
+	}
+	return false
+}
+
+// A plurality of device types
+type DeviceTypes struct {
+	Items                []*DeviceType `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *DeviceTypes) Reset()         { *m = DeviceTypes{} }
+func (m *DeviceTypes) String() string { return proto.CompactTextString(m) }
+func (*DeviceTypes) ProtoMessage()    {}
+func (*DeviceTypes) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{1}
+}
+
+func (m *DeviceTypes) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceTypes.Unmarshal(m, b)
+}
+func (m *DeviceTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceTypes.Marshal(b, m, deterministic)
+}
+func (m *DeviceTypes) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceTypes.Merge(m, src)
+}
+func (m *DeviceTypes) XXX_Size() int {
+	return xxx_messageInfo_DeviceTypes.Size(m)
+}
+func (m *DeviceTypes) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceTypes.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceTypes proto.InternalMessageInfo
+
+func (m *DeviceTypes) GetItems() []*DeviceType {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type PmConfig struct {
+	Name                 string          `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Type                 PmConfig_PmType `protobuf:"varint,2,opt,name=type,proto3,enum=voltha.PmConfig_PmType" json:"type,omitempty"`
+	Enabled              bool            `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	SampleFreq           uint32          `protobuf:"varint,4,opt,name=sample_freq,json=sampleFreq,proto3" json:"sample_freq,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *PmConfig) Reset()         { *m = PmConfig{} }
+func (m *PmConfig) String() string { return proto.CompactTextString(m) }
+func (*PmConfig) ProtoMessage()    {}
+func (*PmConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{2}
+}
+
+func (m *PmConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PmConfig.Unmarshal(m, b)
+}
+func (m *PmConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PmConfig.Marshal(b, m, deterministic)
+}
+func (m *PmConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PmConfig.Merge(m, src)
+}
+func (m *PmConfig) XXX_Size() int {
+	return xxx_messageInfo_PmConfig.Size(m)
+}
+func (m *PmConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_PmConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PmConfig proto.InternalMessageInfo
+
+func (m *PmConfig) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *PmConfig) GetType() PmConfig_PmType {
+	if m != nil {
+		return m.Type
+	}
+	return PmConfig_COUNTER
+}
+
+func (m *PmConfig) GetEnabled() bool {
+	if m != nil {
+		return m.Enabled
+	}
+	return false
+}
+
+func (m *PmConfig) GetSampleFreq() uint32 {
+	if m != nil {
+		return m.SampleFreq
+	}
+	return 0
+}
+
+type PmGroupConfig struct {
+	GroupName            string      `protobuf:"bytes,1,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"`
+	GroupFreq            uint32      `protobuf:"varint,2,opt,name=group_freq,json=groupFreq,proto3" json:"group_freq,omitempty"`
+	Enabled              bool        `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"`
+	Metrics              []*PmConfig `protobuf:"bytes,4,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *PmGroupConfig) Reset()         { *m = PmGroupConfig{} }
+func (m *PmGroupConfig) String() string { return proto.CompactTextString(m) }
+func (*PmGroupConfig) ProtoMessage()    {}
+func (*PmGroupConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{3}
+}
+
+func (m *PmGroupConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PmGroupConfig.Unmarshal(m, b)
+}
+func (m *PmGroupConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PmGroupConfig.Marshal(b, m, deterministic)
+}
+func (m *PmGroupConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PmGroupConfig.Merge(m, src)
+}
+func (m *PmGroupConfig) XXX_Size() int {
+	return xxx_messageInfo_PmGroupConfig.Size(m)
+}
+func (m *PmGroupConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_PmGroupConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PmGroupConfig proto.InternalMessageInfo
+
+func (m *PmGroupConfig) GetGroupName() string {
+	if m != nil {
+		return m.GroupName
+	}
+	return ""
+}
+
+func (m *PmGroupConfig) GetGroupFreq() uint32 {
+	if m != nil {
+		return m.GroupFreq
+	}
+	return 0
+}
+
+func (m *PmGroupConfig) GetEnabled() bool {
+	if m != nil {
+		return m.Enabled
+	}
+	return false
+}
+
+func (m *PmGroupConfig) GetMetrics() []*PmConfig {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+type PmConfigs struct {
+	Id          string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	DefaultFreq uint32 `protobuf:"varint,2,opt,name=default_freq,json=defaultFreq,proto3" json:"default_freq,omitempty"`
+	// Forces group names and group semantics
+	Grouped bool `protobuf:"varint,3,opt,name=grouped,proto3" json:"grouped,omitempty"`
+	// Allows Pm to set an individual sample frequency
+	FreqOverride         bool             `protobuf:"varint,4,opt,name=freq_override,json=freqOverride,proto3" json:"freq_override,omitempty"`
+	Groups               []*PmGroupConfig `protobuf:"bytes,5,rep,name=groups,proto3" json:"groups,omitempty"`
+	Metrics              []*PmConfig      `protobuf:"bytes,6,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *PmConfigs) Reset()         { *m = PmConfigs{} }
+func (m *PmConfigs) String() string { return proto.CompactTextString(m) }
+func (*PmConfigs) ProtoMessage()    {}
+func (*PmConfigs) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{4}
+}
+
+func (m *PmConfigs) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PmConfigs.Unmarshal(m, b)
+}
+func (m *PmConfigs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PmConfigs.Marshal(b, m, deterministic)
+}
+func (m *PmConfigs) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PmConfigs.Merge(m, src)
+}
+func (m *PmConfigs) XXX_Size() int {
+	return xxx_messageInfo_PmConfigs.Size(m)
+}
+func (m *PmConfigs) XXX_DiscardUnknown() {
+	xxx_messageInfo_PmConfigs.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PmConfigs proto.InternalMessageInfo
+
+func (m *PmConfigs) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *PmConfigs) GetDefaultFreq() uint32 {
+	if m != nil {
+		return m.DefaultFreq
+	}
+	return 0
+}
+
+func (m *PmConfigs) GetGrouped() bool {
+	if m != nil {
+		return m.Grouped
+	}
+	return false
+}
+
+func (m *PmConfigs) GetFreqOverride() bool {
+	if m != nil {
+		return m.FreqOverride
+	}
+	return false
+}
+
+func (m *PmConfigs) GetGroups() []*PmGroupConfig {
+	if m != nil {
+		return m.Groups
+	}
+	return nil
+}
+
+func (m *PmConfigs) GetMetrics() []*PmConfig {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+// Describes instance of software image on the device
+type Image struct {
+	Name            string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Version         string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
+	Hash            string `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash,omitempty"`
+	InstallDatetime string `protobuf:"bytes,4,opt,name=install_datetime,json=installDatetime,proto3" json:"install_datetime,omitempty"`
+	// The active software image is one that is currently loaded and executing
+	// in the ONU or circuit pack. Under normal operation, one software image
+	// is always active while the other is inactive. Under no circumstances are
+	// both software images allowed to be active at the same time
+	IsActive bool `protobuf:"varint,5,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"`
+	// The committed software image is loaded and executed upon reboot of the
+	// ONU and/or circuit pack. During normal operation, one software image is
+	// always committed, while the other is uncommitted.
+	IsCommitted bool `protobuf:"varint,6,opt,name=is_committed,json=isCommitted,proto3" json:"is_committed,omitempty"`
+	// A software image is valid if it has been verified to be an executable
+	// code image. The verification mechanism is not subject to standardization;
+	// however, it should include at least a data integrity (e.g., CRC) check of
+	// the entire code image.
+	IsValid              bool     `protobuf:"varint,7,opt,name=is_valid,json=isValid,proto3" json:"is_valid,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Image) Reset()         { *m = Image{} }
+func (m *Image) String() string { return proto.CompactTextString(m) }
+func (*Image) ProtoMessage()    {}
+func (*Image) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{5}
+}
+
+func (m *Image) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Image.Unmarshal(m, b)
+}
+func (m *Image) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Image.Marshal(b, m, deterministic)
+}
+func (m *Image) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Image.Merge(m, src)
+}
+func (m *Image) XXX_Size() int {
+	return xxx_messageInfo_Image.Size(m)
+}
+func (m *Image) XXX_DiscardUnknown() {
+	xxx_messageInfo_Image.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Image proto.InternalMessageInfo
+
+func (m *Image) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *Image) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *Image) GetHash() string {
+	if m != nil {
+		return m.Hash
+	}
+	return ""
+}
+
+func (m *Image) GetInstallDatetime() string {
+	if m != nil {
+		return m.InstallDatetime
+	}
+	return ""
+}
+
+func (m *Image) GetIsActive() bool {
+	if m != nil {
+		return m.IsActive
+	}
+	return false
+}
+
+func (m *Image) GetIsCommitted() bool {
+	if m != nil {
+		return m.IsCommitted
+	}
+	return false
+}
+
+func (m *Image) GetIsValid() bool {
+	if m != nil {
+		return m.IsValid
+	}
+	return false
+}
+
+// List of software on the device
+type Images struct {
+	Image                []*Image `protobuf:"bytes,1,rep,name=image,proto3" json:"image,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Images) Reset()         { *m = Images{} }
+func (m *Images) String() string { return proto.CompactTextString(m) }
+func (*Images) ProtoMessage()    {}
+func (*Images) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{6}
+}
+
+func (m *Images) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Images.Unmarshal(m, b)
+}
+func (m *Images) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Images.Marshal(b, m, deterministic)
+}
+func (m *Images) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Images.Merge(m, src)
+}
+func (m *Images) XXX_Size() int {
+	return xxx_messageInfo_Images.Size(m)
+}
+func (m *Images) XXX_DiscardUnknown() {
+	xxx_messageInfo_Images.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Images proto.InternalMessageInfo
+
+func (m *Images) GetImage() []*Image {
+	if m != nil {
+		return m.Image
+	}
+	return nil
+}
+
+type ImageDownload struct {
+	// Device Identifier
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Image unique identifier
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	// URL where the image is available
+	// should include username password
+	Url string `protobuf:"bytes,3,opt,name=url,proto3" json:"url,omitempty"`
+	// CRC of the image to be verified aginst
+	Crc uint32 `protobuf:"varint,4,opt,name=crc,proto3" json:"crc,omitempty"`
+	// Download state
+	DownloadState ImageDownload_ImageDownloadState `protobuf:"varint,5,opt,name=download_state,json=downloadState,proto3,enum=voltha.ImageDownload_ImageDownloadState" json:"download_state,omitempty"`
+	// Downloaded version
+	ImageVersion string `protobuf:"bytes,6,opt,name=image_version,json=imageVersion,proto3" json:"image_version,omitempty"`
+	// Bytes downloaded
+	DownloadedBytes uint32 `protobuf:"varint,7,opt,name=downloaded_bytes,json=downloadedBytes,proto3" json:"downloaded_bytes,omitempty"`
+	// Download failure reason
+	Reason ImageDownload_ImageDownloadFailureReason `protobuf:"varint,8,opt,name=reason,proto3,enum=voltha.ImageDownload_ImageDownloadFailureReason" json:"reason,omitempty"`
+	// Additional info
+	AdditionalInfo string `protobuf:"bytes,9,opt,name=additional_info,json=additionalInfo,proto3" json:"additional_info,omitempty"`
+	// Save current configuration
+	SaveConfig bool `protobuf:"varint,10,opt,name=save_config,json=saveConfig,proto3" json:"save_config,omitempty"`
+	// Image local location
+	LocalDir string `protobuf:"bytes,11,opt,name=local_dir,json=localDir,proto3" json:"local_dir,omitempty"`
+	// Image activation state
+	ImageState ImageDownload_ImageActivateState `protobuf:"varint,12,opt,name=image_state,json=imageState,proto3,enum=voltha.ImageDownload_ImageActivateState" json:"image_state,omitempty"`
+	// Image file size
+	FileSize             uint32   `protobuf:"varint,13,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ImageDownload) Reset()         { *m = ImageDownload{} }
+func (m *ImageDownload) String() string { return proto.CompactTextString(m) }
+func (*ImageDownload) ProtoMessage()    {}
+func (*ImageDownload) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{7}
+}
+
+func (m *ImageDownload) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageDownload.Unmarshal(m, b)
+}
+func (m *ImageDownload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageDownload.Marshal(b, m, deterministic)
+}
+func (m *ImageDownload) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageDownload.Merge(m, src)
+}
+func (m *ImageDownload) XXX_Size() int {
+	return xxx_messageInfo_ImageDownload.Size(m)
+}
+func (m *ImageDownload) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageDownload.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageDownload proto.InternalMessageInfo
+
+func (m *ImageDownload) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *ImageDownload) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *ImageDownload) GetUrl() string {
+	if m != nil {
+		return m.Url
+	}
+	return ""
+}
+
+func (m *ImageDownload) GetCrc() uint32 {
+	if m != nil {
+		return m.Crc
+	}
+	return 0
+}
+
+func (m *ImageDownload) GetDownloadState() ImageDownload_ImageDownloadState {
+	if m != nil {
+		return m.DownloadState
+	}
+	return ImageDownload_DOWNLOAD_UNKNOWN
+}
+
+func (m *ImageDownload) GetImageVersion() string {
+	if m != nil {
+		return m.ImageVersion
+	}
+	return ""
+}
+
+func (m *ImageDownload) GetDownloadedBytes() uint32 {
+	if m != nil {
+		return m.DownloadedBytes
+	}
+	return 0
+}
+
+func (m *ImageDownload) GetReason() ImageDownload_ImageDownloadFailureReason {
+	if m != nil {
+		return m.Reason
+	}
+	return ImageDownload_NO_ERROR
+}
+
+func (m *ImageDownload) GetAdditionalInfo() string {
+	if m != nil {
+		return m.AdditionalInfo
+	}
+	return ""
+}
+
+func (m *ImageDownload) GetSaveConfig() bool {
+	if m != nil {
+		return m.SaveConfig
+	}
+	return false
+}
+
+func (m *ImageDownload) GetLocalDir() string {
+	if m != nil {
+		return m.LocalDir
+	}
+	return ""
+}
+
+func (m *ImageDownload) GetImageState() ImageDownload_ImageActivateState {
+	if m != nil {
+		return m.ImageState
+	}
+	return ImageDownload_IMAGE_UNKNOWN
+}
+
+func (m *ImageDownload) GetFileSize() uint32 {
+	if m != nil {
+		return m.FileSize
+	}
+	return 0
+}
+
+type ImageDownloads struct {
+	Items                []*ImageDownload `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *ImageDownloads) Reset()         { *m = ImageDownloads{} }
+func (m *ImageDownloads) String() string { return proto.CompactTextString(m) }
+func (*ImageDownloads) ProtoMessage()    {}
+func (*ImageDownloads) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{8}
+}
+
+func (m *ImageDownloads) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ImageDownloads.Unmarshal(m, b)
+}
+func (m *ImageDownloads) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ImageDownloads.Marshal(b, m, deterministic)
+}
+func (m *ImageDownloads) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ImageDownloads.Merge(m, src)
+}
+func (m *ImageDownloads) XXX_Size() int {
+	return xxx_messageInfo_ImageDownloads.Size(m)
+}
+func (m *ImageDownloads) XXX_DiscardUnknown() {
+	xxx_messageInfo_ImageDownloads.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ImageDownloads proto.InternalMessageInfo
+
+func (m *ImageDownloads) GetItems() []*ImageDownload {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type Port struct {
+	PortNo               uint32                       `protobuf:"varint,1,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	Label                string                       `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"`
+	Type                 Port_PortType                `protobuf:"varint,3,opt,name=type,proto3,enum=voltha.Port_PortType" json:"type,omitempty"`
+	AdminState           common.AdminState_AdminState `protobuf:"varint,5,opt,name=admin_state,json=adminState,proto3,enum=common.AdminState_AdminState" json:"admin_state,omitempty"`
+	OperStatus           common.OperStatus_OperStatus `protobuf:"varint,6,opt,name=oper_status,json=operStatus,proto3,enum=common.OperStatus_OperStatus" json:"oper_status,omitempty"`
+	DeviceId             string                       `protobuf:"bytes,7,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	Peers                []*Port_PeerPort             `protobuf:"bytes,8,rep,name=peers,proto3" json:"peers,omitempty"`
+	RxPackets            uint64                       `protobuf:"fixed64,9,opt,name=rx_packets,json=rxPackets,proto3" json:"rx_packets,omitempty"`
+	RxBytes              uint64                       `protobuf:"fixed64,10,opt,name=rx_bytes,json=rxBytes,proto3" json:"rx_bytes,omitempty"`
+	RxErrors             uint64                       `protobuf:"fixed64,11,opt,name=rx_errors,json=rxErrors,proto3" json:"rx_errors,omitempty"`
+	TxPackets            uint64                       `protobuf:"fixed64,12,opt,name=tx_packets,json=txPackets,proto3" json:"tx_packets,omitempty"`
+	TxBytes              uint64                       `protobuf:"fixed64,13,opt,name=tx_bytes,json=txBytes,proto3" json:"tx_bytes,omitempty"`
+	TxErrors             uint64                       `protobuf:"fixed64,14,opt,name=tx_errors,json=txErrors,proto3" json:"tx_errors,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *Port) Reset()         { *m = Port{} }
+func (m *Port) String() string { return proto.CompactTextString(m) }
+func (*Port) ProtoMessage()    {}
+func (*Port) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{9}
+}
+
+func (m *Port) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Port.Unmarshal(m, b)
+}
+func (m *Port) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Port.Marshal(b, m, deterministic)
+}
+func (m *Port) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Port.Merge(m, src)
+}
+func (m *Port) XXX_Size() int {
+	return xxx_messageInfo_Port.Size(m)
+}
+func (m *Port) XXX_DiscardUnknown() {
+	xxx_messageInfo_Port.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Port proto.InternalMessageInfo
+
+func (m *Port) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+func (m *Port) GetLabel() string {
+	if m != nil {
+		return m.Label
+	}
+	return ""
+}
+
+func (m *Port) GetType() Port_PortType {
+	if m != nil {
+		return m.Type
+	}
+	return Port_UNKNOWN
+}
+
+func (m *Port) GetAdminState() common.AdminState_AdminState {
+	if m != nil {
+		return m.AdminState
+	}
+	return common.AdminState_UNKNOWN
+}
+
+func (m *Port) GetOperStatus() common.OperStatus_OperStatus {
+	if m != nil {
+		return m.OperStatus
+	}
+	return common.OperStatus_UNKNOWN
+}
+
+func (m *Port) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *Port) GetPeers() []*Port_PeerPort {
+	if m != nil {
+		return m.Peers
+	}
+	return nil
+}
+
+func (m *Port) GetRxPackets() uint64 {
+	if m != nil {
+		return m.RxPackets
+	}
+	return 0
+}
+
+func (m *Port) GetRxBytes() uint64 {
+	if m != nil {
+		return m.RxBytes
+	}
+	return 0
+}
+
+func (m *Port) GetRxErrors() uint64 {
+	if m != nil {
+		return m.RxErrors
+	}
+	return 0
+}
+
+func (m *Port) GetTxPackets() uint64 {
+	if m != nil {
+		return m.TxPackets
+	}
+	return 0
+}
+
+func (m *Port) GetTxBytes() uint64 {
+	if m != nil {
+		return m.TxBytes
+	}
+	return 0
+}
+
+func (m *Port) GetTxErrors() uint64 {
+	if m != nil {
+		return m.TxErrors
+	}
+	return 0
+}
+
+type Port_PeerPort struct {
+	DeviceId             string   `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	PortNo               uint32   `protobuf:"varint,2,opt,name=port_no,json=portNo,proto3" json:"port_no,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Port_PeerPort) Reset()         { *m = Port_PeerPort{} }
+func (m *Port_PeerPort) String() string { return proto.CompactTextString(m) }
+func (*Port_PeerPort) ProtoMessage()    {}
+func (*Port_PeerPort) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{9, 0}
+}
+
+func (m *Port_PeerPort) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Port_PeerPort.Unmarshal(m, b)
+}
+func (m *Port_PeerPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Port_PeerPort.Marshal(b, m, deterministic)
+}
+func (m *Port_PeerPort) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Port_PeerPort.Merge(m, src)
+}
+func (m *Port_PeerPort) XXX_Size() int {
+	return xxx_messageInfo_Port_PeerPort.Size(m)
+}
+func (m *Port_PeerPort) XXX_DiscardUnknown() {
+	xxx_messageInfo_Port_PeerPort.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Port_PeerPort proto.InternalMessageInfo
+
+func (m *Port_PeerPort) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *Port_PeerPort) GetPortNo() uint32 {
+	if m != nil {
+		return m.PortNo
+	}
+	return 0
+}
+
+type Ports struct {
+	Items                []*Port  `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Ports) Reset()         { *m = Ports{} }
+func (m *Ports) String() string { return proto.CompactTextString(m) }
+func (*Ports) ProtoMessage()    {}
+func (*Ports) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{10}
+}
+
+func (m *Ports) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Ports.Unmarshal(m, b)
+}
+func (m *Ports) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Ports.Marshal(b, m, deterministic)
+}
+func (m *Ports) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Ports.Merge(m, src)
+}
+func (m *Ports) XXX_Size() int {
+	return xxx_messageInfo_Ports.Size(m)
+}
+func (m *Ports) XXX_DiscardUnknown() {
+	xxx_messageInfo_Ports.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Ports proto.InternalMessageInfo
+
+func (m *Ports) GetItems() []*Port {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+// A Physical Device instance
+type Device struct {
+	// Voltha's device identifier
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Device type, refers to one of the registered device types
+	Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
+	// Is this device a root device. Each logical switch has one root
+	// device that is associated with the logical flow switch.
+	Root bool `protobuf:"varint,3,opt,name=root,proto3" json:"root,omitempty"`
+	// Parent device id, in the device tree (for a root device, the parent_id
+	// is the logical_device.id)
+	ParentId     string `protobuf:"bytes,4,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"`
+	ParentPortNo uint32 `protobuf:"varint,20,opt,name=parent_port_no,json=parentPortNo,proto3" json:"parent_port_no,omitempty"`
+	// Vendor, version, serial number, etc.
+	Vendor          string `protobuf:"bytes,5,opt,name=vendor,proto3" json:"vendor,omitempty"`
+	Model           string `protobuf:"bytes,6,opt,name=model,proto3" json:"model,omitempty"`
+	HardwareVersion string `protobuf:"bytes,7,opt,name=hardware_version,json=hardwareVersion,proto3" json:"hardware_version,omitempty"`
+	FirmwareVersion string `protobuf:"bytes,8,opt,name=firmware_version,json=firmwareVersion,proto3" json:"firmware_version,omitempty"`
+	// List of software on the device
+	Images       *Images `protobuf:"bytes,9,opt,name=images,proto3" json:"images,omitempty"`
+	SerialNumber string  `protobuf:"bytes,10,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"`
+	VendorId     string  `protobuf:"bytes,24,opt,name=vendor_id,json=vendorId,proto3" json:"vendor_id,omitempty"`
+	// Addapter that takes care of device
+	Adapter string `protobuf:"bytes,11,opt,name=adapter,proto3" json:"adapter,omitempty"`
+	// Device contact on vlan (if 0, no vlan)
+	Vlan uint32 `protobuf:"varint,12,opt,name=vlan,proto3" json:"vlan,omitempty"`
+	// Device contact MAC address (format: "xx:xx:xx:xx:xx:xx")
+	MacAddress string `protobuf:"bytes,13,opt,name=mac_address,json=macAddress,proto3" json:"mac_address,omitempty"`
+	// Types that are valid to be assigned to Address:
+	//	*Device_Ipv4Address
+	//	*Device_Ipv6Address
+	//	*Device_HostAndPort
+	Address       isDevice_Address                   `protobuf_oneof:"address"`
+	ExtraArgs     string                             `protobuf:"bytes,23,opt,name=extra_args,json=extraArgs,proto3" json:"extra_args,omitempty"`
+	ProxyAddress  *Device_ProxyAddress               `protobuf:"bytes,19,opt,name=proxy_address,json=proxyAddress,proto3" json:"proxy_address,omitempty"`
+	AdminState    common.AdminState_AdminState       `protobuf:"varint,16,opt,name=admin_state,json=adminState,proto3,enum=common.AdminState_AdminState" json:"admin_state,omitempty"`
+	OperStatus    common.OperStatus_OperStatus       `protobuf:"varint,17,opt,name=oper_status,json=operStatus,proto3,enum=common.OperStatus_OperStatus" json:"oper_status,omitempty"`
+	Reason        string                             `protobuf:"bytes,22,opt,name=reason,proto3" json:"reason,omitempty"`
+	ConnectStatus common.ConnectStatus_ConnectStatus `protobuf:"varint,18,opt,name=connect_status,json=connectStatus,proto3,enum=common.ConnectStatus_ConnectStatus" json:"connect_status,omitempty"`
+	// Device type specific attributes
+	Custom     *any.Any                `protobuf:"bytes,64,opt,name=custom,proto3" json:"custom,omitempty"`
+	Ports      []*Port                 `protobuf:"bytes,128,rep,name=ports,proto3" json:"ports,omitempty"`
+	Flows      *openflow_13.Flows      `protobuf:"bytes,129,opt,name=flows,proto3" json:"flows,omitempty"`
+	FlowGroups *openflow_13.FlowGroups `protobuf:"bytes,130,opt,name=flow_groups,json=flowGroups,proto3" json:"flow_groups,omitempty"`
+	// PmConfigs will eventually converted to a child node of the
+	// device to falicitata callbacks and to simplify manipulation.
+	PmConfigs            *PmConfigs       `protobuf:"bytes,131,opt,name=pm_configs,json=pmConfigs,proto3" json:"pm_configs,omitempty"`
+	ImageDownloads       []*ImageDownload `protobuf:"bytes,133,rep,name=image_downloads,json=imageDownloads,proto3" json:"image_downloads,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *Device) Reset()         { *m = Device{} }
+func (m *Device) String() string { return proto.CompactTextString(m) }
+func (*Device) ProtoMessage()    {}
+func (*Device) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{11}
+}
+
+func (m *Device) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Device.Unmarshal(m, b)
+}
+func (m *Device) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Device.Marshal(b, m, deterministic)
+}
+func (m *Device) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Device.Merge(m, src)
+}
+func (m *Device) XXX_Size() int {
+	return xxx_messageInfo_Device.Size(m)
+}
+func (m *Device) XXX_DiscardUnknown() {
+	xxx_messageInfo_Device.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Device proto.InternalMessageInfo
+
+func (m *Device) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *Device) GetType() string {
+	if m != nil {
+		return m.Type
+	}
+	return ""
+}
+
+func (m *Device) GetRoot() bool {
+	if m != nil {
+		return m.Root
+	}
+	return false
+}
+
+func (m *Device) GetParentId() string {
+	if m != nil {
+		return m.ParentId
+	}
+	return ""
+}
+
+func (m *Device) GetParentPortNo() uint32 {
+	if m != nil {
+		return m.ParentPortNo
+	}
+	return 0
+}
+
+func (m *Device) GetVendor() string {
+	if m != nil {
+		return m.Vendor
+	}
+	return ""
+}
+
+func (m *Device) GetModel() string {
+	if m != nil {
+		return m.Model
+	}
+	return ""
+}
+
+func (m *Device) GetHardwareVersion() string {
+	if m != nil {
+		return m.HardwareVersion
+	}
+	return ""
+}
+
+func (m *Device) GetFirmwareVersion() string {
+	if m != nil {
+		return m.FirmwareVersion
+	}
+	return ""
+}
+
+func (m *Device) GetImages() *Images {
+	if m != nil {
+		return m.Images
+	}
+	return nil
+}
+
+func (m *Device) GetSerialNumber() string {
+	if m != nil {
+		return m.SerialNumber
+	}
+	return ""
+}
+
+func (m *Device) GetVendorId() string {
+	if m != nil {
+		return m.VendorId
+	}
+	return ""
+}
+
+func (m *Device) GetAdapter() string {
+	if m != nil {
+		return m.Adapter
+	}
+	return ""
+}
+
+func (m *Device) GetVlan() uint32 {
+	if m != nil {
+		return m.Vlan
+	}
+	return 0
+}
+
+func (m *Device) GetMacAddress() string {
+	if m != nil {
+		return m.MacAddress
+	}
+	return ""
+}
+
+type isDevice_Address interface {
+	isDevice_Address()
+}
+
+type Device_Ipv4Address struct {
+	Ipv4Address string `protobuf:"bytes,14,opt,name=ipv4_address,json=ipv4Address,proto3,oneof"`
+}
+
+type Device_Ipv6Address struct {
+	Ipv6Address string `protobuf:"bytes,15,opt,name=ipv6_address,json=ipv6Address,proto3,oneof"`
+}
+
+type Device_HostAndPort struct {
+	HostAndPort string `protobuf:"bytes,21,opt,name=host_and_port,json=hostAndPort,proto3,oneof"`
+}
+
+func (*Device_Ipv4Address) isDevice_Address() {}
+
+func (*Device_Ipv6Address) isDevice_Address() {}
+
+func (*Device_HostAndPort) isDevice_Address() {}
+
+func (m *Device) GetAddress() isDevice_Address {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *Device) GetIpv4Address() string {
+	if x, ok := m.GetAddress().(*Device_Ipv4Address); ok {
+		return x.Ipv4Address
+	}
+	return ""
+}
+
+func (m *Device) GetIpv6Address() string {
+	if x, ok := m.GetAddress().(*Device_Ipv6Address); ok {
+		return x.Ipv6Address
+	}
+	return ""
+}
+
+func (m *Device) GetHostAndPort() string {
+	if x, ok := m.GetAddress().(*Device_HostAndPort); ok {
+		return x.HostAndPort
+	}
+	return ""
+}
+
+func (m *Device) GetExtraArgs() string {
+	if m != nil {
+		return m.ExtraArgs
+	}
+	return ""
+}
+
+func (m *Device) GetProxyAddress() *Device_ProxyAddress {
+	if m != nil {
+		return m.ProxyAddress
+	}
+	return nil
+}
+
+func (m *Device) GetAdminState() common.AdminState_AdminState {
+	if m != nil {
+		return m.AdminState
+	}
+	return common.AdminState_UNKNOWN
+}
+
+func (m *Device) GetOperStatus() common.OperStatus_OperStatus {
+	if m != nil {
+		return m.OperStatus
+	}
+	return common.OperStatus_UNKNOWN
+}
+
+func (m *Device) GetReason() string {
+	if m != nil {
+		return m.Reason
+	}
+	return ""
+}
+
+func (m *Device) GetConnectStatus() common.ConnectStatus_ConnectStatus {
+	if m != nil {
+		return m.ConnectStatus
+	}
+	return common.ConnectStatus_UNKNOWN
+}
+
+func (m *Device) GetCustom() *any.Any {
+	if m != nil {
+		return m.Custom
+	}
+	return nil
+}
+
+func (m *Device) GetPorts() []*Port {
+	if m != nil {
+		return m.Ports
+	}
+	return nil
+}
+
+func (m *Device) GetFlows() *openflow_13.Flows {
+	if m != nil {
+		return m.Flows
+	}
+	return nil
+}
+
+func (m *Device) GetFlowGroups() *openflow_13.FlowGroups {
+	if m != nil {
+		return m.FlowGroups
+	}
+	return nil
+}
+
+func (m *Device) GetPmConfigs() *PmConfigs {
+	if m != nil {
+		return m.PmConfigs
+	}
+	return nil
+}
+
+func (m *Device) GetImageDownloads() []*ImageDownload {
+	if m != nil {
+		return m.ImageDownloads
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Device) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Device_Ipv4Address)(nil),
+		(*Device_Ipv6Address)(nil),
+		(*Device_HostAndPort)(nil),
+	}
+}
+
+type Device_ProxyAddress struct {
+	DeviceId             string   `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	DeviceType           string   `protobuf:"bytes,2,opt,name=device_type,json=deviceType,proto3" json:"device_type,omitempty"`
+	ChannelId            uint32   `protobuf:"varint,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"`
+	ChannelGroupId       uint32   `protobuf:"varint,4,opt,name=channel_group_id,json=channelGroupId,proto3" json:"channel_group_id,omitempty"`
+	ChannelTermination   string   `protobuf:"bytes,5,opt,name=channel_termination,json=channelTermination,proto3" json:"channel_termination,omitempty"`
+	OnuId                uint32   `protobuf:"varint,6,opt,name=onu_id,json=onuId,proto3" json:"onu_id,omitempty"`
+	OnuSessionId         uint32   `protobuf:"varint,7,opt,name=onu_session_id,json=onuSessionId,proto3" json:"onu_session_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Device_ProxyAddress) Reset()         { *m = Device_ProxyAddress{} }
+func (m *Device_ProxyAddress) String() string { return proto.CompactTextString(m) }
+func (*Device_ProxyAddress) ProtoMessage()    {}
+func (*Device_ProxyAddress) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{11, 0}
+}
+
+func (m *Device_ProxyAddress) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Device_ProxyAddress.Unmarshal(m, b)
+}
+func (m *Device_ProxyAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Device_ProxyAddress.Marshal(b, m, deterministic)
+}
+func (m *Device_ProxyAddress) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Device_ProxyAddress.Merge(m, src)
+}
+func (m *Device_ProxyAddress) XXX_Size() int {
+	return xxx_messageInfo_Device_ProxyAddress.Size(m)
+}
+func (m *Device_ProxyAddress) XXX_DiscardUnknown() {
+	xxx_messageInfo_Device_ProxyAddress.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Device_ProxyAddress proto.InternalMessageInfo
+
+func (m *Device_ProxyAddress) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *Device_ProxyAddress) GetDeviceType() string {
+	if m != nil {
+		return m.DeviceType
+	}
+	return ""
+}
+
+func (m *Device_ProxyAddress) GetChannelId() uint32 {
+	if m != nil {
+		return m.ChannelId
+	}
+	return 0
+}
+
+func (m *Device_ProxyAddress) GetChannelGroupId() uint32 {
+	if m != nil {
+		return m.ChannelGroupId
+	}
+	return 0
+}
+
+func (m *Device_ProxyAddress) GetChannelTermination() string {
+	if m != nil {
+		return m.ChannelTermination
+	}
+	return ""
+}
+
+func (m *Device_ProxyAddress) GetOnuId() uint32 {
+	if m != nil {
+		return m.OnuId
+	}
+	return 0
+}
+
+func (m *Device_ProxyAddress) GetOnuSessionId() uint32 {
+	if m != nil {
+		return m.OnuSessionId
+	}
+	return 0
+}
+
+type Devices struct {
+	Items                []*Device `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *Devices) Reset()         { *m = Devices{} }
+func (m *Devices) String() string { return proto.CompactTextString(m) }
+func (*Devices) ProtoMessage()    {}
+func (*Devices) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{12}
+}
+
+func (m *Devices) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Devices.Unmarshal(m, b)
+}
+func (m *Devices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Devices.Marshal(b, m, deterministic)
+}
+func (m *Devices) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Devices.Merge(m, src)
+}
+func (m *Devices) XXX_Size() int {
+	return xxx_messageInfo_Devices.Size(m)
+}
+func (m *Devices) XXX_DiscardUnknown() {
+	xxx_messageInfo_Devices.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Devices proto.InternalMessageInfo
+
+func (m *Devices) GetItems() []*Device {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type SimulateAlarmRequest struct {
+	// Device Identifier
+	Id                   string                             `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Indicator            string                             `protobuf:"bytes,2,opt,name=indicator,proto3" json:"indicator,omitempty"`
+	IntfId               string                             `protobuf:"bytes,3,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
+	PortTypeName         string                             `protobuf:"bytes,4,opt,name=port_type_name,json=portTypeName,proto3" json:"port_type_name,omitempty"`
+	OnuDeviceId          string                             `protobuf:"bytes,5,opt,name=onu_device_id,json=onuDeviceId,proto3" json:"onu_device_id,omitempty"`
+	InverseBitErrorRate  int32                              `protobuf:"varint,6,opt,name=inverse_bit_error_rate,json=inverseBitErrorRate,proto3" json:"inverse_bit_error_rate,omitempty"`
+	Drift                int32                              `protobuf:"varint,7,opt,name=drift,proto3" json:"drift,omitempty"`
+	NewEqd               int32                              `protobuf:"varint,8,opt,name=new_eqd,json=newEqd,proto3" json:"new_eqd,omitempty"`
+	OnuSerialNumber      string                             `protobuf:"bytes,9,opt,name=onu_serial_number,json=onuSerialNumber,proto3" json:"onu_serial_number,omitempty"`
+	Operation            SimulateAlarmRequest_OperationType `protobuf:"varint,10,opt,name=operation,proto3,enum=voltha.SimulateAlarmRequest_OperationType" json:"operation,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                           `json:"-"`
+	XXX_unrecognized     []byte                             `json:"-"`
+	XXX_sizecache        int32                              `json:"-"`
+}
+
+func (m *SimulateAlarmRequest) Reset()         { *m = SimulateAlarmRequest{} }
+func (m *SimulateAlarmRequest) String() string { return proto.CompactTextString(m) }
+func (*SimulateAlarmRequest) ProtoMessage()    {}
+func (*SimulateAlarmRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_200940f73d155856, []int{13}
+}
+
+func (m *SimulateAlarmRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SimulateAlarmRequest.Unmarshal(m, b)
+}
+func (m *SimulateAlarmRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SimulateAlarmRequest.Marshal(b, m, deterministic)
+}
+func (m *SimulateAlarmRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SimulateAlarmRequest.Merge(m, src)
+}
+func (m *SimulateAlarmRequest) XXX_Size() int {
+	return xxx_messageInfo_SimulateAlarmRequest.Size(m)
+}
+func (m *SimulateAlarmRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SimulateAlarmRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SimulateAlarmRequest proto.InternalMessageInfo
+
+func (m *SimulateAlarmRequest) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *SimulateAlarmRequest) GetIndicator() string {
+	if m != nil {
+		return m.Indicator
+	}
+	return ""
+}
+
+func (m *SimulateAlarmRequest) GetIntfId() string {
+	if m != nil {
+		return m.IntfId
+	}
+	return ""
+}
+
+func (m *SimulateAlarmRequest) GetPortTypeName() string {
+	if m != nil {
+		return m.PortTypeName
+	}
+	return ""
+}
+
+func (m *SimulateAlarmRequest) GetOnuDeviceId() string {
+	if m != nil {
+		return m.OnuDeviceId
+	}
+	return ""
+}
+
+func (m *SimulateAlarmRequest) GetInverseBitErrorRate() int32 {
+	if m != nil {
+		return m.InverseBitErrorRate
+	}
+	return 0
+}
+
+func (m *SimulateAlarmRequest) GetDrift() int32 {
+	if m != nil {
+		return m.Drift
+	}
+	return 0
+}
+
+func (m *SimulateAlarmRequest) GetNewEqd() int32 {
+	if m != nil {
+		return m.NewEqd
+	}
+	return 0
+}
+
+func (m *SimulateAlarmRequest) GetOnuSerialNumber() string {
+	if m != nil {
+		return m.OnuSerialNumber
+	}
+	return ""
+}
+
+func (m *SimulateAlarmRequest) GetOperation() SimulateAlarmRequest_OperationType {
+	if m != nil {
+		return m.Operation
+	}
+	return SimulateAlarmRequest_RAISE
+}
+
+func init() {
+	proto.RegisterEnum("voltha.PmConfig_PmType", PmConfig_PmType_name, PmConfig_PmType_value)
+	proto.RegisterEnum("voltha.ImageDownload_ImageDownloadState", ImageDownload_ImageDownloadState_name, ImageDownload_ImageDownloadState_value)
+	proto.RegisterEnum("voltha.ImageDownload_ImageDownloadFailureReason", ImageDownload_ImageDownloadFailureReason_name, ImageDownload_ImageDownloadFailureReason_value)
+	proto.RegisterEnum("voltha.ImageDownload_ImageActivateState", ImageDownload_ImageActivateState_name, ImageDownload_ImageActivateState_value)
+	proto.RegisterEnum("voltha.Port_PortType", Port_PortType_name, Port_PortType_value)
+	proto.RegisterEnum("voltha.SimulateAlarmRequest_OperationType", SimulateAlarmRequest_OperationType_name, SimulateAlarmRequest_OperationType_value)
+	proto.RegisterType((*DeviceType)(nil), "voltha.DeviceType")
+	proto.RegisterType((*DeviceTypes)(nil), "voltha.DeviceTypes")
+	proto.RegisterType((*PmConfig)(nil), "voltha.PmConfig")
+	proto.RegisterType((*PmGroupConfig)(nil), "voltha.PmGroupConfig")
+	proto.RegisterType((*PmConfigs)(nil), "voltha.PmConfigs")
+	proto.RegisterType((*Image)(nil), "voltha.Image")
+	proto.RegisterType((*Images)(nil), "voltha.Images")
+	proto.RegisterType((*ImageDownload)(nil), "voltha.ImageDownload")
+	proto.RegisterType((*ImageDownloads)(nil), "voltha.ImageDownloads")
+	proto.RegisterType((*Port)(nil), "voltha.Port")
+	proto.RegisterType((*Port_PeerPort)(nil), "voltha.Port.PeerPort")
+	proto.RegisterType((*Ports)(nil), "voltha.Ports")
+	proto.RegisterType((*Device)(nil), "voltha.Device")
+	proto.RegisterType((*Device_ProxyAddress)(nil), "voltha.Device.ProxyAddress")
+	proto.RegisterType((*Devices)(nil), "voltha.Devices")
+	proto.RegisterType((*SimulateAlarmRequest)(nil), "voltha.SimulateAlarmRequest")
+}
+
+func init() { proto.RegisterFile("voltha_protos/device.proto", fileDescriptor_200940f73d155856) }
+
+var fileDescriptor_200940f73d155856 = []byte{
+	// 2378 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xcb, 0x6e, 0x1b, 0xc9,
+	0xd5, 0x36, 0x29, 0x75, 0x93, 0x7d, 0x78, 0x51, 0xbb, 0x2c, 0xdb, 0x6d, 0xe9, 0x17, 0xe4, 0x9f,
+	0x9e, 0x20, 0xb2, 0x1d, 0x4b, 0x8e, 0x1d, 0xcc, 0x0c, 0x02, 0x24, 0x30, 0x45, 0xb6, 0x6c, 0x22,
+	0x0a, 0xa9, 0x29, 0x92, 0x9a, 0x24, 0x9b, 0x46, 0x8b, 0x5d, 0x94, 0x1a, 0xee, 0x0b, 0x5d, 0xd5,
+	0xd4, 0x65, 0x56, 0x49, 0x06, 0xc9, 0x2a, 0xbb, 0x00, 0x79, 0x86, 0xbc, 0x41, 0x96, 0xc9, 0x0b,
+	0x18, 0x79, 0x81, 0xac, 0xb2, 0x08, 0x82, 0xac, 0xb2, 0xf2, 0x3a, 0xa8, 0x1b, 0xd9, 0x2d, 0x3b,
+	0x9e, 0xc9, 0xa6, 0x51, 0xf5, 0x9d, 0x4b, 0x55, 0x7d, 0x55, 0x75, 0xce, 0xa9, 0x86, 0x8d, 0xf3,
+	0x34, 0xca, 0xce, 0x7c, 0x6f, 0x46, 0xd3, 0x2c, 0x65, 0x7b, 0x01, 0x39, 0x0f, 0x27, 0x64, 0x57,
+	0xf4, 0x90, 0x29, 0x65, 0x1b, 0xf7, 0x4e, 0xd3, 0xf4, 0x34, 0x22, 0x7b, 0x02, 0x3d, 0x99, 0x4f,
+	0xf7, 0xfc, 0xe4, 0x4a, 0xaa, 0x6c, 0x5c, 0x33, 0x9f, 0xa4, 0x71, 0x9c, 0x26, 0x4a, 0xe6, 0x14,
+	0x65, 0x31, 0xc9, 0x7c, 0x25, 0xd9, 0x2e, 0x4a, 0xd2, 0x19, 0x49, 0xa6, 0x51, 0x7a, 0xe1, 0x7d,
+	0xff, 0xb9, 0x52, 0xb8, 0x5f, 0x54, 0xb8, 0xf2, 0x93, 0x53, 0x2f, 0x9d, 0x65, 0x61, 0x9a, 0x30,
+	0xa9, 0xd1, 0xfa, 0x73, 0x19, 0xa0, 0x2b, 0x26, 0x3b, 0xba, 0x9a, 0x11, 0xd4, 0x84, 0x72, 0x18,
+	0x38, 0xa5, 0xfb, 0xa5, 0x1d, 0x0b, 0x97, 0xc3, 0x00, 0x6d, 0x82, 0x75, 0x4e, 0x92, 0x20, 0xa5,
+	0x5e, 0x18, 0x38, 0x86, 0x80, 0xab, 0x12, 0xe8, 0x05, 0x68, 0x0b, 0x60, 0x21, 0x64, 0x8e, 0x79,
+	0x7f, 0x65, 0xc7, 0xc2, 0x96, 0x96, 0x32, 0xe4, 0x40, 0xc5, 0x0f, 0xfc, 0x59, 0x46, 0xa8, 0x53,
+	0x16, 0x96, 0xba, 0x8b, 0x3e, 0x03, 0xc7, 0x9f, 0x4c, 0xc8, 0x2c, 0x63, 0xde, 0xc9, 0x3c, 0x7a,
+	0xed, 0x89, 0x49, 0xcf, 0x67, 0x81, 0x9f, 0x11, 0x67, 0xe5, 0x7e, 0x69, 0xa7, 0x8a, 0x6f, 0x2b,
+	0xf9, 0xfe, 0x3c, 0x7a, 0x7d, 0x10, 0xa5, 0x17, 0x63, 0x21, 0x44, 0x5d, 0xd8, 0xd6, 0x86, 0x7e,
+	0x10, 0x78, 0x94, 0xc4, 0xe9, 0x39, 0xc9, 0x9b, 0x33, 0x67, 0x55, 0xd8, 0x6f, 0x2a, 0xb5, 0x76,
+	0x10, 0x60, 0xa1, 0xb4, 0x74, 0xc2, 0xd0, 0x21, 0x3c, 0xd0, 0x5e, 0x82, 0x90, 0x92, 0x49, 0xe6,
+	0x45, 0xe9, 0x69, 0x38, 0xf1, 0x23, 0xe1, 0x89, 0xe9, 0x99, 0x54, 0x84, 0x27, 0x3d, 0x60, 0x57,
+	0x68, 0x1e, 0x4a, 0x45, 0xee, 0x8d, 0x49, 0x77, 0xad, 0xcf, 0xa0, 0xb6, 0x24, 0x90, 0xa1, 0x1d,
+	0x30, 0xc2, 0x8c, 0xc4, 0xcc, 0x29, 0xdd, 0x5f, 0xd9, 0xa9, 0x3d, 0x43, 0xbb, 0x72, 0x0b, 0x76,
+	0x97, 0x3a, 0x58, 0x2a, 0xb4, 0xfe, 0x52, 0x82, 0xea, 0x51, 0xdc, 0x49, 0x93, 0x69, 0x78, 0x8a,
+	0x10, 0xac, 0x26, 0x7e, 0x4c, 0x14, 0xf5, 0xa2, 0x8d, 0x1e, 0xc3, 0x6a, 0x76, 0x35, 0x23, 0x82,
+	0xbd, 0xe6, 0xb3, 0xbb, 0xda, 0x93, 0xb6, 0xd9, 0x3d, 0x8a, 0x85, 0x3b, 0xa1, 0xc4, 0xd9, 0x26,
+	0x89, 0x7f, 0x12, 0x91, 0x40, 0x51, 0xa8, 0xbb, 0x68, 0x1b, 0x6a, 0xcc, 0x8f, 0x67, 0x11, 0xf1,
+	0xa6, 0x94, 0xbc, 0x11, 0x04, 0x35, 0x30, 0x48, 0xe8, 0x80, 0x92, 0x37, 0xad, 0xcf, 0xc1, 0x94,
+	0xae, 0x50, 0x0d, 0x2a, 0x9d, 0xc1, 0xb8, 0x3f, 0x72, 0xb1, 0x7d, 0x03, 0x59, 0x60, 0xbc, 0x6c,
+	0x8f, 0x5f, 0xba, 0x76, 0x89, 0x37, 0x87, 0xa3, 0xf6, 0xc8, 0xb5, 0xcb, 0x52, 0xa5, 0x3f, 0x72,
+	0x7f, 0x36, 0xb2, 0x57, 0x5a, 0xbf, 0x2f, 0x41, 0xe3, 0x28, 0x7e, 0x49, 0xd3, 0xf9, 0x4c, 0xad,
+	0x63, 0x0b, 0xe0, 0x94, 0x77, 0xbd, 0xdc, 0x6a, 0x2c, 0x81, 0xf4, 0xf9, 0x92, 0x16, 0x62, 0x31,
+	0x95, 0xb2, 0x98, 0x8a, 0x14, 0xf3, 0x99, 0x7c, 0x64, 0x11, 0x8f, 0xa0, 0x12, 0x93, 0x8c, 0x86,
+	0x13, 0xbe, 0xc3, 0x9c, 0x58, 0xfb, 0x3a, 0x1d, 0x58, 0x2b, 0xb4, 0xfe, 0x51, 0x02, 0x4b, 0xa3,
+	0xec, 0xbd, 0x23, 0xfd, 0xff, 0x50, 0x0f, 0xc8, 0xd4, 0x9f, 0x47, 0x59, 0x7e, 0x12, 0x35, 0x85,
+	0x89, 0x69, 0x6c, 0x43, 0x45, 0xcc, 0x49, 0x4f, 0x63, 0xdf, 0xf8, 0xe7, 0xbb, 0xb7, 0x5b, 0x25,
+	0xac, 0x51, 0xf4, 0x08, 0x1a, 0xdc, 0xd6, 0x4b, 0xcf, 0x09, 0xa5, 0x61, 0x40, 0xe4, 0xa9, 0xd3,
+	0x6a, 0x75, 0x2e, 0x1b, 0x28, 0x11, 0x7a, 0x02, 0xa6, 0x30, 0x63, 0x8e, 0x21, 0x26, 0x7e, 0x7b,
+	0x39, 0xf1, 0x1c, 0x71, 0x58, 0x29, 0xe5, 0x17, 0x6a, 0x7e, 0xd3, 0x42, 0xff, 0x5a, 0x02, 0xa3,
+	0x17, 0xfb, 0xa7, 0xe4, 0x83, 0xc7, 0xc7, 0x81, 0xca, 0x39, 0xa1, 0x2c, 0x4c, 0x13, 0x7d, 0xff,
+	0x54, 0x97, 0x6b, 0x9f, 0xf9, 0xec, 0x4c, 0x2c, 0xce, 0xc2, 0xa2, 0x8d, 0x1e, 0x82, 0x1d, 0x26,
+	0x2c, 0xf3, 0xa3, 0xc8, 0xe3, 0xc7, 0x3a, 0x0b, 0x63, 0xb9, 0x2a, 0x0b, 0xaf, 0x29, 0xbc, 0xab,
+	0x60, 0x1e, 0x14, 0x42, 0xe6, 0xf9, 0x93, 0x2c, 0x3c, 0x27, 0x22, 0x28, 0x54, 0x71, 0x35, 0x64,
+	0x6d, 0xd1, 0xe7, 0xf4, 0x86, 0xcc, 0xe3, 0x01, 0x2c, 0xcc, 0x32, 0x12, 0x38, 0xa6, 0x90, 0xd7,
+	0x42, 0xd6, 0xd1, 0x10, 0xba, 0x07, 0xd5, 0x90, 0x79, 0xe7, 0x7e, 0x14, 0x06, 0xea, 0x92, 0x55,
+	0x42, 0x76, 0xcc, 0xbb, 0xad, 0x27, 0x60, 0x8a, 0x05, 0x31, 0xf4, 0x00, 0x8c, 0x90, 0xb7, 0xd4,
+	0x3d, 0x6a, 0x68, 0x16, 0x84, 0x18, 0x4b, 0x59, 0xeb, 0x5f, 0x15, 0x68, 0x08, 0xa0, 0x9b, 0x5e,
+	0x24, 0x51, 0xea, 0x07, 0xef, 0xed, 0xb6, 0x26, 0xa6, 0x9c, 0x23, 0xc6, 0x86, 0x95, 0x39, 0x8d,
+	0xd4, 0xea, 0x79, 0x93, 0x23, 0x13, 0x3a, 0x51, 0x57, 0x83, 0x37, 0xd1, 0x00, 0x9a, 0x81, 0xf2,
+	0xe9, 0xb1, 0x8c, 0x87, 0x03, 0x43, 0xdc, 0xc2, 0x9d, 0xc2, 0x3c, 0xf4, 0xb0, 0xc5, 0xde, 0x90,
+	0xeb, 0xe3, 0x46, 0x90, 0xef, 0xa2, 0x07, 0xd0, 0x10, 0x73, 0xf6, 0xf4, 0x9e, 0x98, 0x62, 0xf8,
+	0xba, 0x00, 0x8f, 0xd5, 0xc6, 0x3c, 0x04, 0x5b, 0x5b, 0x91, 0xc0, 0x3b, 0xb9, 0xe2, 0x01, 0xad,
+	0x22, 0x26, 0xb5, 0xb6, 0xc4, 0xf7, 0x39, 0x8c, 0x5e, 0x81, 0x49, 0x89, 0xcf, 0xd2, 0xc4, 0xa9,
+	0x8a, 0x89, 0x3d, 0xfd, 0x16, 0x13, 0x3b, 0xf0, 0xc3, 0x68, 0x4e, 0x09, 0x16, 0x76, 0x58, 0xd9,
+	0xa3, 0xef, 0xc2, 0x9a, 0x1f, 0x04, 0x21, 0xcf, 0x0a, 0x7e, 0xe4, 0x85, 0xc9, 0x34, 0x75, 0x2c,
+	0x31, 0xb7, 0xe6, 0x12, 0xee, 0x25, 0xd3, 0x54, 0x06, 0x92, 0x73, 0xe2, 0x4d, 0xc4, 0x31, 0x74,
+	0x40, 0x6c, 0x1d, 0x70, 0x48, 0x5d, 0xfe, 0x4d, 0xb0, 0xa2, 0x94, 0xc7, 0xd1, 0x20, 0xa4, 0x4e,
+	0x4d, 0x66, 0x0b, 0x01, 0x74, 0x43, 0x8a, 0x7a, 0x50, 0x93, 0x04, 0x48, 0x3a, 0xeb, 0xdf, 0x48,
+	0xa7, 0x38, 0x50, 0x7e, 0x46, 0x24, 0x9d, 0x20, 0x8c, 0x25, 0x97, 0x9b, 0x60, 0x4d, 0xc3, 0x88,
+	0x78, 0x2c, 0xfc, 0x8a, 0x38, 0x0d, 0xc1, 0x4f, 0x95, 0x03, 0xc3, 0xf0, 0x2b, 0xd2, 0xfa, 0x53,
+	0x09, 0xd0, 0xfb, 0xdb, 0x81, 0xd6, 0xc1, 0xee, 0x0e, 0xbe, 0xec, 0x1f, 0x0e, 0xda, 0x5d, 0x6f,
+	0xdc, 0xff, 0x49, 0x7f, 0xf0, 0x65, 0xdf, 0xbe, 0x81, 0xee, 0x00, 0x5a, 0xa0, 0xc3, 0x71, 0xa7,
+	0xe3, 0xba, 0x5d, 0xb7, 0x6b, 0x97, 0x0a, 0x38, 0x76, 0xbf, 0x18, 0xbb, 0xc3, 0x91, 0xdb, 0xb5,
+	0xcb, 0x05, 0x2f, 0xc3, 0x51, 0x1b, 0x73, 0x74, 0x05, 0xdd, 0x82, 0xb5, 0x05, 0x7a, 0xd0, 0xee,
+	0x1d, 0xba, 0x5d, 0x7b, 0x15, 0x39, 0xb0, 0x9e, 0x1b, 0x70, 0x38, 0x3e, 0x3a, 0x1a, 0x08, 0x75,
+	0xa3, 0xe0, 0xbc, 0xd3, 0xee, 0x77, 0xdc, 0x43, 0x6e, 0x61, 0xb6, 0x7e, 0x5b, 0x82, 0x8d, 0xff,
+	0xbe, 0x5f, 0xa8, 0x0e, 0xd5, 0xfe, 0xc0, 0x73, 0x31, 0x1e, 0xf0, 0xe8, 0xbc, 0x06, 0xb5, 0x5e,
+	0xff, 0xb8, 0x7d, 0xd8, 0xeb, 0x7a, 0x63, 0x7c, 0x68, 0x97, 0x38, 0xd0, 0x75, 0x8f, 0x7b, 0x1d,
+	0xd7, 0xdb, 0x1f, 0x0f, 0x7f, 0x6e, 0x97, 0xf9, 0x30, 0xbd, 0xfe, 0x70, 0x7c, 0x70, 0xd0, 0xeb,
+	0xf4, 0xdc, 0xfe, 0xc8, 0x1b, 0x1e, 0xb5, 0x3b, 0xae, 0xbd, 0x82, 0x6e, 0x42, 0x43, 0x11, 0xa0,
+	0x9c, 0xad, 0xa2, 0x06, 0x58, 0xcb, 0x89, 0x18, 0xad, 0xdf, 0x69, 0x0a, 0x0b, 0x5b, 0xc0, 0x0d,
+	0x7b, 0x3f, 0x6d, 0xbf, 0x74, 0x73, 0xfc, 0x21, 0x68, 0x4a, 0xa8, 0xd7, 0x6f, 0x77, 0x46, 0xbd,
+	0x63, 0x9e, 0x2c, 0xd6, 0xc1, 0x96, 0x98, 0x40, 0xda, 0xa3, 0x5e, 0xff, 0xa5, 0x5d, 0x46, 0x36,
+	0xd4, 0x73, 0xa8, 0x2b, 0x59, 0x93, 0x08, 0x76, 0x8f, 0x5d, 0x2c, 0xd4, 0x56, 0x97, 0x0e, 0x25,
+	0xc8, 0xa7, 0xf3, 0x43, 0xe3, 0xdf, 0xef, 0xde, 0x6e, 0xdd, 0x68, 0xfd, 0x08, 0x9a, 0x05, 0x76,
+	0x18, 0x7a, 0xac, 0x73, 0x6d, 0xb9, 0x18, 0x59, 0x0b, 0x6a, 0x3a, 0xdd, 0xfe, 0xc1, 0x80, 0xd5,
+	0xa3, 0x94, 0x66, 0xe8, 0x2e, 0x54, 0x66, 0x29, 0xcd, 0xbc, 0x24, 0x15, 0x71, 0xa2, 0x81, 0x4d,
+	0xde, 0xed, 0xa7, 0x68, 0x1d, 0x8c, 0xc8, 0x3f, 0x21, 0x91, 0x0a, 0x16, 0xb2, 0x83, 0x1e, 0xaa,
+	0x2c, 0xbc, 0x22, 0x0e, 0xec, 0x32, 0x7a, 0xa7, 0x34, 0x13, 0x9f, 0x5c, 0x0e, 0xfe, 0x31, 0xd4,
+	0xfc, 0x20, 0x0e, 0x93, 0x42, 0xc4, 0xd8, 0xda, 0x55, 0xd5, 0x5c, 0x9b, 0x8b, 0x04, 0x93, 0xb9,
+	0x26, 0x06, 0x7f, 0xd1, 0xe6, 0xf6, 0xe9, 0x8c, 0x50, 0x61, 0x3e, 0x67, 0x22, 0x42, 0xe4, 0xec,
+	0x07, 0x33, 0x42, 0x87, 0x42, 0x92, 0x6b, 0x62, 0x48, 0x17, 0x6d, 0x7e, 0x2f, 0x64, 0xe1, 0xe9,
+	0xa9, 0xc8, 0x6a, 0xe1, 0xaa, 0x04, 0x7a, 0x01, 0x27, 0x6b, 0x46, 0x08, 0x65, 0x4e, 0xf5, 0x5a,
+	0x1a, 0x12, 0x0b, 0x21, 0x84, 0xf2, 0x06, 0x96, 0x3a, 0x3c, 0x4f, 0xd3, 0x4b, 0x6f, 0xe6, 0x4f,
+	0x5e, 0x93, 0x8c, 0x89, 0x70, 0x60, 0x62, 0x8b, 0x5e, 0x1e, 0x49, 0x80, 0x47, 0x70, 0x7a, 0xa9,
+	0xe2, 0x13, 0x08, 0x61, 0x85, 0x5e, 0xca, 0xb8, 0xb4, 0x09, 0x16, 0xbd, 0xf4, 0x08, 0xa5, 0x29,
+	0x65, 0x22, 0x06, 0x98, 0xb8, 0x4a, 0x2f, 0x5d, 0xd1, 0xe7, 0x6e, 0xb3, 0xa5, 0xdb, 0xba, 0x74,
+	0x9b, 0xe5, 0xdd, 0x66, 0xda, 0x6d, 0x43, 0xba, 0xcd, 0x96, 0x6e, 0xb3, 0x85, 0xdb, 0xa6, 0x74,
+	0x9b, 0x29, 0xb7, 0x1b, 0x2f, 0xa0, 0xaa, 0x17, 0x50, 0xe4, 0xa0, 0x74, 0x8d, 0x83, 0xdc, 0xd6,
+	0x97, 0xf3, 0x5b, 0xdf, 0x62, 0x50, 0xd5, 0x7b, 0xc9, 0x2b, 0x9c, 0xe5, 0x01, 0xb7, 0xa1, 0xee,
+	0x8e, 0x5e, 0xb9, 0xb8, 0xef, 0x8e, 0xbc, 0x7e, 0xbf, 0x67, 0x97, 0x0a, 0xc8, 0xb8, 0xdf, 0x93,
+	0x25, 0xd1, 0xd1, 0xa0, 0xef, 0x0d, 0x0e, 0x47, 0xf6, 0xca, 0xa2, 0xd3, 0x1f, 0xcb, 0x7b, 0x75,
+	0xec, 0x72, 0x45, 0x2e, 0x33, 0x72, 0xdd, 0xfe, 0xd8, 0x36, 0xf5, 0xb9, 0x7e, 0x0c, 0x06, 0x1f,
+	0x9b, 0xa1, 0x56, 0xb1, 0x74, 0xac, 0xe7, 0x77, 0x48, 0x9f, 0xe2, 0xbf, 0xd5, 0xc1, 0x94, 0xa5,
+	0x24, 0xba, 0xbd, 0x4c, 0x75, 0xba, 0xf2, 0xe0, 0x19, 0xef, 0x5e, 0xae, 0x6a, 0x5c, 0x08, 0xe4,
+	0xf9, 0xbc, 0x07, 0xab, 0x34, 0x4d, 0xb3, 0x62, 0x51, 0x23, 0x20, 0xd4, 0x02, 0x6b, 0xe6, 0x53,
+	0x92, 0x64, 0x9c, 0xb6, 0xd5, 0xbc, 0x69, 0x55, 0xe2, 0xe2, 0x04, 0x35, 0x95, 0x8e, 0x26, 0x71,
+	0x9d, 0x93, 0xb8, 0x28, 0x7b, 0xa4, 0xf0, 0x48, 0x5e, 0xa6, 0x2d, 0x30, 0xe5, 0x53, 0x40, 0x3e,
+	0x1b, 0xb4, 0x92, 0x02, 0xd1, 0x26, 0x18, 0x71, 0x1a, 0x90, 0x48, 0xa6, 0x41, 0x2d, 0x95, 0x18,
+	0x7a, 0x0a, 0xf6, 0x99, 0x4f, 0x83, 0x0b, 0x9f, 0x2e, 0xd3, 0x65, 0x25, 0xaf, 0xb7, 0xa6, 0xc5,
+	0x3a, 0x71, 0x3e, 0x05, 0x7b, 0x1a, 0xd2, 0xb8, 0x60, 0x51, 0x2d, 0x58, 0x68, 0xb1, 0xb6, 0x78,
+	0x02, 0xa6, 0xc8, 0x28, 0xf2, 0x74, 0xd7, 0x9e, 0x35, 0x0b, 0xc1, 0x83, 0x2d, 0xe6, 0x2b, 0x95,
+	0x78, 0xc5, 0xc7, 0x08, 0x0d, 0xfd, 0xc8, 0x4b, 0xe6, 0xf1, 0x09, 0xa1, 0xe2, 0xd8, 0x2f, 0xbc,
+	0xd7, 0xa5, 0xac, 0x2f, 0x44, 0x9c, 0xcb, 0xe5, 0xa3, 0xc9, 0x29, 0x70, 0xb9, 0x78, 0x3b, 0x6d,
+	0x2f, 0x1f, 0x47, 0xb5, 0xbc, 0xc6, 0xe2, 0x8d, 0x84, 0x60, 0xf5, 0x3c, 0xf2, 0x13, 0x71, 0x49,
+	0x1a, 0x58, 0xb4, 0x79, 0x02, 0x8e, 0xfd, 0x09, 0x7f, 0xfa, 0x50, 0xc2, 0xe4, 0x15, 0xb1, 0x30,
+	0xc4, 0xfe, 0xa4, 0x2d, 0x11, 0xf4, 0x00, 0xea, 0xe1, 0xec, 0xfc, 0x07, 0x0b, 0x0d, 0x7e, 0x51,
+	0xac, 0x57, 0x37, 0x70, 0x8d, 0xa3, 0x45, 0xa5, 0x4f, 0x17, 0x4a, 0x6b, 0x39, 0xa5, 0x4f, 0xb5,
+	0xd2, 0x27, 0xd0, 0x38, 0x4b, 0x59, 0xe6, 0xf9, 0x49, 0x20, 0x76, 0xdb, 0xb9, 0xad, 0xb5, 0x38,
+	0xdc, 0x4e, 0x02, 0x71, 0xd9, 0xb6, 0x00, 0xc8, 0x65, 0x46, 0x7d, 0xcf, 0xa7, 0xa7, 0xcc, 0xb9,
+	0x2b, 0xab, 0x7d, 0x81, 0xb4, 0xe9, 0x29, 0x43, 0x2f, 0xa0, 0x31, 0xa3, 0xe9, 0xe5, 0xd5, 0x62,
+	0xa8, 0x5b, 0x82, 0xea, 0xcd, 0xe2, 0x9b, 0x68, 0xf7, 0x88, 0xeb, 0xa8, 0x81, 0x71, 0x7d, 0x96,
+	0xeb, 0x5d, 0x8f, 0xa8, 0xf6, 0xff, 0x1a, 0x51, 0xdd, 0x62, 0x44, 0xbd, 0xf9, 0x2d, 0x22, 0xaa,
+	0xde, 0x89, 0x7c, 0x60, 0xdd, 0x5a, 0x14, 0x5b, 0x77, 0x0a, 0x87, 0x59, 0x55, 0x50, 0x5f, 0x40,
+	0x73, 0x92, 0x26, 0x09, 0x7f, 0x49, 0xaa, 0x81, 0x90, 0x18, 0xe8, 0x81, 0x1e, 0xa8, 0x23, 0xa5,
+	0x6a, 0xac, 0x42, 0x4f, 0xfb, 0x6a, 0x4c, 0xf2, 0x28, 0xfa, 0x1e, 0x98, 0x93, 0x39, 0xcb, 0xd2,
+	0xd8, 0x79, 0x21, 0x38, 0x5b, 0xdf, 0x95, 0x3f, 0x0f, 0x76, 0xf5, 0xcf, 0x83, 0xdd, 0x76, 0x72,
+	0x85, 0x95, 0x0e, 0x7a, 0x0e, 0x06, 0xdf, 0x24, 0xe6, 0xfc, 0xf2, 0x03, 0xa1, 0x63, 0xbf, 0xf9,
+	0xf7, 0x77, 0x6f, 0xb7, 0xac, 0x45, 0xe8, 0xc3, 0x52, 0x17, 0x3d, 0x05, 0x43, 0xbc, 0x77, 0x9d,
+	0x5f, 0x95, 0xc4, 0x10, 0x68, 0x37, 0xff, 0x03, 0x41, 0x3c, 0x71, 0xf7, 0x0d, 0x6e, 0x7a, 0x03,
+	0x4b, 0x45, 0xf4, 0x02, 0x6a, 0x42, 0xac, 0xde, 0x33, 0xbf, 0x96, 0x76, 0x77, 0xdf, 0xb3, 0x13,
+	0xef, 0x9a, 0x85, 0x31, 0x4c, 0x17, 0x10, 0xfa, 0x1c, 0x60, 0x16, 0xab, 0x02, 0x92, 0x39, 0x5f,
+	0x4b, 0x07, 0x37, 0xaf, 0xbf, 0x70, 0x16, 0xa6, 0xd6, 0x6c, 0xf1, 0x8c, 0x3b, 0x84, 0x35, 0x59,
+	0x3e, 0xea, 0x42, 0x98, 0x39, 0xbf, 0x29, 0x7d, 0x24, 0xed, 0xef, 0xd7, 0xb8, 0x0b, 0x53, 0x96,
+	0xff, 0xb8, 0x19, 0x16, 0x2a, 0x87, 0x8d, 0xaf, 0xcb, 0x50, 0xcf, 0x1f, 0xbb, 0x8f, 0xa7, 0x8d,
+	0x6d, 0xa8, 0x29, 0xe1, 0x32, 0xb2, 0x62, 0x08, 0x96, 0xbf, 0x4d, 0xb6, 0x00, 0x26, 0x67, 0x7e,
+	0x92, 0x90, 0x88, 0x9b, 0xaf, 0xc8, 0x67, 0xad, 0x42, 0x7a, 0x01, 0xda, 0x01, 0x5b, 0x8b, 0xe5,
+	0xeb, 0x57, 0xc5, 0xd8, 0x06, 0x6e, 0x2a, 0x5c, 0xd0, 0xd3, 0x0b, 0xd0, 0x1e, 0xdc, 0xd2, 0x9a,
+	0x19, 0xa1, 0x71, 0x98, 0xf8, 0xbc, 0xfe, 0x56, 0x7f, 0x5e, 0x90, 0x12, 0x8d, 0x96, 0x12, 0x74,
+	0x1b, 0xcc, 0x34, 0x99, 0x73, 0x87, 0xa6, 0x70, 0x68, 0xa4, 0xc9, 0xbc, 0x17, 0xa0, 0x4f, 0xa0,
+	0xc9, 0x61, 0x46, 0x18, 0x0f, 0x76, 0xba, 0x1c, 0x68, 0xe0, 0x7a, 0x9a, 0xcc, 0x87, 0x12, 0xec,
+	0x05, 0x2a, 0x01, 0xed, 0x5b, 0x3c, 0x16, 0x09, 0x1a, 0x5a, 0x7b, 0x50, 0x91, 0x97, 0x92, 0x47,
+	0x80, 0x42, 0x36, 0x6a, 0x16, 0x2f, 0xad, 0xce, 0x47, 0x7f, 0x5c, 0x81, 0xf5, 0x61, 0x18, 0xcf,
+	0x23, 0x3f, 0x23, 0xed, 0xc8, 0xa7, 0x31, 0x26, 0x6f, 0xe6, 0x84, 0x65, 0xef, 0x3d, 0xc4, 0xfe,
+	0x0f, 0xac, 0x30, 0x09, 0xc2, 0x89, 0x9f, 0xa5, 0xfa, 0x7f, 0xd0, 0x12, 0xe0, 0x89, 0x39, 0x4c,
+	0xb2, 0xa9, 0x66, 0xcf, 0xc2, 0x26, 0xef, 0xca, 0x85, 0x88, 0x63, 0xcb, 0x89, 0x97, 0xff, 0x14,
+	0xe4, 0xa3, 0xb4, 0x3e, 0x53, 0xe9, 0x5a, 0xfc, 0x56, 0x68, 0x41, 0x83, 0x2f, 0x77, 0xb9, 0x83,
+	0x92, 0xb0, 0x5a, 0x9a, 0xcc, 0xbb, 0x7a, 0x13, 0x9f, 0xc3, 0x9d, 0x30, 0xe1, 0xb9, 0x81, 0x78,
+	0x27, 0x61, 0x26, 0x4b, 0x09, 0x8f, 0xf2, 0xa8, 0xc2, 0x99, 0x33, 0xf0, 0x2d, 0x25, 0xdd, 0x0f,
+	0x33, 0x51, 0x56, 0x60, 0xf9, 0x6a, 0x30, 0x02, 0x1a, 0x4e, 0x33, 0x41, 0x9f, 0x81, 0x65, 0x87,
+	0xcf, 0x36, 0x21, 0x17, 0x1e, 0x79, 0x13, 0x88, 0x24, 0x63, 0x60, 0x33, 0x21, 0x17, 0xee, 0x9b,
+	0x00, 0x3d, 0x82, 0x9b, 0x92, 0xf6, 0x7c, 0xa6, 0x90, 0x8f, 0xa9, 0x35, 0xc1, 0x7c, 0x2e, 0x4b,
+	0xbc, 0x02, 0x8b, 0x47, 0x18, 0xb9, 0xc1, 0x20, 0xe2, 0xc5, 0x23, 0xcd, 0xf1, 0x87, 0x18, 0x15,
+	0x21, 0x4a, 0x68, 0x8b, 0x8a, 0x73, 0x69, 0xdc, 0xfa, 0x0e, 0x34, 0x0a, 0x32, 0x64, 0x81, 0x81,
+	0xdb, 0xbd, 0xa1, 0x2b, 0x7f, 0xe2, 0x74, 0x0e, 0xdd, 0x36, 0xb6, 0x4b, 0xfb, 0x4f, 0x7e, 0xf1,
+	0xf8, 0x34, 0xcc, 0xce, 0xe6, 0x27, 0x3c, 0x2a, 0x89, 0x9f, 0x85, 0x93, 0x94, 0x06, 0x7b, 0x72,
+	0xc8, 0x27, 0xea, 0x17, 0xe1, 0x69, 0xaa, 0x80, 0x13, 0x53, 0x20, 0xcf, 0xff, 0x13, 0x00, 0x00,
+	0xff, 0xff, 0x55, 0xf2, 0x46, 0x65, 0xda, 0x14, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/voltha/events.pb.go b/vendor/github.com/opencord/voltha-protos/go/voltha/events.pb.go
new file mode 100644
index 0000000..0a43011
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/voltha/events.pb.go
@@ -0,0 +1,1539 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/events.proto
+
+package voltha
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	_ "github.com/opencord/voltha-protos/go/common"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type ConfigEventType_ConfigEventType int32
+
+const (
+	ConfigEventType_add    ConfigEventType_ConfigEventType = 0
+	ConfigEventType_remove ConfigEventType_ConfigEventType = 1
+	ConfigEventType_update ConfigEventType_ConfigEventType = 2
+)
+
+var ConfigEventType_ConfigEventType_name = map[int32]string{
+	0: "add",
+	1: "remove",
+	2: "update",
+}
+
+var ConfigEventType_ConfigEventType_value = map[string]int32{
+	"add":    0,
+	"remove": 1,
+	"update": 2,
+}
+
+func (x ConfigEventType_ConfigEventType) String() string {
+	return proto.EnumName(ConfigEventType_ConfigEventType_name, int32(x))
+}
+
+func (ConfigEventType_ConfigEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{0, 0}
+}
+
+type KpiEventType_KpiEventType int32
+
+const (
+	KpiEventType_slice KpiEventType_KpiEventType = 0
+	KpiEventType_ts    KpiEventType_KpiEventType = 1
+)
+
+var KpiEventType_KpiEventType_name = map[int32]string{
+	0: "slice",
+	1: "ts",
+}
+
+var KpiEventType_KpiEventType_value = map[string]int32{
+	"slice": 0,
+	"ts":    1,
+}
+
+func (x KpiEventType_KpiEventType) String() string {
+	return proto.EnumName(KpiEventType_KpiEventType_name, int32(x))
+}
+
+func (KpiEventType_KpiEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{2, 0}
+}
+
+type AlarmEventType_AlarmEventType int32
+
+const (
+	AlarmEventType_COMMUNICATION AlarmEventType_AlarmEventType = 0
+	AlarmEventType_ENVIRONMENT   AlarmEventType_AlarmEventType = 1
+	AlarmEventType_EQUIPMENT     AlarmEventType_AlarmEventType = 2
+	AlarmEventType_SERVICE       AlarmEventType_AlarmEventType = 3
+	AlarmEventType_PROCESSING    AlarmEventType_AlarmEventType = 4
+	AlarmEventType_SECURITY      AlarmEventType_AlarmEventType = 5
+)
+
+var AlarmEventType_AlarmEventType_name = map[int32]string{
+	0: "COMMUNICATION",
+	1: "ENVIRONMENT",
+	2: "EQUIPMENT",
+	3: "SERVICE",
+	4: "PROCESSING",
+	5: "SECURITY",
+}
+
+var AlarmEventType_AlarmEventType_value = map[string]int32{
+	"COMMUNICATION": 0,
+	"ENVIRONMENT":   1,
+	"EQUIPMENT":     2,
+	"SERVICE":       3,
+	"PROCESSING":    4,
+	"SECURITY":      5,
+}
+
+func (x AlarmEventType_AlarmEventType) String() string {
+	return proto.EnumName(AlarmEventType_AlarmEventType_name, int32(x))
+}
+
+func (AlarmEventType_AlarmEventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{8, 0}
+}
+
+type AlarmEventCategory_AlarmEventCategory int32
+
+const (
+	AlarmEventCategory_PON AlarmEventCategory_AlarmEventCategory = 0
+	AlarmEventCategory_OLT AlarmEventCategory_AlarmEventCategory = 1
+	AlarmEventCategory_ONT AlarmEventCategory_AlarmEventCategory = 2
+	AlarmEventCategory_ONU AlarmEventCategory_AlarmEventCategory = 3
+	AlarmEventCategory_NNI AlarmEventCategory_AlarmEventCategory = 4
+)
+
+var AlarmEventCategory_AlarmEventCategory_name = map[int32]string{
+	0: "PON",
+	1: "OLT",
+	2: "ONT",
+	3: "ONU",
+	4: "NNI",
+}
+
+var AlarmEventCategory_AlarmEventCategory_value = map[string]int32{
+	"PON": 0,
+	"OLT": 1,
+	"ONT": 2,
+	"ONU": 3,
+	"NNI": 4,
+}
+
+func (x AlarmEventCategory_AlarmEventCategory) String() string {
+	return proto.EnumName(AlarmEventCategory_AlarmEventCategory_name, int32(x))
+}
+
+func (AlarmEventCategory_AlarmEventCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{9, 0}
+}
+
+type AlarmEventState_AlarmEventState int32
+
+const (
+	AlarmEventState_RAISED  AlarmEventState_AlarmEventState = 0
+	AlarmEventState_CLEARED AlarmEventState_AlarmEventState = 1
+)
+
+var AlarmEventState_AlarmEventState_name = map[int32]string{
+	0: "RAISED",
+	1: "CLEARED",
+}
+
+var AlarmEventState_AlarmEventState_value = map[string]int32{
+	"RAISED":  0,
+	"CLEARED": 1,
+}
+
+func (x AlarmEventState_AlarmEventState) String() string {
+	return proto.EnumName(AlarmEventState_AlarmEventState_name, int32(x))
+}
+
+func (AlarmEventState_AlarmEventState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{10, 0}
+}
+
+type AlarmEventSeverity_AlarmEventSeverity int32
+
+const (
+	AlarmEventSeverity_INDETERMINATE AlarmEventSeverity_AlarmEventSeverity = 0
+	AlarmEventSeverity_WARNING       AlarmEventSeverity_AlarmEventSeverity = 1
+	AlarmEventSeverity_MINOR         AlarmEventSeverity_AlarmEventSeverity = 2
+	AlarmEventSeverity_MAJOR         AlarmEventSeverity_AlarmEventSeverity = 3
+	AlarmEventSeverity_CRITICAL      AlarmEventSeverity_AlarmEventSeverity = 4
+)
+
+var AlarmEventSeverity_AlarmEventSeverity_name = map[int32]string{
+	0: "INDETERMINATE",
+	1: "WARNING",
+	2: "MINOR",
+	3: "MAJOR",
+	4: "CRITICAL",
+}
+
+var AlarmEventSeverity_AlarmEventSeverity_value = map[string]int32{
+	"INDETERMINATE": 0,
+	"WARNING":       1,
+	"MINOR":         2,
+	"MAJOR":         3,
+	"CRITICAL":      4,
+}
+
+func (x AlarmEventSeverity_AlarmEventSeverity) String() string {
+	return proto.EnumName(AlarmEventSeverity_AlarmEventSeverity_name, int32(x))
+}
+
+func (AlarmEventSeverity_AlarmEventSeverity) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{11, 0}
+}
+
+type EventCategory_EventCategory int32
+
+const (
+	EventCategory_COMMUNICATION EventCategory_EventCategory = 0
+	EventCategory_ENVIRONMENT   EventCategory_EventCategory = 1
+	EventCategory_EQUIPMENT     EventCategory_EventCategory = 2
+	EventCategory_SERVICE       EventCategory_EventCategory = 3
+	EventCategory_PROCESSING    EventCategory_EventCategory = 4
+	EventCategory_SECURITY      EventCategory_EventCategory = 5
+)
+
+var EventCategory_EventCategory_name = map[int32]string{
+	0: "COMMUNICATION",
+	1: "ENVIRONMENT",
+	2: "EQUIPMENT",
+	3: "SERVICE",
+	4: "PROCESSING",
+	5: "SECURITY",
+}
+
+var EventCategory_EventCategory_value = map[string]int32{
+	"COMMUNICATION": 0,
+	"ENVIRONMENT":   1,
+	"EQUIPMENT":     2,
+	"SERVICE":       3,
+	"PROCESSING":    4,
+	"SECURITY":      5,
+}
+
+func (x EventCategory_EventCategory) String() string {
+	return proto.EnumName(EventCategory_EventCategory_name, int32(x))
+}
+
+func (EventCategory_EventCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{14, 0}
+}
+
+type EventSubCategory_EventSubCategory int32
+
+const (
+	EventSubCategory_PON EventSubCategory_EventSubCategory = 0
+	EventSubCategory_OLT EventSubCategory_EventSubCategory = 1
+	EventSubCategory_ONT EventSubCategory_EventSubCategory = 2
+	EventSubCategory_ONU EventSubCategory_EventSubCategory = 3
+	EventSubCategory_NNI EventSubCategory_EventSubCategory = 4
+)
+
+var EventSubCategory_EventSubCategory_name = map[int32]string{
+	0: "PON",
+	1: "OLT",
+	2: "ONT",
+	3: "ONU",
+	4: "NNI",
+}
+
+var EventSubCategory_EventSubCategory_value = map[string]int32{
+	"PON": 0,
+	"OLT": 1,
+	"ONT": 2,
+	"ONU": 3,
+	"NNI": 4,
+}
+
+func (x EventSubCategory_EventSubCategory) String() string {
+	return proto.EnumName(EventSubCategory_EventSubCategory_name, int32(x))
+}
+
+func (EventSubCategory_EventSubCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{15, 0}
+}
+
+type EventType_EventType int32
+
+const (
+	EventType_CONFIG_EVENT EventType_EventType = 0
+	EventType_KPI_EVENT    EventType_EventType = 1
+	EventType_KPI_EVENT2   EventType_EventType = 2
+	EventType_DEVICE_EVENT EventType_EventType = 3
+)
+
+var EventType_EventType_name = map[int32]string{
+	0: "CONFIG_EVENT",
+	1: "KPI_EVENT",
+	2: "KPI_EVENT2",
+	3: "DEVICE_EVENT",
+}
+
+var EventType_EventType_value = map[string]int32{
+	"CONFIG_EVENT": 0,
+	"KPI_EVENT":    1,
+	"KPI_EVENT2":   2,
+	"DEVICE_EVENT": 3,
+}
+
+func (x EventType_EventType) String() string {
+	return proto.EnumName(EventType_EventType_name, int32(x))
+}
+
+func (EventType_EventType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{16, 0}
+}
+
+type ConfigEventType struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConfigEventType) Reset()         { *m = ConfigEventType{} }
+func (m *ConfigEventType) String() string { return proto.CompactTextString(m) }
+func (*ConfigEventType) ProtoMessage()    {}
+func (*ConfigEventType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{0}
+}
+
+func (m *ConfigEventType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConfigEventType.Unmarshal(m, b)
+}
+func (m *ConfigEventType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConfigEventType.Marshal(b, m, deterministic)
+}
+func (m *ConfigEventType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConfigEventType.Merge(m, src)
+}
+func (m *ConfigEventType) XXX_Size() int {
+	return xxx_messageInfo_ConfigEventType.Size(m)
+}
+func (m *ConfigEventType) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConfigEventType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConfigEventType proto.InternalMessageInfo
+
+type ConfigEvent struct {
+	Type                 ConfigEventType_ConfigEventType `protobuf:"varint,1,opt,name=type,proto3,enum=voltha.ConfigEventType_ConfigEventType" json:"type,omitempty"`
+	Hash                 string                          `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
+	Data                 string                          `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *ConfigEvent) Reset()         { *m = ConfigEvent{} }
+func (m *ConfigEvent) String() string { return proto.CompactTextString(m) }
+func (*ConfigEvent) ProtoMessage()    {}
+func (*ConfigEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{1}
+}
+
+func (m *ConfigEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConfigEvent.Unmarshal(m, b)
+}
+func (m *ConfigEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConfigEvent.Marshal(b, m, deterministic)
+}
+func (m *ConfigEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConfigEvent.Merge(m, src)
+}
+func (m *ConfigEvent) XXX_Size() int {
+	return xxx_messageInfo_ConfigEvent.Size(m)
+}
+func (m *ConfigEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConfigEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConfigEvent proto.InternalMessageInfo
+
+func (m *ConfigEvent) GetType() ConfigEventType_ConfigEventType {
+	if m != nil {
+		return m.Type
+	}
+	return ConfigEventType_add
+}
+
+func (m *ConfigEvent) GetHash() string {
+	if m != nil {
+		return m.Hash
+	}
+	return ""
+}
+
+func (m *ConfigEvent) GetData() string {
+	if m != nil {
+		return m.Data
+	}
+	return ""
+}
+
+type KpiEventType struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *KpiEventType) Reset()         { *m = KpiEventType{} }
+func (m *KpiEventType) String() string { return proto.CompactTextString(m) }
+func (*KpiEventType) ProtoMessage()    {}
+func (*KpiEventType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{2}
+}
+
+func (m *KpiEventType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KpiEventType.Unmarshal(m, b)
+}
+func (m *KpiEventType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KpiEventType.Marshal(b, m, deterministic)
+}
+func (m *KpiEventType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KpiEventType.Merge(m, src)
+}
+func (m *KpiEventType) XXX_Size() int {
+	return xxx_messageInfo_KpiEventType.Size(m)
+}
+func (m *KpiEventType) XXX_DiscardUnknown() {
+	xxx_messageInfo_KpiEventType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KpiEventType proto.InternalMessageInfo
+
+//
+// Struct to convey a dictionary of metric metadata.
+type MetricMetaData struct {
+	Title           string  `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+	Ts              float64 `protobuf:"fixed64,2,opt,name=ts,proto3" json:"ts,omitempty"`
+	LogicalDeviceId string  `protobuf:"bytes,3,opt,name=logical_device_id,json=logicalDeviceId,proto3" json:"logical_device_id,omitempty"`
+	// (equivalent to the DPID that ONOS has
+	// for the VOLTHA device without the
+	//  'of:' prefix
+	SerialNo             string            `protobuf:"bytes,4,opt,name=serial_no,json=serialNo,proto3" json:"serial_no,omitempty"`
+	DeviceId             string            `protobuf:"bytes,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	Context              map[string]string `protobuf:"bytes,6,rep,name=context,proto3" json:"context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *MetricMetaData) Reset()         { *m = MetricMetaData{} }
+func (m *MetricMetaData) String() string { return proto.CompactTextString(m) }
+func (*MetricMetaData) ProtoMessage()    {}
+func (*MetricMetaData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{3}
+}
+
+func (m *MetricMetaData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MetricMetaData.Unmarshal(m, b)
+}
+func (m *MetricMetaData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MetricMetaData.Marshal(b, m, deterministic)
+}
+func (m *MetricMetaData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MetricMetaData.Merge(m, src)
+}
+func (m *MetricMetaData) XXX_Size() int {
+	return xxx_messageInfo_MetricMetaData.Size(m)
+}
+func (m *MetricMetaData) XXX_DiscardUnknown() {
+	xxx_messageInfo_MetricMetaData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MetricMetaData proto.InternalMessageInfo
+
+func (m *MetricMetaData) GetTitle() string {
+	if m != nil {
+		return m.Title
+	}
+	return ""
+}
+
+func (m *MetricMetaData) GetTs() float64 {
+	if m != nil {
+		return m.Ts
+	}
+	return 0
+}
+
+func (m *MetricMetaData) GetLogicalDeviceId() string {
+	if m != nil {
+		return m.LogicalDeviceId
+	}
+	return ""
+}
+
+func (m *MetricMetaData) GetSerialNo() string {
+	if m != nil {
+		return m.SerialNo
+	}
+	return ""
+}
+
+func (m *MetricMetaData) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *MetricMetaData) GetContext() map[string]string {
+	if m != nil {
+		return m.Context
+	}
+	return nil
+}
+
+//
+// Struct to convey a dictionary of metric->value pairs. Typically used in
+// pure shared-timestamp or shared-timestamp + shared object prefix situations.
+type MetricValuePairs struct {
+	// Metric / value pairs.
+	Metrics              map[string]float32 `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *MetricValuePairs) Reset()         { *m = MetricValuePairs{} }
+func (m *MetricValuePairs) String() string { return proto.CompactTextString(m) }
+func (*MetricValuePairs) ProtoMessage()    {}
+func (*MetricValuePairs) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{4}
+}
+
+func (m *MetricValuePairs) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MetricValuePairs.Unmarshal(m, b)
+}
+func (m *MetricValuePairs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MetricValuePairs.Marshal(b, m, deterministic)
+}
+func (m *MetricValuePairs) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MetricValuePairs.Merge(m, src)
+}
+func (m *MetricValuePairs) XXX_Size() int {
+	return xxx_messageInfo_MetricValuePairs.Size(m)
+}
+func (m *MetricValuePairs) XXX_DiscardUnknown() {
+	xxx_messageInfo_MetricValuePairs.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MetricValuePairs proto.InternalMessageInfo
+
+func (m *MetricValuePairs) GetMetrics() map[string]float32 {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+//
+// Struct to group metadata for a metric (or group of metrics) with the key-value
+// pairs of collected metrics
+type MetricInformation struct {
+	Metadata             *MetricMetaData    `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+	Metrics              map[string]float32 `protobuf:"bytes,2,rep,name=metrics,proto3" json:"metrics,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *MetricInformation) Reset()         { *m = MetricInformation{} }
+func (m *MetricInformation) String() string { return proto.CompactTextString(m) }
+func (*MetricInformation) ProtoMessage()    {}
+func (*MetricInformation) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{5}
+}
+
+func (m *MetricInformation) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MetricInformation.Unmarshal(m, b)
+}
+func (m *MetricInformation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MetricInformation.Marshal(b, m, deterministic)
+}
+func (m *MetricInformation) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MetricInformation.Merge(m, src)
+}
+func (m *MetricInformation) XXX_Size() int {
+	return xxx_messageInfo_MetricInformation.Size(m)
+}
+func (m *MetricInformation) XXX_DiscardUnknown() {
+	xxx_messageInfo_MetricInformation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MetricInformation proto.InternalMessageInfo
+
+func (m *MetricInformation) GetMetadata() *MetricMetaData {
+	if m != nil {
+		return m.Metadata
+	}
+	return nil
+}
+
+func (m *MetricInformation) GetMetrics() map[string]float32 {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+//
+// Legacy KPI Event structured.  In mid-August, the KPI event format was updated
+//                               to a more easily parsable format. See VOL-1140
+//                               for more information.
+type KpiEvent struct {
+	Type                 KpiEventType_KpiEventType    `protobuf:"varint,1,opt,name=type,proto3,enum=voltha.KpiEventType_KpiEventType" json:"type,omitempty"`
+	Ts                   float32                      `protobuf:"fixed32,2,opt,name=ts,proto3" json:"ts,omitempty"`
+	Prefixes             map[string]*MetricValuePairs `protobuf:"bytes,3,rep,name=prefixes,proto3" json:"prefixes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
+	XXX_unrecognized     []byte                       `json:"-"`
+	XXX_sizecache        int32                        `json:"-"`
+}
+
+func (m *KpiEvent) Reset()         { *m = KpiEvent{} }
+func (m *KpiEvent) String() string { return proto.CompactTextString(m) }
+func (*KpiEvent) ProtoMessage()    {}
+func (*KpiEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{6}
+}
+
+func (m *KpiEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KpiEvent.Unmarshal(m, b)
+}
+func (m *KpiEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KpiEvent.Marshal(b, m, deterministic)
+}
+func (m *KpiEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KpiEvent.Merge(m, src)
+}
+func (m *KpiEvent) XXX_Size() int {
+	return xxx_messageInfo_KpiEvent.Size(m)
+}
+func (m *KpiEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_KpiEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KpiEvent proto.InternalMessageInfo
+
+func (m *KpiEvent) GetType() KpiEventType_KpiEventType {
+	if m != nil {
+		return m.Type
+	}
+	return KpiEventType_slice
+}
+
+func (m *KpiEvent) GetTs() float32 {
+	if m != nil {
+		return m.Ts
+	}
+	return 0
+}
+
+func (m *KpiEvent) GetPrefixes() map[string]*MetricValuePairs {
+	if m != nil {
+		return m.Prefixes
+	}
+	return nil
+}
+
+type KpiEvent2 struct {
+	// Type of KPI Event
+	Type KpiEventType_KpiEventType `protobuf:"varint,1,opt,name=type,proto3,enum=voltha.KpiEventType_KpiEventType" json:"type,omitempty"`
+	// Fields used when for slice:
+	Ts                   float64              `protobuf:"fixed64,2,opt,name=ts,proto3" json:"ts,omitempty"`
+	SliceData            []*MetricInformation `protobuf:"bytes,3,rep,name=slice_data,json=sliceData,proto3" json:"slice_data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *KpiEvent2) Reset()         { *m = KpiEvent2{} }
+func (m *KpiEvent2) String() string { return proto.CompactTextString(m) }
+func (*KpiEvent2) ProtoMessage()    {}
+func (*KpiEvent2) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{7}
+}
+
+func (m *KpiEvent2) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_KpiEvent2.Unmarshal(m, b)
+}
+func (m *KpiEvent2) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_KpiEvent2.Marshal(b, m, deterministic)
+}
+func (m *KpiEvent2) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_KpiEvent2.Merge(m, src)
+}
+func (m *KpiEvent2) XXX_Size() int {
+	return xxx_messageInfo_KpiEvent2.Size(m)
+}
+func (m *KpiEvent2) XXX_DiscardUnknown() {
+	xxx_messageInfo_KpiEvent2.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_KpiEvent2 proto.InternalMessageInfo
+
+func (m *KpiEvent2) GetType() KpiEventType_KpiEventType {
+	if m != nil {
+		return m.Type
+	}
+	return KpiEventType_slice
+}
+
+func (m *KpiEvent2) GetTs() float64 {
+	if m != nil {
+		return m.Ts
+	}
+	return 0
+}
+
+func (m *KpiEvent2) GetSliceData() []*MetricInformation {
+	if m != nil {
+		return m.SliceData
+	}
+	return nil
+}
+
+//
+// Identify to the area of the system impacted by the alarm
+// To be deprecated once python version of OpenOLT adapter
+// moves to the new event defination for device alarms
+type AlarmEventType struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmEventType) Reset()         { *m = AlarmEventType{} }
+func (m *AlarmEventType) String() string { return proto.CompactTextString(m) }
+func (*AlarmEventType) ProtoMessage()    {}
+func (*AlarmEventType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{8}
+}
+
+func (m *AlarmEventType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmEventType.Unmarshal(m, b)
+}
+func (m *AlarmEventType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmEventType.Marshal(b, m, deterministic)
+}
+func (m *AlarmEventType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmEventType.Merge(m, src)
+}
+func (m *AlarmEventType) XXX_Size() int {
+	return xxx_messageInfo_AlarmEventType.Size(m)
+}
+func (m *AlarmEventType) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmEventType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmEventType proto.InternalMessageInfo
+
+//
+// Identify to the functional category originating the alarm
+// To be deprecated once python version of OpenOLT adapter
+// as well as OpenONU adapter moves to the new event
+// defination for device alarms
+type AlarmEventCategory struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmEventCategory) Reset()         { *m = AlarmEventCategory{} }
+func (m *AlarmEventCategory) String() string { return proto.CompactTextString(m) }
+func (*AlarmEventCategory) ProtoMessage()    {}
+func (*AlarmEventCategory) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{9}
+}
+
+func (m *AlarmEventCategory) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmEventCategory.Unmarshal(m, b)
+}
+func (m *AlarmEventCategory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmEventCategory.Marshal(b, m, deterministic)
+}
+func (m *AlarmEventCategory) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmEventCategory.Merge(m, src)
+}
+func (m *AlarmEventCategory) XXX_Size() int {
+	return xxx_messageInfo_AlarmEventCategory.Size(m)
+}
+func (m *AlarmEventCategory) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmEventCategory.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmEventCategory proto.InternalMessageInfo
+
+//
+// Active state of the alarm
+// To be deprecated once python version of OpenOLT adapter
+// as well as OpenONU adapter moves to the new event
+// defination for device alarms
+type AlarmEventState struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmEventState) Reset()         { *m = AlarmEventState{} }
+func (m *AlarmEventState) String() string { return proto.CompactTextString(m) }
+func (*AlarmEventState) ProtoMessage()    {}
+func (*AlarmEventState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{10}
+}
+
+func (m *AlarmEventState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmEventState.Unmarshal(m, b)
+}
+func (m *AlarmEventState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmEventState.Marshal(b, m, deterministic)
+}
+func (m *AlarmEventState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmEventState.Merge(m, src)
+}
+func (m *AlarmEventState) XXX_Size() int {
+	return xxx_messageInfo_AlarmEventState.Size(m)
+}
+func (m *AlarmEventState) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmEventState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmEventState proto.InternalMessageInfo
+
+//
+// Identify the overall impact of the alarm on the system
+// To be deprecated once python version of OpenOLT adapter
+// as well as OpenONU adapter moves to the new event
+// defination for device alarms
+type AlarmEventSeverity struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmEventSeverity) Reset()         { *m = AlarmEventSeverity{} }
+func (m *AlarmEventSeverity) String() string { return proto.CompactTextString(m) }
+func (*AlarmEventSeverity) ProtoMessage()    {}
+func (*AlarmEventSeverity) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{11}
+}
+
+func (m *AlarmEventSeverity) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmEventSeverity.Unmarshal(m, b)
+}
+func (m *AlarmEventSeverity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmEventSeverity.Marshal(b, m, deterministic)
+}
+func (m *AlarmEventSeverity) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmEventSeverity.Merge(m, src)
+}
+func (m *AlarmEventSeverity) XXX_Size() int {
+	return xxx_messageInfo_AlarmEventSeverity.Size(m)
+}
+func (m *AlarmEventSeverity) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmEventSeverity.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmEventSeverity proto.InternalMessageInfo
+
+//
+// To be deprecated once python version of OpenOLT adapter
+// as well as OpenONU adapter moves to the new event
+// defination for device alarms
+type AlarmEvent struct {
+	// Unique ID for this alarm.  e.g. voltha.some_olt.1234
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Refers to the area of the system impacted by the alarm
+	Type AlarmEventType_AlarmEventType `protobuf:"varint,2,opt,name=type,proto3,enum=voltha.AlarmEventType_AlarmEventType" json:"type,omitempty"`
+	// Refers to functional category of the alarm
+	Category AlarmEventCategory_AlarmEventCategory `protobuf:"varint,3,opt,name=category,proto3,enum=voltha.AlarmEventCategory_AlarmEventCategory" json:"category,omitempty"`
+	// Current active state of the alarm
+	State AlarmEventState_AlarmEventState `protobuf:"varint,4,opt,name=state,proto3,enum=voltha.AlarmEventState_AlarmEventState" json:"state,omitempty"`
+	// Overall impact of the alarm on the system
+	Severity AlarmEventSeverity_AlarmEventSeverity `protobuf:"varint,5,opt,name=severity,proto3,enum=voltha.AlarmEventSeverity_AlarmEventSeverity" json:"severity,omitempty"`
+	// Timestamp at which the alarm was first raised
+	RaisedTs float32 `protobuf:"fixed32,6,opt,name=raised_ts,json=raisedTs,proto3" json:"raised_ts,omitempty"`
+	// Timestamp at which the alarm was reported
+	ReportedTs float32 `protobuf:"fixed32,7,opt,name=reported_ts,json=reportedTs,proto3" json:"reported_ts,omitempty"`
+	// Timestamp at which the alarm has changed since it was raised
+	ChangedTs float32 `protobuf:"fixed32,8,opt,name=changed_ts,json=changedTs,proto3" json:"changed_ts,omitempty"`
+	// Identifier of the originating resource of the alarm
+	ResourceId string `protobuf:"bytes,9,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"`
+	// Textual explanation of the alarm
+	Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"`
+	// Key/Value storage for extra information that may give context to the alarm
+	Context map[string]string `protobuf:"bytes,11,rep,name=context,proto3" json:"context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	// logical device id
+	LogicalDeviceId string `protobuf:"bytes,12,opt,name=logical_device_id,json=logicalDeviceId,proto3" json:"logical_device_id,omitempty"`
+	// alarm_type  name indicates clearly the name of the alarm
+	AlarmTypeName        string   `protobuf:"bytes,13,opt,name=alarm_type_name,json=alarmTypeName,proto3" json:"alarm_type_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmEvent) Reset()         { *m = AlarmEvent{} }
+func (m *AlarmEvent) String() string { return proto.CompactTextString(m) }
+func (*AlarmEvent) ProtoMessage()    {}
+func (*AlarmEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{12}
+}
+
+func (m *AlarmEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmEvent.Unmarshal(m, b)
+}
+func (m *AlarmEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmEvent.Marshal(b, m, deterministic)
+}
+func (m *AlarmEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmEvent.Merge(m, src)
+}
+func (m *AlarmEvent) XXX_Size() int {
+	return xxx_messageInfo_AlarmEvent.Size(m)
+}
+func (m *AlarmEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmEvent proto.InternalMessageInfo
+
+func (m *AlarmEvent) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *AlarmEvent) GetType() AlarmEventType_AlarmEventType {
+	if m != nil {
+		return m.Type
+	}
+	return AlarmEventType_COMMUNICATION
+}
+
+func (m *AlarmEvent) GetCategory() AlarmEventCategory_AlarmEventCategory {
+	if m != nil {
+		return m.Category
+	}
+	return AlarmEventCategory_PON
+}
+
+func (m *AlarmEvent) GetState() AlarmEventState_AlarmEventState {
+	if m != nil {
+		return m.State
+	}
+	return AlarmEventState_RAISED
+}
+
+func (m *AlarmEvent) GetSeverity() AlarmEventSeverity_AlarmEventSeverity {
+	if m != nil {
+		return m.Severity
+	}
+	return AlarmEventSeverity_INDETERMINATE
+}
+
+func (m *AlarmEvent) GetRaisedTs() float32 {
+	if m != nil {
+		return m.RaisedTs
+	}
+	return 0
+}
+
+func (m *AlarmEvent) GetReportedTs() float32 {
+	if m != nil {
+		return m.ReportedTs
+	}
+	return 0
+}
+
+func (m *AlarmEvent) GetChangedTs() float32 {
+	if m != nil {
+		return m.ChangedTs
+	}
+	return 0
+}
+
+func (m *AlarmEvent) GetResourceId() string {
+	if m != nil {
+		return m.ResourceId
+	}
+	return ""
+}
+
+func (m *AlarmEvent) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *AlarmEvent) GetContext() map[string]string {
+	if m != nil {
+		return m.Context
+	}
+	return nil
+}
+
+func (m *AlarmEvent) GetLogicalDeviceId() string {
+	if m != nil {
+		return m.LogicalDeviceId
+	}
+	return ""
+}
+
+func (m *AlarmEvent) GetAlarmTypeName() string {
+	if m != nil {
+		return m.AlarmTypeName
+	}
+	return ""
+}
+
+//
+// Describes the events specific to device
+type DeviceEvent struct {
+	// Identifier of the originating resource of the event, for ex: device_id
+	ResourceId string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"`
+	// device_event_name indicates clearly the name of the device event
+	DeviceEventName string `protobuf:"bytes,2,opt,name=device_event_name,json=deviceEventName,proto3" json:"device_event_name,omitempty"`
+	// Textual explanation of the device event
+	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
+	// Key/Value storage for extra information that may give context to the event
+	Context              map[string]string `protobuf:"bytes,4,rep,name=context,proto3" json:"context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *DeviceEvent) Reset()         { *m = DeviceEvent{} }
+func (m *DeviceEvent) String() string { return proto.CompactTextString(m) }
+func (*DeviceEvent) ProtoMessage()    {}
+func (*DeviceEvent) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{13}
+}
+
+func (m *DeviceEvent) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceEvent.Unmarshal(m, b)
+}
+func (m *DeviceEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceEvent.Marshal(b, m, deterministic)
+}
+func (m *DeviceEvent) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceEvent.Merge(m, src)
+}
+func (m *DeviceEvent) XXX_Size() int {
+	return xxx_messageInfo_DeviceEvent.Size(m)
+}
+func (m *DeviceEvent) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceEvent.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceEvent proto.InternalMessageInfo
+
+func (m *DeviceEvent) GetResourceId() string {
+	if m != nil {
+		return m.ResourceId
+	}
+	return ""
+}
+
+func (m *DeviceEvent) GetDeviceEventName() string {
+	if m != nil {
+		return m.DeviceEventName
+	}
+	return ""
+}
+
+func (m *DeviceEvent) GetDescription() string {
+	if m != nil {
+		return m.Description
+	}
+	return ""
+}
+
+func (m *DeviceEvent) GetContext() map[string]string {
+	if m != nil {
+		return m.Context
+	}
+	return nil
+}
+
+//
+// Identify the area of the system impacted by the event.
+type EventCategory struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventCategory) Reset()         { *m = EventCategory{} }
+func (m *EventCategory) String() string { return proto.CompactTextString(m) }
+func (*EventCategory) ProtoMessage()    {}
+func (*EventCategory) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{14}
+}
+
+func (m *EventCategory) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventCategory.Unmarshal(m, b)
+}
+func (m *EventCategory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventCategory.Marshal(b, m, deterministic)
+}
+func (m *EventCategory) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventCategory.Merge(m, src)
+}
+func (m *EventCategory) XXX_Size() int {
+	return xxx_messageInfo_EventCategory.Size(m)
+}
+func (m *EventCategory) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventCategory.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventCategory proto.InternalMessageInfo
+
+//
+// Identify the functional category originating the event
+type EventSubCategory struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventSubCategory) Reset()         { *m = EventSubCategory{} }
+func (m *EventSubCategory) String() string { return proto.CompactTextString(m) }
+func (*EventSubCategory) ProtoMessage()    {}
+func (*EventSubCategory) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{15}
+}
+
+func (m *EventSubCategory) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventSubCategory.Unmarshal(m, b)
+}
+func (m *EventSubCategory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventSubCategory.Marshal(b, m, deterministic)
+}
+func (m *EventSubCategory) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventSubCategory.Merge(m, src)
+}
+func (m *EventSubCategory) XXX_Size() int {
+	return xxx_messageInfo_EventSubCategory.Size(m)
+}
+func (m *EventSubCategory) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventSubCategory.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventSubCategory proto.InternalMessageInfo
+
+//
+// Identify the type of event
+type EventType struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventType) Reset()         { *m = EventType{} }
+func (m *EventType) String() string { return proto.CompactTextString(m) }
+func (*EventType) ProtoMessage()    {}
+func (*EventType) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{16}
+}
+
+func (m *EventType) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventType.Unmarshal(m, b)
+}
+func (m *EventType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventType.Marshal(b, m, deterministic)
+}
+func (m *EventType) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventType.Merge(m, src)
+}
+func (m *EventType) XXX_Size() int {
+	return xxx_messageInfo_EventType.Size(m)
+}
+func (m *EventType) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventType.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventType proto.InternalMessageInfo
+
+//
+// Identify the functional category originating the event
+type EventHeader struct {
+	// Unique ID for this event.  e.g. voltha.some_olt.1234
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// Refers to the functional area affect by the event
+	Category EventCategory_EventCategory `protobuf:"varint,2,opt,name=category,proto3,enum=voltha.EventCategory_EventCategory" json:"category,omitempty"`
+	// Refers to functional category of the event
+	SubCategory EventSubCategory_EventSubCategory `protobuf:"varint,3,opt,name=sub_category,json=subCategory,proto3,enum=voltha.EventSubCategory_EventSubCategory" json:"sub_category,omitempty"`
+	// Refers to the type of the event
+	Type EventType_EventType `protobuf:"varint,4,opt,name=type,proto3,enum=voltha.EventType_EventType" json:"type,omitempty"`
+	// The version identifier for this event type, thus allowing each
+	// event type to evolve independently. The version should be in the
+	// format “MAJOR.MINOR” format and minor changes must only be additive
+	// and non-breaking.
+	TypeVersion string `protobuf:"bytes,5,opt,name=type_version,json=typeVersion,proto3" json:"type_version,omitempty"`
+	// Timestamp at which the event was first raised.
+	// This represents the UTC time stamp since epoch (in seconds) when the
+	// the event was first raised from the source entity.
+	// If the source entity doesn't send the raised_ts, this shall be set
+	// to timestamp when the event was received.
+	RaisedTs float32 `protobuf:"fixed32,6,opt,name=raised_ts,json=raisedTs,proto3" json:"raised_ts,omitempty"`
+	// Timestamp at which the event was reported.
+	// This represents the UTC time stamp since epoch (in seconds) when the
+	// the event was reported (this time stamp is >= raised_ts).
+	// If the source entity that reported this event doesn't send the
+	// reported_ts, this shall be set to the same value as raised_ts.
+	ReportedTs           float32  `protobuf:"fixed32,7,opt,name=reported_ts,json=reportedTs,proto3" json:"reported_ts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventHeader) Reset()         { *m = EventHeader{} }
+func (m *EventHeader) String() string { return proto.CompactTextString(m) }
+func (*EventHeader) ProtoMessage()    {}
+func (*EventHeader) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{17}
+}
+
+func (m *EventHeader) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventHeader.Unmarshal(m, b)
+}
+func (m *EventHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventHeader.Marshal(b, m, deterministic)
+}
+func (m *EventHeader) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventHeader.Merge(m, src)
+}
+func (m *EventHeader) XXX_Size() int {
+	return xxx_messageInfo_EventHeader.Size(m)
+}
+func (m *EventHeader) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventHeader.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventHeader proto.InternalMessageInfo
+
+func (m *EventHeader) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *EventHeader) GetCategory() EventCategory_EventCategory {
+	if m != nil {
+		return m.Category
+	}
+	return EventCategory_COMMUNICATION
+}
+
+func (m *EventHeader) GetSubCategory() EventSubCategory_EventSubCategory {
+	if m != nil {
+		return m.SubCategory
+	}
+	return EventSubCategory_PON
+}
+
+func (m *EventHeader) GetType() EventType_EventType {
+	if m != nil {
+		return m.Type
+	}
+	return EventType_CONFIG_EVENT
+}
+
+func (m *EventHeader) GetTypeVersion() string {
+	if m != nil {
+		return m.TypeVersion
+	}
+	return ""
+}
+
+func (m *EventHeader) GetRaisedTs() float32 {
+	if m != nil {
+		return m.RaisedTs
+	}
+	return 0
+}
+
+func (m *EventHeader) GetReportedTs() float32 {
+	if m != nil {
+		return m.ReportedTs
+	}
+	return 0
+}
+
+//
+// Event Structure
+type Event struct {
+	// event header
+	Header *EventHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"`
+	// oneof event types referred by EventType.
+	//
+	// Types that are valid to be assigned to EventType:
+	//	*Event_ConfigEvent
+	//	*Event_KpiEvent
+	//	*Event_KpiEvent2
+	//	*Event_DeviceEvent
+	EventType            isEvent_EventType `protobuf_oneof:"event_type"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *Event) Reset()         { *m = Event{} }
+func (m *Event) String() string { return proto.CompactTextString(m) }
+func (*Event) ProtoMessage()    {}
+func (*Event) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e63e6c07044fd2c4, []int{18}
+}
+
+func (m *Event) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Event.Unmarshal(m, b)
+}
+func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Event.Marshal(b, m, deterministic)
+}
+func (m *Event) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Event.Merge(m, src)
+}
+func (m *Event) XXX_Size() int {
+	return xxx_messageInfo_Event.Size(m)
+}
+func (m *Event) XXX_DiscardUnknown() {
+	xxx_messageInfo_Event.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Event proto.InternalMessageInfo
+
+func (m *Event) GetHeader() *EventHeader {
+	if m != nil {
+		return m.Header
+	}
+	return nil
+}
+
+type isEvent_EventType interface {
+	isEvent_EventType()
+}
+
+type Event_ConfigEvent struct {
+	ConfigEvent *ConfigEvent `protobuf:"bytes,2,opt,name=config_event,json=configEvent,proto3,oneof"`
+}
+
+type Event_KpiEvent struct {
+	KpiEvent *KpiEvent `protobuf:"bytes,3,opt,name=kpi_event,json=kpiEvent,proto3,oneof"`
+}
+
+type Event_KpiEvent2 struct {
+	KpiEvent2 *KpiEvent2 `protobuf:"bytes,4,opt,name=kpi_event2,json=kpiEvent2,proto3,oneof"`
+}
+
+type Event_DeviceEvent struct {
+	DeviceEvent *DeviceEvent `protobuf:"bytes,5,opt,name=device_event,json=deviceEvent,proto3,oneof"`
+}
+
+func (*Event_ConfigEvent) isEvent_EventType() {}
+
+func (*Event_KpiEvent) isEvent_EventType() {}
+
+func (*Event_KpiEvent2) isEvent_EventType() {}
+
+func (*Event_DeviceEvent) isEvent_EventType() {}
+
+func (m *Event) GetEventType() isEvent_EventType {
+	if m != nil {
+		return m.EventType
+	}
+	return nil
+}
+
+func (m *Event) GetConfigEvent() *ConfigEvent {
+	if x, ok := m.GetEventType().(*Event_ConfigEvent); ok {
+		return x.ConfigEvent
+	}
+	return nil
+}
+
+func (m *Event) GetKpiEvent() *KpiEvent {
+	if x, ok := m.GetEventType().(*Event_KpiEvent); ok {
+		return x.KpiEvent
+	}
+	return nil
+}
+
+func (m *Event) GetKpiEvent2() *KpiEvent2 {
+	if x, ok := m.GetEventType().(*Event_KpiEvent2); ok {
+		return x.KpiEvent2
+	}
+	return nil
+}
+
+func (m *Event) GetDeviceEvent() *DeviceEvent {
+	if x, ok := m.GetEventType().(*Event_DeviceEvent); ok {
+		return x.DeviceEvent
+	}
+	return nil
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*Event) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*Event_ConfigEvent)(nil),
+		(*Event_KpiEvent)(nil),
+		(*Event_KpiEvent2)(nil),
+		(*Event_DeviceEvent)(nil),
+	}
+}
+
+func init() {
+	proto.RegisterEnum("voltha.ConfigEventType_ConfigEventType", ConfigEventType_ConfigEventType_name, ConfigEventType_ConfigEventType_value)
+	proto.RegisterEnum("voltha.KpiEventType_KpiEventType", KpiEventType_KpiEventType_name, KpiEventType_KpiEventType_value)
+	proto.RegisterEnum("voltha.AlarmEventType_AlarmEventType", AlarmEventType_AlarmEventType_name, AlarmEventType_AlarmEventType_value)
+	proto.RegisterEnum("voltha.AlarmEventCategory_AlarmEventCategory", AlarmEventCategory_AlarmEventCategory_name, AlarmEventCategory_AlarmEventCategory_value)
+	proto.RegisterEnum("voltha.AlarmEventState_AlarmEventState", AlarmEventState_AlarmEventState_name, AlarmEventState_AlarmEventState_value)
+	proto.RegisterEnum("voltha.AlarmEventSeverity_AlarmEventSeverity", AlarmEventSeverity_AlarmEventSeverity_name, AlarmEventSeverity_AlarmEventSeverity_value)
+	proto.RegisterEnum("voltha.EventCategory_EventCategory", EventCategory_EventCategory_name, EventCategory_EventCategory_value)
+	proto.RegisterEnum("voltha.EventSubCategory_EventSubCategory", EventSubCategory_EventSubCategory_name, EventSubCategory_EventSubCategory_value)
+	proto.RegisterEnum("voltha.EventType_EventType", EventType_EventType_name, EventType_EventType_value)
+	proto.RegisterType((*ConfigEventType)(nil), "voltha.ConfigEventType")
+	proto.RegisterType((*ConfigEvent)(nil), "voltha.ConfigEvent")
+	proto.RegisterType((*KpiEventType)(nil), "voltha.KpiEventType")
+	proto.RegisterType((*MetricMetaData)(nil), "voltha.MetricMetaData")
+	proto.RegisterMapType((map[string]string)(nil), "voltha.MetricMetaData.ContextEntry")
+	proto.RegisterType((*MetricValuePairs)(nil), "voltha.MetricValuePairs")
+	proto.RegisterMapType((map[string]float32)(nil), "voltha.MetricValuePairs.MetricsEntry")
+	proto.RegisterType((*MetricInformation)(nil), "voltha.MetricInformation")
+	proto.RegisterMapType((map[string]float32)(nil), "voltha.MetricInformation.MetricsEntry")
+	proto.RegisterType((*KpiEvent)(nil), "voltha.KpiEvent")
+	proto.RegisterMapType((map[string]*MetricValuePairs)(nil), "voltha.KpiEvent.PrefixesEntry")
+	proto.RegisterType((*KpiEvent2)(nil), "voltha.KpiEvent2")
+	proto.RegisterType((*AlarmEventType)(nil), "voltha.AlarmEventType")
+	proto.RegisterType((*AlarmEventCategory)(nil), "voltha.AlarmEventCategory")
+	proto.RegisterType((*AlarmEventState)(nil), "voltha.AlarmEventState")
+	proto.RegisterType((*AlarmEventSeverity)(nil), "voltha.AlarmEventSeverity")
+	proto.RegisterType((*AlarmEvent)(nil), "voltha.AlarmEvent")
+	proto.RegisterMapType((map[string]string)(nil), "voltha.AlarmEvent.ContextEntry")
+	proto.RegisterType((*DeviceEvent)(nil), "voltha.DeviceEvent")
+	proto.RegisterMapType((map[string]string)(nil), "voltha.DeviceEvent.ContextEntry")
+	proto.RegisterType((*EventCategory)(nil), "voltha.EventCategory")
+	proto.RegisterType((*EventSubCategory)(nil), "voltha.EventSubCategory")
+	proto.RegisterType((*EventType)(nil), "voltha.EventType")
+	proto.RegisterType((*EventHeader)(nil), "voltha.EventHeader")
+	proto.RegisterType((*Event)(nil), "voltha.Event")
+}
+
+func init() { proto.RegisterFile("voltha_protos/events.proto", fileDescriptor_e63e6c07044fd2c4) }
+
+var fileDescriptor_e63e6c07044fd2c4 = []byte{
+	// 1350 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xdb, 0x6e, 0xdb, 0x46,
+	0x13, 0x16, 0xa9, 0x83, 0xa5, 0xa1, 0x6c, 0xd3, 0x9b, 0x1f, 0x3f, 0xf4, 0x3b, 0x7f, 0x1b, 0x87,
+	0x45, 0xd3, 0x34, 0x41, 0x2c, 0x54, 0x45, 0x01, 0xc7, 0x45, 0x90, 0x2a, 0x32, 0x1b, 0xb3, 0xb1,
+	0x28, 0x77, 0x25, 0x3b, 0x3d, 0x5c, 0x08, 0x6b, 0x71, 0x23, 0x13, 0x96, 0x48, 0x81, 0x5c, 0x0b,
+	0xf1, 0x4d, 0xd1, 0x07, 0x28, 0xd0, 0xcb, 0x5c, 0xf4, 0x5d, 0x7a, 0xd7, 0x37, 0xe9, 0x23, 0xf4,
+	0x01, 0x8a, 0x3d, 0x48, 0x3c, 0x48, 0x41, 0x51, 0x04, 0xb9, 0xdb, 0xfd, 0x76, 0x66, 0xf8, 0xcd,
+	0xec, 0xec, 0xb7, 0x4b, 0xd8, 0x9d, 0x87, 0x13, 0x76, 0x49, 0x86, 0xb3, 0x28, 0x64, 0x61, 0xdc,
+	0xa4, 0x73, 0x1a, 0xb0, 0x78, 0x5f, 0xcc, 0x50, 0x45, 0xae, 0xed, 0x36, 0xb2, 0x36, 0x53, 0xca,
+	0x88, 0xb4, 0xd8, 0xfd, 0xff, 0x38, 0x0c, 0xc7, 0x13, 0xda, 0x24, 0x33, 0xbf, 0x49, 0x82, 0x20,
+	0x64, 0x84, 0xf9, 0x61, 0xa0, 0xfc, 0x2d, 0x1b, 0xb6, 0x3b, 0x61, 0xf0, 0xca, 0x1f, 0xdb, 0x3c,
+	0xea, 0xe0, 0x66, 0x46, 0xad, 0xd6, 0x0a, 0x84, 0x36, 0xa0, 0x48, 0x3c, 0xcf, 0x2c, 0x20, 0x80,
+	0x4a, 0x44, 0xa7, 0xe1, 0x9c, 0x9a, 0x1a, 0x1f, 0x5f, 0xcf, 0x3c, 0xc2, 0xa8, 0xa9, 0x5b, 0x11,
+	0x18, 0x29, 0x1f, 0xf4, 0x25, 0x94, 0xd8, 0xcd, 0x8c, 0x36, 0xb4, 0x3d, 0xed, 0xfe, 0x56, 0xeb,
+	0x93, 0x7d, 0x49, 0x6e, 0x3f, 0x17, 0x36, 0x3f, 0xc7, 0xc2, 0x09, 0x21, 0x28, 0x5d, 0x92, 0xf8,
+	0xb2, 0xa1, 0xef, 0x69, 0xf7, 0x6b, 0x58, 0x8c, 0x39, 0xe6, 0x11, 0x46, 0x1a, 0x45, 0x89, 0xf1,
+	0xb1, 0xf5, 0x19, 0xd4, 0x5f, 0xcc, 0xfc, 0x84, 0xf7, 0xdd, 0xec, 0x1c, 0xd5, 0xa0, 0x1c, 0x4f,
+	0xfc, 0x11, 0x35, 0x0b, 0xa8, 0x02, 0x3a, 0x8b, 0x4d, 0xcd, 0x7a, 0xa3, 0xc3, 0x56, 0x97, 0xb2,
+	0xc8, 0x1f, 0x75, 0x29, 0x23, 0x47, 0x84, 0x11, 0xf4, 0x1f, 0x28, 0x33, 0x9f, 0x4d, 0x24, 0xd7,
+	0x1a, 0x96, 0x13, 0xb4, 0xc5, 0x1d, 0x04, 0x03, 0x0d, 0xeb, 0x2c, 0x46, 0x0f, 0x60, 0x67, 0x12,
+	0x8e, 0xfd, 0x11, 0x99, 0x0c, 0x3d, 0x3a, 0xf7, 0x47, 0x74, 0xe8, 0x7b, 0x8a, 0xcc, 0xb6, 0x5a,
+	0x38, 0x12, 0xb8, 0xe3, 0xa1, 0xdb, 0x50, 0x8b, 0x69, 0xe4, 0x93, 0xc9, 0x30, 0x08, 0x1b, 0x25,
+	0x61, 0x53, 0x95, 0x80, 0x1b, 0xf2, 0xc5, 0x24, 0x40, 0x59, 0x2e, 0x7a, 0x0b, 0xcf, 0x27, 0xb0,
+	0x31, 0x0a, 0x03, 0x46, 0x5f, 0xb3, 0x46, 0x65, 0xaf, 0x78, 0xdf, 0x68, 0x7d, 0xb4, 0xa8, 0x5c,
+	0x96, 0x34, 0x2f, 0x1c, 0xb7, 0xb2, 0x03, 0x16, 0xdd, 0xe0, 0x85, 0xcf, 0xee, 0x21, 0xd4, 0xd3,
+	0x0b, 0xc8, 0x84, 0xe2, 0x15, 0xbd, 0x51, 0x89, 0xf1, 0x21, 0x4f, 0x76, 0x4e, 0x26, 0xd7, 0x54,
+	0xd5, 0x56, 0x4e, 0x0e, 0xf5, 0x03, 0xcd, 0xfa, 0x55, 0x03, 0x53, 0x7e, 0xe4, 0x9c, 0x63, 0xa7,
+	0xc4, 0x8f, 0x62, 0xf4, 0x14, 0x36, 0xa6, 0x02, 0x8b, 0x1b, 0x9a, 0xe0, 0xf3, 0x71, 0x96, 0x4f,
+	0x62, 0xaa, 0x80, 0x58, 0x31, 0x52, 0x5e, 0x9c, 0x51, 0x7a, 0xe1, 0x9f, 0x18, 0xe9, 0x69, 0x46,
+	0x7f, 0x68, 0xb0, 0x23, 0x9d, 0x9d, 0xe0, 0x55, 0x18, 0x4d, 0x45, 0xdb, 0xa2, 0x16, 0x54, 0x79,
+	0x6f, 0x8b, 0x66, 0xe0, 0x61, 0x8c, 0xd6, 0x7f, 0xd7, 0xd7, 0x08, 0x2f, 0xed, 0xd0, 0x57, 0x49,
+	0x1a, 0xba, 0x48, 0xe3, 0x5e, 0xd6, 0x25, 0x15, 0xff, 0x3d, 0xe4, 0xf1, 0xa7, 0x06, 0xd5, 0x45,
+	0x5f, 0xa2, 0x2f, 0x32, 0x07, 0xe3, 0xee, 0x82, 0x47, 0xba, 0x6f, 0x33, 0x13, 0x75, 0x24, 0x92,
+	0x76, 0xd4, 0x45, 0x3b, 0x1e, 0x42, 0x75, 0x16, 0xd1, 0x57, 0xfe, 0x6b, 0x1a, 0x37, 0x8a, 0x22,
+	0xa5, 0x0f, 0xf3, 0xa1, 0xf6, 0x4f, 0x95, 0x81, 0x4c, 0x65, 0x69, 0xbf, 0x7b, 0x06, 0x9b, 0x99,
+	0xa5, 0x35, 0xc9, 0xec, 0xa7, 0x93, 0x31, 0x5a, 0x8d, 0xb7, 0xed, 0x7a, 0x3a, 0xcd, 0x5f, 0x34,
+	0xa8, 0x2d, 0xbe, 0xdd, 0x7a, 0xf7, 0x3c, 0xe5, 0xb1, 0x3b, 0x00, 0x10, 0x47, 0x78, 0xa8, 0x0e,
+	0x3f, 0xcf, 0xf4, 0x7f, 0x6f, 0xdd, 0x3c, 0x5c, 0x13, 0xc6, 0x7c, 0xf7, 0xad, 0x9f, 0x35, 0xd8,
+	0x6a, 0x4f, 0x48, 0x34, 0x4d, 0xf4, 0x21, 0xc8, 0x23, 0x68, 0x07, 0x36, 0x3b, 0xbd, 0x6e, 0xf7,
+	0xcc, 0x75, 0x3a, 0xed, 0x81, 0xd3, 0x73, 0xcd, 0x02, 0xda, 0x06, 0xc3, 0x76, 0xcf, 0x1d, 0xdc,
+	0x73, 0xbb, 0xb6, 0x3b, 0x30, 0x35, 0xb4, 0x09, 0x35, 0xfb, 0xdb, 0x33, 0xe7, 0x54, 0x4c, 0x75,
+	0x64, 0xc0, 0x46, 0xdf, 0xc6, 0xe7, 0x4e, 0xc7, 0x36, 0x8b, 0x68, 0x0b, 0xe0, 0x14, 0xf7, 0x3a,
+	0x76, 0xbf, 0xef, 0xb8, 0xcf, 0xcd, 0x12, 0xaa, 0x43, 0xb5, 0x6f, 0x77, 0xce, 0xb0, 0x33, 0xf8,
+	0xde, 0x2c, 0x5b, 0x2f, 0x01, 0x25, 0xdf, 0xeb, 0x10, 0x46, 0xc7, 0x61, 0x74, 0x63, 0xb5, 0xd7,
+	0xa1, 0x5c, 0x60, 0x4f, 0xc5, 0xf7, 0x37, 0xa0, 0xd8, 0x3b, 0xe1, 0xdf, 0xe5, 0x03, 0xf1, 0x45,
+	0x31, 0x38, 0x33, 0x8b, 0x7c, 0xe0, 0xba, 0x8e, 0x59, 0xb2, 0x9e, 0xc0, 0x76, 0x12, 0xa2, 0xcf,
+	0x08, 0xa3, 0xd6, 0x83, 0x15, 0x88, 0xcb, 0x33, 0x6e, 0x3b, 0x7d, 0xfb, 0xc8, 0x2c, 0x70, 0xd6,
+	0x9d, 0x13, 0xbb, 0x8d, 0xed, 0x23, 0x53, 0xb3, 0x82, 0x34, 0x83, 0x3e, 0x9d, 0xd3, 0xc8, 0x67,
+	0x37, 0xd6, 0x77, 0xeb, 0x50, 0x5e, 0x21, 0xc7, 0x3d, 0xb2, 0x07, 0x36, 0xee, 0x3a, 0x6e, 0x7b,
+	0x60, 0xcb, 0x58, 0x2f, 0xdb, 0xd8, 0xe5, 0x19, 0x6b, 0x5c, 0x63, 0xbb, 0x8e, 0xdb, 0xc3, 0xa6,
+	0x2e, 0x86, 0xed, 0x6f, 0x7a, 0xd8, 0x2c, 0xf2, 0x3a, 0x74, 0xb0, 0x33, 0x70, 0x3a, 0xed, 0x13,
+	0xb3, 0x64, 0xbd, 0x29, 0x03, 0x24, 0xa1, 0xf9, 0x1e, 0xfb, 0x9e, 0xea, 0x36, 0xdd, 0xf7, 0xd0,
+	0x63, 0xd5, 0x2a, 0xba, 0x68, 0x95, 0xa5, 0xc2, 0x64, 0xb7, 0x2a, 0x37, 0x55, 0xed, 0xe2, 0x40,
+	0x75, 0xa4, 0x2a, 0x28, 0xc4, 0x78, 0xab, 0xf5, 0x68, 0xd5, 0x7d, 0x51, 0xe3, 0x35, 0x10, 0x5e,
+	0xba, 0xa3, 0x27, 0x50, 0x8e, 0x79, 0xd9, 0x84, 0x60, 0xa7, 0xae, 0xac, 0x5c, 0x55, 0xf3, 0x73,
+	0x2c, 0xbd, 0x38, 0x93, 0x58, 0xd5, 0x4c, 0xa8, 0xfa, 0x5a, 0x26, 0x8b, 0xaa, 0xae, 0x81, 0xf0,
+	0xd2, 0x9d, 0xdf, 0x10, 0x11, 0xf1, 0x63, 0xea, 0x0d, 0x59, 0xdc, 0xa8, 0x88, 0x23, 0x5f, 0x95,
+	0xc0, 0x20, 0x46, 0x77, 0xc0, 0x88, 0xe8, 0x2c, 0x8c, 0x98, 0x5c, 0xde, 0x10, 0xcb, 0xb0, 0x80,
+	0x06, 0x31, 0xfa, 0x00, 0x60, 0x74, 0x49, 0x82, 0xb1, 0x5c, 0xaf, 0x8a, 0xf5, 0x9a, 0x42, 0x16,
+	0xfe, 0x71, 0x78, 0x1d, 0xc9, 0x0b, 0xa8, 0x26, 0x76, 0x01, 0x16, 0x90, 0xe3, 0xa1, 0x3d, 0x30,
+	0x3c, 0x1a, 0x8f, 0x22, 0x7f, 0xc6, 0x4f, 0x54, 0x03, 0x84, 0x41, 0x1a, 0x42, 0x8f, 0x93, 0x4b,
+	0xca, 0x10, 0x07, 0xf2, 0xce, 0x6a, 0xa6, 0xeb, 0x2f, 0xa8, 0xf5, 0xb7, 0x68, 0x7d, 0xfd, 0x2d,
+	0x7a, 0x0f, 0xb6, 0x09, 0x8f, 0x37, 0xe4, 0x3b, 0x3d, 0x0c, 0xc8, 0x94, 0x36, 0x36, 0x85, 0xe5,
+	0xa6, 0x80, 0x79, 0x17, 0xb8, 0x64, 0x4a, 0xdf, 0xe9, 0xd2, 0xfb, 0x4b, 0x03, 0x43, 0x7e, 0x50,
+	0xb6, 0x66, 0xae, 0x3a, 0xda, 0x4a, 0x75, 0x1e, 0xc0, 0x8e, 0x22, 0x2e, 0x1e, 0x61, 0x92, 0x96,
+	0x0c, 0xbb, 0xed, 0x25, 0x81, 0x38, 0xb1, 0x7c, 0x25, 0x8b, 0xab, 0x95, 0x3c, 0x4c, 0x2a, 0x59,
+	0x12, 0x95, 0xdc, 0x5b, 0x54, 0x32, 0x45, 0xea, 0x3d, 0xdc, 0xf5, 0x3f, 0xc1, 0x66, 0x56, 0x93,
+	0xa6, 0x39, 0xe0, 0x3d, 0x0b, 0x63, 0x1f, 0x4c, 0xd9, 0xfc, 0xd7, 0x17, 0x4b, 0x0a, 0x4f, 0x57,
+	0xb1, 0x7f, 0x27, 0x8a, 0x3f, 0x42, 0x2d, 0x91, 0x7a, 0x37, 0x35, 0x41, 0x26, 0xd4, 0x3b, 0x3d,
+	0xf7, 0x6b, 0xe7, 0xf9, 0xd0, 0x3e, 0xe7, 0x5c, 0x0b, 0x9c, 0xfa, 0x8b, 0x53, 0x47, 0x4d, 0x35,
+	0xce, 0x76, 0x39, 0x6d, 0x99, 0x3a, 0x77, 0x38, 0xb2, 0x79, 0x26, 0xca, 0xa2, 0x68, 0xfd, 0xae,
+	0x83, 0x21, 0x02, 0x1e, 0x53, 0xe2, 0xd1, 0x68, 0x45, 0xc3, 0x9e, 0xa6, 0x84, 0x48, 0xea, 0xd8,
+	0xf2, 0xe5, 0x96, 0xd5, 0xa0, 0xb7, 0xc9, 0xcf, 0x09, 0xd4, 0xe3, 0xeb, 0x8b, 0x61, 0x4e, 0xcd,
+	0x3e, 0xcd, 0x04, 0x49, 0x95, 0x66, 0x05, 0xc0, 0x46, 0x9c, 0x2a, 0x5c, 0x53, 0x49, 0xaa, 0xd4,
+	0xb2, 0xdb, 0x99, 0x28, 0x42, 0x4d, 0xf3, 0x42, 0x7a, 0x17, 0xea, 0xe2, 0x98, 0xcd, 0x69, 0x14,
+	0xf3, 0x66, 0x95, 0x0f, 0x53, 0x83, 0x63, 0xe7, 0x12, 0x7a, 0x37, 0x59, 0xb2, 0x7e, 0xd3, 0xa1,
+	0x2c, 0xcf, 0xd8, 0x43, 0xa8, 0x5c, 0x8a, 0x22, 0xaa, 0xe7, 0xdb, 0xad, 0x0c, 0x3b, 0x59, 0x5f,
+	0xac, 0x4c, 0xd0, 0x01, 0xd4, 0x47, 0xe2, 0x1f, 0x41, 0x9e, 0x37, 0xf5, 0x1e, 0xb9, 0xb5, 0xe6,
+	0x7f, 0xe2, 0xb8, 0x80, 0x8d, 0x51, 0xea, 0x0f, 0xa4, 0x09, 0xb5, 0xab, 0x99, 0xaf, 0xdc, 0x8a,
+	0xc2, 0xcd, 0xcc, 0xbf, 0x42, 0x8e, 0x0b, 0xb8, 0x7a, 0xb5, 0x78, 0x99, 0xb5, 0x00, 0x96, 0x0e,
+	0x2d, 0x51, 0x39, 0xa3, 0xb5, 0x93, 0xf7, 0x68, 0x1d, 0x17, 0x70, 0xed, 0x6a, 0xf9, 0xca, 0x39,
+	0x80, 0x7a, 0x5a, 0x0e, 0x44, 0xd9, 0x52, 0xf4, 0x52, 0xa7, 0x98, 0xd3, 0x4b, 0x09, 0xc4, 0xb3,
+	0x3a, 0x80, 0x54, 0x10, 0x5e, 0xe2, 0x67, 0x8f, 0x7e, 0x78, 0x38, 0xf6, 0xd9, 0xe5, 0xf5, 0xc5,
+	0xfe, 0x28, 0x9c, 0x36, 0xc3, 0x19, 0x0d, 0x46, 0x61, 0xe4, 0x35, 0x65, 0x98, 0x47, 0xea, 0x97,
+	0x6e, 0x1c, 0x2a, 0xe0, 0xa2, 0x22, 0x90, 0xcf, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xa8, 0xa0,
+	0xf6, 0xcb, 0x18, 0x0e, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/voltha/health.pb.go b/vendor/github.com/opencord/voltha-protos/go/voltha/health.pb.go
new file mode 100644
index 0000000..e5a0cf5
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/voltha/health.pb.go
@@ -0,0 +1,200 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/health.proto
+
+package voltha
+
+import (
+	context "context"
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	empty "github.com/golang/protobuf/ptypes/empty"
+	_ "github.com/opencord/voltha-protos/go/common"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// Health states
+type HealthStatus_HealthState int32
+
+const (
+	HealthStatus_HEALTHY    HealthStatus_HealthState = 0
+	HealthStatus_OVERLOADED HealthStatus_HealthState = 1
+	HealthStatus_DYING      HealthStatus_HealthState = 2
+)
+
+var HealthStatus_HealthState_name = map[int32]string{
+	0: "HEALTHY",
+	1: "OVERLOADED",
+	2: "DYING",
+}
+
+var HealthStatus_HealthState_value = map[string]int32{
+	"HEALTHY":    0,
+	"OVERLOADED": 1,
+	"DYING":      2,
+}
+
+func (x HealthStatus_HealthState) String() string {
+	return proto.EnumName(HealthStatus_HealthState_name, int32(x))
+}
+
+func (HealthStatus_HealthState) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_dd1fc2b2d96d69b8, []int{0, 0}
+}
+
+// Encode health status of a Voltha instance
+type HealthStatus struct {
+	// Current state of health of this Voltha instance
+	State                HealthStatus_HealthState `protobuf:"varint,1,opt,name=state,proto3,enum=voltha.HealthStatus_HealthState" json:"state,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *HealthStatus) Reset()         { *m = HealthStatus{} }
+func (m *HealthStatus) String() string { return proto.CompactTextString(m) }
+func (*HealthStatus) ProtoMessage()    {}
+func (*HealthStatus) Descriptor() ([]byte, []int) {
+	return fileDescriptor_dd1fc2b2d96d69b8, []int{0}
+}
+
+func (m *HealthStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HealthStatus.Unmarshal(m, b)
+}
+func (m *HealthStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HealthStatus.Marshal(b, m, deterministic)
+}
+func (m *HealthStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HealthStatus.Merge(m, src)
+}
+func (m *HealthStatus) XXX_Size() int {
+	return xxx_messageInfo_HealthStatus.Size(m)
+}
+func (m *HealthStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_HealthStatus.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HealthStatus proto.InternalMessageInfo
+
+func (m *HealthStatus) GetState() HealthStatus_HealthState {
+	if m != nil {
+		return m.State
+	}
+	return HealthStatus_HEALTHY
+}
+
+func init() {
+	proto.RegisterEnum("voltha.HealthStatus_HealthState", HealthStatus_HealthState_name, HealthStatus_HealthState_value)
+	proto.RegisterType((*HealthStatus)(nil), "voltha.HealthStatus")
+}
+
+func init() { proto.RegisterFile("voltha_protos/health.proto", fileDescriptor_dd1fc2b2d96d69b8) }
+
+var fileDescriptor_dd1fc2b2d96d69b8 = []byte{
+	// 289 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2a, 0xcb, 0xcf, 0x29,
+	0xc9, 0x48, 0x8c, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x2f, 0xd6, 0xcf, 0x48, 0x4d, 0xcc, 0x29, 0xc9,
+	0xd0, 0x03, 0xf3, 0x84, 0xd8, 0x20, 0x72, 0x52, 0x32, 0xe9, 0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa,
+	0x89, 0x05, 0x99, 0xfa, 0x89, 0x79, 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0x10,
+	0x55, 0x52, 0xd2, 0x50, 0x59, 0x30, 0x2f, 0xa9, 0x34, 0x4d, 0x3f, 0x35, 0xb7, 0xa0, 0xa4, 0x12,
+	0x2a, 0x29, 0x81, 0x6a, 0x7c, 0x6e, 0x6a, 0x49, 0x22, 0x44, 0x46, 0xa9, 0x85, 0x91, 0x8b, 0xc7,
+	0x03, 0x6c, 0x5b, 0x70, 0x49, 0x62, 0x49, 0x69, 0xb1, 0x90, 0x2d, 0x17, 0x6b, 0x71, 0x49, 0x62,
+	0x49, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x9f, 0x91, 0x82, 0x1e, 0x44, 0xab, 0x1e, 0xb2, 0x22,
+	0x24, 0x4e, 0xaa, 0x13, 0xeb, 0x8b, 0x6f, 0x67, 0x65, 0x19, 0x83, 0x20, 0xba, 0x94, 0x4c, 0xb9,
+	0xb8, 0x91, 0x24, 0x85, 0xb8, 0xb9, 0xd8, 0x3d, 0x5c, 0x1d, 0x7d, 0x42, 0x3c, 0x22, 0x05, 0x18,
+	0x84, 0xf8, 0xb8, 0xb8, 0xfc, 0xc3, 0x5c, 0x83, 0x7c, 0xfc, 0x1d, 0x5d, 0x5c, 0x5d, 0x04, 0x18,
+	0x85, 0x38, 0xb9, 0x58, 0x5d, 0x22, 0x3d, 0xfd, 0xdc, 0x05, 0x98, 0x8c, 0x12, 0xb9, 0x78, 0xa1,
+	0xda, 0x52, 0x8b, 0xca, 0x32, 0x93, 0x53, 0x85, 0x02, 0xb8, 0xf8, 0xdd, 0x53, 0x4b, 0x50, 0x5c,
+	0x26, 0xa6, 0x07, 0xf1, 0xa2, 0x1e, 0xcc, 0x8b, 0x7a, 0xae, 0x20, 0x2f, 0x4a, 0x89, 0x60, 0x73,
+	0xa2, 0x12, 0x7f, 0xd3, 0xe5, 0x27, 0x93, 0x99, 0x38, 0x85, 0xd8, 0xa1, 0x81, 0xe9, 0xa4, 0x1b,
+	0xa5, 0x9d, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x5f, 0x90, 0x9a,
+	0x97, 0x9c, 0x5f, 0x94, 0xa2, 0x0f, 0xd1, 0xab, 0x0b, 0x0d, 0x99, 0xf4, 0x7c, 0xa8, 0x40, 0x12,
+	0x1b, 0x58, 0xc4, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x06, 0x8f, 0xa7, 0x7d, 0x9a, 0x01, 0x00,
+	0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// HealthServiceClient is the client API for HealthService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type HealthServiceClient interface {
+	// Return current health status of a Voltha instance
+	GetHealthStatus(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*HealthStatus, error)
+}
+
+type healthServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewHealthServiceClient(cc *grpc.ClientConn) HealthServiceClient {
+	return &healthServiceClient{cc}
+}
+
+func (c *healthServiceClient) GetHealthStatus(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*HealthStatus, error) {
+	out := new(HealthStatus)
+	err := c.cc.Invoke(ctx, "/voltha.HealthService/GetHealthStatus", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// HealthServiceServer is the server API for HealthService service.
+type HealthServiceServer interface {
+	// Return current health status of a Voltha instance
+	GetHealthStatus(context.Context, *empty.Empty) (*HealthStatus, error)
+}
+
+func RegisterHealthServiceServer(s *grpc.Server, srv HealthServiceServer) {
+	s.RegisterService(&_HealthService_serviceDesc, srv)
+}
+
+func _HealthService_GetHealthStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(HealthServiceServer).GetHealthStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.HealthService/GetHealthStatus",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(HealthServiceServer).GetHealthStatus(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _HealthService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "voltha.HealthService",
+	HandlerType: (*HealthServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetHealthStatus",
+			Handler:    _HealthService_GetHealthStatus_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "voltha_protos/health.proto",
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/voltha/logical_device.pb.go b/vendor/github.com/opencord/voltha-protos/go/voltha/logical_device.pb.go
new file mode 100644
index 0000000..ea87a4c
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/voltha/logical_device.pb.go
@@ -0,0 +1,390 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/logical_device.proto
+
+package voltha
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	_ "github.com/opencord/voltha-protos/go/common"
+	openflow_13 "github.com/opencord/voltha-protos/go/openflow_13"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type LogicalPortId struct {
+	// unique id of logical device
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// id of the port on the logical device
+	PortId               string   `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *LogicalPortId) Reset()         { *m = LogicalPortId{} }
+func (m *LogicalPortId) String() string { return proto.CompactTextString(m) }
+func (*LogicalPortId) ProtoMessage()    {}
+func (*LogicalPortId) Descriptor() ([]byte, []int) {
+	return fileDescriptor_caf139ab3abc8240, []int{0}
+}
+
+func (m *LogicalPortId) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogicalPortId.Unmarshal(m, b)
+}
+func (m *LogicalPortId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogicalPortId.Marshal(b, m, deterministic)
+}
+func (m *LogicalPortId) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogicalPortId.Merge(m, src)
+}
+func (m *LogicalPortId) XXX_Size() int {
+	return xxx_messageInfo_LogicalPortId.Size(m)
+}
+func (m *LogicalPortId) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogicalPortId.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogicalPortId proto.InternalMessageInfo
+
+func (m *LogicalPortId) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *LogicalPortId) GetPortId() string {
+	if m != nil {
+		return m.PortId
+	}
+	return ""
+}
+
+type LogicalPort struct {
+	Id                   string                    `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	OfpPort              *openflow_13.OfpPort      `protobuf:"bytes,2,opt,name=ofp_port,json=ofpPort,proto3" json:"ofp_port,omitempty"`
+	DeviceId             string                    `protobuf:"bytes,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
+	DevicePortNo         uint32                    `protobuf:"varint,4,opt,name=device_port_no,json=devicePortNo,proto3" json:"device_port_no,omitempty"`
+	RootPort             bool                      `protobuf:"varint,5,opt,name=root_port,json=rootPort,proto3" json:"root_port,omitempty"`
+	OfpPortStats         *openflow_13.OfpPortStats `protobuf:"bytes,6,opt,name=ofp_port_stats,json=ofpPortStats,proto3" json:"ofp_port_stats,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
+	XXX_unrecognized     []byte                    `json:"-"`
+	XXX_sizecache        int32                     `json:"-"`
+}
+
+func (m *LogicalPort) Reset()         { *m = LogicalPort{} }
+func (m *LogicalPort) String() string { return proto.CompactTextString(m) }
+func (*LogicalPort) ProtoMessage()    {}
+func (*LogicalPort) Descriptor() ([]byte, []int) {
+	return fileDescriptor_caf139ab3abc8240, []int{1}
+}
+
+func (m *LogicalPort) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogicalPort.Unmarshal(m, b)
+}
+func (m *LogicalPort) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogicalPort.Marshal(b, m, deterministic)
+}
+func (m *LogicalPort) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogicalPort.Merge(m, src)
+}
+func (m *LogicalPort) XXX_Size() int {
+	return xxx_messageInfo_LogicalPort.Size(m)
+}
+func (m *LogicalPort) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogicalPort.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogicalPort proto.InternalMessageInfo
+
+func (m *LogicalPort) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *LogicalPort) GetOfpPort() *openflow_13.OfpPort {
+	if m != nil {
+		return m.OfpPort
+	}
+	return nil
+}
+
+func (m *LogicalPort) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *LogicalPort) GetDevicePortNo() uint32 {
+	if m != nil {
+		return m.DevicePortNo
+	}
+	return 0
+}
+
+func (m *LogicalPort) GetRootPort() bool {
+	if m != nil {
+		return m.RootPort
+	}
+	return false
+}
+
+func (m *LogicalPort) GetOfpPortStats() *openflow_13.OfpPortStats {
+	if m != nil {
+		return m.OfpPortStats
+	}
+	return nil
+}
+
+type LogicalPorts struct {
+	Items                []*LogicalPort `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *LogicalPorts) Reset()         { *m = LogicalPorts{} }
+func (m *LogicalPorts) String() string { return proto.CompactTextString(m) }
+func (*LogicalPorts) ProtoMessage()    {}
+func (*LogicalPorts) Descriptor() ([]byte, []int) {
+	return fileDescriptor_caf139ab3abc8240, []int{2}
+}
+
+func (m *LogicalPorts) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogicalPorts.Unmarshal(m, b)
+}
+func (m *LogicalPorts) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogicalPorts.Marshal(b, m, deterministic)
+}
+func (m *LogicalPorts) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogicalPorts.Merge(m, src)
+}
+func (m *LogicalPorts) XXX_Size() int {
+	return xxx_messageInfo_LogicalPorts.Size(m)
+}
+func (m *LogicalPorts) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogicalPorts.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogicalPorts proto.InternalMessageInfo
+
+func (m *LogicalPorts) GetItems() []*LogicalPort {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type LogicalDevice struct {
+	// unique id of logical device
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// unique datapath id for the logical device (used by the SDN controller)
+	DatapathId uint64 `protobuf:"varint,2,opt,name=datapath_id,json=datapathId,proto3" json:"datapath_id,omitempty"`
+	// device description
+	Desc *openflow_13.OfpDesc `protobuf:"bytes,3,opt,name=desc,proto3" json:"desc,omitempty"`
+	// device features
+	SwitchFeatures *openflow_13.OfpSwitchFeatures `protobuf:"bytes,4,opt,name=switch_features,json=switchFeatures,proto3" json:"switch_features,omitempty"`
+	// name of the root device anchoring logical device
+	RootDeviceId string `protobuf:"bytes,5,opt,name=root_device_id,json=rootDeviceId,proto3" json:"root_device_id,omitempty"`
+	// logical device ports
+	Ports []*LogicalPort `protobuf:"bytes,128,rep,name=ports,proto3" json:"ports,omitempty"`
+	// flows configured on the logical device
+	Flows *openflow_13.Flows `protobuf:"bytes,129,opt,name=flows,proto3" json:"flows,omitempty"`
+	// flow groups configured on the logical device
+	FlowGroups *openflow_13.FlowGroups `protobuf:"bytes,130,opt,name=flow_groups,json=flowGroups,proto3" json:"flow_groups,omitempty"`
+	// meters configured on the logical device
+	Meters               *openflow_13.Meters `protobuf:"bytes,131,opt,name=meters,proto3" json:"meters,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *LogicalDevice) Reset()         { *m = LogicalDevice{} }
+func (m *LogicalDevice) String() string { return proto.CompactTextString(m) }
+func (*LogicalDevice) ProtoMessage()    {}
+func (*LogicalDevice) Descriptor() ([]byte, []int) {
+	return fileDescriptor_caf139ab3abc8240, []int{3}
+}
+
+func (m *LogicalDevice) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogicalDevice.Unmarshal(m, b)
+}
+func (m *LogicalDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogicalDevice.Marshal(b, m, deterministic)
+}
+func (m *LogicalDevice) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogicalDevice.Merge(m, src)
+}
+func (m *LogicalDevice) XXX_Size() int {
+	return xxx_messageInfo_LogicalDevice.Size(m)
+}
+func (m *LogicalDevice) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogicalDevice.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogicalDevice proto.InternalMessageInfo
+
+func (m *LogicalDevice) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *LogicalDevice) GetDatapathId() uint64 {
+	if m != nil {
+		return m.DatapathId
+	}
+	return 0
+}
+
+func (m *LogicalDevice) GetDesc() *openflow_13.OfpDesc {
+	if m != nil {
+		return m.Desc
+	}
+	return nil
+}
+
+func (m *LogicalDevice) GetSwitchFeatures() *openflow_13.OfpSwitchFeatures {
+	if m != nil {
+		return m.SwitchFeatures
+	}
+	return nil
+}
+
+func (m *LogicalDevice) GetRootDeviceId() string {
+	if m != nil {
+		return m.RootDeviceId
+	}
+	return ""
+}
+
+func (m *LogicalDevice) GetPorts() []*LogicalPort {
+	if m != nil {
+		return m.Ports
+	}
+	return nil
+}
+
+func (m *LogicalDevice) GetFlows() *openflow_13.Flows {
+	if m != nil {
+		return m.Flows
+	}
+	return nil
+}
+
+func (m *LogicalDevice) GetFlowGroups() *openflow_13.FlowGroups {
+	if m != nil {
+		return m.FlowGroups
+	}
+	return nil
+}
+
+func (m *LogicalDevice) GetMeters() *openflow_13.Meters {
+	if m != nil {
+		return m.Meters
+	}
+	return nil
+}
+
+type LogicalDevices struct {
+	Items                []*LogicalDevice `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *LogicalDevices) Reset()         { *m = LogicalDevices{} }
+func (m *LogicalDevices) String() string { return proto.CompactTextString(m) }
+func (*LogicalDevices) ProtoMessage()    {}
+func (*LogicalDevices) Descriptor() ([]byte, []int) {
+	return fileDescriptor_caf139ab3abc8240, []int{4}
+}
+
+func (m *LogicalDevices) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LogicalDevices.Unmarshal(m, b)
+}
+func (m *LogicalDevices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LogicalDevices.Marshal(b, m, deterministic)
+}
+func (m *LogicalDevices) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LogicalDevices.Merge(m, src)
+}
+func (m *LogicalDevices) XXX_Size() int {
+	return xxx_messageInfo_LogicalDevices.Size(m)
+}
+func (m *LogicalDevices) XXX_DiscardUnknown() {
+	xxx_messageInfo_LogicalDevices.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LogicalDevices proto.InternalMessageInfo
+
+func (m *LogicalDevices) GetItems() []*LogicalDevice {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*LogicalPortId)(nil), "voltha.LogicalPortId")
+	proto.RegisterType((*LogicalPort)(nil), "voltha.LogicalPort")
+	proto.RegisterType((*LogicalPorts)(nil), "voltha.LogicalPorts")
+	proto.RegisterType((*LogicalDevice)(nil), "voltha.LogicalDevice")
+	proto.RegisterType((*LogicalDevices)(nil), "voltha.LogicalDevices")
+}
+
+func init() { proto.RegisterFile("voltha_protos/logical_device.proto", fileDescriptor_caf139ab3abc8240) }
+
+var fileDescriptor_caf139ab3abc8240 = []byte{
+	// 532 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcd, 0x6a, 0xdb, 0x40,
+	0x10, 0xae, 0x6c, 0xcb, 0xb1, 0x47, 0x8e, 0x0b, 0x1b, 0x42, 0x44, 0xd2, 0x12, 0x23, 0x7a, 0x70,
+	0x08, 0xb1, 0x53, 0x9b, 0x42, 0x7b, 0x28, 0xb4, 0x26, 0xa4, 0x18, 0xda, 0x52, 0xb6, 0xb7, 0x5e,
+	0xc4, 0x46, 0x5a, 0xcb, 0x02, 0xdb, 0x23, 0xb4, 0xeb, 0xe4, 0xda, 0x9f, 0xd7, 0xea, 0x2b, 0xf4,
+	0x25, 0xfa, 0x08, 0x3d, 0xf4, 0x5c, 0x76, 0x56, 0x4a, 0xad, 0x38, 0x39, 0xea, 0xfb, 0x99, 0xf9,
+	0xf6, 0x1b, 0x04, 0xc1, 0x35, 0x2e, 0xf4, 0x5c, 0x84, 0x59, 0x8e, 0x1a, 0xd5, 0x70, 0x81, 0x49,
+	0x1a, 0x89, 0x45, 0x18, 0xcb, 0xeb, 0x34, 0x92, 0x03, 0x42, 0x59, 0xd3, 0x6a, 0x0e, 0x9f, 0x24,
+	0x88, 0xc9, 0x42, 0x0e, 0x45, 0x96, 0x0e, 0xc5, 0x6a, 0x85, 0x5a, 0xe8, 0x14, 0x57, 0xca, 0xaa,
+	0x0e, 0xfd, 0xea, 0xa4, 0xa5, 0xd4, 0xa2, 0x60, 0x8e, 0xab, 0x0c, 0x66, 0x72, 0x35, 0x5b, 0xe0,
+	0x4d, 0xf8, 0x7c, 0x6c, 0x05, 0xc1, 0x4b, 0xd8, 0x7d, 0x6f, 0x17, 0x7f, 0xc2, 0x5c, 0x4f, 0x63,
+	0xd6, 0x85, 0x5a, 0x1a, 0xfb, 0x4e, 0xcf, 0xe9, 0xb7, 0x79, 0x2d, 0x8d, 0xd9, 0x01, 0xec, 0x64,
+	0x98, 0xeb, 0x30, 0x8d, 0xfd, 0x1a, 0x81, 0xcd, 0x8c, 0x84, 0xc1, 0x1f, 0x07, 0xbc, 0x0d, 0xeb,
+	0x96, 0xf1, 0x1c, 0x5a, 0x38, 0xcb, 0x42, 0xa3, 0x26, 0xa7, 0x37, 0xda, 0x1f, 0x6c, 0xee, 0x2f,
+	0x49, 0xbe, 0x83, 0xb3, 0x8c, 0x26, 0x1c, 0x41, 0xdb, 0x3e, 0xde, 0x2c, 0xab, 0xd3, 0xa0, 0x96,
+	0x05, 0xa6, 0x31, 0x7b, 0x06, 0xdd, 0x82, 0xa4, 0x38, 0x2b, 0xf4, 0x1b, 0x3d, 0xa7, 0xbf, 0xcb,
+	0x3b, 0x16, 0x35, 0x03, 0x3e, 0xa2, 0x19, 0x91, 0x23, 0x6a, 0xbb, 0xd5, 0xed, 0x39, 0xfd, 0x16,
+	0x6f, 0x19, 0x80, 0xe6, 0xbf, 0x85, 0x6e, 0xb9, 0x34, 0x54, 0x5a, 0x68, 0xe5, 0x37, 0x29, 0xd7,
+	0xd1, 0xbd, 0xb9, 0xac, 0x84, 0x77, 0x8a, 0x74, 0x9f, 0xcd, 0x57, 0xf0, 0x0a, 0x3a, 0x1b, 0x6f,
+	0x56, 0xec, 0x04, 0xdc, 0x54, 0xcb, 0xa5, 0xf2, 0x9d, 0x5e, 0xbd, 0xef, 0x8d, 0xf6, 0x06, 0xb6,
+	0xef, 0xc1, 0x86, 0x88, 0x5b, 0x45, 0xf0, 0xb3, 0x7e, 0x5b, 0xf5, 0x05, 0x45, 0xde, 0x6a, 0xec,
+	0x18, 0xbc, 0x58, 0x68, 0x91, 0x09, 0x3d, 0x2f, 0xeb, 0x6e, 0x70, 0x28, 0xa1, 0x69, 0xcc, 0x4e,
+	0xa0, 0x11, 0x4b, 0x15, 0x51, 0x37, 0xf7, 0xd5, 0x69, 0x48, 0x4e, 0x12, 0x36, 0x85, 0xc7, 0xea,
+	0x26, 0xd5, 0xd1, 0x3c, 0x9c, 0x49, 0xa1, 0xd7, 0xb9, 0x54, 0xd4, 0x97, 0x37, 0xea, 0x6d, 0xb9,
+	0xee, 0xe8, 0x78, 0xd7, 0x02, 0x97, 0xc5, 0xb7, 0x69, 0x9e, 0x3a, 0xfd, 0x7f, 0x1b, 0x97, 0x22,
+	0x77, 0x0c, 0x7a, 0x51, 0xde, 0xe7, 0x05, 0xb8, 0xa6, 0x35, 0xe5, 0x7f, 0x7d, 0xb8, 0x8a, 0x49,
+	0xfb, 0xf7, 0xdf, 0x5f, 0x4f, 0x1b, 0xe6, 0xd9, 0xdc, 0xaa, 0xd9, 0x39, 0xb8, 0x26, 0x8b, 0xf2,
+	0xbf, 0x39, 0x14, 0x8f, 0x55, 0xe2, 0x5d, 0x1a, 0x6a, 0xe2, 0x1a, 0xd7, 0x23, 0x6e, 0x85, 0xec,
+	0x0d, 0x78, 0x44, 0x27, 0x39, 0xae, 0x33, 0xe5, 0x7f, 0xb7, 0xbe, 0x83, 0x2d, 0xdf, 0x3b, 0xe2,
+	0x4b, 0x33, 0xcc, 0x6e, 0x21, 0x36, 0x86, 0xe6, 0x52, 0x6a, 0x99, 0x2b, 0xff, 0x87, 0x35, 0xef,
+	0x55, 0xcc, 0x1f, 0x88, 0x2b, 0x8d, 0x85, 0x34, 0x78, 0x0d, 0xdd, 0xca, 0xf5, 0x14, 0x3b, 0xad,
+	0xde, 0x7e, 0xff, 0xce, 0x83, 0xad, 0xac, 0xb8, 0xfe, 0xe4, 0xec, 0xcb, 0x69, 0x92, 0xea, 0xf9,
+	0xfa, 0x6a, 0x10, 0xe1, 0x92, 0xfe, 0xc3, 0x08, 0xf3, 0x78, 0x68, 0x2d, 0x67, 0xc5, 0xef, 0x99,
+	0x60, 0x01, 0x5c, 0x35, 0x09, 0x19, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x36, 0x50, 0xf6, 0xd2,
+	0x24, 0x04, 0x00, 0x00,
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/voltha/ponsim.pb.go b/vendor/github.com/opencord/voltha-protos/go/voltha/ponsim.pb.go
new file mode 100644
index 0000000..7335bd8
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/voltha/ponsim.pb.go
@@ -0,0 +1,685 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/ponsim.proto
+
+package voltha
+
+import (
+	context "context"
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	empty "github.com/golang/protobuf/ptypes/empty"
+	openflow_13 "github.com/opencord/voltha-protos/go/openflow_13"
+	grpc "google.golang.org/grpc"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type PonSimOnuDeviceInfo struct {
+	UniPort              int32    `protobuf:"varint,1,opt,name=uni_port,json=uniPort,proto3" json:"uni_port,omitempty"`
+	SerialNumber         string   `protobuf:"bytes,2,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PonSimOnuDeviceInfo) Reset()         { *m = PonSimOnuDeviceInfo{} }
+func (m *PonSimOnuDeviceInfo) String() string { return proto.CompactTextString(m) }
+func (*PonSimOnuDeviceInfo) ProtoMessage()    {}
+func (*PonSimOnuDeviceInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{0}
+}
+
+func (m *PonSimOnuDeviceInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonSimOnuDeviceInfo.Unmarshal(m, b)
+}
+func (m *PonSimOnuDeviceInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonSimOnuDeviceInfo.Marshal(b, m, deterministic)
+}
+func (m *PonSimOnuDeviceInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonSimOnuDeviceInfo.Merge(m, src)
+}
+func (m *PonSimOnuDeviceInfo) XXX_Size() int {
+	return xxx_messageInfo_PonSimOnuDeviceInfo.Size(m)
+}
+func (m *PonSimOnuDeviceInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonSimOnuDeviceInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonSimOnuDeviceInfo proto.InternalMessageInfo
+
+func (m *PonSimOnuDeviceInfo) GetUniPort() int32 {
+	if m != nil {
+		return m.UniPort
+	}
+	return 0
+}
+
+func (m *PonSimOnuDeviceInfo) GetSerialNumber() string {
+	if m != nil {
+		return m.SerialNumber
+	}
+	return ""
+}
+
+type PonSimDeviceInfo struct {
+	NniPort              int32                  `protobuf:"varint,1,opt,name=nni_port,json=nniPort,proto3" json:"nni_port,omitempty"`
+	Onus                 []*PonSimOnuDeviceInfo `protobuf:"bytes,2,rep,name=onus,proto3" json:"onus,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *PonSimDeviceInfo) Reset()         { *m = PonSimDeviceInfo{} }
+func (m *PonSimDeviceInfo) String() string { return proto.CompactTextString(m) }
+func (*PonSimDeviceInfo) ProtoMessage()    {}
+func (*PonSimDeviceInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{1}
+}
+
+func (m *PonSimDeviceInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonSimDeviceInfo.Unmarshal(m, b)
+}
+func (m *PonSimDeviceInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonSimDeviceInfo.Marshal(b, m, deterministic)
+}
+func (m *PonSimDeviceInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonSimDeviceInfo.Merge(m, src)
+}
+func (m *PonSimDeviceInfo) XXX_Size() int {
+	return xxx_messageInfo_PonSimDeviceInfo.Size(m)
+}
+func (m *PonSimDeviceInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonSimDeviceInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonSimDeviceInfo proto.InternalMessageInfo
+
+func (m *PonSimDeviceInfo) GetNniPort() int32 {
+	if m != nil {
+		return m.NniPort
+	}
+	return 0
+}
+
+func (m *PonSimDeviceInfo) GetOnus() []*PonSimOnuDeviceInfo {
+	if m != nil {
+		return m.Onus
+	}
+	return nil
+}
+
+type FlowTable struct {
+	Port                 int32                       `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"`
+	Flows                []*openflow_13.OfpFlowStats `protobuf:"bytes,2,rep,name=flows,proto3" json:"flows,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *FlowTable) Reset()         { *m = FlowTable{} }
+func (m *FlowTable) String() string { return proto.CompactTextString(m) }
+func (*FlowTable) ProtoMessage()    {}
+func (*FlowTable) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{2}
+}
+
+func (m *FlowTable) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlowTable.Unmarshal(m, b)
+}
+func (m *FlowTable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlowTable.Marshal(b, m, deterministic)
+}
+func (m *FlowTable) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlowTable.Merge(m, src)
+}
+func (m *FlowTable) XXX_Size() int {
+	return xxx_messageInfo_FlowTable.Size(m)
+}
+func (m *FlowTable) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlowTable.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlowTable proto.InternalMessageInfo
+
+func (m *FlowTable) GetPort() int32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+func (m *FlowTable) GetFlows() []*openflow_13.OfpFlowStats {
+	if m != nil {
+		return m.Flows
+	}
+	return nil
+}
+
+type PonSimFrame struct {
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Payload              []byte   `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
+	OutPort              int32    `protobuf:"varint,3,opt,name=out_port,json=outPort,proto3" json:"out_port,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PonSimFrame) Reset()         { *m = PonSimFrame{} }
+func (m *PonSimFrame) String() string { return proto.CompactTextString(m) }
+func (*PonSimFrame) ProtoMessage()    {}
+func (*PonSimFrame) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{3}
+}
+
+func (m *PonSimFrame) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonSimFrame.Unmarshal(m, b)
+}
+func (m *PonSimFrame) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonSimFrame.Marshal(b, m, deterministic)
+}
+func (m *PonSimFrame) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonSimFrame.Merge(m, src)
+}
+func (m *PonSimFrame) XXX_Size() int {
+	return xxx_messageInfo_PonSimFrame.Size(m)
+}
+func (m *PonSimFrame) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonSimFrame.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonSimFrame proto.InternalMessageInfo
+
+func (m *PonSimFrame) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *PonSimFrame) GetPayload() []byte {
+	if m != nil {
+		return m.Payload
+	}
+	return nil
+}
+
+func (m *PonSimFrame) GetOutPort() int32 {
+	if m != nil {
+		return m.OutPort
+	}
+	return 0
+}
+
+type PonSimPacketCounter struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value                int64    `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PonSimPacketCounter) Reset()         { *m = PonSimPacketCounter{} }
+func (m *PonSimPacketCounter) String() string { return proto.CompactTextString(m) }
+func (*PonSimPacketCounter) ProtoMessage()    {}
+func (*PonSimPacketCounter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{4}
+}
+
+func (m *PonSimPacketCounter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonSimPacketCounter.Unmarshal(m, b)
+}
+func (m *PonSimPacketCounter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonSimPacketCounter.Marshal(b, m, deterministic)
+}
+func (m *PonSimPacketCounter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonSimPacketCounter.Merge(m, src)
+}
+func (m *PonSimPacketCounter) XXX_Size() int {
+	return xxx_messageInfo_PonSimPacketCounter.Size(m)
+}
+func (m *PonSimPacketCounter) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonSimPacketCounter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonSimPacketCounter proto.InternalMessageInfo
+
+func (m *PonSimPacketCounter) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *PonSimPacketCounter) GetValue() int64 {
+	if m != nil {
+		return m.Value
+	}
+	return 0
+}
+
+type PonSimPortMetrics struct {
+	PortName             string                 `protobuf:"bytes,1,opt,name=port_name,json=portName,proto3" json:"port_name,omitempty"`
+	Packets              []*PonSimPacketCounter `protobuf:"bytes,2,rep,name=packets,proto3" json:"packets,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+	XXX_unrecognized     []byte                 `json:"-"`
+	XXX_sizecache        int32                  `json:"-"`
+}
+
+func (m *PonSimPortMetrics) Reset()         { *m = PonSimPortMetrics{} }
+func (m *PonSimPortMetrics) String() string { return proto.CompactTextString(m) }
+func (*PonSimPortMetrics) ProtoMessage()    {}
+func (*PonSimPortMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{5}
+}
+
+func (m *PonSimPortMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonSimPortMetrics.Unmarshal(m, b)
+}
+func (m *PonSimPortMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonSimPortMetrics.Marshal(b, m, deterministic)
+}
+func (m *PonSimPortMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonSimPortMetrics.Merge(m, src)
+}
+func (m *PonSimPortMetrics) XXX_Size() int {
+	return xxx_messageInfo_PonSimPortMetrics.Size(m)
+}
+func (m *PonSimPortMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonSimPortMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonSimPortMetrics proto.InternalMessageInfo
+
+func (m *PonSimPortMetrics) GetPortName() string {
+	if m != nil {
+		return m.PortName
+	}
+	return ""
+}
+
+func (m *PonSimPortMetrics) GetPackets() []*PonSimPacketCounter {
+	if m != nil {
+		return m.Packets
+	}
+	return nil
+}
+
+type PonSimMetrics struct {
+	Device               string               `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"`
+	Metrics              []*PonSimPortMetrics `protobuf:"bytes,2,rep,name=metrics,proto3" json:"metrics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *PonSimMetrics) Reset()         { *m = PonSimMetrics{} }
+func (m *PonSimMetrics) String() string { return proto.CompactTextString(m) }
+func (*PonSimMetrics) ProtoMessage()    {}
+func (*PonSimMetrics) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{6}
+}
+
+func (m *PonSimMetrics) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonSimMetrics.Unmarshal(m, b)
+}
+func (m *PonSimMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonSimMetrics.Marshal(b, m, deterministic)
+}
+func (m *PonSimMetrics) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonSimMetrics.Merge(m, src)
+}
+func (m *PonSimMetrics) XXX_Size() int {
+	return xxx_messageInfo_PonSimMetrics.Size(m)
+}
+func (m *PonSimMetrics) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonSimMetrics.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonSimMetrics proto.InternalMessageInfo
+
+func (m *PonSimMetrics) GetDevice() string {
+	if m != nil {
+		return m.Device
+	}
+	return ""
+}
+
+func (m *PonSimMetrics) GetMetrics() []*PonSimPortMetrics {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+type PonSimMetricsRequest struct {
+	Port                 int32    `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PonSimMetricsRequest) Reset()         { *m = PonSimMetricsRequest{} }
+func (m *PonSimMetricsRequest) String() string { return proto.CompactTextString(m) }
+func (*PonSimMetricsRequest) ProtoMessage()    {}
+func (*PonSimMetricsRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_352253851b8ea7c0, []int{7}
+}
+
+func (m *PonSimMetricsRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PonSimMetricsRequest.Unmarshal(m, b)
+}
+func (m *PonSimMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PonSimMetricsRequest.Marshal(b, m, deterministic)
+}
+func (m *PonSimMetricsRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PonSimMetricsRequest.Merge(m, src)
+}
+func (m *PonSimMetricsRequest) XXX_Size() int {
+	return xxx_messageInfo_PonSimMetricsRequest.Size(m)
+}
+func (m *PonSimMetricsRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_PonSimMetricsRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PonSimMetricsRequest proto.InternalMessageInfo
+
+func (m *PonSimMetricsRequest) GetPort() int32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*PonSimOnuDeviceInfo)(nil), "voltha.PonSimOnuDeviceInfo")
+	proto.RegisterType((*PonSimDeviceInfo)(nil), "voltha.PonSimDeviceInfo")
+	proto.RegisterType((*FlowTable)(nil), "voltha.FlowTable")
+	proto.RegisterType((*PonSimFrame)(nil), "voltha.PonSimFrame")
+	proto.RegisterType((*PonSimPacketCounter)(nil), "voltha.PonSimPacketCounter")
+	proto.RegisterType((*PonSimPortMetrics)(nil), "voltha.PonSimPortMetrics")
+	proto.RegisterType((*PonSimMetrics)(nil), "voltha.PonSimMetrics")
+	proto.RegisterType((*PonSimMetricsRequest)(nil), "voltha.PonSimMetricsRequest")
+}
+
+func init() { proto.RegisterFile("voltha_protos/ponsim.proto", fileDescriptor_352253851b8ea7c0) }
+
+var fileDescriptor_352253851b8ea7c0 = []byte{
+	// 555 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0x41, 0x6f, 0xd3, 0x4e,
+	0x10, 0xc5, 0x93, 0xb4, 0x4d, 0x9b, 0x69, 0xf3, 0xff, 0xd3, 0x6d, 0xa9, 0xd2, 0xf4, 0x40, 0xb4,
+	0x5c, 0x22, 0x50, 0x1d, 0xda, 0x88, 0x0b, 0x48, 0x80, 0x28, 0xb4, 0xe2, 0x40, 0x89, 0x36, 0xf4,
+	0x82, 0x10, 0x96, 0x63, 0x4f, 0x52, 0x0b, 0x7b, 0xc7, 0xd8, 0xbb, 0xa9, 0xfa, 0x0d, 0xf9, 0x58,
+	0xc8, 0xbb, 0x36, 0x89, 0xab, 0x84, 0xdb, 0xee, 0xf8, 0xe5, 0xf7, 0xe6, 0x8d, 0x27, 0x86, 0xee,
+	0x9c, 0x22, 0x75, 0xeb, 0xb9, 0x49, 0x4a, 0x8a, 0xb2, 0x41, 0x42, 0x32, 0x0b, 0x63, 0xc7, 0xdc,
+	0x58, 0xd3, 0x3e, 0xeb, 0x9e, 0xcc, 0x88, 0x66, 0x11, 0x0e, 0x4c, 0x75, 0xa2, 0xa7, 0x03, 0x8c,
+	0x13, 0x75, 0x6f, 0x45, 0xdd, 0x27, 0x55, 0x00, 0x25, 0x28, 0xa7, 0x11, 0xdd, 0xb9, 0x67, 0x43,
+	0x2b, 0xe0, 0x37, 0x70, 0x30, 0x22, 0x39, 0x0e, 0xe3, 0x2f, 0x52, 0x7f, 0xc0, 0x79, 0xe8, 0xe3,
+	0x27, 0x39, 0x25, 0x76, 0x0c, 0x3b, 0x5a, 0x86, 0x6e, 0x42, 0xa9, 0xea, 0xd4, 0x7b, 0xf5, 0xfe,
+	0x96, 0xd8, 0xd6, 0x32, 0x1c, 0x51, 0xaa, 0xd8, 0x53, 0x68, 0x67, 0x98, 0x86, 0x5e, 0xe4, 0x4a,
+	0x1d, 0x4f, 0x30, 0xed, 0x34, 0x7a, 0xf5, 0x7e, 0x4b, 0xec, 0xd9, 0xe2, 0xb5, 0xa9, 0xf1, 0x1f,
+	0xf0, 0xc8, 0x62, 0xab, 0x4c, 0xf9, 0x80, 0x29, 0x0b, 0xe6, 0x00, 0x36, 0x49, 0xea, 0xac, 0xd3,
+	0xe8, 0x6d, 0xf4, 0x77, 0xcf, 0x4f, 0x1c, 0xdb, 0xb5, 0xb3, 0xa2, 0x33, 0x61, 0x84, 0x5c, 0x40,
+	0xeb, 0x32, 0xa2, 0xbb, 0xaf, 0xde, 0x24, 0x42, 0xc6, 0x60, 0x73, 0x09, 0x6a, 0xce, 0xec, 0x0c,
+	0xb6, 0xf2, 0xa0, 0x0b, 0xe4, 0x72, 0x74, 0x9a, 0x26, 0xae, 0x39, 0x67, 0xca, 0x53, 0x99, 0xb0,
+	0x4a, 0x2e, 0x60, 0xd7, 0x1a, 0x5e, 0xa6, 0x5e, 0x8c, 0xec, 0x3f, 0x68, 0x84, 0x81, 0x61, 0xb6,
+	0x44, 0x23, 0x0c, 0x58, 0x07, 0xb6, 0x13, 0xef, 0x3e, 0x22, 0x2f, 0x30, 0x89, 0xf7, 0x44, 0x79,
+	0xcd, 0x83, 0x91, 0x56, 0x36, 0xd8, 0x86, 0x0d, 0x46, 0x5a, 0xe5, 0xc1, 0xf8, 0xdb, 0x72, 0xbc,
+	0x23, 0xcf, 0xff, 0x89, 0xea, 0x82, 0xb4, 0x54, 0x98, 0xe6, 0x1d, 0x4b, 0x2f, 0xc6, 0x82, 0x6e,
+	0xce, 0xec, 0x10, 0xb6, 0xe6, 0x5e, 0xa4, 0xd1, 0xd0, 0x37, 0x84, 0xbd, 0xf0, 0x19, 0xec, 0x17,
+	0x00, 0x4a, 0xd5, 0x67, 0x54, 0x69, 0xe8, 0x67, 0xec, 0x04, 0x5a, 0xb9, 0x99, 0xbb, 0xc4, 0xd8,
+	0xc9, 0x0b, 0xd7, 0x39, 0xe7, 0x65, 0xde, 0x67, 0x6e, 0xb6, 0x66, 0x9c, 0x95, 0x4e, 0x44, 0xa9,
+	0xe5, 0xdf, 0xa1, 0x6d, 0x9f, 0x97, 0x26, 0x47, 0xd0, 0x0c, 0xcc, 0xd8, 0x0b, 0x87, 0xe2, 0xc6,
+	0x86, 0xb0, 0x1d, 0x5b, 0x49, 0xc1, 0x3f, 0x7e, 0xc0, 0x5f, 0x34, 0x2a, 0x4a, 0x25, 0x7f, 0x06,
+	0x87, 0x15, 0xba, 0xc0, 0x5f, 0x1a, 0x33, 0xb5, 0xea, 0xd5, 0x9d, 0xff, 0x6e, 0x40, 0xd3, 0x8a,
+	0xd9, 0x2b, 0x68, 0x8d, 0x51, 0x06, 0xf6, 0x85, 0x1c, 0x54, 0x7d, 0x4c, 0xb1, 0x7b, 0xe4, 0xd8,
+	0xf5, 0x77, 0xca, 0xf5, 0x77, 0x3e, 0xe6, 0xeb, 0xcf, 0x6b, 0xec, 0x1d, 0xb4, 0x05, 0xfa, 0x18,
+	0xce, 0xd1, 0x28, 0x33, 0xb6, 0x46, 0xda, 0x5d, 0xc5, 0xe5, 0xb5, 0x17, 0x75, 0x76, 0x01, 0xed,
+	0x2b, 0x54, 0x4b, 0x1b, 0xbc, 0x8e, 0xd0, 0xa9, 0x12, 0x16, 0xbf, 0xe0, 0x35, 0xf6, 0x06, 0xfe,
+	0xbf, 0x49, 0x02, 0x4f, 0xe1, 0x62, 0x5f, 0xf7, 0x4b, 0xf9, 0xdf, 0xd2, 0x3f, 0x62, 0xbc, 0x86,
+	0x9d, 0x2b, 0x54, 0xe3, 0x7c, 0x51, 0xd7, 0xfa, 0x3f, 0xae, 0xfa, 0x17, 0x33, 0xe6, 0xb5, 0xf7,
+	0xa7, 0xdf, 0x9e, 0xcf, 0x42, 0x75, 0xab, 0x27, 0x8e, 0x4f, 0xb1, 0xf9, 0xf7, 0xfb, 0x94, 0x06,
+	0x03, 0xab, 0x3e, 0x2d, 0x3e, 0x0a, 0x33, 0x2a, 0x0a, 0x93, 0xa6, 0xa9, 0x0c, 0xff, 0x04, 0x00,
+	0x00, 0xff, 0xff, 0x62, 0xcb, 0x74, 0xbe, 0x77, 0x04, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// PonSimClient is the client API for PonSim service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type PonSimClient interface {
+	SendFrame(ctx context.Context, in *PonSimFrame, opts ...grpc.CallOption) (*empty.Empty, error)
+	ReceiveFrames(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (PonSim_ReceiveFramesClient, error)
+	GetDeviceInfo(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PonSimDeviceInfo, error)
+	UpdateFlowTable(ctx context.Context, in *FlowTable, opts ...grpc.CallOption) (*empty.Empty, error)
+	GetStats(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PonSimMetrics, error)
+}
+
+type ponSimClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewPonSimClient(cc *grpc.ClientConn) PonSimClient {
+	return &ponSimClient{cc}
+}
+
+func (c *ponSimClient) SendFrame(ctx context.Context, in *PonSimFrame, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.PonSim/SendFrame", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *ponSimClient) ReceiveFrames(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (PonSim_ReceiveFramesClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_PonSim_serviceDesc.Streams[0], "/voltha.PonSim/ReceiveFrames", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &ponSimReceiveFramesClient{stream}
+	if err := x.ClientStream.SendMsg(in); err != nil {
+		return nil, err
+	}
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	return x, nil
+}
+
+type PonSim_ReceiveFramesClient interface {
+	Recv() (*PonSimFrame, error)
+	grpc.ClientStream
+}
+
+type ponSimReceiveFramesClient struct {
+	grpc.ClientStream
+}
+
+func (x *ponSimReceiveFramesClient) Recv() (*PonSimFrame, error) {
+	m := new(PonSimFrame)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *ponSimClient) GetDeviceInfo(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PonSimDeviceInfo, error) {
+	out := new(PonSimDeviceInfo)
+	err := c.cc.Invoke(ctx, "/voltha.PonSim/GetDeviceInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *ponSimClient) UpdateFlowTable(ctx context.Context, in *FlowTable, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.PonSim/UpdateFlowTable", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *ponSimClient) GetStats(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*PonSimMetrics, error) {
+	out := new(PonSimMetrics)
+	err := c.cc.Invoke(ctx, "/voltha.PonSim/GetStats", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// PonSimServer is the server API for PonSim service.
+type PonSimServer interface {
+	SendFrame(context.Context, *PonSimFrame) (*empty.Empty, error)
+	ReceiveFrames(*empty.Empty, PonSim_ReceiveFramesServer) error
+	GetDeviceInfo(context.Context, *empty.Empty) (*PonSimDeviceInfo, error)
+	UpdateFlowTable(context.Context, *FlowTable) (*empty.Empty, error)
+	GetStats(context.Context, *empty.Empty) (*PonSimMetrics, error)
+}
+
+func RegisterPonSimServer(s *grpc.Server, srv PonSimServer) {
+	s.RegisterService(&_PonSim_serviceDesc, srv)
+}
+
+func _PonSim_SendFrame_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PonSimFrame)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PonSimServer).SendFrame(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.PonSim/SendFrame",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PonSimServer).SendFrame(ctx, req.(*PonSimFrame))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _PonSim_ReceiveFrames_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(empty.Empty)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(PonSimServer).ReceiveFrames(m, &ponSimReceiveFramesServer{stream})
+}
+
+type PonSim_ReceiveFramesServer interface {
+	Send(*PonSimFrame) error
+	grpc.ServerStream
+}
+
+type ponSimReceiveFramesServer struct {
+	grpc.ServerStream
+}
+
+func (x *ponSimReceiveFramesServer) Send(m *PonSimFrame) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func _PonSim_GetDeviceInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PonSimServer).GetDeviceInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.PonSim/GetDeviceInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PonSimServer).GetDeviceInfo(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _PonSim_UpdateFlowTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FlowTable)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PonSimServer).UpdateFlowTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.PonSim/UpdateFlowTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PonSimServer).UpdateFlowTable(ctx, req.(*FlowTable))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _PonSim_GetStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(PonSimServer).GetStats(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.PonSim/GetStats",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(PonSimServer).GetStats(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _PonSim_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "voltha.PonSim",
+	HandlerType: (*PonSimServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "SendFrame",
+			Handler:    _PonSim_SendFrame_Handler,
+		},
+		{
+			MethodName: "GetDeviceInfo",
+			Handler:    _PonSim_GetDeviceInfo_Handler,
+		},
+		{
+			MethodName: "UpdateFlowTable",
+			Handler:    _PonSim_UpdateFlowTable_Handler,
+		},
+		{
+			MethodName: "GetStats",
+			Handler:    _PonSim_GetStats_Handler,
+		},
+	},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "ReceiveFrames",
+			Handler:       _PonSim_ReceiveFrames_Handler,
+			ServerStreams: true,
+		},
+	},
+	Metadata: "voltha_protos/ponsim.proto",
+}
diff --git a/vendor/github.com/opencord/voltha-protos/go/voltha/voltha.pb.go b/vendor/github.com/opencord/voltha-protos/go/voltha/voltha.pb.go
new file mode 100644
index 0000000..17eaecf
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-protos/go/voltha/voltha.pb.go
@@ -0,0 +1,4358 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/voltha.proto
+
+package voltha
+
+import (
+	context "context"
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	empty "github.com/golang/protobuf/ptypes/empty"
+	common "github.com/opencord/voltha-protos/go/common"
+	omci "github.com/opencord/voltha-protos/go/omci"
+	openflow_13 "github.com/opencord/voltha-protos/go/openflow_13"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	grpc "google.golang.org/grpc"
+	math "math"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// ChildNode from public import voltha_protos/meta.proto
+type ChildNode = common.ChildNode
+
+// Access from public import voltha_protos/meta.proto
+type Access = common.Access
+
+var Access_name = common.Access_name
+var Access_value = common.Access_value
+
+const Access_CONFIG = Access(common.Access_CONFIG)
+const Access_READ_ONLY = Access(common.Access_READ_ONLY)
+const Access_REAL_TIME = Access(common.Access_REAL_TIME)
+
+var E_ChildNode = common.E_ChildNode
+
+var E_Access = common.E_Access
+
+// ID from public import voltha_protos/common.proto
+type ID = common.ID
+
+// IDs from public import voltha_protos/common.proto
+type IDs = common.IDs
+
+// LogLevel from public import voltha_protos/common.proto
+type LogLevel = common.LogLevel
+
+// Logging from public import voltha_protos/common.proto
+type Logging = common.Logging
+
+// LoggingComponent from public import voltha_protos/common.proto
+type LoggingComponent = common.LoggingComponent
+
+// Loggings from public import voltha_protos/common.proto
+type Loggings = common.Loggings
+
+// AdminState from public import voltha_protos/common.proto
+type AdminState = common.AdminState
+
+// OperStatus from public import voltha_protos/common.proto
+type OperStatus = common.OperStatus
+
+// ConnectStatus from public import voltha_protos/common.proto
+type ConnectStatus = common.ConnectStatus
+
+// OperationResp from public import voltha_protos/common.proto
+type OperationResp = common.OperationResp
+
+// TestModeKeys from public import voltha_protos/common.proto
+type TestModeKeys = common.TestModeKeys
+
+var TestModeKeys_name = common.TestModeKeys_name
+var TestModeKeys_value = common.TestModeKeys_value
+
+const TestModeKeys_api_test = TestModeKeys(common.TestModeKeys_api_test)
+
+// LogLevel_LogLevel from public import voltha_protos/common.proto
+type LogLevel_LogLevel = common.LogLevel_LogLevel
+
+var LogLevel_LogLevel_name = common.LogLevel_LogLevel_name
+var LogLevel_LogLevel_value = common.LogLevel_LogLevel_value
+
+const LogLevel_DEBUG = LogLevel_LogLevel(common.LogLevel_DEBUG)
+const LogLevel_INFO = LogLevel_LogLevel(common.LogLevel_INFO)
+const LogLevel_WARNING = LogLevel_LogLevel(common.LogLevel_WARNING)
+const LogLevel_ERROR = LogLevel_LogLevel(common.LogLevel_ERROR)
+const LogLevel_CRITICAL = LogLevel_LogLevel(common.LogLevel_CRITICAL)
+const LogLevel_FATAL = LogLevel_LogLevel(common.LogLevel_FATAL)
+
+// AdminState_AdminState from public import voltha_protos/common.proto
+type AdminState_AdminState = common.AdminState_AdminState
+
+var AdminState_AdminState_name = common.AdminState_AdminState_name
+var AdminState_AdminState_value = common.AdminState_AdminState_value
+
+const AdminState_UNKNOWN = AdminState_AdminState(common.AdminState_UNKNOWN)
+const AdminState_PREPROVISIONED = AdminState_AdminState(common.AdminState_PREPROVISIONED)
+const AdminState_ENABLED = AdminState_AdminState(common.AdminState_ENABLED)
+const AdminState_DISABLED = AdminState_AdminState(common.AdminState_DISABLED)
+const AdminState_DOWNLOADING_IMAGE = AdminState_AdminState(common.AdminState_DOWNLOADING_IMAGE)
+const AdminState_DELETED = AdminState_AdminState(common.AdminState_DELETED)
+
+// OperStatus_OperStatus from public import voltha_protos/common.proto
+type OperStatus_OperStatus = common.OperStatus_OperStatus
+
+var OperStatus_OperStatus_name = common.OperStatus_OperStatus_name
+var OperStatus_OperStatus_value = common.OperStatus_OperStatus_value
+
+const OperStatus_UNKNOWN = OperStatus_OperStatus(common.OperStatus_UNKNOWN)
+const OperStatus_DISCOVERED = OperStatus_OperStatus(common.OperStatus_DISCOVERED)
+const OperStatus_ACTIVATING = OperStatus_OperStatus(common.OperStatus_ACTIVATING)
+const OperStatus_TESTING = OperStatus_OperStatus(common.OperStatus_TESTING)
+const OperStatus_ACTIVE = OperStatus_OperStatus(common.OperStatus_ACTIVE)
+const OperStatus_FAILED = OperStatus_OperStatus(common.OperStatus_FAILED)
+
+// ConnectStatus_ConnectStatus from public import voltha_protos/common.proto
+type ConnectStatus_ConnectStatus = common.ConnectStatus_ConnectStatus
+
+var ConnectStatus_ConnectStatus_name = common.ConnectStatus_ConnectStatus_name
+var ConnectStatus_ConnectStatus_value = common.ConnectStatus_ConnectStatus_value
+
+const ConnectStatus_UNKNOWN = ConnectStatus_ConnectStatus(common.ConnectStatus_UNKNOWN)
+const ConnectStatus_UNREACHABLE = ConnectStatus_ConnectStatus(common.ConnectStatus_UNREACHABLE)
+const ConnectStatus_REACHABLE = ConnectStatus_ConnectStatus(common.ConnectStatus_REACHABLE)
+
+// OperationResp_OperationReturnCode from public import voltha_protos/common.proto
+type OperationResp_OperationReturnCode = common.OperationResp_OperationReturnCode
+
+var OperationResp_OperationReturnCode_name = common.OperationResp_OperationReturnCode_name
+var OperationResp_OperationReturnCode_value = common.OperationResp_OperationReturnCode_value
+
+const OperationResp_OPERATION_SUCCESS = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_SUCCESS)
+const OperationResp_OPERATION_FAILURE = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_FAILURE)
+const OperationResp_OPERATION_UNSUPPORTED = OperationResp_OperationReturnCode(common.OperationResp_OPERATION_UNSUPPORTED)
+
+// OfpHeader from public import voltha_protos/openflow_13.proto
+type OfpHeader = openflow_13.OfpHeader
+
+// OfpHelloElemHeader from public import voltha_protos/openflow_13.proto
+type OfpHelloElemHeader = openflow_13.OfpHelloElemHeader
+type OfpHelloElemHeader_Versionbitmap = openflow_13.OfpHelloElemHeader_Versionbitmap
+
+// OfpHelloElemVersionbitmap from public import voltha_protos/openflow_13.proto
+type OfpHelloElemVersionbitmap = openflow_13.OfpHelloElemVersionbitmap
+
+// OfpHello from public import voltha_protos/openflow_13.proto
+type OfpHello = openflow_13.OfpHello
+
+// OfpSwitchConfig from public import voltha_protos/openflow_13.proto
+type OfpSwitchConfig = openflow_13.OfpSwitchConfig
+
+// OfpTableMod from public import voltha_protos/openflow_13.proto
+type OfpTableMod = openflow_13.OfpTableMod
+
+// OfpPort from public import voltha_protos/openflow_13.proto
+type OfpPort = openflow_13.OfpPort
+
+// OfpSwitchFeatures from public import voltha_protos/openflow_13.proto
+type OfpSwitchFeatures = openflow_13.OfpSwitchFeatures
+
+// OfpPortStatus from public import voltha_protos/openflow_13.proto
+type OfpPortStatus = openflow_13.OfpPortStatus
+
+// OfpPortMod from public import voltha_protos/openflow_13.proto
+type OfpPortMod = openflow_13.OfpPortMod
+
+// OfpMatch from public import voltha_protos/openflow_13.proto
+type OfpMatch = openflow_13.OfpMatch
+
+// OfpOxmField from public import voltha_protos/openflow_13.proto
+type OfpOxmField = openflow_13.OfpOxmField
+type OfpOxmField_OfbField = openflow_13.OfpOxmField_OfbField
+type OfpOxmField_ExperimenterField = openflow_13.OfpOxmField_ExperimenterField
+
+// OfpOxmOfbField from public import voltha_protos/openflow_13.proto
+type OfpOxmOfbField = openflow_13.OfpOxmOfbField
+type OfpOxmOfbField_Port = openflow_13.OfpOxmOfbField_Port
+type OfpOxmOfbField_PhysicalPort = openflow_13.OfpOxmOfbField_PhysicalPort
+type OfpOxmOfbField_TableMetadata = openflow_13.OfpOxmOfbField_TableMetadata
+type OfpOxmOfbField_EthDst = openflow_13.OfpOxmOfbField_EthDst
+type OfpOxmOfbField_EthSrc = openflow_13.OfpOxmOfbField_EthSrc
+type OfpOxmOfbField_EthType = openflow_13.OfpOxmOfbField_EthType
+type OfpOxmOfbField_VlanVid = openflow_13.OfpOxmOfbField_VlanVid
+type OfpOxmOfbField_VlanPcp = openflow_13.OfpOxmOfbField_VlanPcp
+type OfpOxmOfbField_IpDscp = openflow_13.OfpOxmOfbField_IpDscp
+type OfpOxmOfbField_IpEcn = openflow_13.OfpOxmOfbField_IpEcn
+type OfpOxmOfbField_IpProto = openflow_13.OfpOxmOfbField_IpProto
+type OfpOxmOfbField_Ipv4Src = openflow_13.OfpOxmOfbField_Ipv4Src
+type OfpOxmOfbField_Ipv4Dst = openflow_13.OfpOxmOfbField_Ipv4Dst
+type OfpOxmOfbField_TcpSrc = openflow_13.OfpOxmOfbField_TcpSrc
+type OfpOxmOfbField_TcpDst = openflow_13.OfpOxmOfbField_TcpDst
+type OfpOxmOfbField_UdpSrc = openflow_13.OfpOxmOfbField_UdpSrc
+type OfpOxmOfbField_UdpDst = openflow_13.OfpOxmOfbField_UdpDst
+type OfpOxmOfbField_SctpSrc = openflow_13.OfpOxmOfbField_SctpSrc
+type OfpOxmOfbField_SctpDst = openflow_13.OfpOxmOfbField_SctpDst
+type OfpOxmOfbField_Icmpv4Type = openflow_13.OfpOxmOfbField_Icmpv4Type
+type OfpOxmOfbField_Icmpv4Code = openflow_13.OfpOxmOfbField_Icmpv4Code
+type OfpOxmOfbField_ArpOp = openflow_13.OfpOxmOfbField_ArpOp
+type OfpOxmOfbField_ArpSpa = openflow_13.OfpOxmOfbField_ArpSpa
+type OfpOxmOfbField_ArpTpa = openflow_13.OfpOxmOfbField_ArpTpa
+type OfpOxmOfbField_ArpSha = openflow_13.OfpOxmOfbField_ArpSha
+type OfpOxmOfbField_ArpTha = openflow_13.OfpOxmOfbField_ArpTha
+type OfpOxmOfbField_Ipv6Src = openflow_13.OfpOxmOfbField_Ipv6Src
+type OfpOxmOfbField_Ipv6Dst = openflow_13.OfpOxmOfbField_Ipv6Dst
+type OfpOxmOfbField_Ipv6Flabel = openflow_13.OfpOxmOfbField_Ipv6Flabel
+type OfpOxmOfbField_Icmpv6Type = openflow_13.OfpOxmOfbField_Icmpv6Type
+type OfpOxmOfbField_Icmpv6Code = openflow_13.OfpOxmOfbField_Icmpv6Code
+type OfpOxmOfbField_Ipv6NdTarget = openflow_13.OfpOxmOfbField_Ipv6NdTarget
+type OfpOxmOfbField_Ipv6NdSsl = openflow_13.OfpOxmOfbField_Ipv6NdSsl
+type OfpOxmOfbField_Ipv6NdTll = openflow_13.OfpOxmOfbField_Ipv6NdTll
+type OfpOxmOfbField_MplsLabel = openflow_13.OfpOxmOfbField_MplsLabel
+type OfpOxmOfbField_MplsTc = openflow_13.OfpOxmOfbField_MplsTc
+type OfpOxmOfbField_MplsBos = openflow_13.OfpOxmOfbField_MplsBos
+type OfpOxmOfbField_PbbIsid = openflow_13.OfpOxmOfbField_PbbIsid
+type OfpOxmOfbField_TunnelId = openflow_13.OfpOxmOfbField_TunnelId
+type OfpOxmOfbField_Ipv6Exthdr = openflow_13.OfpOxmOfbField_Ipv6Exthdr
+type OfpOxmOfbField_TableMetadataMask = openflow_13.OfpOxmOfbField_TableMetadataMask
+type OfpOxmOfbField_EthDstMask = openflow_13.OfpOxmOfbField_EthDstMask
+type OfpOxmOfbField_EthSrcMask = openflow_13.OfpOxmOfbField_EthSrcMask
+type OfpOxmOfbField_VlanVidMask = openflow_13.OfpOxmOfbField_VlanVidMask
+type OfpOxmOfbField_Ipv4SrcMask = openflow_13.OfpOxmOfbField_Ipv4SrcMask
+type OfpOxmOfbField_Ipv4DstMask = openflow_13.OfpOxmOfbField_Ipv4DstMask
+type OfpOxmOfbField_ArpSpaMask = openflow_13.OfpOxmOfbField_ArpSpaMask
+type OfpOxmOfbField_ArpTpaMask = openflow_13.OfpOxmOfbField_ArpTpaMask
+type OfpOxmOfbField_Ipv6SrcMask = openflow_13.OfpOxmOfbField_Ipv6SrcMask
+type OfpOxmOfbField_Ipv6DstMask = openflow_13.OfpOxmOfbField_Ipv6DstMask
+type OfpOxmOfbField_Ipv6FlabelMask = openflow_13.OfpOxmOfbField_Ipv6FlabelMask
+type OfpOxmOfbField_PbbIsidMask = openflow_13.OfpOxmOfbField_PbbIsidMask
+type OfpOxmOfbField_TunnelIdMask = openflow_13.OfpOxmOfbField_TunnelIdMask
+type OfpOxmOfbField_Ipv6ExthdrMask = openflow_13.OfpOxmOfbField_Ipv6ExthdrMask
+
+// OfpOxmExperimenterField from public import voltha_protos/openflow_13.proto
+type OfpOxmExperimenterField = openflow_13.OfpOxmExperimenterField
+
+// OfpAction from public import voltha_protos/openflow_13.proto
+type OfpAction = openflow_13.OfpAction
+type OfpAction_Output = openflow_13.OfpAction_Output
+type OfpAction_MplsTtl = openflow_13.OfpAction_MplsTtl
+type OfpAction_Push = openflow_13.OfpAction_Push
+type OfpAction_PopMpls = openflow_13.OfpAction_PopMpls
+type OfpAction_Group = openflow_13.OfpAction_Group
+type OfpAction_NwTtl = openflow_13.OfpAction_NwTtl
+type OfpAction_SetField = openflow_13.OfpAction_SetField
+type OfpAction_Experimenter = openflow_13.OfpAction_Experimenter
+
+// OfpActionOutput from public import voltha_protos/openflow_13.proto
+type OfpActionOutput = openflow_13.OfpActionOutput
+
+// OfpActionMplsTtl from public import voltha_protos/openflow_13.proto
+type OfpActionMplsTtl = openflow_13.OfpActionMplsTtl
+
+// OfpActionPush from public import voltha_protos/openflow_13.proto
+type OfpActionPush = openflow_13.OfpActionPush
+
+// OfpActionPopMpls from public import voltha_protos/openflow_13.proto
+type OfpActionPopMpls = openflow_13.OfpActionPopMpls
+
+// OfpActionGroup from public import voltha_protos/openflow_13.proto
+type OfpActionGroup = openflow_13.OfpActionGroup
+
+// OfpActionNwTtl from public import voltha_protos/openflow_13.proto
+type OfpActionNwTtl = openflow_13.OfpActionNwTtl
+
+// OfpActionSetField from public import voltha_protos/openflow_13.proto
+type OfpActionSetField = openflow_13.OfpActionSetField
+
+// OfpActionExperimenter from public import voltha_protos/openflow_13.proto
+type OfpActionExperimenter = openflow_13.OfpActionExperimenter
+
+// OfpInstruction from public import voltha_protos/openflow_13.proto
+type OfpInstruction = openflow_13.OfpInstruction
+type OfpInstruction_GotoTable = openflow_13.OfpInstruction_GotoTable
+type OfpInstruction_WriteMetadata = openflow_13.OfpInstruction_WriteMetadata
+type OfpInstruction_Actions = openflow_13.OfpInstruction_Actions
+type OfpInstruction_Meter = openflow_13.OfpInstruction_Meter
+type OfpInstruction_Experimenter = openflow_13.OfpInstruction_Experimenter
+
+// OfpInstructionGotoTable from public import voltha_protos/openflow_13.proto
+type OfpInstructionGotoTable = openflow_13.OfpInstructionGotoTable
+
+// OfpInstructionWriteMetadata from public import voltha_protos/openflow_13.proto
+type OfpInstructionWriteMetadata = openflow_13.OfpInstructionWriteMetadata
+
+// OfpInstructionActions from public import voltha_protos/openflow_13.proto
+type OfpInstructionActions = openflow_13.OfpInstructionActions
+
+// OfpInstructionMeter from public import voltha_protos/openflow_13.proto
+type OfpInstructionMeter = openflow_13.OfpInstructionMeter
+
+// OfpInstructionExperimenter from public import voltha_protos/openflow_13.proto
+type OfpInstructionExperimenter = openflow_13.OfpInstructionExperimenter
+
+// OfpFlowMod from public import voltha_protos/openflow_13.proto
+type OfpFlowMod = openflow_13.OfpFlowMod
+
+// OfpBucket from public import voltha_protos/openflow_13.proto
+type OfpBucket = openflow_13.OfpBucket
+
+// OfpGroupMod from public import voltha_protos/openflow_13.proto
+type OfpGroupMod = openflow_13.OfpGroupMod
+
+// OfpPacketOut from public import voltha_protos/openflow_13.proto
+type OfpPacketOut = openflow_13.OfpPacketOut
+
+// OfpPacketIn from public import voltha_protos/openflow_13.proto
+type OfpPacketIn = openflow_13.OfpPacketIn
+
+// OfpFlowRemoved from public import voltha_protos/openflow_13.proto
+type OfpFlowRemoved = openflow_13.OfpFlowRemoved
+
+// OfpMeterBandHeader from public import voltha_protos/openflow_13.proto
+type OfpMeterBandHeader = openflow_13.OfpMeterBandHeader
+type OfpMeterBandHeader_Drop = openflow_13.OfpMeterBandHeader_Drop
+type OfpMeterBandHeader_DscpRemark = openflow_13.OfpMeterBandHeader_DscpRemark
+type OfpMeterBandHeader_Experimenter = openflow_13.OfpMeterBandHeader_Experimenter
+
+// OfpMeterBandDrop from public import voltha_protos/openflow_13.proto
+type OfpMeterBandDrop = openflow_13.OfpMeterBandDrop
+
+// OfpMeterBandDscpRemark from public import voltha_protos/openflow_13.proto
+type OfpMeterBandDscpRemark = openflow_13.OfpMeterBandDscpRemark
+
+// OfpMeterBandExperimenter from public import voltha_protos/openflow_13.proto
+type OfpMeterBandExperimenter = openflow_13.OfpMeterBandExperimenter
+
+// OfpMeterMod from public import voltha_protos/openflow_13.proto
+type OfpMeterMod = openflow_13.OfpMeterMod
+
+// OfpErrorMsg from public import voltha_protos/openflow_13.proto
+type OfpErrorMsg = openflow_13.OfpErrorMsg
+
+// OfpErrorExperimenterMsg from public import voltha_protos/openflow_13.proto
+type OfpErrorExperimenterMsg = openflow_13.OfpErrorExperimenterMsg
+
+// OfpMultipartRequest from public import voltha_protos/openflow_13.proto
+type OfpMultipartRequest = openflow_13.OfpMultipartRequest
+
+// OfpMultipartReply from public import voltha_protos/openflow_13.proto
+type OfpMultipartReply = openflow_13.OfpMultipartReply
+
+// OfpDesc from public import voltha_protos/openflow_13.proto
+type OfpDesc = openflow_13.OfpDesc
+
+// OfpFlowStatsRequest from public import voltha_protos/openflow_13.proto
+type OfpFlowStatsRequest = openflow_13.OfpFlowStatsRequest
+
+// OfpFlowStats from public import voltha_protos/openflow_13.proto
+type OfpFlowStats = openflow_13.OfpFlowStats
+
+// OfpAggregateStatsRequest from public import voltha_protos/openflow_13.proto
+type OfpAggregateStatsRequest = openflow_13.OfpAggregateStatsRequest
+
+// OfpAggregateStatsReply from public import voltha_protos/openflow_13.proto
+type OfpAggregateStatsReply = openflow_13.OfpAggregateStatsReply
+
+// OfpTableFeatureProperty from public import voltha_protos/openflow_13.proto
+type OfpTableFeatureProperty = openflow_13.OfpTableFeatureProperty
+type OfpTableFeatureProperty_Instructions = openflow_13.OfpTableFeatureProperty_Instructions
+type OfpTableFeatureProperty_NextTables = openflow_13.OfpTableFeatureProperty_NextTables
+type OfpTableFeatureProperty_Actions = openflow_13.OfpTableFeatureProperty_Actions
+type OfpTableFeatureProperty_Oxm = openflow_13.OfpTableFeatureProperty_Oxm
+type OfpTableFeatureProperty_Experimenter = openflow_13.OfpTableFeatureProperty_Experimenter
+
+// OfpTableFeaturePropInstructions from public import voltha_protos/openflow_13.proto
+type OfpTableFeaturePropInstructions = openflow_13.OfpTableFeaturePropInstructions
+
+// OfpTableFeaturePropNextTables from public import voltha_protos/openflow_13.proto
+type OfpTableFeaturePropNextTables = openflow_13.OfpTableFeaturePropNextTables
+
+// OfpTableFeaturePropActions from public import voltha_protos/openflow_13.proto
+type OfpTableFeaturePropActions = openflow_13.OfpTableFeaturePropActions
+
+// OfpTableFeaturePropOxm from public import voltha_protos/openflow_13.proto
+type OfpTableFeaturePropOxm = openflow_13.OfpTableFeaturePropOxm
+
+// OfpTableFeaturePropExperimenter from public import voltha_protos/openflow_13.proto
+type OfpTableFeaturePropExperimenter = openflow_13.OfpTableFeaturePropExperimenter
+
+// OfpTableFeatures from public import voltha_protos/openflow_13.proto
+type OfpTableFeatures = openflow_13.OfpTableFeatures
+
+// OfpTableStats from public import voltha_protos/openflow_13.proto
+type OfpTableStats = openflow_13.OfpTableStats
+
+// OfpPortStatsRequest from public import voltha_protos/openflow_13.proto
+type OfpPortStatsRequest = openflow_13.OfpPortStatsRequest
+
+// OfpPortStats from public import voltha_protos/openflow_13.proto
+type OfpPortStats = openflow_13.OfpPortStats
+
+// OfpGroupStatsRequest from public import voltha_protos/openflow_13.proto
+type OfpGroupStatsRequest = openflow_13.OfpGroupStatsRequest
+
+// OfpBucketCounter from public import voltha_protos/openflow_13.proto
+type OfpBucketCounter = openflow_13.OfpBucketCounter
+
+// OfpGroupStats from public import voltha_protos/openflow_13.proto
+type OfpGroupStats = openflow_13.OfpGroupStats
+
+// OfpGroupDesc from public import voltha_protos/openflow_13.proto
+type OfpGroupDesc = openflow_13.OfpGroupDesc
+
+// OfpGroupEntry from public import voltha_protos/openflow_13.proto
+type OfpGroupEntry = openflow_13.OfpGroupEntry
+
+// OfpGroupFeatures from public import voltha_protos/openflow_13.proto
+type OfpGroupFeatures = openflow_13.OfpGroupFeatures
+
+// OfpMeterMultipartRequest from public import voltha_protos/openflow_13.proto
+type OfpMeterMultipartRequest = openflow_13.OfpMeterMultipartRequest
+
+// OfpMeterBandStats from public import voltha_protos/openflow_13.proto
+type OfpMeterBandStats = openflow_13.OfpMeterBandStats
+
+// OfpMeterStats from public import voltha_protos/openflow_13.proto
+type OfpMeterStats = openflow_13.OfpMeterStats
+
+// OfpMeterConfig from public import voltha_protos/openflow_13.proto
+type OfpMeterConfig = openflow_13.OfpMeterConfig
+
+// OfpMeterFeatures from public import voltha_protos/openflow_13.proto
+type OfpMeterFeatures = openflow_13.OfpMeterFeatures
+
+// OfpMeterEntry from public import voltha_protos/openflow_13.proto
+type OfpMeterEntry = openflow_13.OfpMeterEntry
+
+// OfpExperimenterMultipartHeader from public import voltha_protos/openflow_13.proto
+type OfpExperimenterMultipartHeader = openflow_13.OfpExperimenterMultipartHeader
+
+// OfpExperimenterHeader from public import voltha_protos/openflow_13.proto
+type OfpExperimenterHeader = openflow_13.OfpExperimenterHeader
+
+// OfpQueuePropHeader from public import voltha_protos/openflow_13.proto
+type OfpQueuePropHeader = openflow_13.OfpQueuePropHeader
+
+// OfpQueuePropMinRate from public import voltha_protos/openflow_13.proto
+type OfpQueuePropMinRate = openflow_13.OfpQueuePropMinRate
+
+// OfpQueuePropMaxRate from public import voltha_protos/openflow_13.proto
+type OfpQueuePropMaxRate = openflow_13.OfpQueuePropMaxRate
+
+// OfpQueuePropExperimenter from public import voltha_protos/openflow_13.proto
+type OfpQueuePropExperimenter = openflow_13.OfpQueuePropExperimenter
+
+// OfpPacketQueue from public import voltha_protos/openflow_13.proto
+type OfpPacketQueue = openflow_13.OfpPacketQueue
+
+// OfpQueueGetConfigRequest from public import voltha_protos/openflow_13.proto
+type OfpQueueGetConfigRequest = openflow_13.OfpQueueGetConfigRequest
+
+// OfpQueueGetConfigReply from public import voltha_protos/openflow_13.proto
+type OfpQueueGetConfigReply = openflow_13.OfpQueueGetConfigReply
+
+// OfpActionSetQueue from public import voltha_protos/openflow_13.proto
+type OfpActionSetQueue = openflow_13.OfpActionSetQueue
+
+// OfpQueueStatsRequest from public import voltha_protos/openflow_13.proto
+type OfpQueueStatsRequest = openflow_13.OfpQueueStatsRequest
+
+// OfpQueueStats from public import voltha_protos/openflow_13.proto
+type OfpQueueStats = openflow_13.OfpQueueStats
+
+// OfpRoleRequest from public import voltha_protos/openflow_13.proto
+type OfpRoleRequest = openflow_13.OfpRoleRequest
+
+// OfpAsyncConfig from public import voltha_protos/openflow_13.proto
+type OfpAsyncConfig = openflow_13.OfpAsyncConfig
+
+// MeterModUpdate from public import voltha_protos/openflow_13.proto
+type MeterModUpdate = openflow_13.MeterModUpdate
+
+// MeterStatsReply from public import voltha_protos/openflow_13.proto
+type MeterStatsReply = openflow_13.MeterStatsReply
+
+// FlowTableUpdate from public import voltha_protos/openflow_13.proto
+type FlowTableUpdate = openflow_13.FlowTableUpdate
+
+// FlowGroupTableUpdate from public import voltha_protos/openflow_13.proto
+type FlowGroupTableUpdate = openflow_13.FlowGroupTableUpdate
+
+// Flows from public import voltha_protos/openflow_13.proto
+type Flows = openflow_13.Flows
+
+// Meters from public import voltha_protos/openflow_13.proto
+type Meters = openflow_13.Meters
+
+// FlowGroups from public import voltha_protos/openflow_13.proto
+type FlowGroups = openflow_13.FlowGroups
+
+// FlowChanges from public import voltha_protos/openflow_13.proto
+type FlowChanges = openflow_13.FlowChanges
+
+// FlowGroupChanges from public import voltha_protos/openflow_13.proto
+type FlowGroupChanges = openflow_13.FlowGroupChanges
+
+// PacketIn from public import voltha_protos/openflow_13.proto
+type PacketIn = openflow_13.PacketIn
+
+// PacketOut from public import voltha_protos/openflow_13.proto
+type PacketOut = openflow_13.PacketOut
+
+// ChangeEvent from public import voltha_protos/openflow_13.proto
+type ChangeEvent = openflow_13.ChangeEvent
+type ChangeEvent_PortStatus = openflow_13.ChangeEvent_PortStatus
+
+// OfpPortNo from public import voltha_protos/openflow_13.proto
+type OfpPortNo = openflow_13.OfpPortNo
+
+var OfpPortNo_name = openflow_13.OfpPortNo_name
+var OfpPortNo_value = openflow_13.OfpPortNo_value
+
+const OfpPortNo_OFPP_INVALID = OfpPortNo(openflow_13.OfpPortNo_OFPP_INVALID)
+const OfpPortNo_OFPP_MAX = OfpPortNo(openflow_13.OfpPortNo_OFPP_MAX)
+const OfpPortNo_OFPP_IN_PORT = OfpPortNo(openflow_13.OfpPortNo_OFPP_IN_PORT)
+const OfpPortNo_OFPP_TABLE = OfpPortNo(openflow_13.OfpPortNo_OFPP_TABLE)
+const OfpPortNo_OFPP_NORMAL = OfpPortNo(openflow_13.OfpPortNo_OFPP_NORMAL)
+const OfpPortNo_OFPP_FLOOD = OfpPortNo(openflow_13.OfpPortNo_OFPP_FLOOD)
+const OfpPortNo_OFPP_ALL = OfpPortNo(openflow_13.OfpPortNo_OFPP_ALL)
+const OfpPortNo_OFPP_CONTROLLER = OfpPortNo(openflow_13.OfpPortNo_OFPP_CONTROLLER)
+const OfpPortNo_OFPP_LOCAL = OfpPortNo(openflow_13.OfpPortNo_OFPP_LOCAL)
+const OfpPortNo_OFPP_ANY = OfpPortNo(openflow_13.OfpPortNo_OFPP_ANY)
+
+// OfpType from public import voltha_protos/openflow_13.proto
+type OfpType = openflow_13.OfpType
+
+var OfpType_name = openflow_13.OfpType_name
+var OfpType_value = openflow_13.OfpType_value
+
+const OfpType_OFPT_HELLO = OfpType(openflow_13.OfpType_OFPT_HELLO)
+const OfpType_OFPT_ERROR = OfpType(openflow_13.OfpType_OFPT_ERROR)
+const OfpType_OFPT_ECHO_REQUEST = OfpType(openflow_13.OfpType_OFPT_ECHO_REQUEST)
+const OfpType_OFPT_ECHO_REPLY = OfpType(openflow_13.OfpType_OFPT_ECHO_REPLY)
+const OfpType_OFPT_EXPERIMENTER = OfpType(openflow_13.OfpType_OFPT_EXPERIMENTER)
+const OfpType_OFPT_FEATURES_REQUEST = OfpType(openflow_13.OfpType_OFPT_FEATURES_REQUEST)
+const OfpType_OFPT_FEATURES_REPLY = OfpType(openflow_13.OfpType_OFPT_FEATURES_REPLY)
+const OfpType_OFPT_GET_CONFIG_REQUEST = OfpType(openflow_13.OfpType_OFPT_GET_CONFIG_REQUEST)
+const OfpType_OFPT_GET_CONFIG_REPLY = OfpType(openflow_13.OfpType_OFPT_GET_CONFIG_REPLY)
+const OfpType_OFPT_SET_CONFIG = OfpType(openflow_13.OfpType_OFPT_SET_CONFIG)
+const OfpType_OFPT_PACKET_IN = OfpType(openflow_13.OfpType_OFPT_PACKET_IN)
+const OfpType_OFPT_FLOW_REMOVED = OfpType(openflow_13.OfpType_OFPT_FLOW_REMOVED)
+const OfpType_OFPT_PORT_STATUS = OfpType(openflow_13.OfpType_OFPT_PORT_STATUS)
+const OfpType_OFPT_PACKET_OUT = OfpType(openflow_13.OfpType_OFPT_PACKET_OUT)
+const OfpType_OFPT_FLOW_MOD = OfpType(openflow_13.OfpType_OFPT_FLOW_MOD)
+const OfpType_OFPT_GROUP_MOD = OfpType(openflow_13.OfpType_OFPT_GROUP_MOD)
+const OfpType_OFPT_PORT_MOD = OfpType(openflow_13.OfpType_OFPT_PORT_MOD)
+const OfpType_OFPT_TABLE_MOD = OfpType(openflow_13.OfpType_OFPT_TABLE_MOD)
+const OfpType_OFPT_MULTIPART_REQUEST = OfpType(openflow_13.OfpType_OFPT_MULTIPART_REQUEST)
+const OfpType_OFPT_MULTIPART_REPLY = OfpType(openflow_13.OfpType_OFPT_MULTIPART_REPLY)
+const OfpType_OFPT_BARRIER_REQUEST = OfpType(openflow_13.OfpType_OFPT_BARRIER_REQUEST)
+const OfpType_OFPT_BARRIER_REPLY = OfpType(openflow_13.OfpType_OFPT_BARRIER_REPLY)
+const OfpType_OFPT_QUEUE_GET_CONFIG_REQUEST = OfpType(openflow_13.OfpType_OFPT_QUEUE_GET_CONFIG_REQUEST)
+const OfpType_OFPT_QUEUE_GET_CONFIG_REPLY = OfpType(openflow_13.OfpType_OFPT_QUEUE_GET_CONFIG_REPLY)
+const OfpType_OFPT_ROLE_REQUEST = OfpType(openflow_13.OfpType_OFPT_ROLE_REQUEST)
+const OfpType_OFPT_ROLE_REPLY = OfpType(openflow_13.OfpType_OFPT_ROLE_REPLY)
+const OfpType_OFPT_GET_ASYNC_REQUEST = OfpType(openflow_13.OfpType_OFPT_GET_ASYNC_REQUEST)
+const OfpType_OFPT_GET_ASYNC_REPLY = OfpType(openflow_13.OfpType_OFPT_GET_ASYNC_REPLY)
+const OfpType_OFPT_SET_ASYNC = OfpType(openflow_13.OfpType_OFPT_SET_ASYNC)
+const OfpType_OFPT_METER_MOD = OfpType(openflow_13.OfpType_OFPT_METER_MOD)
+
+// OfpHelloElemType from public import voltha_protos/openflow_13.proto
+type OfpHelloElemType = openflow_13.OfpHelloElemType
+
+var OfpHelloElemType_name = openflow_13.OfpHelloElemType_name
+var OfpHelloElemType_value = openflow_13.OfpHelloElemType_value
+
+const OfpHelloElemType_OFPHET_INVALID = OfpHelloElemType(openflow_13.OfpHelloElemType_OFPHET_INVALID)
+const OfpHelloElemType_OFPHET_VERSIONBITMAP = OfpHelloElemType(openflow_13.OfpHelloElemType_OFPHET_VERSIONBITMAP)
+
+// OfpConfigFlags from public import voltha_protos/openflow_13.proto
+type OfpConfigFlags = openflow_13.OfpConfigFlags
+
+var OfpConfigFlags_name = openflow_13.OfpConfigFlags_name
+var OfpConfigFlags_value = openflow_13.OfpConfigFlags_value
+
+const OfpConfigFlags_OFPC_FRAG_NORMAL = OfpConfigFlags(openflow_13.OfpConfigFlags_OFPC_FRAG_NORMAL)
+const OfpConfigFlags_OFPC_FRAG_DROP = OfpConfigFlags(openflow_13.OfpConfigFlags_OFPC_FRAG_DROP)
+const OfpConfigFlags_OFPC_FRAG_REASM = OfpConfigFlags(openflow_13.OfpConfigFlags_OFPC_FRAG_REASM)
+const OfpConfigFlags_OFPC_FRAG_MASK = OfpConfigFlags(openflow_13.OfpConfigFlags_OFPC_FRAG_MASK)
+
+// OfpTableConfig from public import voltha_protos/openflow_13.proto
+type OfpTableConfig = openflow_13.OfpTableConfig
+
+var OfpTableConfig_name = openflow_13.OfpTableConfig_name
+var OfpTableConfig_value = openflow_13.OfpTableConfig_value
+
+const OfpTableConfig_OFPTC_INVALID = OfpTableConfig(openflow_13.OfpTableConfig_OFPTC_INVALID)
+const OfpTableConfig_OFPTC_DEPRECATED_MASK = OfpTableConfig(openflow_13.OfpTableConfig_OFPTC_DEPRECATED_MASK)
+
+// OfpTable from public import voltha_protos/openflow_13.proto
+type OfpTable = openflow_13.OfpTable
+
+var OfpTable_name = openflow_13.OfpTable_name
+var OfpTable_value = openflow_13.OfpTable_value
+
+const OfpTable_OFPTT_INVALID = OfpTable(openflow_13.OfpTable_OFPTT_INVALID)
+const OfpTable_OFPTT_MAX = OfpTable(openflow_13.OfpTable_OFPTT_MAX)
+const OfpTable_OFPTT_ALL = OfpTable(openflow_13.OfpTable_OFPTT_ALL)
+
+// OfpCapabilities from public import voltha_protos/openflow_13.proto
+type OfpCapabilities = openflow_13.OfpCapabilities
+
+var OfpCapabilities_name = openflow_13.OfpCapabilities_name
+var OfpCapabilities_value = openflow_13.OfpCapabilities_value
+
+const OfpCapabilities_OFPC_INVALID = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_INVALID)
+const OfpCapabilities_OFPC_FLOW_STATS = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_FLOW_STATS)
+const OfpCapabilities_OFPC_TABLE_STATS = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_TABLE_STATS)
+const OfpCapabilities_OFPC_PORT_STATS = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_PORT_STATS)
+const OfpCapabilities_OFPC_GROUP_STATS = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_GROUP_STATS)
+const OfpCapabilities_OFPC_IP_REASM = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_IP_REASM)
+const OfpCapabilities_OFPC_QUEUE_STATS = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_QUEUE_STATS)
+const OfpCapabilities_OFPC_PORT_BLOCKED = OfpCapabilities(openflow_13.OfpCapabilities_OFPC_PORT_BLOCKED)
+
+// OfpPortConfig from public import voltha_protos/openflow_13.proto
+type OfpPortConfig = openflow_13.OfpPortConfig
+
+var OfpPortConfig_name = openflow_13.OfpPortConfig_name
+var OfpPortConfig_value = openflow_13.OfpPortConfig_value
+
+const OfpPortConfig_OFPPC_INVALID = OfpPortConfig(openflow_13.OfpPortConfig_OFPPC_INVALID)
+const OfpPortConfig_OFPPC_PORT_DOWN = OfpPortConfig(openflow_13.OfpPortConfig_OFPPC_PORT_DOWN)
+const OfpPortConfig_OFPPC_NO_RECV = OfpPortConfig(openflow_13.OfpPortConfig_OFPPC_NO_RECV)
+const OfpPortConfig_OFPPC_NO_FWD = OfpPortConfig(openflow_13.OfpPortConfig_OFPPC_NO_FWD)
+const OfpPortConfig_OFPPC_NO_PACKET_IN = OfpPortConfig(openflow_13.OfpPortConfig_OFPPC_NO_PACKET_IN)
+
+// OfpPortState from public import voltha_protos/openflow_13.proto
+type OfpPortState = openflow_13.OfpPortState
+
+var OfpPortState_name = openflow_13.OfpPortState_name
+var OfpPortState_value = openflow_13.OfpPortState_value
+
+const OfpPortState_OFPPS_INVALID = OfpPortState(openflow_13.OfpPortState_OFPPS_INVALID)
+const OfpPortState_OFPPS_LINK_DOWN = OfpPortState(openflow_13.OfpPortState_OFPPS_LINK_DOWN)
+const OfpPortState_OFPPS_BLOCKED = OfpPortState(openflow_13.OfpPortState_OFPPS_BLOCKED)
+const OfpPortState_OFPPS_LIVE = OfpPortState(openflow_13.OfpPortState_OFPPS_LIVE)
+
+// OfpPortFeatures from public import voltha_protos/openflow_13.proto
+type OfpPortFeatures = openflow_13.OfpPortFeatures
+
+var OfpPortFeatures_name = openflow_13.OfpPortFeatures_name
+var OfpPortFeatures_value = openflow_13.OfpPortFeatures_value
+
+const OfpPortFeatures_OFPPF_INVALID = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_INVALID)
+const OfpPortFeatures_OFPPF_10MB_HD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_10MB_HD)
+const OfpPortFeatures_OFPPF_10MB_FD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_10MB_FD)
+const OfpPortFeatures_OFPPF_100MB_HD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_100MB_HD)
+const OfpPortFeatures_OFPPF_100MB_FD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_100MB_FD)
+const OfpPortFeatures_OFPPF_1GB_HD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_1GB_HD)
+const OfpPortFeatures_OFPPF_1GB_FD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_1GB_FD)
+const OfpPortFeatures_OFPPF_10GB_FD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_10GB_FD)
+const OfpPortFeatures_OFPPF_40GB_FD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_40GB_FD)
+const OfpPortFeatures_OFPPF_100GB_FD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_100GB_FD)
+const OfpPortFeatures_OFPPF_1TB_FD = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_1TB_FD)
+const OfpPortFeatures_OFPPF_OTHER = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_OTHER)
+const OfpPortFeatures_OFPPF_COPPER = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_COPPER)
+const OfpPortFeatures_OFPPF_FIBER = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_FIBER)
+const OfpPortFeatures_OFPPF_AUTONEG = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_AUTONEG)
+const OfpPortFeatures_OFPPF_PAUSE = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_PAUSE)
+const OfpPortFeatures_OFPPF_PAUSE_ASYM = OfpPortFeatures(openflow_13.OfpPortFeatures_OFPPF_PAUSE_ASYM)
+
+// OfpPortReason from public import voltha_protos/openflow_13.proto
+type OfpPortReason = openflow_13.OfpPortReason
+
+var OfpPortReason_name = openflow_13.OfpPortReason_name
+var OfpPortReason_value = openflow_13.OfpPortReason_value
+
+const OfpPortReason_OFPPR_ADD = OfpPortReason(openflow_13.OfpPortReason_OFPPR_ADD)
+const OfpPortReason_OFPPR_DELETE = OfpPortReason(openflow_13.OfpPortReason_OFPPR_DELETE)
+const OfpPortReason_OFPPR_MODIFY = OfpPortReason(openflow_13.OfpPortReason_OFPPR_MODIFY)
+
+// OfpMatchType from public import voltha_protos/openflow_13.proto
+type OfpMatchType = openflow_13.OfpMatchType
+
+var OfpMatchType_name = openflow_13.OfpMatchType_name
+var OfpMatchType_value = openflow_13.OfpMatchType_value
+
+const OfpMatchType_OFPMT_STANDARD = OfpMatchType(openflow_13.OfpMatchType_OFPMT_STANDARD)
+const OfpMatchType_OFPMT_OXM = OfpMatchType(openflow_13.OfpMatchType_OFPMT_OXM)
+
+// OfpOxmClass from public import voltha_protos/openflow_13.proto
+type OfpOxmClass = openflow_13.OfpOxmClass
+
+var OfpOxmClass_name = openflow_13.OfpOxmClass_name
+var OfpOxmClass_value = openflow_13.OfpOxmClass_value
+
+const OfpOxmClass_OFPXMC_NXM_0 = OfpOxmClass(openflow_13.OfpOxmClass_OFPXMC_NXM_0)
+const OfpOxmClass_OFPXMC_NXM_1 = OfpOxmClass(openflow_13.OfpOxmClass_OFPXMC_NXM_1)
+const OfpOxmClass_OFPXMC_OPENFLOW_BASIC = OfpOxmClass(openflow_13.OfpOxmClass_OFPXMC_OPENFLOW_BASIC)
+const OfpOxmClass_OFPXMC_EXPERIMENTER = OfpOxmClass(openflow_13.OfpOxmClass_OFPXMC_EXPERIMENTER)
+
+// OxmOfbFieldTypes from public import voltha_protos/openflow_13.proto
+type OxmOfbFieldTypes = openflow_13.OxmOfbFieldTypes
+
+var OxmOfbFieldTypes_name = openflow_13.OxmOfbFieldTypes_name
+var OxmOfbFieldTypes_value = openflow_13.OxmOfbFieldTypes_value
+
+const OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PORT)
+const OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IN_PHY_PORT)
+const OxmOfbFieldTypes_OFPXMT_OFB_METADATA = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_METADATA)
+const OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_DST)
+const OxmOfbFieldTypes_OFPXMT_OFB_ETH_SRC = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_SRC)
+const OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ETH_TYPE)
+const OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_VID)
+const OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_VLAN_PCP)
+const OxmOfbFieldTypes_OFPXMT_OFB_IP_DSCP = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IP_DSCP)
+const OxmOfbFieldTypes_OFPXMT_OFB_IP_ECN = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IP_ECN)
+const OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IP_PROTO)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV4_SRC = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_SRC)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV4_DST)
+const OxmOfbFieldTypes_OFPXMT_OFB_TCP_SRC = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_TCP_SRC)
+const OxmOfbFieldTypes_OFPXMT_OFB_TCP_DST = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_TCP_DST)
+const OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_SRC)
+const OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_UDP_DST)
+const OxmOfbFieldTypes_OFPXMT_OFB_SCTP_SRC = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_SCTP_SRC)
+const OxmOfbFieldTypes_OFPXMT_OFB_SCTP_DST = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_SCTP_DST)
+const OxmOfbFieldTypes_OFPXMT_OFB_ICMPV4_TYPE = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ICMPV4_TYPE)
+const OxmOfbFieldTypes_OFPXMT_OFB_ICMPV4_CODE = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ICMPV4_CODE)
+const OxmOfbFieldTypes_OFPXMT_OFB_ARP_OP = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ARP_OP)
+const OxmOfbFieldTypes_OFPXMT_OFB_ARP_SPA = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ARP_SPA)
+const OxmOfbFieldTypes_OFPXMT_OFB_ARP_TPA = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ARP_TPA)
+const OxmOfbFieldTypes_OFPXMT_OFB_ARP_SHA = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ARP_SHA)
+const OxmOfbFieldTypes_OFPXMT_OFB_ARP_THA = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ARP_THA)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV6_SRC = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV6_SRC)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV6_DST = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV6_DST)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV6_FLABEL = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV6_FLABEL)
+const OxmOfbFieldTypes_OFPXMT_OFB_ICMPV6_TYPE = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ICMPV6_TYPE)
+const OxmOfbFieldTypes_OFPXMT_OFB_ICMPV6_CODE = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_ICMPV6_CODE)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_TARGET = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_TARGET)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_SLL = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_SLL)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_TLL = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV6_ND_TLL)
+const OxmOfbFieldTypes_OFPXMT_OFB_MPLS_LABEL = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_LABEL)
+const OxmOfbFieldTypes_OFPXMT_OFB_MPLS_TC = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_TC)
+const OxmOfbFieldTypes_OFPXMT_OFB_MPLS_BOS = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_MPLS_BOS)
+const OxmOfbFieldTypes_OFPXMT_OFB_PBB_ISID = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_PBB_ISID)
+const OxmOfbFieldTypes_OFPXMT_OFB_TUNNEL_ID = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_TUNNEL_ID)
+const OxmOfbFieldTypes_OFPXMT_OFB_IPV6_EXTHDR = OxmOfbFieldTypes(openflow_13.OxmOfbFieldTypes_OFPXMT_OFB_IPV6_EXTHDR)
+
+// OfpVlanId from public import voltha_protos/openflow_13.proto
+type OfpVlanId = openflow_13.OfpVlanId
+
+var OfpVlanId_name = openflow_13.OfpVlanId_name
+var OfpVlanId_value = openflow_13.OfpVlanId_value
+
+const OfpVlanId_OFPVID_NONE = OfpVlanId(openflow_13.OfpVlanId_OFPVID_NONE)
+const OfpVlanId_OFPVID_PRESENT = OfpVlanId(openflow_13.OfpVlanId_OFPVID_PRESENT)
+
+// OfpIpv6ExthdrFlags from public import voltha_protos/openflow_13.proto
+type OfpIpv6ExthdrFlags = openflow_13.OfpIpv6ExthdrFlags
+
+var OfpIpv6ExthdrFlags_name = openflow_13.OfpIpv6ExthdrFlags_name
+var OfpIpv6ExthdrFlags_value = openflow_13.OfpIpv6ExthdrFlags_value
+
+const OfpIpv6ExthdrFlags_OFPIEH_INVALID = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_INVALID)
+const OfpIpv6ExthdrFlags_OFPIEH_NONEXT = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_NONEXT)
+const OfpIpv6ExthdrFlags_OFPIEH_ESP = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_ESP)
+const OfpIpv6ExthdrFlags_OFPIEH_AUTH = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_AUTH)
+const OfpIpv6ExthdrFlags_OFPIEH_DEST = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_DEST)
+const OfpIpv6ExthdrFlags_OFPIEH_FRAG = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_FRAG)
+const OfpIpv6ExthdrFlags_OFPIEH_ROUTER = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_ROUTER)
+const OfpIpv6ExthdrFlags_OFPIEH_HOP = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_HOP)
+const OfpIpv6ExthdrFlags_OFPIEH_UNREP = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_UNREP)
+const OfpIpv6ExthdrFlags_OFPIEH_UNSEQ = OfpIpv6ExthdrFlags(openflow_13.OfpIpv6ExthdrFlags_OFPIEH_UNSEQ)
+
+// OfpActionType from public import voltha_protos/openflow_13.proto
+type OfpActionType = openflow_13.OfpActionType
+
+var OfpActionType_name = openflow_13.OfpActionType_name
+var OfpActionType_value = openflow_13.OfpActionType_value
+
+const OfpActionType_OFPAT_OUTPUT = OfpActionType(openflow_13.OfpActionType_OFPAT_OUTPUT)
+const OfpActionType_OFPAT_COPY_TTL_OUT = OfpActionType(openflow_13.OfpActionType_OFPAT_COPY_TTL_OUT)
+const OfpActionType_OFPAT_COPY_TTL_IN = OfpActionType(openflow_13.OfpActionType_OFPAT_COPY_TTL_IN)
+const OfpActionType_OFPAT_SET_MPLS_TTL = OfpActionType(openflow_13.OfpActionType_OFPAT_SET_MPLS_TTL)
+const OfpActionType_OFPAT_DEC_MPLS_TTL = OfpActionType(openflow_13.OfpActionType_OFPAT_DEC_MPLS_TTL)
+const OfpActionType_OFPAT_PUSH_VLAN = OfpActionType(openflow_13.OfpActionType_OFPAT_PUSH_VLAN)
+const OfpActionType_OFPAT_POP_VLAN = OfpActionType(openflow_13.OfpActionType_OFPAT_POP_VLAN)
+const OfpActionType_OFPAT_PUSH_MPLS = OfpActionType(openflow_13.OfpActionType_OFPAT_PUSH_MPLS)
+const OfpActionType_OFPAT_POP_MPLS = OfpActionType(openflow_13.OfpActionType_OFPAT_POP_MPLS)
+const OfpActionType_OFPAT_SET_QUEUE = OfpActionType(openflow_13.OfpActionType_OFPAT_SET_QUEUE)
+const OfpActionType_OFPAT_GROUP = OfpActionType(openflow_13.OfpActionType_OFPAT_GROUP)
+const OfpActionType_OFPAT_SET_NW_TTL = OfpActionType(openflow_13.OfpActionType_OFPAT_SET_NW_TTL)
+const OfpActionType_OFPAT_DEC_NW_TTL = OfpActionType(openflow_13.OfpActionType_OFPAT_DEC_NW_TTL)
+const OfpActionType_OFPAT_SET_FIELD = OfpActionType(openflow_13.OfpActionType_OFPAT_SET_FIELD)
+const OfpActionType_OFPAT_PUSH_PBB = OfpActionType(openflow_13.OfpActionType_OFPAT_PUSH_PBB)
+const OfpActionType_OFPAT_POP_PBB = OfpActionType(openflow_13.OfpActionType_OFPAT_POP_PBB)
+const OfpActionType_OFPAT_EXPERIMENTER = OfpActionType(openflow_13.OfpActionType_OFPAT_EXPERIMENTER)
+
+// OfpControllerMaxLen from public import voltha_protos/openflow_13.proto
+type OfpControllerMaxLen = openflow_13.OfpControllerMaxLen
+
+var OfpControllerMaxLen_name = openflow_13.OfpControllerMaxLen_name
+var OfpControllerMaxLen_value = openflow_13.OfpControllerMaxLen_value
+
+const OfpControllerMaxLen_OFPCML_INVALID = OfpControllerMaxLen(openflow_13.OfpControllerMaxLen_OFPCML_INVALID)
+const OfpControllerMaxLen_OFPCML_MAX = OfpControllerMaxLen(openflow_13.OfpControllerMaxLen_OFPCML_MAX)
+const OfpControllerMaxLen_OFPCML_NO_BUFFER = OfpControllerMaxLen(openflow_13.OfpControllerMaxLen_OFPCML_NO_BUFFER)
+
+// OfpInstructionType from public import voltha_protos/openflow_13.proto
+type OfpInstructionType = openflow_13.OfpInstructionType
+
+var OfpInstructionType_name = openflow_13.OfpInstructionType_name
+var OfpInstructionType_value = openflow_13.OfpInstructionType_value
+
+const OfpInstructionType_OFPIT_INVALID = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_INVALID)
+const OfpInstructionType_OFPIT_GOTO_TABLE = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_GOTO_TABLE)
+const OfpInstructionType_OFPIT_WRITE_METADATA = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_WRITE_METADATA)
+const OfpInstructionType_OFPIT_WRITE_ACTIONS = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_WRITE_ACTIONS)
+const OfpInstructionType_OFPIT_APPLY_ACTIONS = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_APPLY_ACTIONS)
+const OfpInstructionType_OFPIT_CLEAR_ACTIONS = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_CLEAR_ACTIONS)
+const OfpInstructionType_OFPIT_METER = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_METER)
+const OfpInstructionType_OFPIT_EXPERIMENTER = OfpInstructionType(openflow_13.OfpInstructionType_OFPIT_EXPERIMENTER)
+
+// OfpFlowModCommand from public import voltha_protos/openflow_13.proto
+type OfpFlowModCommand = openflow_13.OfpFlowModCommand
+
+var OfpFlowModCommand_name = openflow_13.OfpFlowModCommand_name
+var OfpFlowModCommand_value = openflow_13.OfpFlowModCommand_value
+
+const OfpFlowModCommand_OFPFC_ADD = OfpFlowModCommand(openflow_13.OfpFlowModCommand_OFPFC_ADD)
+const OfpFlowModCommand_OFPFC_MODIFY = OfpFlowModCommand(openflow_13.OfpFlowModCommand_OFPFC_MODIFY)
+const OfpFlowModCommand_OFPFC_MODIFY_STRICT = OfpFlowModCommand(openflow_13.OfpFlowModCommand_OFPFC_MODIFY_STRICT)
+const OfpFlowModCommand_OFPFC_DELETE = OfpFlowModCommand(openflow_13.OfpFlowModCommand_OFPFC_DELETE)
+const OfpFlowModCommand_OFPFC_DELETE_STRICT = OfpFlowModCommand(openflow_13.OfpFlowModCommand_OFPFC_DELETE_STRICT)
+
+// OfpFlowModFlags from public import voltha_protos/openflow_13.proto
+type OfpFlowModFlags = openflow_13.OfpFlowModFlags
+
+var OfpFlowModFlags_name = openflow_13.OfpFlowModFlags_name
+var OfpFlowModFlags_value = openflow_13.OfpFlowModFlags_value
+
+const OfpFlowModFlags_OFPFF_INVALID = OfpFlowModFlags(openflow_13.OfpFlowModFlags_OFPFF_INVALID)
+const OfpFlowModFlags_OFPFF_SEND_FLOW_REM = OfpFlowModFlags(openflow_13.OfpFlowModFlags_OFPFF_SEND_FLOW_REM)
+const OfpFlowModFlags_OFPFF_CHECK_OVERLAP = OfpFlowModFlags(openflow_13.OfpFlowModFlags_OFPFF_CHECK_OVERLAP)
+const OfpFlowModFlags_OFPFF_RESET_COUNTS = OfpFlowModFlags(openflow_13.OfpFlowModFlags_OFPFF_RESET_COUNTS)
+const OfpFlowModFlags_OFPFF_NO_PKT_COUNTS = OfpFlowModFlags(openflow_13.OfpFlowModFlags_OFPFF_NO_PKT_COUNTS)
+const OfpFlowModFlags_OFPFF_NO_BYT_COUNTS = OfpFlowModFlags(openflow_13.OfpFlowModFlags_OFPFF_NO_BYT_COUNTS)
+
+// OfpGroup from public import voltha_protos/openflow_13.proto
+type OfpGroup = openflow_13.OfpGroup
+
+var OfpGroup_name = openflow_13.OfpGroup_name
+var OfpGroup_value = openflow_13.OfpGroup_value
+
+const OfpGroup_OFPG_INVALID = OfpGroup(openflow_13.OfpGroup_OFPG_INVALID)
+const OfpGroup_OFPG_MAX = OfpGroup(openflow_13.OfpGroup_OFPG_MAX)
+const OfpGroup_OFPG_ALL = OfpGroup(openflow_13.OfpGroup_OFPG_ALL)
+const OfpGroup_OFPG_ANY = OfpGroup(openflow_13.OfpGroup_OFPG_ANY)
+
+// OfpGroupModCommand from public import voltha_protos/openflow_13.proto
+type OfpGroupModCommand = openflow_13.OfpGroupModCommand
+
+var OfpGroupModCommand_name = openflow_13.OfpGroupModCommand_name
+var OfpGroupModCommand_value = openflow_13.OfpGroupModCommand_value
+
+const OfpGroupModCommand_OFPGC_ADD = OfpGroupModCommand(openflow_13.OfpGroupModCommand_OFPGC_ADD)
+const OfpGroupModCommand_OFPGC_MODIFY = OfpGroupModCommand(openflow_13.OfpGroupModCommand_OFPGC_MODIFY)
+const OfpGroupModCommand_OFPGC_DELETE = OfpGroupModCommand(openflow_13.OfpGroupModCommand_OFPGC_DELETE)
+
+// OfpGroupType from public import voltha_protos/openflow_13.proto
+type OfpGroupType = openflow_13.OfpGroupType
+
+var OfpGroupType_name = openflow_13.OfpGroupType_name
+var OfpGroupType_value = openflow_13.OfpGroupType_value
+
+const OfpGroupType_OFPGT_ALL = OfpGroupType(openflow_13.OfpGroupType_OFPGT_ALL)
+const OfpGroupType_OFPGT_SELECT = OfpGroupType(openflow_13.OfpGroupType_OFPGT_SELECT)
+const OfpGroupType_OFPGT_INDIRECT = OfpGroupType(openflow_13.OfpGroupType_OFPGT_INDIRECT)
+const OfpGroupType_OFPGT_FF = OfpGroupType(openflow_13.OfpGroupType_OFPGT_FF)
+
+// OfpPacketInReason from public import voltha_protos/openflow_13.proto
+type OfpPacketInReason = openflow_13.OfpPacketInReason
+
+var OfpPacketInReason_name = openflow_13.OfpPacketInReason_name
+var OfpPacketInReason_value = openflow_13.OfpPacketInReason_value
+
+const OfpPacketInReason_OFPR_NO_MATCH = OfpPacketInReason(openflow_13.OfpPacketInReason_OFPR_NO_MATCH)
+const OfpPacketInReason_OFPR_ACTION = OfpPacketInReason(openflow_13.OfpPacketInReason_OFPR_ACTION)
+const OfpPacketInReason_OFPR_INVALID_TTL = OfpPacketInReason(openflow_13.OfpPacketInReason_OFPR_INVALID_TTL)
+
+// OfpFlowRemovedReason from public import voltha_protos/openflow_13.proto
+type OfpFlowRemovedReason = openflow_13.OfpFlowRemovedReason
+
+var OfpFlowRemovedReason_name = openflow_13.OfpFlowRemovedReason_name
+var OfpFlowRemovedReason_value = openflow_13.OfpFlowRemovedReason_value
+
+const OfpFlowRemovedReason_OFPRR_IDLE_TIMEOUT = OfpFlowRemovedReason(openflow_13.OfpFlowRemovedReason_OFPRR_IDLE_TIMEOUT)
+const OfpFlowRemovedReason_OFPRR_HARD_TIMEOUT = OfpFlowRemovedReason(openflow_13.OfpFlowRemovedReason_OFPRR_HARD_TIMEOUT)
+const OfpFlowRemovedReason_OFPRR_DELETE = OfpFlowRemovedReason(openflow_13.OfpFlowRemovedReason_OFPRR_DELETE)
+const OfpFlowRemovedReason_OFPRR_GROUP_DELETE = OfpFlowRemovedReason(openflow_13.OfpFlowRemovedReason_OFPRR_GROUP_DELETE)
+const OfpFlowRemovedReason_OFPRR_METER_DELETE = OfpFlowRemovedReason(openflow_13.OfpFlowRemovedReason_OFPRR_METER_DELETE)
+
+// OfpMeter from public import voltha_protos/openflow_13.proto
+type OfpMeter = openflow_13.OfpMeter
+
+var OfpMeter_name = openflow_13.OfpMeter_name
+var OfpMeter_value = openflow_13.OfpMeter_value
+
+const OfpMeter_OFPM_ZERO = OfpMeter(openflow_13.OfpMeter_OFPM_ZERO)
+const OfpMeter_OFPM_MAX = OfpMeter(openflow_13.OfpMeter_OFPM_MAX)
+const OfpMeter_OFPM_SLOWPATH = OfpMeter(openflow_13.OfpMeter_OFPM_SLOWPATH)
+const OfpMeter_OFPM_CONTROLLER = OfpMeter(openflow_13.OfpMeter_OFPM_CONTROLLER)
+const OfpMeter_OFPM_ALL = OfpMeter(openflow_13.OfpMeter_OFPM_ALL)
+
+// OfpMeterBandType from public import voltha_protos/openflow_13.proto
+type OfpMeterBandType = openflow_13.OfpMeterBandType
+
+var OfpMeterBandType_name = openflow_13.OfpMeterBandType_name
+var OfpMeterBandType_value = openflow_13.OfpMeterBandType_value
+
+const OfpMeterBandType_OFPMBT_INVALID = OfpMeterBandType(openflow_13.OfpMeterBandType_OFPMBT_INVALID)
+const OfpMeterBandType_OFPMBT_DROP = OfpMeterBandType(openflow_13.OfpMeterBandType_OFPMBT_DROP)
+const OfpMeterBandType_OFPMBT_DSCP_REMARK = OfpMeterBandType(openflow_13.OfpMeterBandType_OFPMBT_DSCP_REMARK)
+const OfpMeterBandType_OFPMBT_EXPERIMENTER = OfpMeterBandType(openflow_13.OfpMeterBandType_OFPMBT_EXPERIMENTER)
+
+// OfpMeterModCommand from public import voltha_protos/openflow_13.proto
+type OfpMeterModCommand = openflow_13.OfpMeterModCommand
+
+var OfpMeterModCommand_name = openflow_13.OfpMeterModCommand_name
+var OfpMeterModCommand_value = openflow_13.OfpMeterModCommand_value
+
+const OfpMeterModCommand_OFPMC_ADD = OfpMeterModCommand(openflow_13.OfpMeterModCommand_OFPMC_ADD)
+const OfpMeterModCommand_OFPMC_MODIFY = OfpMeterModCommand(openflow_13.OfpMeterModCommand_OFPMC_MODIFY)
+const OfpMeterModCommand_OFPMC_DELETE = OfpMeterModCommand(openflow_13.OfpMeterModCommand_OFPMC_DELETE)
+
+// OfpMeterFlags from public import voltha_protos/openflow_13.proto
+type OfpMeterFlags = openflow_13.OfpMeterFlags
+
+var OfpMeterFlags_name = openflow_13.OfpMeterFlags_name
+var OfpMeterFlags_value = openflow_13.OfpMeterFlags_value
+
+const OfpMeterFlags_OFPMF_INVALID = OfpMeterFlags(openflow_13.OfpMeterFlags_OFPMF_INVALID)
+const OfpMeterFlags_OFPMF_KBPS = OfpMeterFlags(openflow_13.OfpMeterFlags_OFPMF_KBPS)
+const OfpMeterFlags_OFPMF_PKTPS = OfpMeterFlags(openflow_13.OfpMeterFlags_OFPMF_PKTPS)
+const OfpMeterFlags_OFPMF_BURST = OfpMeterFlags(openflow_13.OfpMeterFlags_OFPMF_BURST)
+const OfpMeterFlags_OFPMF_STATS = OfpMeterFlags(openflow_13.OfpMeterFlags_OFPMF_STATS)
+
+// OfpErrorType from public import voltha_protos/openflow_13.proto
+type OfpErrorType = openflow_13.OfpErrorType
+
+var OfpErrorType_name = openflow_13.OfpErrorType_name
+var OfpErrorType_value = openflow_13.OfpErrorType_value
+
+const OfpErrorType_OFPET_HELLO_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_HELLO_FAILED)
+const OfpErrorType_OFPET_BAD_REQUEST = OfpErrorType(openflow_13.OfpErrorType_OFPET_BAD_REQUEST)
+const OfpErrorType_OFPET_BAD_ACTION = OfpErrorType(openflow_13.OfpErrorType_OFPET_BAD_ACTION)
+const OfpErrorType_OFPET_BAD_INSTRUCTION = OfpErrorType(openflow_13.OfpErrorType_OFPET_BAD_INSTRUCTION)
+const OfpErrorType_OFPET_BAD_MATCH = OfpErrorType(openflow_13.OfpErrorType_OFPET_BAD_MATCH)
+const OfpErrorType_OFPET_FLOW_MOD_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_FLOW_MOD_FAILED)
+const OfpErrorType_OFPET_GROUP_MOD_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_GROUP_MOD_FAILED)
+const OfpErrorType_OFPET_PORT_MOD_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_PORT_MOD_FAILED)
+const OfpErrorType_OFPET_TABLE_MOD_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_TABLE_MOD_FAILED)
+const OfpErrorType_OFPET_QUEUE_OP_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_QUEUE_OP_FAILED)
+const OfpErrorType_OFPET_SWITCH_CONFIG_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_SWITCH_CONFIG_FAILED)
+const OfpErrorType_OFPET_ROLE_REQUEST_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_ROLE_REQUEST_FAILED)
+const OfpErrorType_OFPET_METER_MOD_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_METER_MOD_FAILED)
+const OfpErrorType_OFPET_TABLE_FEATURES_FAILED = OfpErrorType(openflow_13.OfpErrorType_OFPET_TABLE_FEATURES_FAILED)
+const OfpErrorType_OFPET_EXPERIMENTER = OfpErrorType(openflow_13.OfpErrorType_OFPET_EXPERIMENTER)
+
+// OfpHelloFailedCode from public import voltha_protos/openflow_13.proto
+type OfpHelloFailedCode = openflow_13.OfpHelloFailedCode
+
+var OfpHelloFailedCode_name = openflow_13.OfpHelloFailedCode_name
+var OfpHelloFailedCode_value = openflow_13.OfpHelloFailedCode_value
+
+const OfpHelloFailedCode_OFPHFC_INCOMPATIBLE = OfpHelloFailedCode(openflow_13.OfpHelloFailedCode_OFPHFC_INCOMPATIBLE)
+const OfpHelloFailedCode_OFPHFC_EPERM = OfpHelloFailedCode(openflow_13.OfpHelloFailedCode_OFPHFC_EPERM)
+
+// OfpBadRequestCode from public import voltha_protos/openflow_13.proto
+type OfpBadRequestCode = openflow_13.OfpBadRequestCode
+
+var OfpBadRequestCode_name = openflow_13.OfpBadRequestCode_name
+var OfpBadRequestCode_value = openflow_13.OfpBadRequestCode_value
+
+const OfpBadRequestCode_OFPBRC_BAD_VERSION = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_VERSION)
+const OfpBadRequestCode_OFPBRC_BAD_TYPE = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_TYPE)
+const OfpBadRequestCode_OFPBRC_BAD_MULTIPART = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_MULTIPART)
+const OfpBadRequestCode_OFPBRC_BAD_EXPERIMENTER = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_EXPERIMENTER)
+const OfpBadRequestCode_OFPBRC_BAD_EXP_TYPE = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_EXP_TYPE)
+const OfpBadRequestCode_OFPBRC_EPERM = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_EPERM)
+const OfpBadRequestCode_OFPBRC_BAD_LEN = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_LEN)
+const OfpBadRequestCode_OFPBRC_BUFFER_EMPTY = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BUFFER_EMPTY)
+const OfpBadRequestCode_OFPBRC_BUFFER_UNKNOWN = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BUFFER_UNKNOWN)
+const OfpBadRequestCode_OFPBRC_BAD_TABLE_ID = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_TABLE_ID)
+const OfpBadRequestCode_OFPBRC_IS_SLAVE = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_IS_SLAVE)
+const OfpBadRequestCode_OFPBRC_BAD_PORT = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_PORT)
+const OfpBadRequestCode_OFPBRC_BAD_PACKET = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_BAD_PACKET)
+const OfpBadRequestCode_OFPBRC_MULTIPART_BUFFER_OVERFLOW = OfpBadRequestCode(openflow_13.OfpBadRequestCode_OFPBRC_MULTIPART_BUFFER_OVERFLOW)
+
+// OfpBadActionCode from public import voltha_protos/openflow_13.proto
+type OfpBadActionCode = openflow_13.OfpBadActionCode
+
+var OfpBadActionCode_name = openflow_13.OfpBadActionCode_name
+var OfpBadActionCode_value = openflow_13.OfpBadActionCode_value
+
+const OfpBadActionCode_OFPBAC_BAD_TYPE = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_TYPE)
+const OfpBadActionCode_OFPBAC_BAD_LEN = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_LEN)
+const OfpBadActionCode_OFPBAC_BAD_EXPERIMENTER = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_EXPERIMENTER)
+const OfpBadActionCode_OFPBAC_BAD_EXP_TYPE = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_EXP_TYPE)
+const OfpBadActionCode_OFPBAC_BAD_OUT_PORT = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_OUT_PORT)
+const OfpBadActionCode_OFPBAC_BAD_ARGUMENT = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_ARGUMENT)
+const OfpBadActionCode_OFPBAC_EPERM = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_EPERM)
+const OfpBadActionCode_OFPBAC_TOO_MANY = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_TOO_MANY)
+const OfpBadActionCode_OFPBAC_BAD_QUEUE = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_QUEUE)
+const OfpBadActionCode_OFPBAC_BAD_OUT_GROUP = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_OUT_GROUP)
+const OfpBadActionCode_OFPBAC_MATCH_INCONSISTENT = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_MATCH_INCONSISTENT)
+const OfpBadActionCode_OFPBAC_UNSUPPORTED_ORDER = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_UNSUPPORTED_ORDER)
+const OfpBadActionCode_OFPBAC_BAD_TAG = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_TAG)
+const OfpBadActionCode_OFPBAC_BAD_SET_TYPE = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_SET_TYPE)
+const OfpBadActionCode_OFPBAC_BAD_SET_LEN = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_SET_LEN)
+const OfpBadActionCode_OFPBAC_BAD_SET_ARGUMENT = OfpBadActionCode(openflow_13.OfpBadActionCode_OFPBAC_BAD_SET_ARGUMENT)
+
+// OfpBadInstructionCode from public import voltha_protos/openflow_13.proto
+type OfpBadInstructionCode = openflow_13.OfpBadInstructionCode
+
+var OfpBadInstructionCode_name = openflow_13.OfpBadInstructionCode_name
+var OfpBadInstructionCode_value = openflow_13.OfpBadInstructionCode_value
+
+const OfpBadInstructionCode_OFPBIC_UNKNOWN_INST = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_UNKNOWN_INST)
+const OfpBadInstructionCode_OFPBIC_UNSUP_INST = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_UNSUP_INST)
+const OfpBadInstructionCode_OFPBIC_BAD_TABLE_ID = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_BAD_TABLE_ID)
+const OfpBadInstructionCode_OFPBIC_UNSUP_METADATA = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_UNSUP_METADATA)
+const OfpBadInstructionCode_OFPBIC_UNSUP_METADATA_MASK = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_UNSUP_METADATA_MASK)
+const OfpBadInstructionCode_OFPBIC_BAD_EXPERIMENTER = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_BAD_EXPERIMENTER)
+const OfpBadInstructionCode_OFPBIC_BAD_EXP_TYPE = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_BAD_EXP_TYPE)
+const OfpBadInstructionCode_OFPBIC_BAD_LEN = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_BAD_LEN)
+const OfpBadInstructionCode_OFPBIC_EPERM = OfpBadInstructionCode(openflow_13.OfpBadInstructionCode_OFPBIC_EPERM)
+
+// OfpBadMatchCode from public import voltha_protos/openflow_13.proto
+type OfpBadMatchCode = openflow_13.OfpBadMatchCode
+
+var OfpBadMatchCode_name = openflow_13.OfpBadMatchCode_name
+var OfpBadMatchCode_value = openflow_13.OfpBadMatchCode_value
+
+const OfpBadMatchCode_OFPBMC_BAD_TYPE = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_TYPE)
+const OfpBadMatchCode_OFPBMC_BAD_LEN = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_LEN)
+const OfpBadMatchCode_OFPBMC_BAD_TAG = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_TAG)
+const OfpBadMatchCode_OFPBMC_BAD_DL_ADDR_MASK = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_DL_ADDR_MASK)
+const OfpBadMatchCode_OFPBMC_BAD_NW_ADDR_MASK = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_NW_ADDR_MASK)
+const OfpBadMatchCode_OFPBMC_BAD_WILDCARDS = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_WILDCARDS)
+const OfpBadMatchCode_OFPBMC_BAD_FIELD = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_FIELD)
+const OfpBadMatchCode_OFPBMC_BAD_VALUE = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_VALUE)
+const OfpBadMatchCode_OFPBMC_BAD_MASK = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_MASK)
+const OfpBadMatchCode_OFPBMC_BAD_PREREQ = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_BAD_PREREQ)
+const OfpBadMatchCode_OFPBMC_DUP_FIELD = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_DUP_FIELD)
+const OfpBadMatchCode_OFPBMC_EPERM = OfpBadMatchCode(openflow_13.OfpBadMatchCode_OFPBMC_EPERM)
+
+// OfpFlowModFailedCode from public import voltha_protos/openflow_13.proto
+type OfpFlowModFailedCode = openflow_13.OfpFlowModFailedCode
+
+var OfpFlowModFailedCode_name = openflow_13.OfpFlowModFailedCode_name
+var OfpFlowModFailedCode_value = openflow_13.OfpFlowModFailedCode_value
+
+const OfpFlowModFailedCode_OFPFMFC_UNKNOWN = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_UNKNOWN)
+const OfpFlowModFailedCode_OFPFMFC_TABLE_FULL = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_TABLE_FULL)
+const OfpFlowModFailedCode_OFPFMFC_BAD_TABLE_ID = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_BAD_TABLE_ID)
+const OfpFlowModFailedCode_OFPFMFC_OVERLAP = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_OVERLAP)
+const OfpFlowModFailedCode_OFPFMFC_EPERM = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_EPERM)
+const OfpFlowModFailedCode_OFPFMFC_BAD_TIMEOUT = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_BAD_TIMEOUT)
+const OfpFlowModFailedCode_OFPFMFC_BAD_COMMAND = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_BAD_COMMAND)
+const OfpFlowModFailedCode_OFPFMFC_BAD_FLAGS = OfpFlowModFailedCode(openflow_13.OfpFlowModFailedCode_OFPFMFC_BAD_FLAGS)
+
+// OfpGroupModFailedCode from public import voltha_protos/openflow_13.proto
+type OfpGroupModFailedCode = openflow_13.OfpGroupModFailedCode
+
+var OfpGroupModFailedCode_name = openflow_13.OfpGroupModFailedCode_name
+var OfpGroupModFailedCode_value = openflow_13.OfpGroupModFailedCode_value
+
+const OfpGroupModFailedCode_OFPGMFC_GROUP_EXISTS = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_GROUP_EXISTS)
+const OfpGroupModFailedCode_OFPGMFC_INVALID_GROUP = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_INVALID_GROUP)
+const OfpGroupModFailedCode_OFPGMFC_WEIGHT_UNSUPPORTED = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_WEIGHT_UNSUPPORTED)
+const OfpGroupModFailedCode_OFPGMFC_OUT_OF_GROUPS = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_OUT_OF_GROUPS)
+const OfpGroupModFailedCode_OFPGMFC_OUT_OF_BUCKETS = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_OUT_OF_BUCKETS)
+const OfpGroupModFailedCode_OFPGMFC_CHAINING_UNSUPPORTED = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_CHAINING_UNSUPPORTED)
+const OfpGroupModFailedCode_OFPGMFC_WATCH_UNSUPPORTED = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_WATCH_UNSUPPORTED)
+const OfpGroupModFailedCode_OFPGMFC_LOOP = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_LOOP)
+const OfpGroupModFailedCode_OFPGMFC_UNKNOWN_GROUP = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_UNKNOWN_GROUP)
+const OfpGroupModFailedCode_OFPGMFC_CHAINED_GROUP = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_CHAINED_GROUP)
+const OfpGroupModFailedCode_OFPGMFC_BAD_TYPE = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_BAD_TYPE)
+const OfpGroupModFailedCode_OFPGMFC_BAD_COMMAND = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_BAD_COMMAND)
+const OfpGroupModFailedCode_OFPGMFC_BAD_BUCKET = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_BAD_BUCKET)
+const OfpGroupModFailedCode_OFPGMFC_BAD_WATCH = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_BAD_WATCH)
+const OfpGroupModFailedCode_OFPGMFC_EPERM = OfpGroupModFailedCode(openflow_13.OfpGroupModFailedCode_OFPGMFC_EPERM)
+
+// OfpPortModFailedCode from public import voltha_protos/openflow_13.proto
+type OfpPortModFailedCode = openflow_13.OfpPortModFailedCode
+
+var OfpPortModFailedCode_name = openflow_13.OfpPortModFailedCode_name
+var OfpPortModFailedCode_value = openflow_13.OfpPortModFailedCode_value
+
+const OfpPortModFailedCode_OFPPMFC_BAD_PORT = OfpPortModFailedCode(openflow_13.OfpPortModFailedCode_OFPPMFC_BAD_PORT)
+const OfpPortModFailedCode_OFPPMFC_BAD_HW_ADDR = OfpPortModFailedCode(openflow_13.OfpPortModFailedCode_OFPPMFC_BAD_HW_ADDR)
+const OfpPortModFailedCode_OFPPMFC_BAD_CONFIG = OfpPortModFailedCode(openflow_13.OfpPortModFailedCode_OFPPMFC_BAD_CONFIG)
+const OfpPortModFailedCode_OFPPMFC_BAD_ADVERTISE = OfpPortModFailedCode(openflow_13.OfpPortModFailedCode_OFPPMFC_BAD_ADVERTISE)
+const OfpPortModFailedCode_OFPPMFC_EPERM = OfpPortModFailedCode(openflow_13.OfpPortModFailedCode_OFPPMFC_EPERM)
+
+// OfpTableModFailedCode from public import voltha_protos/openflow_13.proto
+type OfpTableModFailedCode = openflow_13.OfpTableModFailedCode
+
+var OfpTableModFailedCode_name = openflow_13.OfpTableModFailedCode_name
+var OfpTableModFailedCode_value = openflow_13.OfpTableModFailedCode_value
+
+const OfpTableModFailedCode_OFPTMFC_BAD_TABLE = OfpTableModFailedCode(openflow_13.OfpTableModFailedCode_OFPTMFC_BAD_TABLE)
+const OfpTableModFailedCode_OFPTMFC_BAD_CONFIG = OfpTableModFailedCode(openflow_13.OfpTableModFailedCode_OFPTMFC_BAD_CONFIG)
+const OfpTableModFailedCode_OFPTMFC_EPERM = OfpTableModFailedCode(openflow_13.OfpTableModFailedCode_OFPTMFC_EPERM)
+
+// OfpQueueOpFailedCode from public import voltha_protos/openflow_13.proto
+type OfpQueueOpFailedCode = openflow_13.OfpQueueOpFailedCode
+
+var OfpQueueOpFailedCode_name = openflow_13.OfpQueueOpFailedCode_name
+var OfpQueueOpFailedCode_value = openflow_13.OfpQueueOpFailedCode_value
+
+const OfpQueueOpFailedCode_OFPQOFC_BAD_PORT = OfpQueueOpFailedCode(openflow_13.OfpQueueOpFailedCode_OFPQOFC_BAD_PORT)
+const OfpQueueOpFailedCode_OFPQOFC_BAD_QUEUE = OfpQueueOpFailedCode(openflow_13.OfpQueueOpFailedCode_OFPQOFC_BAD_QUEUE)
+const OfpQueueOpFailedCode_OFPQOFC_EPERM = OfpQueueOpFailedCode(openflow_13.OfpQueueOpFailedCode_OFPQOFC_EPERM)
+
+// OfpSwitchConfigFailedCode from public import voltha_protos/openflow_13.proto
+type OfpSwitchConfigFailedCode = openflow_13.OfpSwitchConfigFailedCode
+
+var OfpSwitchConfigFailedCode_name = openflow_13.OfpSwitchConfigFailedCode_name
+var OfpSwitchConfigFailedCode_value = openflow_13.OfpSwitchConfigFailedCode_value
+
+const OfpSwitchConfigFailedCode_OFPSCFC_BAD_FLAGS = OfpSwitchConfigFailedCode(openflow_13.OfpSwitchConfigFailedCode_OFPSCFC_BAD_FLAGS)
+const OfpSwitchConfigFailedCode_OFPSCFC_BAD_LEN = OfpSwitchConfigFailedCode(openflow_13.OfpSwitchConfigFailedCode_OFPSCFC_BAD_LEN)
+const OfpSwitchConfigFailedCode_OFPSCFC_EPERM = OfpSwitchConfigFailedCode(openflow_13.OfpSwitchConfigFailedCode_OFPSCFC_EPERM)
+
+// OfpRoleRequestFailedCode from public import voltha_protos/openflow_13.proto
+type OfpRoleRequestFailedCode = openflow_13.OfpRoleRequestFailedCode
+
+var OfpRoleRequestFailedCode_name = openflow_13.OfpRoleRequestFailedCode_name
+var OfpRoleRequestFailedCode_value = openflow_13.OfpRoleRequestFailedCode_value
+
+const OfpRoleRequestFailedCode_OFPRRFC_STALE = OfpRoleRequestFailedCode(openflow_13.OfpRoleRequestFailedCode_OFPRRFC_STALE)
+const OfpRoleRequestFailedCode_OFPRRFC_UNSUP = OfpRoleRequestFailedCode(openflow_13.OfpRoleRequestFailedCode_OFPRRFC_UNSUP)
+const OfpRoleRequestFailedCode_OFPRRFC_BAD_ROLE = OfpRoleRequestFailedCode(openflow_13.OfpRoleRequestFailedCode_OFPRRFC_BAD_ROLE)
+
+// OfpMeterModFailedCode from public import voltha_protos/openflow_13.proto
+type OfpMeterModFailedCode = openflow_13.OfpMeterModFailedCode
+
+var OfpMeterModFailedCode_name = openflow_13.OfpMeterModFailedCode_name
+var OfpMeterModFailedCode_value = openflow_13.OfpMeterModFailedCode_value
+
+const OfpMeterModFailedCode_OFPMMFC_UNKNOWN = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_UNKNOWN)
+const OfpMeterModFailedCode_OFPMMFC_METER_EXISTS = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_METER_EXISTS)
+const OfpMeterModFailedCode_OFPMMFC_INVALID_METER = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_INVALID_METER)
+const OfpMeterModFailedCode_OFPMMFC_UNKNOWN_METER = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_UNKNOWN_METER)
+const OfpMeterModFailedCode_OFPMMFC_BAD_COMMAND = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_BAD_COMMAND)
+const OfpMeterModFailedCode_OFPMMFC_BAD_FLAGS = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_BAD_FLAGS)
+const OfpMeterModFailedCode_OFPMMFC_BAD_RATE = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_BAD_RATE)
+const OfpMeterModFailedCode_OFPMMFC_BAD_BURST = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_BAD_BURST)
+const OfpMeterModFailedCode_OFPMMFC_BAD_BAND = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_BAD_BAND)
+const OfpMeterModFailedCode_OFPMMFC_BAD_BAND_VALUE = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_BAD_BAND_VALUE)
+const OfpMeterModFailedCode_OFPMMFC_OUT_OF_METERS = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_OUT_OF_METERS)
+const OfpMeterModFailedCode_OFPMMFC_OUT_OF_BANDS = OfpMeterModFailedCode(openflow_13.OfpMeterModFailedCode_OFPMMFC_OUT_OF_BANDS)
+
+// OfpTableFeaturesFailedCode from public import voltha_protos/openflow_13.proto
+type OfpTableFeaturesFailedCode = openflow_13.OfpTableFeaturesFailedCode
+
+var OfpTableFeaturesFailedCode_name = openflow_13.OfpTableFeaturesFailedCode_name
+var OfpTableFeaturesFailedCode_value = openflow_13.OfpTableFeaturesFailedCode_value
+
+const OfpTableFeaturesFailedCode_OFPTFFC_BAD_TABLE = OfpTableFeaturesFailedCode(openflow_13.OfpTableFeaturesFailedCode_OFPTFFC_BAD_TABLE)
+const OfpTableFeaturesFailedCode_OFPTFFC_BAD_METADATA = OfpTableFeaturesFailedCode(openflow_13.OfpTableFeaturesFailedCode_OFPTFFC_BAD_METADATA)
+const OfpTableFeaturesFailedCode_OFPTFFC_BAD_TYPE = OfpTableFeaturesFailedCode(openflow_13.OfpTableFeaturesFailedCode_OFPTFFC_BAD_TYPE)
+const OfpTableFeaturesFailedCode_OFPTFFC_BAD_LEN = OfpTableFeaturesFailedCode(openflow_13.OfpTableFeaturesFailedCode_OFPTFFC_BAD_LEN)
+const OfpTableFeaturesFailedCode_OFPTFFC_BAD_ARGUMENT = OfpTableFeaturesFailedCode(openflow_13.OfpTableFeaturesFailedCode_OFPTFFC_BAD_ARGUMENT)
+const OfpTableFeaturesFailedCode_OFPTFFC_EPERM = OfpTableFeaturesFailedCode(openflow_13.OfpTableFeaturesFailedCode_OFPTFFC_EPERM)
+
+// OfpMultipartType from public import voltha_protos/openflow_13.proto
+type OfpMultipartType = openflow_13.OfpMultipartType
+
+var OfpMultipartType_name = openflow_13.OfpMultipartType_name
+var OfpMultipartType_value = openflow_13.OfpMultipartType_value
+
+const OfpMultipartType_OFPMP_DESC = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_DESC)
+const OfpMultipartType_OFPMP_FLOW = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_FLOW)
+const OfpMultipartType_OFPMP_AGGREGATE = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_AGGREGATE)
+const OfpMultipartType_OFPMP_TABLE = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_TABLE)
+const OfpMultipartType_OFPMP_PORT_STATS = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_PORT_STATS)
+const OfpMultipartType_OFPMP_QUEUE = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_QUEUE)
+const OfpMultipartType_OFPMP_GROUP = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_GROUP)
+const OfpMultipartType_OFPMP_GROUP_DESC = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_GROUP_DESC)
+const OfpMultipartType_OFPMP_GROUP_FEATURES = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_GROUP_FEATURES)
+const OfpMultipartType_OFPMP_METER = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_METER)
+const OfpMultipartType_OFPMP_METER_CONFIG = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_METER_CONFIG)
+const OfpMultipartType_OFPMP_METER_FEATURES = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_METER_FEATURES)
+const OfpMultipartType_OFPMP_TABLE_FEATURES = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_TABLE_FEATURES)
+const OfpMultipartType_OFPMP_PORT_DESC = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_PORT_DESC)
+const OfpMultipartType_OFPMP_EXPERIMENTER = OfpMultipartType(openflow_13.OfpMultipartType_OFPMP_EXPERIMENTER)
+
+// OfpMultipartRequestFlags from public import voltha_protos/openflow_13.proto
+type OfpMultipartRequestFlags = openflow_13.OfpMultipartRequestFlags
+
+var OfpMultipartRequestFlags_name = openflow_13.OfpMultipartRequestFlags_name
+var OfpMultipartRequestFlags_value = openflow_13.OfpMultipartRequestFlags_value
+
+const OfpMultipartRequestFlags_OFPMPF_REQ_INVALID = OfpMultipartRequestFlags(openflow_13.OfpMultipartRequestFlags_OFPMPF_REQ_INVALID)
+const OfpMultipartRequestFlags_OFPMPF_REQ_MORE = OfpMultipartRequestFlags(openflow_13.OfpMultipartRequestFlags_OFPMPF_REQ_MORE)
+
+// OfpMultipartReplyFlags from public import voltha_protos/openflow_13.proto
+type OfpMultipartReplyFlags = openflow_13.OfpMultipartReplyFlags
+
+var OfpMultipartReplyFlags_name = openflow_13.OfpMultipartReplyFlags_name
+var OfpMultipartReplyFlags_value = openflow_13.OfpMultipartReplyFlags_value
+
+const OfpMultipartReplyFlags_OFPMPF_REPLY_INVALID = OfpMultipartReplyFlags(openflow_13.OfpMultipartReplyFlags_OFPMPF_REPLY_INVALID)
+const OfpMultipartReplyFlags_OFPMPF_REPLY_MORE = OfpMultipartReplyFlags(openflow_13.OfpMultipartReplyFlags_OFPMPF_REPLY_MORE)
+
+// OfpTableFeaturePropType from public import voltha_protos/openflow_13.proto
+type OfpTableFeaturePropType = openflow_13.OfpTableFeaturePropType
+
+var OfpTableFeaturePropType_name = openflow_13.OfpTableFeaturePropType_name
+var OfpTableFeaturePropType_value = openflow_13.OfpTableFeaturePropType_value
+
+const OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS)
+const OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS_MISS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS_MISS)
+const OfpTableFeaturePropType_OFPTFPT_NEXT_TABLES = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_NEXT_TABLES)
+const OfpTableFeaturePropType_OFPTFPT_NEXT_TABLES_MISS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_NEXT_TABLES_MISS)
+const OfpTableFeaturePropType_OFPTFPT_WRITE_ACTIONS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_WRITE_ACTIONS)
+const OfpTableFeaturePropType_OFPTFPT_WRITE_ACTIONS_MISS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_WRITE_ACTIONS_MISS)
+const OfpTableFeaturePropType_OFPTFPT_APPLY_ACTIONS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_APPLY_ACTIONS)
+const OfpTableFeaturePropType_OFPTFPT_APPLY_ACTIONS_MISS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_APPLY_ACTIONS_MISS)
+const OfpTableFeaturePropType_OFPTFPT_MATCH = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_MATCH)
+const OfpTableFeaturePropType_OFPTFPT_WILDCARDS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_WILDCARDS)
+const OfpTableFeaturePropType_OFPTFPT_WRITE_SETFIELD = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_WRITE_SETFIELD)
+const OfpTableFeaturePropType_OFPTFPT_WRITE_SETFIELD_MISS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_WRITE_SETFIELD_MISS)
+const OfpTableFeaturePropType_OFPTFPT_APPLY_SETFIELD = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_APPLY_SETFIELD)
+const OfpTableFeaturePropType_OFPTFPT_APPLY_SETFIELD_MISS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_APPLY_SETFIELD_MISS)
+const OfpTableFeaturePropType_OFPTFPT_EXPERIMENTER = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_EXPERIMENTER)
+const OfpTableFeaturePropType_OFPTFPT_EXPERIMENTER_MISS = OfpTableFeaturePropType(openflow_13.OfpTableFeaturePropType_OFPTFPT_EXPERIMENTER_MISS)
+
+// OfpGroupCapabilities from public import voltha_protos/openflow_13.proto
+type OfpGroupCapabilities = openflow_13.OfpGroupCapabilities
+
+var OfpGroupCapabilities_name = openflow_13.OfpGroupCapabilities_name
+var OfpGroupCapabilities_value = openflow_13.OfpGroupCapabilities_value
+
+const OfpGroupCapabilities_OFPGFC_INVALID = OfpGroupCapabilities(openflow_13.OfpGroupCapabilities_OFPGFC_INVALID)
+const OfpGroupCapabilities_OFPGFC_SELECT_WEIGHT = OfpGroupCapabilities(openflow_13.OfpGroupCapabilities_OFPGFC_SELECT_WEIGHT)
+const OfpGroupCapabilities_OFPGFC_SELECT_LIVENESS = OfpGroupCapabilities(openflow_13.OfpGroupCapabilities_OFPGFC_SELECT_LIVENESS)
+const OfpGroupCapabilities_OFPGFC_CHAINING = OfpGroupCapabilities(openflow_13.OfpGroupCapabilities_OFPGFC_CHAINING)
+const OfpGroupCapabilities_OFPGFC_CHAINING_CHECKS = OfpGroupCapabilities(openflow_13.OfpGroupCapabilities_OFPGFC_CHAINING_CHECKS)
+
+// OfpQueueProperties from public import voltha_protos/openflow_13.proto
+type OfpQueueProperties = openflow_13.OfpQueueProperties
+
+var OfpQueueProperties_name = openflow_13.OfpQueueProperties_name
+var OfpQueueProperties_value = openflow_13.OfpQueueProperties_value
+
+const OfpQueueProperties_OFPQT_INVALID = OfpQueueProperties(openflow_13.OfpQueueProperties_OFPQT_INVALID)
+const OfpQueueProperties_OFPQT_MIN_RATE = OfpQueueProperties(openflow_13.OfpQueueProperties_OFPQT_MIN_RATE)
+const OfpQueueProperties_OFPQT_MAX_RATE = OfpQueueProperties(openflow_13.OfpQueueProperties_OFPQT_MAX_RATE)
+const OfpQueueProperties_OFPQT_EXPERIMENTER = OfpQueueProperties(openflow_13.OfpQueueProperties_OFPQT_EXPERIMENTER)
+
+// OfpControllerRole from public import voltha_protos/openflow_13.proto
+type OfpControllerRole = openflow_13.OfpControllerRole
+
+var OfpControllerRole_name = openflow_13.OfpControllerRole_name
+var OfpControllerRole_value = openflow_13.OfpControllerRole_value
+
+const OfpControllerRole_OFPCR_ROLE_NOCHANGE = OfpControllerRole(openflow_13.OfpControllerRole_OFPCR_ROLE_NOCHANGE)
+const OfpControllerRole_OFPCR_ROLE_EQUAL = OfpControllerRole(openflow_13.OfpControllerRole_OFPCR_ROLE_EQUAL)
+const OfpControllerRole_OFPCR_ROLE_MASTER = OfpControllerRole(openflow_13.OfpControllerRole_OFPCR_ROLE_MASTER)
+const OfpControllerRole_OFPCR_ROLE_SLAVE = OfpControllerRole(openflow_13.OfpControllerRole_OFPCR_ROLE_SLAVE)
+
+type AlarmFilterRuleKey_AlarmFilterRuleKey int32
+
+const (
+	AlarmFilterRuleKey_id          AlarmFilterRuleKey_AlarmFilterRuleKey = 0
+	AlarmFilterRuleKey_type        AlarmFilterRuleKey_AlarmFilterRuleKey = 1
+	AlarmFilterRuleKey_severity    AlarmFilterRuleKey_AlarmFilterRuleKey = 2
+	AlarmFilterRuleKey_resource_id AlarmFilterRuleKey_AlarmFilterRuleKey = 3
+	AlarmFilterRuleKey_category    AlarmFilterRuleKey_AlarmFilterRuleKey = 4
+	AlarmFilterRuleKey_device_id   AlarmFilterRuleKey_AlarmFilterRuleKey = 5
+)
+
+var AlarmFilterRuleKey_AlarmFilterRuleKey_name = map[int32]string{
+	0: "id",
+	1: "type",
+	2: "severity",
+	3: "resource_id",
+	4: "category",
+	5: "device_id",
+}
+
+var AlarmFilterRuleKey_AlarmFilterRuleKey_value = map[string]int32{
+	"id":          0,
+	"type":        1,
+	"severity":    2,
+	"resource_id": 3,
+	"category":    4,
+	"device_id":   5,
+}
+
+func (x AlarmFilterRuleKey_AlarmFilterRuleKey) String() string {
+	return proto.EnumName(AlarmFilterRuleKey_AlarmFilterRuleKey_name, int32(x))
+}
+
+func (AlarmFilterRuleKey_AlarmFilterRuleKey) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{2, 0}
+}
+
+type SelfTestResponse_SelfTestResult int32
+
+const (
+	SelfTestResponse_SUCCESS       SelfTestResponse_SelfTestResult = 0
+	SelfTestResponse_FAILURE       SelfTestResponse_SelfTestResult = 1
+	SelfTestResponse_NOT_SUPPORTED SelfTestResponse_SelfTestResult = 2
+	SelfTestResponse_UNKNOWN_ERROR SelfTestResponse_SelfTestResult = 3
+)
+
+var SelfTestResponse_SelfTestResult_name = map[int32]string{
+	0: "SUCCESS",
+	1: "FAILURE",
+	2: "NOT_SUPPORTED",
+	3: "UNKNOWN_ERROR",
+}
+
+var SelfTestResponse_SelfTestResult_value = map[string]int32{
+	"SUCCESS":       0,
+	"FAILURE":       1,
+	"NOT_SUPPORTED": 2,
+	"UNKNOWN_ERROR": 3,
+}
+
+func (x SelfTestResponse_SelfTestResult) String() string {
+	return proto.EnumName(SelfTestResponse_SelfTestResult_name, int32(x))
+}
+
+func (SelfTestResponse_SelfTestResult) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{9, 0}
+}
+
+type DeviceGroup struct {
+	Id                   string           `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	LogicalDevices       []*LogicalDevice `protobuf:"bytes,2,rep,name=logical_devices,json=logicalDevices,proto3" json:"logical_devices,omitempty"`
+	Devices              []*Device        `protobuf:"bytes,3,rep,name=devices,proto3" json:"devices,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *DeviceGroup) Reset()         { *m = DeviceGroup{} }
+func (m *DeviceGroup) String() string { return proto.CompactTextString(m) }
+func (*DeviceGroup) ProtoMessage()    {}
+func (*DeviceGroup) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{0}
+}
+
+func (m *DeviceGroup) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceGroup.Unmarshal(m, b)
+}
+func (m *DeviceGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceGroup.Marshal(b, m, deterministic)
+}
+func (m *DeviceGroup) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceGroup.Merge(m, src)
+}
+func (m *DeviceGroup) XXX_Size() int {
+	return xxx_messageInfo_DeviceGroup.Size(m)
+}
+func (m *DeviceGroup) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceGroup.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceGroup proto.InternalMessageInfo
+
+func (m *DeviceGroup) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *DeviceGroup) GetLogicalDevices() []*LogicalDevice {
+	if m != nil {
+		return m.LogicalDevices
+	}
+	return nil
+}
+
+func (m *DeviceGroup) GetDevices() []*Device {
+	if m != nil {
+		return m.Devices
+	}
+	return nil
+}
+
+type DeviceGroups struct {
+	Items                []*DeviceGroup `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *DeviceGroups) Reset()         { *m = DeviceGroups{} }
+func (m *DeviceGroups) String() string { return proto.CompactTextString(m) }
+func (*DeviceGroups) ProtoMessage()    {}
+func (*DeviceGroups) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{1}
+}
+
+func (m *DeviceGroups) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceGroups.Unmarshal(m, b)
+}
+func (m *DeviceGroups) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceGroups.Marshal(b, m, deterministic)
+}
+func (m *DeviceGroups) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceGroups.Merge(m, src)
+}
+func (m *DeviceGroups) XXX_Size() int {
+	return xxx_messageInfo_DeviceGroups.Size(m)
+}
+func (m *DeviceGroups) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceGroups.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceGroups proto.InternalMessageInfo
+
+func (m *DeviceGroups) GetItems() []*DeviceGroup {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type AlarmFilterRuleKey struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AlarmFilterRuleKey) Reset()         { *m = AlarmFilterRuleKey{} }
+func (m *AlarmFilterRuleKey) String() string { return proto.CompactTextString(m) }
+func (*AlarmFilterRuleKey) ProtoMessage()    {}
+func (*AlarmFilterRuleKey) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{2}
+}
+
+func (m *AlarmFilterRuleKey) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmFilterRuleKey.Unmarshal(m, b)
+}
+func (m *AlarmFilterRuleKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmFilterRuleKey.Marshal(b, m, deterministic)
+}
+func (m *AlarmFilterRuleKey) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmFilterRuleKey.Merge(m, src)
+}
+func (m *AlarmFilterRuleKey) XXX_Size() int {
+	return xxx_messageInfo_AlarmFilterRuleKey.Size(m)
+}
+func (m *AlarmFilterRuleKey) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmFilterRuleKey.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmFilterRuleKey proto.InternalMessageInfo
+
+type AlarmFilterRule struct {
+	Key                  AlarmFilterRuleKey_AlarmFilterRuleKey `protobuf:"varint,1,opt,name=key,proto3,enum=voltha.AlarmFilterRuleKey_AlarmFilterRuleKey" json:"key,omitempty"`
+	Value                string                                `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
+	XXX_unrecognized     []byte                                `json:"-"`
+	XXX_sizecache        int32                                 `json:"-"`
+}
+
+func (m *AlarmFilterRule) Reset()         { *m = AlarmFilterRule{} }
+func (m *AlarmFilterRule) String() string { return proto.CompactTextString(m) }
+func (*AlarmFilterRule) ProtoMessage()    {}
+func (*AlarmFilterRule) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{3}
+}
+
+func (m *AlarmFilterRule) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmFilterRule.Unmarshal(m, b)
+}
+func (m *AlarmFilterRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmFilterRule.Marshal(b, m, deterministic)
+}
+func (m *AlarmFilterRule) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmFilterRule.Merge(m, src)
+}
+func (m *AlarmFilterRule) XXX_Size() int {
+	return xxx_messageInfo_AlarmFilterRule.Size(m)
+}
+func (m *AlarmFilterRule) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmFilterRule.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmFilterRule proto.InternalMessageInfo
+
+func (m *AlarmFilterRule) GetKey() AlarmFilterRuleKey_AlarmFilterRuleKey {
+	if m != nil {
+		return m.Key
+	}
+	return AlarmFilterRuleKey_id
+}
+
+func (m *AlarmFilterRule) GetValue() string {
+	if m != nil {
+		return m.Value
+	}
+	return ""
+}
+
+type AlarmFilter struct {
+	Id                   string             `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Rules                []*AlarmFilterRule `protobuf:"bytes,2,rep,name=rules,proto3" json:"rules,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *AlarmFilter) Reset()         { *m = AlarmFilter{} }
+func (m *AlarmFilter) String() string { return proto.CompactTextString(m) }
+func (*AlarmFilter) ProtoMessage()    {}
+func (*AlarmFilter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{4}
+}
+
+func (m *AlarmFilter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmFilter.Unmarshal(m, b)
+}
+func (m *AlarmFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmFilter.Marshal(b, m, deterministic)
+}
+func (m *AlarmFilter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmFilter.Merge(m, src)
+}
+func (m *AlarmFilter) XXX_Size() int {
+	return xxx_messageInfo_AlarmFilter.Size(m)
+}
+func (m *AlarmFilter) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmFilter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmFilter proto.InternalMessageInfo
+
+func (m *AlarmFilter) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *AlarmFilter) GetRules() []*AlarmFilterRule {
+	if m != nil {
+		return m.Rules
+	}
+	return nil
+}
+
+type AlarmFilters struct {
+	Filters              []*AlarmFilter `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *AlarmFilters) Reset()         { *m = AlarmFilters{} }
+func (m *AlarmFilters) String() string { return proto.CompactTextString(m) }
+func (*AlarmFilters) ProtoMessage()    {}
+func (*AlarmFilters) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{5}
+}
+
+func (m *AlarmFilters) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AlarmFilters.Unmarshal(m, b)
+}
+func (m *AlarmFilters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AlarmFilters.Marshal(b, m, deterministic)
+}
+func (m *AlarmFilters) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AlarmFilters.Merge(m, src)
+}
+func (m *AlarmFilters) XXX_Size() int {
+	return xxx_messageInfo_AlarmFilters.Size(m)
+}
+func (m *AlarmFilters) XXX_DiscardUnknown() {
+	xxx_messageInfo_AlarmFilters.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AlarmFilters proto.InternalMessageInfo
+
+func (m *AlarmFilters) GetFilters() []*AlarmFilter {
+	if m != nil {
+		return m.Filters
+	}
+	return nil
+}
+
+// CoreInstance represents a core instance.  It is data held in memory when a core
+// is running.  This data is not persistent.
+type CoreInstance struct {
+	InstanceId           string        `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"`
+	Health               *HealthStatus `protobuf:"bytes,2,opt,name=health,proto3" json:"health,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *CoreInstance) Reset()         { *m = CoreInstance{} }
+func (m *CoreInstance) String() string { return proto.CompactTextString(m) }
+func (*CoreInstance) ProtoMessage()    {}
+func (*CoreInstance) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{6}
+}
+
+func (m *CoreInstance) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CoreInstance.Unmarshal(m, b)
+}
+func (m *CoreInstance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CoreInstance.Marshal(b, m, deterministic)
+}
+func (m *CoreInstance) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CoreInstance.Merge(m, src)
+}
+func (m *CoreInstance) XXX_Size() int {
+	return xxx_messageInfo_CoreInstance.Size(m)
+}
+func (m *CoreInstance) XXX_DiscardUnknown() {
+	xxx_messageInfo_CoreInstance.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CoreInstance proto.InternalMessageInfo
+
+func (m *CoreInstance) GetInstanceId() string {
+	if m != nil {
+		return m.InstanceId
+	}
+	return ""
+}
+
+func (m *CoreInstance) GetHealth() *HealthStatus {
+	if m != nil {
+		return m.Health
+	}
+	return nil
+}
+
+type CoreInstances struct {
+	Items                []*CoreInstance `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *CoreInstances) Reset()         { *m = CoreInstances{} }
+func (m *CoreInstances) String() string { return proto.CompactTextString(m) }
+func (*CoreInstances) ProtoMessage()    {}
+func (*CoreInstances) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{7}
+}
+
+func (m *CoreInstances) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CoreInstances.Unmarshal(m, b)
+}
+func (m *CoreInstances) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CoreInstances.Marshal(b, m, deterministic)
+}
+func (m *CoreInstances) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CoreInstances.Merge(m, src)
+}
+func (m *CoreInstances) XXX_Size() int {
+	return xxx_messageInfo_CoreInstances.Size(m)
+}
+func (m *CoreInstances) XXX_DiscardUnknown() {
+	xxx_messageInfo_CoreInstances.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CoreInstances proto.InternalMessageInfo
+
+func (m *CoreInstances) GetItems() []*CoreInstance {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+// Voltha represents the Voltha cluster data.  Each Core instance will hold a subset of
+// the entire cluster. However, some items (e.g. adapters) will be held by all cores
+// for better performance
+type Voltha struct {
+	Version              string                  `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	Adapters             []*Adapter              `protobuf:"bytes,2,rep,name=adapters,proto3" json:"adapters,omitempty"`
+	LogicalDevices       []*LogicalDevice        `protobuf:"bytes,3,rep,name=logical_devices,json=logicalDevices,proto3" json:"logical_devices,omitempty"`
+	Devices              []*Device               `protobuf:"bytes,4,rep,name=devices,proto3" json:"devices,omitempty"`
+	DeviceTypes          []*DeviceType           `protobuf:"bytes,5,rep,name=device_types,json=deviceTypes,proto3" json:"device_types,omitempty"`
+	DeviceGroups         []*DeviceGroup          `protobuf:"bytes,6,rep,name=device_groups,json=deviceGroups,proto3" json:"device_groups,omitempty"`
+	AlarmFilters         []*AlarmFilter          `protobuf:"bytes,7,rep,name=alarm_filters,json=alarmFilters,proto3" json:"alarm_filters,omitempty"`
+	OmciMibDatabase      []*omci.MibDeviceData   `protobuf:"bytes,28,rep,name=omci_mib_database,json=omciMibDatabase,proto3" json:"omci_mib_database,omitempty"`
+	OmciAlarmDatabase    []*omci.AlarmDeviceData `protobuf:"bytes,29,rep,name=omci_alarm_database,json=omciAlarmDatabase,proto3" json:"omci_alarm_database,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
+	XXX_unrecognized     []byte                  `json:"-"`
+	XXX_sizecache        int32                   `json:"-"`
+}
+
+func (m *Voltha) Reset()         { *m = Voltha{} }
+func (m *Voltha) String() string { return proto.CompactTextString(m) }
+func (*Voltha) ProtoMessage()    {}
+func (*Voltha) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{8}
+}
+
+func (m *Voltha) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Voltha.Unmarshal(m, b)
+}
+func (m *Voltha) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Voltha.Marshal(b, m, deterministic)
+}
+func (m *Voltha) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Voltha.Merge(m, src)
+}
+func (m *Voltha) XXX_Size() int {
+	return xxx_messageInfo_Voltha.Size(m)
+}
+func (m *Voltha) XXX_DiscardUnknown() {
+	xxx_messageInfo_Voltha.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Voltha proto.InternalMessageInfo
+
+func (m *Voltha) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *Voltha) GetAdapters() []*Adapter {
+	if m != nil {
+		return m.Adapters
+	}
+	return nil
+}
+
+func (m *Voltha) GetLogicalDevices() []*LogicalDevice {
+	if m != nil {
+		return m.LogicalDevices
+	}
+	return nil
+}
+
+func (m *Voltha) GetDevices() []*Device {
+	if m != nil {
+		return m.Devices
+	}
+	return nil
+}
+
+func (m *Voltha) GetDeviceTypes() []*DeviceType {
+	if m != nil {
+		return m.DeviceTypes
+	}
+	return nil
+}
+
+func (m *Voltha) GetDeviceGroups() []*DeviceGroup {
+	if m != nil {
+		return m.DeviceGroups
+	}
+	return nil
+}
+
+func (m *Voltha) GetAlarmFilters() []*AlarmFilter {
+	if m != nil {
+		return m.AlarmFilters
+	}
+	return nil
+}
+
+func (m *Voltha) GetOmciMibDatabase() []*omci.MibDeviceData {
+	if m != nil {
+		return m.OmciMibDatabase
+	}
+	return nil
+}
+
+func (m *Voltha) GetOmciAlarmDatabase() []*omci.AlarmDeviceData {
+	if m != nil {
+		return m.OmciAlarmDatabase
+	}
+	return nil
+}
+
+// Device Self Test Response
+type SelfTestResponse struct {
+	Result               SelfTestResponse_SelfTestResult `protobuf:"varint,1,opt,name=result,proto3,enum=voltha.SelfTestResponse_SelfTestResult" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *SelfTestResponse) Reset()         { *m = SelfTestResponse{} }
+func (m *SelfTestResponse) String() string { return proto.CompactTextString(m) }
+func (*SelfTestResponse) ProtoMessage()    {}
+func (*SelfTestResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{9}
+}
+
+func (m *SelfTestResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SelfTestResponse.Unmarshal(m, b)
+}
+func (m *SelfTestResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SelfTestResponse.Marshal(b, m, deterministic)
+}
+func (m *SelfTestResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SelfTestResponse.Merge(m, src)
+}
+func (m *SelfTestResponse) XXX_Size() int {
+	return xxx_messageInfo_SelfTestResponse.Size(m)
+}
+func (m *SelfTestResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SelfTestResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SelfTestResponse proto.InternalMessageInfo
+
+func (m *SelfTestResponse) GetResult() SelfTestResponse_SelfTestResult {
+	if m != nil {
+		return m.Result
+	}
+	return SelfTestResponse_SUCCESS
+}
+
+type OfAgentSubscriber struct {
+	// ID of ofagent instance
+	OfagentId string `protobuf:"bytes,1,opt,name=ofagent_id,json=ofagentId,proto3" json:"ofagent_id,omitempty"`
+	// ID of voltha instance to which the ofagent is subscribed
+	VolthaId             string   `protobuf:"bytes,2,opt,name=voltha_id,json=volthaId,proto3" json:"voltha_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OfAgentSubscriber) Reset()         { *m = OfAgentSubscriber{} }
+func (m *OfAgentSubscriber) String() string { return proto.CompactTextString(m) }
+func (*OfAgentSubscriber) ProtoMessage()    {}
+func (*OfAgentSubscriber) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{10}
+}
+
+func (m *OfAgentSubscriber) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OfAgentSubscriber.Unmarshal(m, b)
+}
+func (m *OfAgentSubscriber) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OfAgentSubscriber.Marshal(b, m, deterministic)
+}
+func (m *OfAgentSubscriber) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OfAgentSubscriber.Merge(m, src)
+}
+func (m *OfAgentSubscriber) XXX_Size() int {
+	return xxx_messageInfo_OfAgentSubscriber.Size(m)
+}
+func (m *OfAgentSubscriber) XXX_DiscardUnknown() {
+	xxx_messageInfo_OfAgentSubscriber.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OfAgentSubscriber proto.InternalMessageInfo
+
+func (m *OfAgentSubscriber) GetOfagentId() string {
+	if m != nil {
+		return m.OfagentId
+	}
+	return ""
+}
+
+func (m *OfAgentSubscriber) GetVolthaId() string {
+	if m != nil {
+		return m.VolthaId
+	}
+	return ""
+}
+
+// Identifies a membership group a Core belongs to
+type Membership struct {
+	//  Group name
+	GroupName string `protobuf:"bytes,1,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"`
+	// Unique ID of a container within that group
+	Id                   string   `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Membership) Reset()         { *m = Membership{} }
+func (m *Membership) String() string { return proto.CompactTextString(m) }
+func (*Membership) ProtoMessage()    {}
+func (*Membership) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{11}
+}
+
+func (m *Membership) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Membership.Unmarshal(m, b)
+}
+func (m *Membership) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Membership.Marshal(b, m, deterministic)
+}
+func (m *Membership) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Membership.Merge(m, src)
+}
+func (m *Membership) XXX_Size() int {
+	return xxx_messageInfo_Membership.Size(m)
+}
+func (m *Membership) XXX_DiscardUnknown() {
+	xxx_messageInfo_Membership.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Membership proto.InternalMessageInfo
+
+func (m *Membership) GetGroupName() string {
+	if m != nil {
+		return m.GroupName
+	}
+	return ""
+}
+
+func (m *Membership) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+// Additional information required to process flow at device adapters
+type FlowMetadata struct {
+	// Meters associated with flow-update to adapter
+	Meters               []*openflow_13.OfpMeterConfig `protobuf:"bytes,1,rep,name=meters,proto3" json:"meters,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
+	XXX_unrecognized     []byte                        `json:"-"`
+	XXX_sizecache        int32                         `json:"-"`
+}
+
+func (m *FlowMetadata) Reset()         { *m = FlowMetadata{} }
+func (m *FlowMetadata) String() string { return proto.CompactTextString(m) }
+func (*FlowMetadata) ProtoMessage()    {}
+func (*FlowMetadata) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{12}
+}
+
+func (m *FlowMetadata) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FlowMetadata.Unmarshal(m, b)
+}
+func (m *FlowMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FlowMetadata.Marshal(b, m, deterministic)
+}
+func (m *FlowMetadata) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FlowMetadata.Merge(m, src)
+}
+func (m *FlowMetadata) XXX_Size() int {
+	return xxx_messageInfo_FlowMetadata.Size(m)
+}
+func (m *FlowMetadata) XXX_DiscardUnknown() {
+	xxx_messageInfo_FlowMetadata.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FlowMetadata proto.InternalMessageInfo
+
+func (m *FlowMetadata) GetMeters() []*openflow_13.OfpMeterConfig {
+	if m != nil {
+		return m.Meters
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterEnum("voltha.AlarmFilterRuleKey_AlarmFilterRuleKey", AlarmFilterRuleKey_AlarmFilterRuleKey_name, AlarmFilterRuleKey_AlarmFilterRuleKey_value)
+	proto.RegisterEnum("voltha.SelfTestResponse_SelfTestResult", SelfTestResponse_SelfTestResult_name, SelfTestResponse_SelfTestResult_value)
+	proto.RegisterType((*DeviceGroup)(nil), "voltha.DeviceGroup")
+	proto.RegisterType((*DeviceGroups)(nil), "voltha.DeviceGroups")
+	proto.RegisterType((*AlarmFilterRuleKey)(nil), "voltha.AlarmFilterRuleKey")
+	proto.RegisterType((*AlarmFilterRule)(nil), "voltha.AlarmFilterRule")
+	proto.RegisterType((*AlarmFilter)(nil), "voltha.AlarmFilter")
+	proto.RegisterType((*AlarmFilters)(nil), "voltha.AlarmFilters")
+	proto.RegisterType((*CoreInstance)(nil), "voltha.CoreInstance")
+	proto.RegisterType((*CoreInstances)(nil), "voltha.CoreInstances")
+	proto.RegisterType((*Voltha)(nil), "voltha.Voltha")
+	proto.RegisterType((*SelfTestResponse)(nil), "voltha.SelfTestResponse")
+	proto.RegisterType((*OfAgentSubscriber)(nil), "voltha.OfAgentSubscriber")
+	proto.RegisterType((*Membership)(nil), "voltha.Membership")
+	proto.RegisterType((*FlowMetadata)(nil), "voltha.FlowMetadata")
+}
+
+func init() { proto.RegisterFile("voltha_protos/voltha.proto", fileDescriptor_e084f1a60ce7016c) }
+
+var fileDescriptor_e084f1a60ce7016c = []byte{
+	// 2493 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x73, 0x1b, 0x49,
+	0x15, 0xb6, 0x7c, 0xf7, 0x91, 0x64, 0x49, 0x2d, 0x5f, 0xb4, 0xb2, 0x9d, 0x38, 0xbd, 0xb9, 0xe1,
+	0x5d, 0x4b, 0x49, 0xbc, 0x49, 0x41, 0x96, 0xad, 0x25, 0x96, 0x1d, 0x23, 0xe2, 0xd8, 0x62, 0x14,
+	0x27, 0xc0, 0x6e, 0x4a, 0x35, 0xd2, 0xb4, 0xe5, 0xa9, 0x1d, 0xcd, 0x88, 0xe9, 0x96, 0x82, 0x2b,
+	0x6c, 0x41, 0x85, 0x6b, 0xf1, 0xc8, 0xfe, 0x05, 0x9e, 0x28, 0xfe, 0x4a, 0x9e, 0xf8, 0x03, 0x14,
+	0xc5, 0x03, 0x8f, 0x3c, 0x05, 0x1e, 0xa9, 0xbe, 0x8c, 0x34, 0xa3, 0x99, 0xf1, 0x65, 0xd9, 0x2a,
+	0x9e, 0x62, 0xf5, 0x39, 0xf3, 0x7d, 0x5f, 0x9f, 0x3e, 0xdd, 0xe7, 0x4c, 0x4f, 0xa0, 0xd8, 0x77,
+	0x2c, 0x76, 0xa2, 0x37, 0xba, 0xae, 0xc3, 0x1c, 0x5a, 0x96, 0xbf, 0x4a, 0xe2, 0x17, 0x9a, 0x96,
+	0xbf, 0x8a, 0xab, 0x6d, 0xc7, 0x69, 0x5b, 0xa4, 0xac, 0x77, 0xcd, 0xb2, 0x6e, 0xdb, 0x0e, 0xd3,
+	0x99, 0xe9, 0xd8, 0x54, 0x7a, 0x15, 0x57, 0x94, 0x55, 0xfc, 0x6a, 0xf6, 0x8e, 0xcb, 0xa4, 0xd3,
+	0x65, 0xa7, 0xca, 0x58, 0x08, 0xc2, 0x77, 0x08, 0x53, 0xe0, 0xc5, 0x11, 0xe2, 0x96, 0xd3, 0xe9,
+	0x38, 0x76, 0xb4, 0xed, 0x84, 0xe8, 0x16, 0x3b, 0x51, 0x36, 0x1c, 0xb4, 0x59, 0x4e, 0xdb, 0x6c,
+	0xe9, 0x56, 0xc3, 0x20, 0x7d, 0xb3, 0x45, 0xa2, 0x9f, 0x0f, 0xd8, 0x56, 0x82, 0x36, 0xdd, 0xd0,
+	0xbb, 0x8c, 0xb8, 0xca, 0x78, 0x35, 0x68, 0x74, 0xba, 0xc4, 0x3e, 0xb6, 0x9c, 0x57, 0x8d, 0xbb,
+	0x5b, 0x31, 0x0e, 0x9d, 0x96, 0xd9, 0xe8, 0x98, 0xcd, 0x86, 0xd1, 0x54, 0x0e, 0xd7, 0x22, 0x1c,
+	0x74, 0x4b, 0x77, 0x3b, 0x43, 0x97, 0xf5, 0xa0, 0xcb, 0xa9, 0x6e, 0xb7, 0x1b, 0x4e, 0xd7, 0x17,
+	0x52, 0xfc, 0xa7, 0x04, 0x24, 0x77, 0x84, 0xe8, 0x3d, 0xd7, 0xe9, 0x75, 0xd1, 0x22, 0x8c, 0x9b,
+	0x46, 0x21, 0xb1, 0x9e, 0xb8, 0x3d, 0xb7, 0x3d, 0xf5, 0xcf, 0x77, 0x6f, 0xd7, 0x12, 0xda, 0xb8,
+	0x69, 0xa0, 0x2a, 0x64, 0x82, 0xd3, 0xa7, 0x85, 0xf1, 0xf5, 0x89, 0xdb, 0xc9, 0x7b, 0x8b, 0x25,
+	0xb5, 0x8e, 0xfb, 0xd2, 0x2c, 0xb1, 0xb6, 0xe7, 0xfe, 0xfe, 0xee, 0xed, 0xda, 0x24, 0xc7, 0xd2,
+	0xe6, 0x2d, 0xbf, 0x85, 0xa2, 0x2d, 0x98, 0xf1, 0x20, 0x26, 0x04, 0xc4, 0xbc, 0x07, 0x11, 0x7e,
+	0xd6, 0xf3, 0xc4, 0xdf, 0x81, 0x94, 0x4f, 0x25, 0x45, 0xdf, 0x82, 0x29, 0x93, 0x91, 0x0e, 0x2d,
+	0x24, 0x04, 0x44, 0x3e, 0x08, 0x21, 0x9c, 0x34, 0xe9, 0x81, 0x7f, 0x01, 0xe8, 0x11, 0x8f, 0xca,
+	0x63, 0xd3, 0x62, 0xc4, 0xd5, 0x7a, 0x16, 0x79, 0x42, 0x4e, 0x71, 0x33, 0x6a, 0x14, 0x4d, 0x73,
+	0xd6, 0xec, 0x18, 0x9a, 0x85, 0x49, 0x76, 0xda, 0x25, 0xd9, 0x04, 0x4a, 0xc1, 0x2c, 0x25, 0x7d,
+	0xe2, 0x9a, 0xec, 0x34, 0x3b, 0x8e, 0x32, 0x90, 0x74, 0x09, 0x75, 0x7a, 0x6e, 0x8b, 0x34, 0x4c,
+	0x23, 0x3b, 0xc1, 0xcd, 0x2d, 0x9d, 0x91, 0xb6, 0xe3, 0x9e, 0x66, 0x27, 0x51, 0x1a, 0xe6, 0xa4,
+	0x60, 0x6e, 0x9c, 0x7a, 0x38, 0xf5, 0xaf, 0x77, 0x6f, 0xd7, 0xc6, 0xf0, 0x09, 0x64, 0x46, 0xa8,
+	0xd0, 0xa7, 0x30, 0xf1, 0x05, 0x39, 0x15, 0x61, 0x9e, 0xbf, 0xb7, 0xe9, 0x89, 0x0f, 0x0b, 0x8a,
+	0x18, 0xd2, 0xf8, 0x93, 0x68, 0x01, 0xa6, 0xfa, 0xba, 0xd5, 0x23, 0x85, 0x71, 0xbe, 0x52, 0x9a,
+	0xfc, 0x81, 0xeb, 0x90, 0xf4, 0x3d, 0x10, 0xb7, 0x96, 0x9b, 0x30, 0xe5, 0xf6, 0xac, 0xc1, 0x0a,
+	0x2e, 0xc7, 0xd0, 0x6b, 0xd2, 0x0b, 0x7f, 0x02, 0x29, 0x9f, 0x85, 0xa2, 0x4d, 0x98, 0x39, 0x96,
+	0x7f, 0x8e, 0x06, 0xdf, 0x0f, 0xe0, 0xf9, 0x60, 0x17, 0x52, 0x15, 0xc7, 0x25, 0x55, 0x9b, 0x32,
+	0xdd, 0x6e, 0x11, 0x74, 0x13, 0x92, 0xa6, 0xfa, 0xbb, 0x31, 0xaa, 0x0e, 0x3c, 0x4b, 0xd5, 0x40,
+	0x5b, 0x30, 0x2d, 0x37, 0xa3, 0x98, 0x62, 0xf2, 0xde, 0x82, 0xc7, 0xf2, 0x7d, 0x31, 0x5a, 0x67,
+	0x3a, 0xeb, 0xd1, 0xed, 0x29, 0x9e, 0x2b, 0x63, 0x9a, 0x72, 0x7d, 0x38, 0xf5, 0x1f, 0x8e, 0x83,
+	0xb7, 0x21, 0xed, 0xe7, 0xa4, 0x68, 0x23, 0x98, 0x2e, 0x03, 0x2c, 0xbf, 0x97, 0xca, 0x17, 0x0f,
+	0xe3, 0x6f, 0x93, 0x30, 0xfd, 0x5c, 0x78, 0xa1, 0xab, 0x30, 0xd3, 0x27, 0x2e, 0x35, 0x1d, 0x3b,
+	0x28, 0xd7, 0x1b, 0x45, 0x0f, 0x60, 0x56, 0x6d, 0x6e, 0x2f, 0xa8, 0x99, 0x41, 0x4c, 0xe4, 0xb8,
+	0x3f, 0xa9, 0x07, 0xbe, 0x51, 0xbb, 0x6a, 0xe2, 0x7f, 0xdf, 0x55, 0x93, 0x17, 0xdd, 0x55, 0xe8,
+	0x7b, 0x90, 0x52, 0xf9, 0xca, 0xb3, 0x9d, 0x16, 0xa6, 0xc4, 0x93, 0x28, 0xf8, 0xe4, 0xb3, 0xd3,
+	0x6e, 0xe0, 0xe9, 0xa4, 0x31, 0x18, 0xa6, 0xa8, 0x02, 0x69, 0x85, 0xd0, 0x16, 0x1b, 0xb3, 0x30,
+	0x1d, 0xbb, 0x1f, 0xfd, 0x18, 0x8a, 0x56, 0x6d, 0xe6, 0x0a, 0xa4, 0xe5, 0xb9, 0xe5, 0xe5, 0xd5,
+	0x4c, 0x6c, 0x5e, 0x05, 0x40, 0x74, 0x7f, 0x5a, 0xfe, 0x10, 0x72, 0xc3, 0x23, 0x52, 0x67, 0x7a,
+	0x53, 0xa7, 0xa4, 0xb0, 0xaa, 0x80, 0xb8, 0xa5, 0xf4, 0xd4, 0x6c, 0x4a, 0x39, 0x3b, 0x3a, 0xd3,
+	0xb7, 0xb3, 0x1c, 0x28, 0xe9, 0xdb, 0xb0, 0x5a, 0x86, 0x7b, 0x71, 0x27, 0xf5, 0x34, 0x7a, 0x01,
+	0x79, 0xff, 0xa1, 0xea, 0x81, 0xae, 0xa9, 0x25, 0x12, 0xa0, 0x42, 0xdb, 0x99, 0xb0, 0x42, 0x96,
+	0x74, 0x53, 0x08, 0x5e, 0x8a, 0xfd, 0x25, 0x01, 0xd9, 0x3a, 0xb1, 0x8e, 0x9f, 0x11, 0xca, 0x34,
+	0x42, 0xbb, 0x8e, 0x4d, 0xf9, 0xd1, 0x30, 0xed, 0x12, 0xda, 0xb3, 0x98, 0x3a, 0x1d, 0x6e, 0x79,
+	0x51, 0x18, 0xf5, 0xf4, 0x0f, 0xf4, 0x2c, 0xa6, 0xa9, 0xc7, 0x70, 0x0d, 0xe6, 0x83, 0x16, 0x94,
+	0x84, 0x99, 0xfa, 0x51, 0xa5, 0xb2, 0x5b, 0xaf, 0x67, 0xc7, 0xf8, 0x8f, 0xc7, 0x8f, 0xaa, 0xfb,
+	0x47, 0xda, 0x6e, 0x36, 0x81, 0x72, 0x90, 0x3e, 0x38, 0x7c, 0xd6, 0xa8, 0x1f, 0xd5, 0x6a, 0x87,
+	0xda, 0xb3, 0xdd, 0x9d, 0xec, 0x38, 0x1f, 0x3a, 0x3a, 0x78, 0x72, 0x70, 0xf8, 0xe2, 0xa0, 0xb1,
+	0xab, 0x69, 0x87, 0x5a, 0x76, 0xc2, 0x3b, 0xc7, 0x0e, 0x21, 0x77, 0x78, 0xfc, 0xa8, 0x4d, 0x6c,
+	0x56, 0xef, 0x35, 0x69, 0xcb, 0x35, 0x9b, 0xc4, 0x45, 0x6b, 0x00, 0xce, 0xb1, 0xce, 0x07, 0x07,
+	0xbb, 0x59, 0x9b, 0x53, 0x23, 0x55, 0x03, 0xad, 0xc0, 0x9c, 0x2a, 0x41, 0xa6, 0xa1, 0xce, 0xaa,
+	0x59, 0x39, 0x50, 0x35, 0xf0, 0xc7, 0x00, 0x4f, 0x49, 0xa7, 0x49, 0x5c, 0x7a, 0x62, 0x76, 0x39,
+	0x92, 0xc8, 0xa1, 0x86, 0xad, 0x77, 0x88, 0x87, 0x24, 0x46, 0x0e, 0xf4, 0x0e, 0x41, 0xf3, 0xe2,
+	0x30, 0x93, 0x10, 0xe3, 0xa6, 0x81, 0x77, 0x21, 0xf5, 0xd8, 0x72, 0x5e, 0x3d, 0x25, 0x4c, 0xe7,
+	0x2b, 0x83, 0xee, 0xc3, 0x74, 0x87, 0xf8, 0x4e, 0xa5, 0xb5, 0x92, 0xbf, 0xa4, 0x3a, 0xc7, 0xdd,
+	0x86, 0x30, 0x37, 0x5a, 0x8e, 0x7d, 0x6c, 0xb6, 0x35, 0xe5, 0x7c, 0xef, 0xcd, 0x1d, 0x48, 0xcb,
+	0x6d, 0x5e, 0x27, 0x2e, 0x5f, 0x32, 0xa4, 0xc1, 0xfc, 0x51, 0xd7, 0xd0, 0x19, 0xd9, 0x77, 0xda,
+	0xfb, 0xa4, 0x4f, 0x2c, 0x94, 0x29, 0xa9, 0x96, 0x61, 0xdf, 0x69, 0xb7, 0x4d, 0xbb, 0x5d, 0x5c,
+	0x2a, 0xc9, 0x46, 0xa4, 0xe4, 0x35, 0x22, 0xa5, 0x5d, 0xde, 0x88, 0xe0, 0xe5, 0x37, 0x7f, 0xfd,
+	0xc7, 0x57, 0xe3, 0x39, 0x9c, 0x12, 0xfd, 0x4b, 0xff, 0x2e, 0x6f, 0x19, 0xe8, 0xc3, 0xc4, 0x06,
+	0xaa, 0x41, 0x6a, 0x8f, 0x30, 0x0f, 0x90, 0xa2, 0xc2, 0x08, 0x62, 0xc5, 0xe9, 0x74, 0x1d, 0x9b,
+	0xd8, 0xac, 0x98, 0x1d, 0xb1, 0x50, 0xbc, 0x20, 0x40, 0xe7, 0x51, 0x00, 0x14, 0xbd, 0x80, 0xf4,
+	0x1e, 0x61, 0xbe, 0xf0, 0xc5, 0x68, 0x2a, 0x0e, 0x76, 0xf3, 0xd0, 0x17, 0x17, 0x05, 0xe4, 0x02,
+	0x42, 0x1e, 0x64, 0x67, 0x88, 0xf3, 0x12, 0xb2, 0x72, 0xfa, 0x3e, 0xec, 0x08, 0x8c, 0xd8, 0x18,
+	0xac, 0x09, 0xec, 0x65, 0x1c, 0x81, 0xcd, 0x23, 0xb1, 0x03, 0x73, 0x7b, 0x84, 0xa9, 0x83, 0x35,
+	0x4e, 0xf3, 0xe0, 0xec, 0x92, 0x7e, 0x38, 0x23, 0x30, 0xe7, 0xd0, 0x8c, 0xc2, 0x44, 0x3d, 0xc8,
+	0xed, 0x9b, 0x94, 0x05, 0x0f, 0xf9, 0x38, 0xb4, 0xc5, 0xa8, 0xd3, 0x9e, 0xe2, 0xbb, 0x7f, 0xf8,
+	0xf7, 0xdb, 0xb5, 0x19, 0x55, 0x18, 0xc4, 0xdf, 0x48, 0xfe, 0x2d, 0xc8, 0xf2, 0x28, 0xe7, 0x4d,
+	0xc0, 0x1c, 0x30, 0xd4, 0x21, 0xb3, 0x47, 0x02, 0xac, 0x08, 0xbc, 0xf5, 0xaa, 0xee, 0x14, 0x23,
+	0xcb, 0x0a, 0xbe, 0x22, 0xf0, 0x0a, 0x68, 0x29, 0x84, 0x57, 0x7e, 0x6d, 0x1a, 0x5f, 0x22, 0x1d,
+	0x52, 0x7c, 0x2e, 0x8f, 0xbc, 0xa2, 0x10, 0x37, 0x8d, 0xec, 0x48, 0x49, 0xa1, 0xf8, 0x16, 0x57,
+	0x0d, 0xc3, 0xda, 0x23, 0x88, 0x10, 0xca, 0x7a, 0x44, 0x83, 0x3a, 0xf3, 0x1a, 0x10, 0xa7, 0xd8,
+	0x0f, 0x96, 0x8c, 0x38, 0xa2, 0xa5, 0xc8, 0xe2, 0x43, 0xf1, 0x7d, 0x4e, 0x97, 0x0b, 0x95, 0x2c,
+	0xc1, 0xfa, 0x1e, 0x5a, 0xf6, 0xa5, 0xa7, 0xdf, 0x8c, 0x3e, 0x83, 0xac, 0xcc, 0xfd, 0x21, 0x56,
+	0x20, 0x6a, 0xd1, 0xb5, 0x0e, 0x5f, 0x17, 0xb8, 0x57, 0xd0, 0x6a, 0x0c, 0xae, 0x0c, 0x9e, 0x0b,
+	0x4b, 0xa1, 0x99, 0xd5, 0x1c, 0x97, 0xd1, 0xe8, 0x85, 0x51, 0x7e, 0xc2, 0x03, 0x3f, 0x50, 0x09,
+	0xd0, 0xe5, 0xbf, 0x04, 0xdb, 0x75, 0x84, 0xcf, 0x62, 0x2b, 0x0b, 0x4f, 0xf4, 0xab, 0x04, 0x2c,
+	0x8c, 0xce, 0x88, 0x23, 0xa2, 0xc5, 0x08, 0x9a, 0xaa, 0x51, 0xcc, 0x47, 0x0c, 0xe3, 0x4f, 0x39,
+	0xf9, 0x34, 0x4c, 0x72, 0x48, 0xc1, 0x5d, 0x42, 0x1f, 0x9e, 0xcf, 0x5d, 0x7e, 0xcd, 0xff, 0x69,
+	0xf0, 0x99, 0xff, 0x26, 0x01, 0xcb, 0xbb, 0xb6, 0xde, 0xb4, 0xc8, 0x85, 0x85, 0xc4, 0x6d, 0xd9,
+	0x8f, 0x85, 0x80, 0xfb, 0x78, 0xeb, 0x32, 0x02, 0xca, 0x44, 0x90, 0xa3, 0xdf, 0x25, 0xa0, 0xb0,
+	0x63, 0xd2, 0x6f, 0x44, 0xc8, 0x77, 0x85, 0x90, 0x07, 0xf8, 0xa3, 0x4b, 0x09, 0x31, 0x24, 0x3b,
+	0xfa, 0x79, 0x44, 0x2e, 0xf0, 0x12, 0x11, 0xcc, 0x05, 0x14, 0xa8, 0x0b, 0xc2, 0x8e, 0xb7, 0x55,
+	0x26, 0xf0, 0xd1, 0xf0, 0x51, 0x70, 0x5e, 0x56, 0x88, 0xa7, 0x78, 0x56, 0xac, 0x0e, 0xea, 0x46,
+	0x50, 0xc0, 0x33, 0x21, 0x6f, 0x35, 0x44, 0x2c, 0xc6, 0xe5, 0x33, 0xb1, 0x21, 0xd9, 0x14, 0x12,
+	0x6e, 0xe1, 0x0b, 0x48, 0xe0, 0xc7, 0xeb, 0xaf, 0x13, 0xb0, 0x16, 0xa1, 0xe2, 0x29, 0x2f, 0x76,
+	0x52, 0xc6, 0x4a, 0x40, 0x86, 0x30, 0x3c, 0x75, 0x8c, 0x73, 0x54, 0x94, 0x84, 0x8a, 0xdb, 0xf8,
+	0xfd, 0x33, 0x55, 0xc8, 0x92, 0xca, 0x65, 0xfc, 0x32, 0x01, 0xcb, 0xa1, 0xb5, 0x10, 0x5c, 0xc1,
+	0xc5, 0xc8, 0x87, 0xc5, 0x50, 0xbc, 0xc3, 0x57, 0x60, 0xd6, 0x2b, 0xe7, 0xa1, 0xe5, 0xb8, 0x81,
+	0x2e, 0xa2, 0x02, 0xfd, 0x31, 0x01, 0x2b, 0x91, 0xe9, 0xa0, 0x9a, 0x4e, 0xbf, 0x8c, 0xe5, 0xd0,
+	0xd2, 0x48, 0x27, 0x7c, 0xc0, 0xd9, 0xd3, 0x90, 0x14, 0x26, 0xd9, 0xe1, 0x86, 0xf4, 0x6c, 0xa0,
+	0xdb, 0xe7, 0xae, 0x8d, 0x7a, 0x16, 0x7d, 0x95, 0x80, 0x6b, 0x31, 0x49, 0x22, 0x18, 0xe5, 0x12,
+	0x5d, 0x8b, 0x96, 0x73, 0x91, 0x74, 0xd9, 0x12, 0x92, 0x36, 0xf1, 0x85, 0x25, 0xf1, 0xd5, 0x7a,
+	0x09, 0x49, 0x1e, 0xa9, 0xf3, 0xea, 0x42, 0x26, 0xd8, 0xd4, 0x53, 0x7c, 0x83, 0xc7, 0x62, 0x6e,
+	0xf0, 0xe2, 0x21, 0x9b, 0x1f, 0x94, 0xf1, 0xa8, 0xbd, 0x02, 0x60, 0x40, 0x7a, 0x08, 0x5f, 0x35,
+	0xe2, 0x09, 0x92, 0xc3, 0x25, 0xa1, 0xb8, 0xc4, 0xc1, 0x45, 0xa3, 0x7f, 0x56, 0x6d, 0x96, 0x1c,
+	0xa6, 0x41, 0xd1, 0x11, 0x64, 0x35, 0xd2, 0x72, 0xec, 0x96, 0x69, 0x11, 0x6f, 0x26, 0x7e, 0xc0,
+	0xd8, 0x90, 0xad, 0x0a, 0xcc, 0x25, 0x1c, 0xc6, 0xe4, 0xb1, 0xd9, 0x15, 0xfd, 0x4a, 0x44, 0xd9,
+	0x1a, 0x79, 0xbf, 0xf2, 0x60, 0xd0, 0xc2, 0xc8, 0xf4, 0x65, 0x9d, 0xfa, 0x01, 0xa4, 0x2a, 0x2e,
+	0xd1, 0x99, 0x92, 0x86, 0x46, 0x9e, 0x0e, 0xa1, 0xa9, 0x0e, 0x0d, 0x8f, 0x06, 0x93, 0x4b, 0x7a,
+	0x01, 0x29, 0x79, 0xf0, 0x47, 0xa8, 0x8a, 0x9b, 0xe4, 0xfb, 0x02, 0x6f, 0x0d, 0xaf, 0x44, 0xa9,
+	0xf3, 0x8e, 0xf2, 0x1f, 0x43, 0x5a, 0x9d, 0xe4, 0x97, 0x40, 0x56, 0x75, 0x1a, 0xaf, 0x46, 0x22,
+	0x7b, 0x67, 0xf3, 0x0b, 0x48, 0x69, 0xa4, 0xe9, 0x38, 0xec, 0x1b, 0xd3, 0xec, 0x0a, 0x38, 0x0e,
+	0xbc, 0x43, 0x2c, 0xc2, 0xbe, 0x46, 0x30, 0x36, 0xa2, 0x81, 0x0d, 0x01, 0x87, 0x7a, 0x90, 0xde,
+	0x71, 0x5e, 0xd9, 0x96, 0xa3, 0x1b, 0xd5, 0x8e, 0xde, 0x26, 0xc3, 0x5a, 0x26, 0x7e, 0x7a, 0xb6,
+	0xe2, 0xa2, 0x47, 0x78, 0xd8, 0x25, 0xae, 0xb8, 0xad, 0xe4, 0x2f, 0x68, 0xf8, 0x81, 0xe0, 0xb8,
+	0x83, 0x3f, 0x88, 0xe4, 0x30, 0x39, 0x44, 0xc3, 0x50, 0x18, 0xb4, 0xfc, 0x9a, 0xbf, 0xf3, 0x7c,
+	0xc9, 0x17, 0xf7, 0x4d, 0x02, 0x96, 0xf6, 0x08, 0x0b, 0x70, 0xc8, 0xbb, 0x8e, 0x78, 0x01, 0x51,
+	0xc3, 0xf8, 0xa1, 0x10, 0xf0, 0x11, 0xba, 0x77, 0x09, 0x01, 0x65, 0x2a, 0x99, 0x7a, 0xa2, 0x65,
+	0x0b, 0xe0, 0x5d, 0x92, 0x5d, 0x9d, 0x43, 0xe8, 0x32, 0xd3, 0x47, 0xc7, 0xb2, 0x4d, 0x0d, 0x20,
+	0xd1, 0x91, 0x15, 0x8d, 0x62, 0xa3, 0xf8, 0x43, 0x41, 0x77, 0x13, 0x5d, 0xbf, 0x08, 0x1d, 0xfa,
+	0x19, 0xe4, 0x2b, 0xbc, 0x01, 0xb7, 0x2e, 0x38, 0xc3, 0xc8, 0x05, 0x56, 0x33, 0xdc, 0xb8, 0xd4,
+	0x0c, 0x7f, 0x9f, 0x80, 0xfc, 0xa3, 0x16, 0x33, 0xfb, 0x3a, 0x23, 0x82, 0x45, 0x1e, 0xe7, 0x97,
+	0xa4, 0xae, 0x08, 0xea, 0x4f, 0xf0, 0xb7, 0x2f, 0xb3, 0xb4, 0x72, 0xb8, 0x27, 0xf8, 0x78, 0xa2,
+	0xfd, 0x36, 0x01, 0x39, 0x8d, 0xf4, 0x89, 0xcb, 0xfe, 0x2f, 0x42, 0x5c, 0x41, 0xcd, 0x85, 0x7c,
+	0x0e, 0x99, 0x61, 0x79, 0x08, 0xf7, 0xee, 0x69, 0x4f, 0x91, 0x6c, 0xda, 0x4b, 0xa1, 0xa6, 0x7d,
+	0x15, 0x15, 0x23, 0xe9, 0x65, 0xb3, 0xfe, 0x12, 0xf2, 0x3e, 0xf4, 0x4e, 0x45, 0xbc, 0xfd, 0x07,
+	0x19, 0x72, 0x03, 0x06, 0xcf, 0x8c, 0x6f, 0x09, 0xe4, 0x6b, 0xe8, 0x6a, 0x34, 0x72, 0x47, 0xdd,
+	0x22, 0x50, 0x64, 0xc3, 0xa2, 0x8c, 0xdc, 0x28, 0x41, 0x18, 0x34, 0xf6, 0x38, 0xda, 0x90, 0x5d,
+	0x26, 0x3e, 0x8f, 0x8c, 0x07, 0xab, 0xe3, 0x0f, 0xd6, 0xc5, 0x9a, 0xdb, 0x87, 0x67, 0x36, 0xb7,
+	0x71, 0xd1, 0x1b, 0x34, 0xb5, 0x0b, 0x41, 0xbe, 0xcb, 0x74, 0x4f, 0x8f, 0x2f, 0xd0, 0x3d, 0x61,
+	0xb4, 0x1e, 0xcb, 0xef, 0x75, 0x4d, 0x8e, 0x7f, 0xd2, 0xf2, 0xde, 0x31, 0xae, 0x85, 0xc8, 0x87,
+	0xef, 0x2e, 0x29, 0x2e, 0x73, 0xd6, 0xf9, 0xe0, 0x5d, 0x67, 0x74, 0xb5, 0x96, 0x36, 0xa4, 0x89,
+	0xcb, 0x95, 0x21, 0xc4, 0x48, 0x8c, 0x43, 0x14, 0xf8, 0x9a, 0x80, 0x5b, 0x41, 0xef, 0x45, 0xc1,
+	0xc9, 0x0e, 0x80, 0x42, 0x76, 0x38, 0x09, 0x15, 0xc5, 0xb8, 0x59, 0x2c, 0x44, 0x5c, 0x9f, 0xaa,
+	0x0b, 0x8b, 0xcc, 0xc8, 0x85, 0xab, 0xbc, 0x6d, 0x41, 0x8b, 0x23, 0xc4, 0x2a, 0x72, 0x8f, 0x21,
+	0x5b, 0x67, 0x2e, 0xd1, 0x3b, 0x35, 0xbd, 0xf5, 0x05, 0x61, 0xf4, 0xb0, 0xc7, 0xd0, 0x52, 0x60,
+	0xb9, 0xa4, 0xe1, 0xb0, 0xc7, 0x62, 0xd3, 0x73, 0xec, 0x76, 0x02, 0xed, 0x8a, 0xe6, 0x8a, 0x98,
+	0x7d, 0xa2, 0x80, 0xaa, 0xf6, 0x19, 0xd7, 0x2d, 0x61, 0xfc, 0xaa, 0x8d, 0xc7, 0xee, 0x24, 0xd0,
+	0x13, 0xc8, 0x2b, 0x98, 0xca, 0x89, 0x6e, 0xb7, 0xc9, 0x6e, 0x9f, 0xd8, 0x2c, 0x3e, 0x0c, 0x85,
+	0x00, 0x92, 0xef, 0x11, 0x01, 0x76, 0x04, 0xf3, 0x83, 0x45, 0x92, 0xdf, 0xae, 0x82, 0x6f, 0x16,
+	0xe1, 0x10, 0x62, 0x1c, 0x9d, 0xf2, 0x2a, 0x5a, 0x72, 0x9d, 0x1a, 0x90, 0x93, 0x9d, 0x9a, 0xff,
+	0x4b, 0x4a, 0xd4, 0x55, 0x74, 0x31, 0x6a, 0x10, 0xaf, 0x0b, 0x8a, 0x22, 0x1e, 0x2c, 0x48, 0xe0,
+	0x66, 0x9b, 0x6f, 0x61, 0xa9, 0xdb, 0x8f, 0x1e, 0xa9, 0xdb, 0x0f, 0x1a, 0xd2, 0x1d, 0x00, 0x95,
+	0xba, 0x0d, 0xc8, 0xc9, 0x93, 0xe8, 0xeb, 0xe9, 0xbe, 0x21, 0x28, 0xae, 0x16, 0xcf, 0xa0, 0xe0,
+	0xe2, 0x3f, 0x83, 0x9c, 0x6c, 0xb7, 0xe2, 0xf4, 0xc7, 0x65, 0x91, 0x9a, 0xc2, 0xc6, 0x59, 0x53,
+	0x68, 0xc8, 0x2d, 0x12, 0xf8, 0xda, 0x74, 0xee, 0x16, 0xf1, 0x7b, 0x7b, 0x97, 0x8f, 0x28, 0x3a,
+	0xfa, 0x68, 0x5f, 0x34, 0xf3, 0xa2, 0xb4, 0xd1, 0xe8, 0x66, 0x5e, 0xda, 0xbc, 0x0e, 0x11, 0xad,
+	0xc4, 0x17, 0x36, 0x8a, 0x7e, 0x04, 0xb3, 0xde, 0x45, 0x7b, 0x00, 0xac, 0x10, 0x77, 0x63, 0x8f,
+	0x6f, 0x0a, 0xd8, 0x75, 0x7c, 0x25, 0x12, 0x96, 0x12, 0xeb, 0xb8, 0xc1, 0x38, 0xda, 0x73, 0xd1,
+	0x7f, 0x05, 0xbe, 0x57, 0x8c, 0xbe, 0x36, 0x87, 0x3e, 0x68, 0x84, 0xcf, 0x20, 0xbe, 0x79, 0xb8,
+	0x9f, 0x7a, 0x2d, 0x36, 0x9b, 0xe8, 0x73, 0x40, 0x5e, 0xea, 0xc5, 0x20, 0x47, 0x7f, 0xd5, 0x08,
+	0xc7, 0x23, 0x88, 0x2d, 0xa2, 0x8c, 0x28, 0xa4, 0xeb, 0x66, 0xa7, 0x67, 0x79, 0x39, 0x88, 0x56,
+	0x07, 0x81, 0xf0, 0x0f, 0x6b, 0xe4, 0xa7, 0x3d, 0x42, 0x59, 0x5c, 0x4f, 0x11, 0xba, 0xf0, 0x08,
+	0xc6, 0x48, 0x21, 0x35, 0x38, 0x12, 0x4f, 0xc8, 0x0a, 0xcc, 0x0d, 0xbe, 0x46, 0xa0, 0xf7, 0x3c,
+	0xc2, 0xd0, 0x77, 0x8a, 0x62, 0xbc, 0x09, 0x8f, 0x6d, 0x9b, 0x90, 0x77, 0xdc, 0xb6, 0x38, 0x6d,
+	0x5a, 0x8e, 0x6b, 0x28, 0xd7, 0xed, 0x94, 0xbc, 0x7e, 0xae, 0x89, 0x8f, 0xe7, 0x3f, 0xf9, 0xa0,
+	0x6d, 0xb2, 0x93, 0x5e, 0x93, 0xab, 0x2e, 0x7b, 0x9e, 0xea, 0x3f, 0x31, 0x6c, 0xaa, 0xef, 0xeb,
+	0x6d, 0x47, 0x0d, 0xfc, 0x79, 0x7c, 0xe9, 0xd0, 0x03, 0x7b, 0xee, 0xbf, 0xca, 0xae, 0x8d, 0xd7,
+	0x26, 0x6a, 0x93, 0xb5, 0xa9, 0xda, 0x74, 0x6d, 0xa6, 0x36, 0xdb, 0x9c, 0x16, 0x0f, 0x6e, 0xfd,
+	0x37, 0x00, 0x00, 0xff, 0xff, 0x23, 0x82, 0x59, 0x22, 0x1b, 0x21, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// VolthaServiceClient is the client API for VolthaService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type VolthaServiceClient interface {
+	// Get more information on a given physical device
+	UpdateLogLevel(ctx context.Context, in *common.Logging, opts ...grpc.CallOption) (*empty.Empty, error)
+	GetLogLevels(ctx context.Context, in *common.LoggingComponent, opts ...grpc.CallOption) (*common.Loggings, error)
+	// Get the membership group of a Voltha Core
+	GetMembership(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Membership, error)
+	// Set the membership group of a Voltha Core
+	UpdateMembership(ctx context.Context, in *Membership, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Get high level information on the Voltha cluster
+	GetVoltha(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Voltha, error)
+	// List all Voltha cluster core instances
+	ListCoreInstances(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*CoreInstances, error)
+	// Get details on a Voltha cluster instance
+	GetCoreInstance(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*CoreInstance, error)
+	// List all active adapters (plugins) in the Voltha cluster
+	ListAdapters(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Adapters, error)
+	// List all logical devices managed by the Voltha cluster
+	ListLogicalDevices(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*LogicalDevices, error)
+	// Get additional information on a given logical device
+	GetLogicalDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*LogicalDevice, error)
+	// List ports of a logical device
+	ListLogicalDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*LogicalPorts, error)
+	// Gets a logical device port
+	GetLogicalDevicePort(ctx context.Context, in *LogicalPortId, opts ...grpc.CallOption) (*LogicalPort, error)
+	// Enables a logical device port
+	EnableLogicalDevicePort(ctx context.Context, in *LogicalPortId, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Disables a logical device port
+	DisableLogicalDevicePort(ctx context.Context, in *LogicalPortId, opts ...grpc.CallOption) (*empty.Empty, error)
+	// List all flows of a logical device
+	ListLogicalDeviceFlows(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error)
+	// Update flow table for logical device
+	UpdateLogicalDeviceFlowTable(ctx context.Context, in *openflow_13.FlowTableUpdate, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Update meter table for logical device
+	UpdateLogicalDeviceMeterTable(ctx context.Context, in *openflow_13.MeterModUpdate, opts ...grpc.CallOption) (*empty.Empty, error)
+	// List all meters of a logical device
+	ListLogicalDeviceMeters(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.Meters, error)
+	// List all flow groups of a logical device
+	ListLogicalDeviceFlowGroups(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error)
+	// Update group table for device
+	UpdateLogicalDeviceFlowGroupTable(ctx context.Context, in *openflow_13.FlowGroupTableUpdate, opts ...grpc.CallOption) (*empty.Empty, error)
+	// List all physical devices controlled by the Voltha cluster
+	ListDevices(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Devices, error)
+	// List all physical devices IDs controlled by the Voltha cluster
+	ListDeviceIds(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*common.IDs, error)
+	// Request to a voltha Core to reconcile a set of devices based on their IDs
+	ReconcileDevices(ctx context.Context, in *common.IDs, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Get more information on a given physical device
+	GetDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Device, error)
+	// Pre-provision a new physical device
+	CreateDevice(ctx context.Context, in *Device, opts ...grpc.CallOption) (*Device, error)
+	// Enable a device.  If the device was in pre-provisioned state then it
+	// will transition to ENABLED state.  If it was is DISABLED state then it
+	// will transition to ENABLED state as well.
+	EnableDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Disable a device
+	DisableDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Reboot a device
+	RebootDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Delete a device
+	DeleteDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Request an image download to the standby partition
+	// of a device.
+	// Note that the call is expected to be non-blocking.
+	DownloadImage(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
+	// Get image download status on a device
+	// The request retrieves progress on device and updates db record
+	GetImageDownloadStatus(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error)
+	// Get image download db record
+	GetImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error)
+	// List image download db records for a given device
+	ListImageDownloads(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*ImageDownloads, error)
+	// Cancel an existing image download process on a device
+	CancelImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
+	// Activate the specified image at a standby partition
+	// to active partition.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device
+	// Note that the call is expected to be non-blocking.
+	ActivateImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
+	// Revert the specified image at standby partition
+	// to active partition, and revert to previous image
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// previous image running on device
+	// Note that the call is expected to be non-blocking.
+	RevertImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error)
+	// List ports of a device
+	ListDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Ports, error)
+	// List pm config of a device
+	ListDevicePmConfigs(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*PmConfigs, error)
+	// Update the pm config of a device
+	UpdateDevicePmConfigs(ctx context.Context, in *PmConfigs, opts ...grpc.CallOption) (*empty.Empty, error)
+	// List all flows of a device
+	ListDeviceFlows(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error)
+	// List all flow groups of a device
+	ListDeviceFlowGroups(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error)
+	// List device types known to Voltha
+	ListDeviceTypes(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DeviceTypes, error)
+	// Get additional information on a device type
+	GetDeviceType(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*DeviceType, error)
+	// List all device sharding groups
+	ListDeviceGroups(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DeviceGroups, error)
+	// Stream control packets to the dataplane
+	StreamPacketsOut(ctx context.Context, opts ...grpc.CallOption) (VolthaService_StreamPacketsOutClient, error)
+	// Receive control packet stream
+	ReceivePacketsIn(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (VolthaService_ReceivePacketsInClient, error)
+	ReceiveChangeEvents(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (VolthaService_ReceiveChangeEventsClient, error)
+	// Get additional information on a device group
+	GetDeviceGroup(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*DeviceGroup, error)
+	CreateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error)
+	GetAlarmFilter(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*AlarmFilter, error)
+	UpdateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error)
+	DeleteAlarmFilter(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error)
+	ListAlarmFilters(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*AlarmFilters, error)
+	GetImages(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Images, error)
+	SelfTest(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*SelfTestResponse, error)
+	// OpenOMCI MIB information
+	GetMibDeviceData(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*omci.MibDeviceData, error)
+	// OpenOMCI ALARM information
+	GetAlarmDeviceData(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*omci.AlarmDeviceData, error)
+	// Simulate an Alarm
+	SimulateAlarm(ctx context.Context, in *SimulateAlarmRequest, opts ...grpc.CallOption) (*common.OperationResp, error)
+	Subscribe(ctx context.Context, in *OfAgentSubscriber, opts ...grpc.CallOption) (*OfAgentSubscriber, error)
+}
+
+type volthaServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewVolthaServiceClient(cc *grpc.ClientConn) VolthaServiceClient {
+	return &volthaServiceClient{cc}
+}
+
+func (c *volthaServiceClient) UpdateLogLevel(ctx context.Context, in *common.Logging, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/UpdateLogLevel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetLogLevels(ctx context.Context, in *common.LoggingComponent, opts ...grpc.CallOption) (*common.Loggings, error) {
+	out := new(common.Loggings)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetLogLevels", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetMembership(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Membership, error) {
+	out := new(Membership)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetMembership", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) UpdateMembership(ctx context.Context, in *Membership, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/UpdateMembership", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetVoltha(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Voltha, error) {
+	out := new(Voltha)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetVoltha", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListCoreInstances(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*CoreInstances, error) {
+	out := new(CoreInstances)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListCoreInstances", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetCoreInstance(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*CoreInstance, error) {
+	out := new(CoreInstance)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetCoreInstance", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListAdapters(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Adapters, error) {
+	out := new(Adapters)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListAdapters", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListLogicalDevices(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*LogicalDevices, error) {
+	out := new(LogicalDevices)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListLogicalDevices", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetLogicalDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*LogicalDevice, error) {
+	out := new(LogicalDevice)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetLogicalDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListLogicalDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*LogicalPorts, error) {
+	out := new(LogicalPorts)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListLogicalDevicePorts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetLogicalDevicePort(ctx context.Context, in *LogicalPortId, opts ...grpc.CallOption) (*LogicalPort, error) {
+	out := new(LogicalPort)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetLogicalDevicePort", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) EnableLogicalDevicePort(ctx context.Context, in *LogicalPortId, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/EnableLogicalDevicePort", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) DisableLogicalDevicePort(ctx context.Context, in *LogicalPortId, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DisableLogicalDevicePort", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListLogicalDeviceFlows(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error) {
+	out := new(openflow_13.Flows)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListLogicalDeviceFlows", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) UpdateLogicalDeviceFlowTable(ctx context.Context, in *openflow_13.FlowTableUpdate, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/UpdateLogicalDeviceFlowTable", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) UpdateLogicalDeviceMeterTable(ctx context.Context, in *openflow_13.MeterModUpdate, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/UpdateLogicalDeviceMeterTable", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListLogicalDeviceMeters(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.Meters, error) {
+	out := new(openflow_13.Meters)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListLogicalDeviceMeters", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListLogicalDeviceFlowGroups(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error) {
+	out := new(openflow_13.FlowGroups)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListLogicalDeviceFlowGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) UpdateLogicalDeviceFlowGroupTable(ctx context.Context, in *openflow_13.FlowGroupTableUpdate, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/UpdateLogicalDeviceFlowGroupTable", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDevices(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Devices, error) {
+	out := new(Devices)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDevices", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDeviceIds(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*common.IDs, error) {
+	out := new(common.IDs)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDeviceIds", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ReconcileDevices(ctx context.Context, in *common.IDs, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ReconcileDevices", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Device, error) {
+	out := new(Device)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) CreateDevice(ctx context.Context, in *Device, opts ...grpc.CallOption) (*Device, error) {
+	out := new(Device)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/CreateDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) EnableDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/EnableDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) DisableDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DisableDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) RebootDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/RebootDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) DeleteDevice(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DeleteDevice", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) DownloadImage(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error) {
+	out := new(common.OperationResp)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DownloadImage", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetImageDownloadStatus(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error) {
+	out := new(ImageDownload)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetImageDownloadStatus", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*ImageDownload, error) {
+	out := new(ImageDownload)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetImageDownload", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListImageDownloads(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*ImageDownloads, error) {
+	out := new(ImageDownloads)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListImageDownloads", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) CancelImageDownload(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error) {
+	out := new(common.OperationResp)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/CancelImageDownload", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ActivateImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error) {
+	out := new(common.OperationResp)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ActivateImageUpdate", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) RevertImageUpdate(ctx context.Context, in *ImageDownload, opts ...grpc.CallOption) (*common.OperationResp, error) {
+	out := new(common.OperationResp)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/RevertImageUpdate", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDevicePorts(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Ports, error) {
+	out := new(Ports)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDevicePorts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDevicePmConfigs(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*PmConfigs, error) {
+	out := new(PmConfigs)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDevicePmConfigs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) UpdateDevicePmConfigs(ctx context.Context, in *PmConfigs, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/UpdateDevicePmConfigs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDeviceFlows(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error) {
+	out := new(openflow_13.Flows)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDeviceFlows", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDeviceFlowGroups(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error) {
+	out := new(openflow_13.FlowGroups)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDeviceFlowGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDeviceTypes(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DeviceTypes, error) {
+	out := new(DeviceTypes)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDeviceTypes", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetDeviceType(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*DeviceType, error) {
+	out := new(DeviceType)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetDeviceType", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListDeviceGroups(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DeviceGroups, error) {
+	out := new(DeviceGroups)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListDeviceGroups", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) StreamPacketsOut(ctx context.Context, opts ...grpc.CallOption) (VolthaService_StreamPacketsOutClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_VolthaService_serviceDesc.Streams[0], "/voltha.VolthaService/StreamPacketsOut", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &volthaServiceStreamPacketsOutClient{stream}
+	return x, nil
+}
+
+type VolthaService_StreamPacketsOutClient interface {
+	Send(*openflow_13.PacketOut) error
+	CloseAndRecv() (*empty.Empty, error)
+	grpc.ClientStream
+}
+
+type volthaServiceStreamPacketsOutClient struct {
+	grpc.ClientStream
+}
+
+func (x *volthaServiceStreamPacketsOutClient) Send(m *openflow_13.PacketOut) error {
+	return x.ClientStream.SendMsg(m)
+}
+
+func (x *volthaServiceStreamPacketsOutClient) CloseAndRecv() (*empty.Empty, error) {
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	m := new(empty.Empty)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *volthaServiceClient) ReceivePacketsIn(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (VolthaService_ReceivePacketsInClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_VolthaService_serviceDesc.Streams[1], "/voltha.VolthaService/ReceivePacketsIn", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &volthaServiceReceivePacketsInClient{stream}
+	if err := x.ClientStream.SendMsg(in); err != nil {
+		return nil, err
+	}
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	return x, nil
+}
+
+type VolthaService_ReceivePacketsInClient interface {
+	Recv() (*openflow_13.PacketIn, error)
+	grpc.ClientStream
+}
+
+type volthaServiceReceivePacketsInClient struct {
+	grpc.ClientStream
+}
+
+func (x *volthaServiceReceivePacketsInClient) Recv() (*openflow_13.PacketIn, error) {
+	m := new(openflow_13.PacketIn)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *volthaServiceClient) ReceiveChangeEvents(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (VolthaService_ReceiveChangeEventsClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_VolthaService_serviceDesc.Streams[2], "/voltha.VolthaService/ReceiveChangeEvents", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &volthaServiceReceiveChangeEventsClient{stream}
+	if err := x.ClientStream.SendMsg(in); err != nil {
+		return nil, err
+	}
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	return x, nil
+}
+
+type VolthaService_ReceiveChangeEventsClient interface {
+	Recv() (*openflow_13.ChangeEvent, error)
+	grpc.ClientStream
+}
+
+type volthaServiceReceiveChangeEventsClient struct {
+	grpc.ClientStream
+}
+
+func (x *volthaServiceReceiveChangeEventsClient) Recv() (*openflow_13.ChangeEvent, error) {
+	m := new(openflow_13.ChangeEvent)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *volthaServiceClient) GetDeviceGroup(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*DeviceGroup, error) {
+	out := new(DeviceGroup)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetDeviceGroup", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) CreateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/CreateAlarmFilter", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetAlarmFilter(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetAlarmFilter", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) UpdateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/UpdateAlarmFilter", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) DeleteAlarmFilter(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DeleteAlarmFilter", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) ListAlarmFilters(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*AlarmFilters, error) {
+	out := new(AlarmFilters)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/ListAlarmFilters", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetImages(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*Images, error) {
+	out := new(Images)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetImages", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) SelfTest(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*SelfTestResponse, error) {
+	out := new(SelfTestResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/SelfTest", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetMibDeviceData(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*omci.MibDeviceData, error) {
+	out := new(omci.MibDeviceData)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetMibDeviceData", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) GetAlarmDeviceData(ctx context.Context, in *common.ID, opts ...grpc.CallOption) (*omci.AlarmDeviceData, error) {
+	out := new(omci.AlarmDeviceData)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/GetAlarmDeviceData", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) SimulateAlarm(ctx context.Context, in *SimulateAlarmRequest, opts ...grpc.CallOption) (*common.OperationResp, error) {
+	out := new(common.OperationResp)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/SimulateAlarm", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) Subscribe(ctx context.Context, in *OfAgentSubscriber, opts ...grpc.CallOption) (*OfAgentSubscriber, error) {
+	out := new(OfAgentSubscriber)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/Subscribe", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// VolthaServiceServer is the server API for VolthaService service.
+type VolthaServiceServer interface {
+	// Get more information on a given physical device
+	UpdateLogLevel(context.Context, *common.Logging) (*empty.Empty, error)
+	GetLogLevels(context.Context, *common.LoggingComponent) (*common.Loggings, error)
+	// Get the membership group of a Voltha Core
+	GetMembership(context.Context, *empty.Empty) (*Membership, error)
+	// Set the membership group of a Voltha Core
+	UpdateMembership(context.Context, *Membership) (*empty.Empty, error)
+	// Get high level information on the Voltha cluster
+	GetVoltha(context.Context, *empty.Empty) (*Voltha, error)
+	// List all Voltha cluster core instances
+	ListCoreInstances(context.Context, *empty.Empty) (*CoreInstances, error)
+	// Get details on a Voltha cluster instance
+	GetCoreInstance(context.Context, *common.ID) (*CoreInstance, error)
+	// List all active adapters (plugins) in the Voltha cluster
+	ListAdapters(context.Context, *empty.Empty) (*Adapters, error)
+	// List all logical devices managed by the Voltha cluster
+	ListLogicalDevices(context.Context, *empty.Empty) (*LogicalDevices, error)
+	// Get additional information on a given logical device
+	GetLogicalDevice(context.Context, *common.ID) (*LogicalDevice, error)
+	// List ports of a logical device
+	ListLogicalDevicePorts(context.Context, *common.ID) (*LogicalPorts, error)
+	// Gets a logical device port
+	GetLogicalDevicePort(context.Context, *LogicalPortId) (*LogicalPort, error)
+	// Enables a logical device port
+	EnableLogicalDevicePort(context.Context, *LogicalPortId) (*empty.Empty, error)
+	// Disables a logical device port
+	DisableLogicalDevicePort(context.Context, *LogicalPortId) (*empty.Empty, error)
+	// List all flows of a logical device
+	ListLogicalDeviceFlows(context.Context, *common.ID) (*openflow_13.Flows, error)
+	// Update flow table for logical device
+	UpdateLogicalDeviceFlowTable(context.Context, *openflow_13.FlowTableUpdate) (*empty.Empty, error)
+	// Update meter table for logical device
+	UpdateLogicalDeviceMeterTable(context.Context, *openflow_13.MeterModUpdate) (*empty.Empty, error)
+	// List all meters of a logical device
+	ListLogicalDeviceMeters(context.Context, *common.ID) (*openflow_13.Meters, error)
+	// List all flow groups of a logical device
+	ListLogicalDeviceFlowGroups(context.Context, *common.ID) (*openflow_13.FlowGroups, error)
+	// Update group table for device
+	UpdateLogicalDeviceFlowGroupTable(context.Context, *openflow_13.FlowGroupTableUpdate) (*empty.Empty, error)
+	// List all physical devices controlled by the Voltha cluster
+	ListDevices(context.Context, *empty.Empty) (*Devices, error)
+	// List all physical devices IDs controlled by the Voltha cluster
+	ListDeviceIds(context.Context, *empty.Empty) (*common.IDs, error)
+	// Request to a voltha Core to reconcile a set of devices based on their IDs
+	ReconcileDevices(context.Context, *common.IDs) (*empty.Empty, error)
+	// Get more information on a given physical device
+	GetDevice(context.Context, *common.ID) (*Device, error)
+	// Pre-provision a new physical device
+	CreateDevice(context.Context, *Device) (*Device, error)
+	// Enable a device.  If the device was in pre-provisioned state then it
+	// will transition to ENABLED state.  If it was is DISABLED state then it
+	// will transition to ENABLED state as well.
+	EnableDevice(context.Context, *common.ID) (*empty.Empty, error)
+	// Disable a device
+	DisableDevice(context.Context, *common.ID) (*empty.Empty, error)
+	// Reboot a device
+	RebootDevice(context.Context, *common.ID) (*empty.Empty, error)
+	// Delete a device
+	DeleteDevice(context.Context, *common.ID) (*empty.Empty, error)
+	// Request an image download to the standby partition
+	// of a device.
+	// Note that the call is expected to be non-blocking.
+	DownloadImage(context.Context, *ImageDownload) (*common.OperationResp, error)
+	// Get image download status on a device
+	// The request retrieves progress on device and updates db record
+	GetImageDownloadStatus(context.Context, *ImageDownload) (*ImageDownload, error)
+	// Get image download db record
+	GetImageDownload(context.Context, *ImageDownload) (*ImageDownload, error)
+	// List image download db records for a given device
+	ListImageDownloads(context.Context, *common.ID) (*ImageDownloads, error)
+	// Cancel an existing image download process on a device
+	CancelImageDownload(context.Context, *ImageDownload) (*common.OperationResp, error)
+	// Activate the specified image at a standby partition
+	// to active partition.
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// activated image running on device
+	// Note that the call is expected to be non-blocking.
+	ActivateImageUpdate(context.Context, *ImageDownload) (*common.OperationResp, error)
+	// Revert the specified image at standby partition
+	// to active partition, and revert to previous image
+	// Depending on the device implementation, this call
+	// may or may not cause device reboot.
+	// If no reboot, then a reboot is required to make the
+	// previous image running on device
+	// Note that the call is expected to be non-blocking.
+	RevertImageUpdate(context.Context, *ImageDownload) (*common.OperationResp, error)
+	// List ports of a device
+	ListDevicePorts(context.Context, *common.ID) (*Ports, error)
+	// List pm config of a device
+	ListDevicePmConfigs(context.Context, *common.ID) (*PmConfigs, error)
+	// Update the pm config of a device
+	UpdateDevicePmConfigs(context.Context, *PmConfigs) (*empty.Empty, error)
+	// List all flows of a device
+	ListDeviceFlows(context.Context, *common.ID) (*openflow_13.Flows, error)
+	// List all flow groups of a device
+	ListDeviceFlowGroups(context.Context, *common.ID) (*openflow_13.FlowGroups, error)
+	// List device types known to Voltha
+	ListDeviceTypes(context.Context, *empty.Empty) (*DeviceTypes, error)
+	// Get additional information on a device type
+	GetDeviceType(context.Context, *common.ID) (*DeviceType, error)
+	// List all device sharding groups
+	ListDeviceGroups(context.Context, *empty.Empty) (*DeviceGroups, error)
+	// Stream control packets to the dataplane
+	StreamPacketsOut(VolthaService_StreamPacketsOutServer) error
+	// Receive control packet stream
+	ReceivePacketsIn(*empty.Empty, VolthaService_ReceivePacketsInServer) error
+	ReceiveChangeEvents(*empty.Empty, VolthaService_ReceiveChangeEventsServer) error
+	// Get additional information on a device group
+	GetDeviceGroup(context.Context, *common.ID) (*DeviceGroup, error)
+	CreateAlarmFilter(context.Context, *AlarmFilter) (*AlarmFilter, error)
+	GetAlarmFilter(context.Context, *common.ID) (*AlarmFilter, error)
+	UpdateAlarmFilter(context.Context, *AlarmFilter) (*AlarmFilter, error)
+	DeleteAlarmFilter(context.Context, *common.ID) (*empty.Empty, error)
+	ListAlarmFilters(context.Context, *empty.Empty) (*AlarmFilters, error)
+	GetImages(context.Context, *common.ID) (*Images, error)
+	SelfTest(context.Context, *common.ID) (*SelfTestResponse, error)
+	// OpenOMCI MIB information
+	GetMibDeviceData(context.Context, *common.ID) (*omci.MibDeviceData, error)
+	// OpenOMCI ALARM information
+	GetAlarmDeviceData(context.Context, *common.ID) (*omci.AlarmDeviceData, error)
+	// Simulate an Alarm
+	SimulateAlarm(context.Context, *SimulateAlarmRequest) (*common.OperationResp, error)
+	Subscribe(context.Context, *OfAgentSubscriber) (*OfAgentSubscriber, error)
+}
+
+func RegisterVolthaServiceServer(s *grpc.Server, srv VolthaServiceServer) {
+	s.RegisterService(&_VolthaService_serviceDesc, srv)
+}
+
+func _VolthaService_UpdateLogLevel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.Logging)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).UpdateLogLevel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/UpdateLogLevel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).UpdateLogLevel(ctx, req.(*common.Logging))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetLogLevels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.LoggingComponent)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetLogLevels(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetLogLevels",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetLogLevels(ctx, req.(*common.LoggingComponent))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetMembership_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetMembership(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetMembership",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetMembership(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_UpdateMembership_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Membership)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).UpdateMembership(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/UpdateMembership",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).UpdateMembership(ctx, req.(*Membership))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetVoltha_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetVoltha(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetVoltha",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetVoltha(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListCoreInstances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListCoreInstances(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListCoreInstances",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListCoreInstances(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetCoreInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetCoreInstance(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetCoreInstance",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetCoreInstance(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListAdapters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListAdapters(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListAdapters",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListAdapters(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListLogicalDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListLogicalDevices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListLogicalDevices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListLogicalDevices(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetLogicalDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetLogicalDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetLogicalDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetLogicalDevice(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListLogicalDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListLogicalDevicePorts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListLogicalDevicePorts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListLogicalDevicePorts(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetLogicalDevicePort_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(LogicalPortId)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetLogicalDevicePort(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetLogicalDevicePort",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetLogicalDevicePort(ctx, req.(*LogicalPortId))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_EnableLogicalDevicePort_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(LogicalPortId)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).EnableLogicalDevicePort(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/EnableLogicalDevicePort",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).EnableLogicalDevicePort(ctx, req.(*LogicalPortId))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_DisableLogicalDevicePort_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(LogicalPortId)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DisableLogicalDevicePort(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DisableLogicalDevicePort",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DisableLogicalDevicePort(ctx, req.(*LogicalPortId))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListLogicalDeviceFlows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListLogicalDeviceFlows(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListLogicalDeviceFlows",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListLogicalDeviceFlows(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_UpdateLogicalDeviceFlowTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(openflow_13.FlowTableUpdate)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).UpdateLogicalDeviceFlowTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/UpdateLogicalDeviceFlowTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).UpdateLogicalDeviceFlowTable(ctx, req.(*openflow_13.FlowTableUpdate))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_UpdateLogicalDeviceMeterTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(openflow_13.MeterModUpdate)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).UpdateLogicalDeviceMeterTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/UpdateLogicalDeviceMeterTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).UpdateLogicalDeviceMeterTable(ctx, req.(*openflow_13.MeterModUpdate))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListLogicalDeviceMeters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListLogicalDeviceMeters(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListLogicalDeviceMeters",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListLogicalDeviceMeters(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListLogicalDeviceFlowGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListLogicalDeviceFlowGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListLogicalDeviceFlowGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListLogicalDeviceFlowGroups(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_UpdateLogicalDeviceFlowGroupTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(openflow_13.FlowGroupTableUpdate)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).UpdateLogicalDeviceFlowGroupTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/UpdateLogicalDeviceFlowGroupTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).UpdateLogicalDeviceFlowGroupTable(ctx, req.(*openflow_13.FlowGroupTableUpdate))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDevices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDevices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDevices(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDeviceIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDeviceIds(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDeviceIds",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDeviceIds(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ReconcileDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.IDs)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ReconcileDevices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ReconcileDevices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ReconcileDevices(ctx, req.(*common.IDs))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetDevice(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_CreateDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Device)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).CreateDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/CreateDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).CreateDevice(ctx, req.(*Device))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_EnableDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).EnableDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/EnableDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).EnableDevice(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_DisableDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DisableDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DisableDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DisableDevice(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_RebootDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).RebootDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/RebootDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).RebootDevice(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_DeleteDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DeleteDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DeleteDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DeleteDevice(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_DownloadImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ImageDownload)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DownloadImage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DownloadImage",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DownloadImage(ctx, req.(*ImageDownload))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetImageDownloadStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ImageDownload)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetImageDownloadStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetImageDownloadStatus",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetImageDownloadStatus(ctx, req.(*ImageDownload))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetImageDownload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ImageDownload)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetImageDownload(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetImageDownload",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetImageDownload(ctx, req.(*ImageDownload))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListImageDownloads_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListImageDownloads(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListImageDownloads",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListImageDownloads(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_CancelImageDownload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ImageDownload)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).CancelImageDownload(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/CancelImageDownload",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).CancelImageDownload(ctx, req.(*ImageDownload))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ActivateImageUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ImageDownload)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ActivateImageUpdate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ActivateImageUpdate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ActivateImageUpdate(ctx, req.(*ImageDownload))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_RevertImageUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ImageDownload)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).RevertImageUpdate(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/RevertImageUpdate",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).RevertImageUpdate(ctx, req.(*ImageDownload))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDevicePorts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDevicePorts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDevicePorts(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDevicePmConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDevicePmConfigs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDevicePmConfigs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDevicePmConfigs(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_UpdateDevicePmConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PmConfigs)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).UpdateDevicePmConfigs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/UpdateDevicePmConfigs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).UpdateDevicePmConfigs(ctx, req.(*PmConfigs))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDeviceFlows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDeviceFlows(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDeviceFlows",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDeviceFlows(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDeviceFlowGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDeviceFlowGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDeviceFlowGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDeviceFlowGroups(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDeviceTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDeviceTypes(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDeviceTypes",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDeviceTypes(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetDeviceType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetDeviceType(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetDeviceType",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetDeviceType(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListDeviceGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListDeviceGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListDeviceGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListDeviceGroups(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_StreamPacketsOut_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(VolthaServiceServer).StreamPacketsOut(&volthaServiceStreamPacketsOutServer{stream})
+}
+
+type VolthaService_StreamPacketsOutServer interface {
+	SendAndClose(*empty.Empty) error
+	Recv() (*openflow_13.PacketOut, error)
+	grpc.ServerStream
+}
+
+type volthaServiceStreamPacketsOutServer struct {
+	grpc.ServerStream
+}
+
+func (x *volthaServiceStreamPacketsOutServer) SendAndClose(m *empty.Empty) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func (x *volthaServiceStreamPacketsOutServer) Recv() (*openflow_13.PacketOut, error) {
+	m := new(openflow_13.PacketOut)
+	if err := x.ServerStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func _VolthaService_ReceivePacketsIn_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(empty.Empty)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(VolthaServiceServer).ReceivePacketsIn(m, &volthaServiceReceivePacketsInServer{stream})
+}
+
+type VolthaService_ReceivePacketsInServer interface {
+	Send(*openflow_13.PacketIn) error
+	grpc.ServerStream
+}
+
+type volthaServiceReceivePacketsInServer struct {
+	grpc.ServerStream
+}
+
+func (x *volthaServiceReceivePacketsInServer) Send(m *openflow_13.PacketIn) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func _VolthaService_ReceiveChangeEvents_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(empty.Empty)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(VolthaServiceServer).ReceiveChangeEvents(m, &volthaServiceReceiveChangeEventsServer{stream})
+}
+
+type VolthaService_ReceiveChangeEventsServer interface {
+	Send(*openflow_13.ChangeEvent) error
+	grpc.ServerStream
+}
+
+type volthaServiceReceiveChangeEventsServer struct {
+	grpc.ServerStream
+}
+
+func (x *volthaServiceReceiveChangeEventsServer) Send(m *openflow_13.ChangeEvent) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func _VolthaService_GetDeviceGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetDeviceGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetDeviceGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetDeviceGroup(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_CreateAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AlarmFilter)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).CreateAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/CreateAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).CreateAlarmFilter(ctx, req.(*AlarmFilter))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetAlarmFilter(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_UpdateAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AlarmFilter)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).UpdateAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/UpdateAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).UpdateAlarmFilter(ctx, req.(*AlarmFilter))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_DeleteAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DeleteAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DeleteAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DeleteAlarmFilter(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_ListAlarmFilters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).ListAlarmFilters(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/ListAlarmFilters",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).ListAlarmFilters(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetImages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetImages(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetImages",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetImages(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_SelfTest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).SelfTest(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/SelfTest",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).SelfTest(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetMibDeviceData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetMibDeviceData(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetMibDeviceData",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetMibDeviceData(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_GetAlarmDeviceData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).GetAlarmDeviceData(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/GetAlarmDeviceData",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).GetAlarmDeviceData(ctx, req.(*common.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_SimulateAlarm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SimulateAlarmRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).SimulateAlarm(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/SimulateAlarm",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).SimulateAlarm(ctx, req.(*SimulateAlarmRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_Subscribe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(OfAgentSubscriber)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).Subscribe(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/Subscribe",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).Subscribe(ctx, req.(*OfAgentSubscriber))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _VolthaService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "voltha.VolthaService",
+	HandlerType: (*VolthaServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "UpdateLogLevel",
+			Handler:    _VolthaService_UpdateLogLevel_Handler,
+		},
+		{
+			MethodName: "GetLogLevels",
+			Handler:    _VolthaService_GetLogLevels_Handler,
+		},
+		{
+			MethodName: "GetMembership",
+			Handler:    _VolthaService_GetMembership_Handler,
+		},
+		{
+			MethodName: "UpdateMembership",
+			Handler:    _VolthaService_UpdateMembership_Handler,
+		},
+		{
+			MethodName: "GetVoltha",
+			Handler:    _VolthaService_GetVoltha_Handler,
+		},
+		{
+			MethodName: "ListCoreInstances",
+			Handler:    _VolthaService_ListCoreInstances_Handler,
+		},
+		{
+			MethodName: "GetCoreInstance",
+			Handler:    _VolthaService_GetCoreInstance_Handler,
+		},
+		{
+			MethodName: "ListAdapters",
+			Handler:    _VolthaService_ListAdapters_Handler,
+		},
+		{
+			MethodName: "ListLogicalDevices",
+			Handler:    _VolthaService_ListLogicalDevices_Handler,
+		},
+		{
+			MethodName: "GetLogicalDevice",
+			Handler:    _VolthaService_GetLogicalDevice_Handler,
+		},
+		{
+			MethodName: "ListLogicalDevicePorts",
+			Handler:    _VolthaService_ListLogicalDevicePorts_Handler,
+		},
+		{
+			MethodName: "GetLogicalDevicePort",
+			Handler:    _VolthaService_GetLogicalDevicePort_Handler,
+		},
+		{
+			MethodName: "EnableLogicalDevicePort",
+			Handler:    _VolthaService_EnableLogicalDevicePort_Handler,
+		},
+		{
+			MethodName: "DisableLogicalDevicePort",
+			Handler:    _VolthaService_DisableLogicalDevicePort_Handler,
+		},
+		{
+			MethodName: "ListLogicalDeviceFlows",
+			Handler:    _VolthaService_ListLogicalDeviceFlows_Handler,
+		},
+		{
+			MethodName: "UpdateLogicalDeviceFlowTable",
+			Handler:    _VolthaService_UpdateLogicalDeviceFlowTable_Handler,
+		},
+		{
+			MethodName: "UpdateLogicalDeviceMeterTable",
+			Handler:    _VolthaService_UpdateLogicalDeviceMeterTable_Handler,
+		},
+		{
+			MethodName: "ListLogicalDeviceMeters",
+			Handler:    _VolthaService_ListLogicalDeviceMeters_Handler,
+		},
+		{
+			MethodName: "ListLogicalDeviceFlowGroups",
+			Handler:    _VolthaService_ListLogicalDeviceFlowGroups_Handler,
+		},
+		{
+			MethodName: "UpdateLogicalDeviceFlowGroupTable",
+			Handler:    _VolthaService_UpdateLogicalDeviceFlowGroupTable_Handler,
+		},
+		{
+			MethodName: "ListDevices",
+			Handler:    _VolthaService_ListDevices_Handler,
+		},
+		{
+			MethodName: "ListDeviceIds",
+			Handler:    _VolthaService_ListDeviceIds_Handler,
+		},
+		{
+			MethodName: "ReconcileDevices",
+			Handler:    _VolthaService_ReconcileDevices_Handler,
+		},
+		{
+			MethodName: "GetDevice",
+			Handler:    _VolthaService_GetDevice_Handler,
+		},
+		{
+			MethodName: "CreateDevice",
+			Handler:    _VolthaService_CreateDevice_Handler,
+		},
+		{
+			MethodName: "EnableDevice",
+			Handler:    _VolthaService_EnableDevice_Handler,
+		},
+		{
+			MethodName: "DisableDevice",
+			Handler:    _VolthaService_DisableDevice_Handler,
+		},
+		{
+			MethodName: "RebootDevice",
+			Handler:    _VolthaService_RebootDevice_Handler,
+		},
+		{
+			MethodName: "DeleteDevice",
+			Handler:    _VolthaService_DeleteDevice_Handler,
+		},
+		{
+			MethodName: "DownloadImage",
+			Handler:    _VolthaService_DownloadImage_Handler,
+		},
+		{
+			MethodName: "GetImageDownloadStatus",
+			Handler:    _VolthaService_GetImageDownloadStatus_Handler,
+		},
+		{
+			MethodName: "GetImageDownload",
+			Handler:    _VolthaService_GetImageDownload_Handler,
+		},
+		{
+			MethodName: "ListImageDownloads",
+			Handler:    _VolthaService_ListImageDownloads_Handler,
+		},
+		{
+			MethodName: "CancelImageDownload",
+			Handler:    _VolthaService_CancelImageDownload_Handler,
+		},
+		{
+			MethodName: "ActivateImageUpdate",
+			Handler:    _VolthaService_ActivateImageUpdate_Handler,
+		},
+		{
+			MethodName: "RevertImageUpdate",
+			Handler:    _VolthaService_RevertImageUpdate_Handler,
+		},
+		{
+			MethodName: "ListDevicePorts",
+			Handler:    _VolthaService_ListDevicePorts_Handler,
+		},
+		{
+			MethodName: "ListDevicePmConfigs",
+			Handler:    _VolthaService_ListDevicePmConfigs_Handler,
+		},
+		{
+			MethodName: "UpdateDevicePmConfigs",
+			Handler:    _VolthaService_UpdateDevicePmConfigs_Handler,
+		},
+		{
+			MethodName: "ListDeviceFlows",
+			Handler:    _VolthaService_ListDeviceFlows_Handler,
+		},
+		{
+			MethodName: "ListDeviceFlowGroups",
+			Handler:    _VolthaService_ListDeviceFlowGroups_Handler,
+		},
+		{
+			MethodName: "ListDeviceTypes",
+			Handler:    _VolthaService_ListDeviceTypes_Handler,
+		},
+		{
+			MethodName: "GetDeviceType",
+			Handler:    _VolthaService_GetDeviceType_Handler,
+		},
+		{
+			MethodName: "ListDeviceGroups",
+			Handler:    _VolthaService_ListDeviceGroups_Handler,
+		},
+		{
+			MethodName: "GetDeviceGroup",
+			Handler:    _VolthaService_GetDeviceGroup_Handler,
+		},
+		{
+			MethodName: "CreateAlarmFilter",
+			Handler:    _VolthaService_CreateAlarmFilter_Handler,
+		},
+		{
+			MethodName: "GetAlarmFilter",
+			Handler:    _VolthaService_GetAlarmFilter_Handler,
+		},
+		{
+			MethodName: "UpdateAlarmFilter",
+			Handler:    _VolthaService_UpdateAlarmFilter_Handler,
+		},
+		{
+			MethodName: "DeleteAlarmFilter",
+			Handler:    _VolthaService_DeleteAlarmFilter_Handler,
+		},
+		{
+			MethodName: "ListAlarmFilters",
+			Handler:    _VolthaService_ListAlarmFilters_Handler,
+		},
+		{
+			MethodName: "GetImages",
+			Handler:    _VolthaService_GetImages_Handler,
+		},
+		{
+			MethodName: "SelfTest",
+			Handler:    _VolthaService_SelfTest_Handler,
+		},
+		{
+			MethodName: "GetMibDeviceData",
+			Handler:    _VolthaService_GetMibDeviceData_Handler,
+		},
+		{
+			MethodName: "GetAlarmDeviceData",
+			Handler:    _VolthaService_GetAlarmDeviceData_Handler,
+		},
+		{
+			MethodName: "SimulateAlarm",
+			Handler:    _VolthaService_SimulateAlarm_Handler,
+		},
+		{
+			MethodName: "Subscribe",
+			Handler:    _VolthaService_Subscribe_Handler,
+		},
+	},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "StreamPacketsOut",
+			Handler:       _VolthaService_StreamPacketsOut_Handler,
+			ClientStreams: true,
+		},
+		{
+			StreamName:    "ReceivePacketsIn",
+			Handler:       _VolthaService_ReceivePacketsIn_Handler,
+			ServerStreams: true,
+		},
+		{
+			StreamName:    "ReceiveChangeEvents",
+			Handler:       _VolthaService_ReceiveChangeEvents_Handler,
+			ServerStreams: true,
+		},
+	},
+	Metadata: "voltha_protos/voltha.proto",
+}
diff --git a/vendor/github.com/skydive-project/goloxi/LICENSE b/vendor/github.com/skydive-project/goloxi/LICENSE
new file mode 100644
index 0000000..dd5b3a5
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/LICENSE
@@ -0,0 +1,174 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
diff --git a/vendor/github.com/skydive-project/goloxi/README.md b/vendor/github.com/skydive-project/goloxi/README.md
new file mode 100644
index 0000000..11b551f
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/README.md
@@ -0,0 +1,20 @@
+# Goloxi - OpenFlow library for golang
+
+Goloxi is generated using [loxigen](https://github.com/floodlight/loxigen). Is it still in
+an experimental state.
+
+It supports serializing and deserializing OpenFlow messages and structures from version
+1.0 to version 1.5. It supports Big Switch and Nicira extensions.
+
+## License
+
+This software is licensed under the Apache License, Version 2.0 (the
+"License"); you may not use this software except in compliance with the
+License.
+You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff --git a/vendor/github.com/skydive-project/goloxi/decoder.go b/vendor/github.com/skydive-project/goloxi/decoder.go
new file mode 100644
index 0000000..aa974b9
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/decoder.go
@@ -0,0 +1,94 @@
+package goloxi
+
+import (
+	"encoding/binary"
+)
+
+type Decoder struct {
+	buffer     []byte
+	offset     int
+	baseOffset int
+}
+
+func NewDecoder(data []byte) *Decoder {
+	return &Decoder{
+		buffer: data,
+	}
+}
+
+func (d *Decoder) ReadByte() byte {
+	c := d.buffer[d.offset]
+	d.offset++
+	return c
+}
+
+func (d *Decoder) ReadUint8() uint8 {
+	i := uint8(d.buffer[d.offset])
+	d.offset++
+	return i
+}
+
+func (d *Decoder) ReadUint16() uint16 {
+	i := binary.BigEndian.Uint16(d.buffer[d.offset : d.offset+2])
+	d.offset += 2
+	return i
+}
+
+func (d *Decoder) ReadUint32() uint32 {
+	i := binary.BigEndian.Uint32(d.buffer[d.offset : d.offset+4])
+	d.offset += 4
+	return i
+}
+
+func (d *Decoder) ReadUint64() uint64 {
+	i := binary.BigEndian.Uint64(d.buffer[d.offset : d.offset+8])
+	d.offset += 8
+	return i
+}
+
+func (d *Decoder) ReadUint128() Uint128 {
+	hi := binary.BigEndian.Uint64(d.buffer[d.offset : d.offset+8])
+	lo := binary.BigEndian.Uint64(d.buffer[d.offset+8 : d.offset+16])
+	d.offset += 16
+	return Uint128{
+		Hi: hi,
+		Lo: lo,
+	}
+}
+
+func (d *Decoder) Skip(n int) {
+	d.offset += n
+}
+
+func (d *Decoder) SkipAlign() {
+	d.offset += (d.baseOffset+d.offset+7)/8*8 - d.baseOffset - d.offset
+}
+
+func (d *Decoder) Read(n int) []byte {
+	data := d.buffer[d.offset : d.offset+n]
+	d.offset += n
+	return data
+}
+
+func (d *Decoder) Length() int {
+	return len(d.buffer) - d.offset
+}
+
+func (d *Decoder) Bytes() []byte {
+	return d.buffer[d.offset:]
+}
+
+func (d *Decoder) Offset() int {
+	return d.offset
+}
+
+func (d *Decoder) BaseOffset() int {
+	return d.baseOffset
+}
+
+func (d *Decoder) SliceDecoder(length, rewind int) *Decoder {
+	newDecoder := NewDecoder(d.buffer[d.offset : d.offset+length-rewind])
+	newDecoder.baseOffset = d.offset + d.baseOffset
+	d.offset += length - rewind
+	return newDecoder
+}
diff --git a/vendor/github.com/skydive-project/goloxi/encoder.go b/vendor/github.com/skydive-project/goloxi/encoder.go
new file mode 100644
index 0000000..e67b2f8
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/encoder.go
@@ -0,0 +1,62 @@
+package goloxi
+
+import (
+	"bytes"
+	"encoding/binary"
+)
+
+type Encoder struct {
+	buffer *bytes.Buffer
+}
+
+func NewEncoder() *Encoder {
+	return &Encoder{
+		buffer: new(bytes.Buffer),
+	}
+}
+
+func (e *Encoder) PutChar(c byte) {
+	e.buffer.WriteByte(c)
+}
+
+func (e *Encoder) PutUint8(i uint8) {
+	e.buffer.WriteByte(i)
+}
+
+func (e *Encoder) PutUint16(i uint16) {
+	var tmp [2]byte
+	binary.BigEndian.PutUint16(tmp[0:2], i)
+	e.buffer.Write(tmp[:])
+}
+
+func (e *Encoder) PutUint32(i uint32) {
+	var tmp [4]byte
+	binary.BigEndian.PutUint32(tmp[0:4], i)
+	e.buffer.Write(tmp[:])
+}
+
+func (e *Encoder) PutUint64(i uint64) {
+	var tmp [8]byte
+	binary.BigEndian.PutUint64(tmp[0:8], i)
+	e.buffer.Write(tmp[:])
+}
+
+func (e *Encoder) PutUint128(i Uint128) {
+	var tmp [16]byte
+	binary.BigEndian.PutUint64(tmp[0:8], i.Hi)
+	binary.BigEndian.PutUint64(tmp[8:16], i.Lo)
+	e.buffer.Write(tmp[:])
+}
+
+func (e *Encoder) Write(b []byte) {
+	e.buffer.Write(b)
+}
+
+func (e *Encoder) Bytes() []byte {
+	return e.buffer.Bytes()
+}
+
+func (e *Encoder) SkipAlign() {
+	length := len(e.buffer.Bytes())
+	e.Write(bytes.Repeat([]byte{0}, (length+7)/8*8-length))
+}
diff --git a/vendor/github.com/skydive-project/goloxi/globals.go b/vendor/github.com/skydive-project/goloxi/globals.go
new file mode 100644
index 0000000..cb8c54c
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/globals.go
@@ -0,0 +1,99 @@
+package goloxi
+
+import "fmt"
+
+const (
+	VERSION_1_0 = 1
+	VERSION_1_1 = 2
+	VERSION_1_2 = 3
+	VERSION_1_3 = 4
+	VERSION_1_4 = 5
+	VERSION_1_5 = 6
+)
+
+const (
+	OFPTHello        = 0
+	OFPTError        = 1
+	OFPTEchoRequest  = 2
+	OFPTEchoReply    = 3
+	OFPTExperimenter = 4
+)
+
+type Serializable interface {
+	Serialize(encoder *Encoder) error
+}
+
+type Deserializable interface {
+	Decode(decoder *Decoder) error
+}
+
+type Header struct {
+	Version uint8
+	Type    uint8
+	Length  uint16
+	Xid     uint32
+}
+
+type Message interface {
+	Serializable
+	GetVersion() uint8
+	GetLength() uint16
+	MessageType() uint8
+	MessageName() string
+	GetXid() uint32
+	SetXid(xid uint32)
+}
+
+type Uint128 struct {
+	Hi uint64
+	Lo uint64
+}
+
+type IOxm interface {
+	Serializable
+	GetOXMName() string
+	GetOXMValue() interface{}
+}
+
+type IOxmMasked interface {
+	Serializable
+	GetOXMName() string
+	GetOXMValue() interface{}
+	GetOXMValueMask() interface{}
+}
+
+type IOxmId interface {
+	Serializable
+	GetOXMName() string
+}
+
+type IAction interface {
+	Serializable
+	GetType() uint16
+	GetLen() uint16
+	GetActionName() string
+	GetActionFields() map[string]interface{}
+}
+
+func (self *Header) Decode(decoder *Decoder) (err error) {
+	if decoder.Length() < 8 {
+		return fmt.Errorf("Header packet too short: %d < 4", decoder.Length())
+	}
+
+	defer func() {
+		if r := recover(); r != nil {
+			var ok bool
+			err, ok = r.(error)
+			if !ok {
+				err = fmt.Errorf("Error while parsing OpenFlow packet: %+v", r)
+			}
+		}
+	}()
+
+	self.Version = decoder.ReadByte()
+	self.Type = decoder.ReadByte()
+	self.Length = decoder.ReadUint16()
+	self.Xid = decoder.ReadUint32()
+
+	return nil
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/action.go b/vendor/github.com/skydive-project/goloxi/of13/action.go
new file mode 100644
index 0000000..4e271b2
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/action.go
@@ -0,0 +1,5935 @@
+/*
+ * Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+ * Copyright (c) 2011, 2012 Open Networking Foundation
+ * Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler.
+ * Copyright 2018, Red Hat, Inc.
+ */
+// Automatically generated by LOXI from template module.go
+// Do not modify
+
+package of13
+
+import (
+	"bytes"
+	"encoding/binary"
+	"encoding/json"
+	"fmt"
+	"net"
+
+	"github.com/skydive-project/goloxi"
+)
+
+type Action struct {
+	Type uint16
+	Len  uint16
+}
+
+type IAction interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLen() uint16
+	GetActionName() string
+	GetActionFields() map[string]interface{}
+}
+
+func (self *Action) GetType() uint16 {
+	return self.Type
+}
+
+func (self *Action) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *Action) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *Action) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *Action) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Len))
+
+	return nil
+}
+
+func DecodeAction(decoder *goloxi.Decoder) (goloxi.IAction, error) {
+	_action := &Action{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("Action packet too short: %d < 4", decoder.Length())
+	}
+	_action.Type = uint16(decoder.ReadUint16())
+	_action.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_action.Len), 2+2)
+
+	switch _action.Type {
+	case 0:
+		return DecodeActionOutput(_action, decoder)
+	case 11:
+		return DecodeActionCopyTtlOut(_action, decoder)
+	case 12:
+		return DecodeActionCopyTtlIn(_action, decoder)
+	case 15:
+		return DecodeActionSetMplsTtl(_action, decoder)
+	case 16:
+		return DecodeActionDecMplsTtl(_action, decoder)
+	case 17:
+		return DecodeActionPushVlan(_action, decoder)
+	case 18:
+		return DecodeActionPopVlan(_action, decoder)
+	case 19:
+		return DecodeActionPushMpls(_action, decoder)
+	case 20:
+		return DecodeActionPopMpls(_action, decoder)
+	case 21:
+		return DecodeActionSetQueue(_action, decoder)
+	case 22:
+		return DecodeActionGroup(_action, decoder)
+	case 23:
+		return DecodeActionSetNwTtl(_action, decoder)
+	case 24:
+		return DecodeActionDecNwTtl(_action, decoder)
+	case 25:
+		return DecodeActionSetField(_action, decoder)
+	case 26:
+		return DecodeActionPushPbb(_action, decoder)
+	case 27:
+		return DecodeActionPopPbb(_action, decoder)
+	case 65535:
+		return DecodeActionExperimenter(_action, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'Action'", _action.Type)
+	}
+}
+
+func NewAction(_type uint16) *Action {
+	obj := &Action{}
+	obj.Type = _type
+	return obj
+}
+
+type ActionExperimenter struct {
+	*Action
+	Experimenter uint32
+}
+
+type IActionExperimenter interface {
+	goloxi.IAction
+	GetExperimenter() uint32
+}
+
+func (self *ActionExperimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *ActionExperimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *ActionExperimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Experimenter))
+
+	return nil
+}
+
+func DecodeActionExperimenter(parent *Action, decoder *goloxi.Decoder) (IActionExperimenter, error) {
+	_actionexperimenter := &ActionExperimenter{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionExperimenter packet too short: %d < 4", decoder.Length())
+	}
+	_actionexperimenter.Experimenter = uint32(decoder.ReadUint32())
+
+	switch _actionexperimenter.Experimenter {
+	case 8992:
+		return DecodeActionNicira(_actionexperimenter, decoder)
+	case 6035143:
+		return DecodeActionBsn(_actionexperimenter, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ActionExperimenter'", _actionexperimenter.Experimenter)
+	}
+}
+
+func NewActionExperimenter(_experimenter uint32) *ActionExperimenter {
+	obj := &ActionExperimenter{
+		Action: NewAction(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+func (self *ActionExperimenter) GetActionName() string {
+	return "experimenter"
+}
+
+func (self *ActionExperimenter) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Experimenter": self.Experimenter,
+	}
+}
+
+func (self *ActionExperimenter) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionBsn struct {
+	*ActionExperimenter
+	Subtype uint32
+}
+
+type IActionBsn interface {
+	IActionExperimenter
+	GetSubtype() uint32
+}
+
+func (self *ActionBsn) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *ActionBsn) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *ActionBsn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionExperimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Subtype))
+
+	return nil
+}
+
+func DecodeActionBsn(parent *ActionExperimenter, decoder *goloxi.Decoder) (IActionBsn, error) {
+	_actionbsn := &ActionBsn{ActionExperimenter: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionBsn packet too short: %d < 4", decoder.Length())
+	}
+	_actionbsn.Subtype = uint32(decoder.ReadUint32())
+
+	switch _actionbsn.Subtype {
+	case 1:
+		return DecodeActionBsnMirror(_actionbsn, decoder)
+	case 2:
+		return DecodeActionBsnSetTunnelDst(_actionbsn, decoder)
+	case 4:
+		return DecodeActionBsnChecksum(_actionbsn, decoder)
+	case 5:
+		return DecodeActionBsnGentable(_actionbsn, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ActionBsn'", _actionbsn.Subtype)
+	}
+}
+
+func NewActionBsn(_subtype uint32) *ActionBsn {
+	obj := &ActionBsn{
+		ActionExperimenter: NewActionExperimenter(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+func (self *ActionBsn) GetActionName() string {
+	return "bsn"
+}
+
+func (self *ActionBsn) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Subtype": self.Subtype,
+	}
+}
+
+func (self *ActionBsn) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionBsnChecksum struct {
+	*ActionBsn
+	Checksum Checksum128
+}
+
+type IActionBsnChecksum interface {
+	IActionBsn
+	GetChecksum() Checksum128
+}
+
+func (self *ActionBsnChecksum) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *ActionBsnChecksum) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *ActionBsnChecksum) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Checksum.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionBsnChecksum(parent *ActionBsn, decoder *goloxi.Decoder) (*ActionBsnChecksum, error) {
+	_actionbsnchecksum := &ActionBsnChecksum{ActionBsn: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("ActionBsnChecksum packet too short: %d < 16", decoder.Length())
+	}
+	_actionbsnchecksum.Checksum.Decode(decoder)
+	return _actionbsnchecksum, nil
+}
+
+func NewActionBsnChecksum() *ActionBsnChecksum {
+	obj := &ActionBsnChecksum{
+		ActionBsn: NewActionBsn(4),
+	}
+	return obj
+}
+func (self *ActionBsnChecksum) GetActionName() string {
+	return "bsn_checksum"
+}
+
+func (self *ActionBsnChecksum) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Checksum": self.Checksum,
+	}
+}
+
+func (self *ActionBsnChecksum) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionBsnGentable struct {
+	*ActionBsn
+	TableId uint32
+	Key     []IBsnTlv
+}
+
+type IActionBsnGentable interface {
+	IActionBsn
+	GetTableId() uint32
+	GetKey() []IBsnTlv
+}
+
+func (self *ActionBsnGentable) GetTableId() uint32 {
+	return self.TableId
+}
+
+func (self *ActionBsnGentable) SetTableId(v uint32) {
+	self.TableId = v
+}
+
+func (self *ActionBsnGentable) GetKey() []IBsnTlv {
+	return self.Key
+}
+
+func (self *ActionBsnGentable) SetKey(v []IBsnTlv) {
+	self.Key = v
+}
+
+func (self *ActionBsnGentable) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.TableId))
+	for _, obj := range self.Key {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionBsnGentable(parent *ActionBsn, decoder *goloxi.Decoder) (*ActionBsnGentable, error) {
+	_actionbsngentable := &ActionBsnGentable{ActionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionBsnGentable packet too short: %d < 4", decoder.Length())
+	}
+	_actionbsngentable.TableId = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_actionbsngentable.Key = append(_actionbsngentable.Key, item)
+		}
+	}
+	return _actionbsngentable, nil
+}
+
+func NewActionBsnGentable() *ActionBsnGentable {
+	obj := &ActionBsnGentable{
+		ActionBsn: NewActionBsn(5),
+	}
+	return obj
+}
+func (self *ActionBsnGentable) GetActionName() string {
+	return "bsn_gentable"
+}
+
+func (self *ActionBsnGentable) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"TableId": self.TableId,
+		"Key":     self.Key,
+	}
+}
+
+func (self *ActionBsnGentable) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionBsnMirror struct {
+	*ActionBsn
+	DestPort  uint32
+	VlanTag   uint32
+	CopyStage uint8
+}
+
+type IActionBsnMirror interface {
+	IActionBsn
+	GetDestPort() uint32
+	GetVlanTag() uint32
+	GetCopyStage() uint8
+}
+
+func (self *ActionBsnMirror) GetDestPort() uint32 {
+	return self.DestPort
+}
+
+func (self *ActionBsnMirror) SetDestPort(v uint32) {
+	self.DestPort = v
+}
+
+func (self *ActionBsnMirror) GetVlanTag() uint32 {
+	return self.VlanTag
+}
+
+func (self *ActionBsnMirror) SetVlanTag(v uint32) {
+	self.VlanTag = v
+}
+
+func (self *ActionBsnMirror) GetCopyStage() uint8 {
+	return self.CopyStage
+}
+
+func (self *ActionBsnMirror) SetCopyStage(v uint8) {
+	self.CopyStage = v
+}
+
+func (self *ActionBsnMirror) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.DestPort))
+	encoder.PutUint32(uint32(self.VlanTag))
+	encoder.PutUint8(uint8(self.CopyStage))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionBsnMirror(parent *ActionBsn, decoder *goloxi.Decoder) (*ActionBsnMirror, error) {
+	_actionbsnmirror := &ActionBsnMirror{ActionBsn: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("ActionBsnMirror packet too short: %d < 12", decoder.Length())
+	}
+	_actionbsnmirror.DestPort = uint32(decoder.ReadUint32())
+	_actionbsnmirror.VlanTag = uint32(decoder.ReadUint32())
+	_actionbsnmirror.CopyStage = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _actionbsnmirror, nil
+}
+
+func NewActionBsnMirror() *ActionBsnMirror {
+	obj := &ActionBsnMirror{
+		ActionBsn: NewActionBsn(1),
+	}
+	return obj
+}
+func (self *ActionBsnMirror) GetActionName() string {
+	return "bsn_mirror"
+}
+
+func (self *ActionBsnMirror) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"DestPort":  self.DestPort,
+		"VlanTag":   self.VlanTag,
+		"CopyStage": self.CopyStage,
+	}
+}
+
+func (self *ActionBsnMirror) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionBsnSetTunnelDst struct {
+	*ActionBsn
+	Dst uint32
+}
+
+type IActionBsnSetTunnelDst interface {
+	IActionBsn
+	GetDst() uint32
+}
+
+func (self *ActionBsnSetTunnelDst) GetDst() uint32 {
+	return self.Dst
+}
+
+func (self *ActionBsnSetTunnelDst) SetDst(v uint32) {
+	self.Dst = v
+}
+
+func (self *ActionBsnSetTunnelDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Dst))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionBsnSetTunnelDst(parent *ActionBsn, decoder *goloxi.Decoder) (*ActionBsnSetTunnelDst, error) {
+	_actionbsnsettunneldst := &ActionBsnSetTunnelDst{ActionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionBsnSetTunnelDst packet too short: %d < 4", decoder.Length())
+	}
+	_actionbsnsettunneldst.Dst = uint32(decoder.ReadUint32())
+	return _actionbsnsettunneldst, nil
+}
+
+func NewActionBsnSetTunnelDst() *ActionBsnSetTunnelDst {
+	obj := &ActionBsnSetTunnelDst{
+		ActionBsn: NewActionBsn(2),
+	}
+	return obj
+}
+func (self *ActionBsnSetTunnelDst) GetActionName() string {
+	return "bsn_set_tunnel_dst"
+}
+
+func (self *ActionBsnSetTunnelDst) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Dst": self.Dst,
+	}
+}
+
+func (self *ActionBsnSetTunnelDst) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionCopyTtlIn struct {
+	*Action
+}
+
+type IActionCopyTtlIn interface {
+	goloxi.IAction
+}
+
+func (self *ActionCopyTtlIn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionCopyTtlIn(parent *Action, decoder *goloxi.Decoder) (*ActionCopyTtlIn, error) {
+	_actioncopyttlin := &ActionCopyTtlIn{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionCopyTtlIn packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _actioncopyttlin, nil
+}
+
+func NewActionCopyTtlIn() *ActionCopyTtlIn {
+	obj := &ActionCopyTtlIn{
+		Action: NewAction(12),
+	}
+	return obj
+}
+func (self *ActionCopyTtlIn) GetActionName() string {
+	return "copy_ttl_in"
+}
+
+func (self *ActionCopyTtlIn) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionCopyTtlIn) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionCopyTtlOut struct {
+	*Action
+}
+
+type IActionCopyTtlOut interface {
+	goloxi.IAction
+}
+
+func (self *ActionCopyTtlOut) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionCopyTtlOut(parent *Action, decoder *goloxi.Decoder) (*ActionCopyTtlOut, error) {
+	_actioncopyttlout := &ActionCopyTtlOut{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionCopyTtlOut packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _actioncopyttlout, nil
+}
+
+func NewActionCopyTtlOut() *ActionCopyTtlOut {
+	obj := &ActionCopyTtlOut{
+		Action: NewAction(11),
+	}
+	return obj
+}
+func (self *ActionCopyTtlOut) GetActionName() string {
+	return "copy_ttl_out"
+}
+
+func (self *ActionCopyTtlOut) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionCopyTtlOut) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionDecMplsTtl struct {
+	*Action
+}
+
+type IActionDecMplsTtl interface {
+	goloxi.IAction
+}
+
+func (self *ActionDecMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionDecMplsTtl(parent *Action, decoder *goloxi.Decoder) (*ActionDecMplsTtl, error) {
+	_actiondecmplsttl := &ActionDecMplsTtl{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionDecMplsTtl packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _actiondecmplsttl, nil
+}
+
+func NewActionDecMplsTtl() *ActionDecMplsTtl {
+	obj := &ActionDecMplsTtl{
+		Action: NewAction(16),
+	}
+	return obj
+}
+func (self *ActionDecMplsTtl) GetActionName() string {
+	return "dec_mpls_ttl"
+}
+
+func (self *ActionDecMplsTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionDecMplsTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionDecNwTtl struct {
+	*Action
+}
+
+type IActionDecNwTtl interface {
+	goloxi.IAction
+}
+
+func (self *ActionDecNwTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionDecNwTtl(parent *Action, decoder *goloxi.Decoder) (*ActionDecNwTtl, error) {
+	_actiondecnwttl := &ActionDecNwTtl{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionDecNwTtl packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _actiondecnwttl, nil
+}
+
+func NewActionDecNwTtl() *ActionDecNwTtl {
+	obj := &ActionDecNwTtl{
+		Action: NewAction(24),
+	}
+	return obj
+}
+func (self *ActionDecNwTtl) GetActionName() string {
+	return "dec_nw_ttl"
+}
+
+func (self *ActionDecNwTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionDecNwTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionGroup struct {
+	*Action
+	GroupId uint32
+}
+
+type IActionGroup interface {
+	goloxi.IAction
+	GetGroupId() uint32
+}
+
+func (self *ActionGroup) GetGroupId() uint32 {
+	return self.GroupId
+}
+
+func (self *ActionGroup) SetGroupId(v uint32) {
+	self.GroupId = v
+}
+
+func (self *ActionGroup) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.GroupId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionGroup(parent *Action, decoder *goloxi.Decoder) (*ActionGroup, error) {
+	_actiongroup := &ActionGroup{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionGroup packet too short: %d < 4", decoder.Length())
+	}
+	_actiongroup.GroupId = uint32(decoder.ReadUint32())
+	return _actiongroup, nil
+}
+
+func NewActionGroup() *ActionGroup {
+	obj := &ActionGroup{
+		Action: NewAction(22),
+	}
+	return obj
+}
+func (self *ActionGroup) GetActionName() string {
+	return "group"
+}
+
+func (self *ActionGroup) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"GroupId": self.GroupId,
+	}
+}
+
+func (self *ActionGroup) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNicira struct {
+	*ActionExperimenter
+	Subtype uint16
+}
+
+type IActionNicira interface {
+	IActionExperimenter
+	GetSubtype() uint16
+}
+
+func (self *ActionNicira) GetSubtype() uint16 {
+	return self.Subtype
+}
+
+func (self *ActionNicira) SetSubtype(v uint16) {
+	self.Subtype = v
+}
+
+func (self *ActionNicira) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionExperimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Subtype))
+
+	return nil
+}
+
+func DecodeActionNicira(parent *ActionExperimenter, decoder *goloxi.Decoder) (IActionNicira, error) {
+	_actionnicira := &ActionNicira{ActionExperimenter: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNicira packet too short: %d < 2", decoder.Length())
+	}
+	_actionnicira.Subtype = uint16(decoder.ReadUint16())
+
+	switch _actionnicira.Subtype {
+	case 1:
+		return DecodeActionNxResubmit(_actionnicira, decoder)
+	case 2:
+		return DecodeActionNxSetTunnel(_actionnicira, decoder)
+	case 4:
+		return DecodeActionNxSetQueue(_actionnicira, decoder)
+	case 5:
+		return DecodeActionNxPopQueue(_actionnicira, decoder)
+	case 6:
+		return DecodeActionNxRegMove(_actionnicira, decoder)
+	case 7:
+		return DecodeActionNxRegLoad(_actionnicira, decoder)
+	case 8:
+		return DecodeActionNxNote(_actionnicira, decoder)
+	case 9:
+		return DecodeActionNxSetTunnel64(_actionnicira, decoder)
+	case 10:
+		return DecodeActionNxMultipath(_actionnicira, decoder)
+	case 12:
+		return DecodeActionNxBundle(_actionnicira, decoder)
+	case 13:
+		return DecodeActionNxBundleLoadInPort(_actionnicira, decoder)
+	case 14:
+		return DecodeActionResubmit(_actionnicira, decoder)
+	case 15:
+		return DecodeActionNxOutputReg(_actionnicira, decoder)
+	case 16:
+		return DecodeActionNxLearn(_actionnicira, decoder)
+	case 17:
+		return DecodeActionNxExit(_actionnicira, decoder)
+	case 18:
+		return DecodeActionNiciraDecTtl(_actionnicira, decoder)
+	case 19:
+		return DecodeActionNxFinTimeout(_actionnicira, decoder)
+	case 20:
+		return DecodeActionNxController(_actionnicira, decoder)
+	case 21:
+		return DecodeActionNxDecTtlCntIds(_actionnicira, decoder)
+	case 22:
+		return DecodeActionNxWriteMetadata(_actionnicira, decoder)
+	case 23:
+		return DecodeActionNxPushMpls(_actionnicira, decoder)
+	case 24:
+		return DecodeActionNxPopMpls(_actionnicira, decoder)
+	case 25:
+		return DecodeActionNxSetMplsTtl(_actionnicira, decoder)
+	case 26:
+		return DecodeActionNxDecMplsTtl(_actionnicira, decoder)
+	case 27:
+		return DecodeActionNxStackPush(_actionnicira, decoder)
+	case 28:
+		return DecodeActionNxStackPop(_actionnicira, decoder)
+	case 29:
+		return DecodeActionNxSample(_actionnicira, decoder)
+	case 30:
+		return DecodeActionNxSetMplsLabel(_actionnicira, decoder)
+	case 31:
+		return DecodeActionNxSetMplsTc(_actionnicira, decoder)
+	case 32:
+		return DecodeActionNxOutputReg2(_actionnicira, decoder)
+	case 33:
+		return DecodeActionNxRegLoad2(_actionnicira, decoder)
+	case 34:
+		return DecodeActionNxConjunction(_actionnicira, decoder)
+	case 35:
+		return DecodeActionNxCt(_actionnicira, decoder)
+	case 36:
+		return DecodeActionNxNat(_actionnicira, decoder)
+	case 37:
+		return DecodeActionNxController2(_actionnicira, decoder)
+	case 38:
+		return DecodeActionNxSample2(_actionnicira, decoder)
+	case 39:
+		return DecodeActionNxOutputTrunc(_actionnicira, decoder)
+	case 40:
+		return DecodeActionNxGroup(_actionnicira, decoder)
+	case 41:
+		return DecodeActionNxSample3(_actionnicira, decoder)
+	case 42:
+		return DecodeActionNxClone(_actionnicira, decoder)
+	case 43:
+		return DecodeActionNxCtClear(_actionnicira, decoder)
+	case 44:
+		return DecodeActionNxResubmitTableCt(_actionnicira, decoder)
+	case 45:
+		return DecodeActionNxLearn2(_actionnicira, decoder)
+	case 46:
+		return DecodeActionNxEncap(_actionnicira, decoder)
+	case 47:
+		return DecodeActionNxDecap(_actionnicira, decoder)
+	case 48:
+		return DecodeActionNxDecNshTtl(_actionnicira, decoder)
+	case 254:
+		return DecodeActionNxDebugSlow(_actionnicira, decoder)
+	case 255:
+		return DecodeActionNxDebugRecirc(_actionnicira, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ActionNicira'", _actionnicira.Subtype)
+	}
+}
+
+func NewActionNicira(_subtype uint16) *ActionNicira {
+	obj := &ActionNicira{
+		ActionExperimenter: NewActionExperimenter(8992),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+func (self *ActionNicira) GetActionName() string {
+	return "nicira"
+}
+
+func (self *ActionNicira) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Subtype": self.Subtype,
+	}
+}
+
+func (self *ActionNicira) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNiciraDecTtl struct {
+	*ActionNicira
+}
+
+type IActionNiciraDecTtl interface {
+	IActionNicira
+}
+
+func (self *ActionNiciraDecTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNiciraDecTtl(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNiciraDecTtl, error) {
+	_actionniciradecttl := &ActionNiciraDecTtl{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNiciraDecTtl packet too short: %d < 6", decoder.Length())
+	}
+	decoder.Skip(2)
+	decoder.Skip(4)
+	return _actionniciradecttl, nil
+}
+
+func NewActionNiciraDecTtl() *ActionNiciraDecTtl {
+	obj := &ActionNiciraDecTtl{
+		ActionNicira: NewActionNicira(18),
+	}
+	return obj
+}
+func (self *ActionNiciraDecTtl) GetActionName() string {
+	return "nicira_dec_ttl"
+}
+
+func (self *ActionNiciraDecTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNiciraDecTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxBundle struct {
+	*ActionNicira
+	Algorithm uint16
+	Fields    NxHashFields
+	Basis     uint16
+	SlaveType ActionNxBundleSlaveType
+	NSlaves   uint16
+	OfsNbits  uint16
+	Dst       goloxi.IOxmId
+}
+
+type IActionNxBundle interface {
+	IActionNicira
+	GetAlgorithm() uint16
+	GetFields() NxHashFields
+	GetBasis() uint16
+	GetSlaveType() ActionNxBundleSlaveType
+	GetNSlaves() uint16
+	GetOfsNbits() uint16
+	GetDst() goloxi.IOxmId
+}
+
+func (self *ActionNxBundle) GetAlgorithm() uint16 {
+	return self.Algorithm
+}
+
+func (self *ActionNxBundle) SetAlgorithm(v uint16) {
+	self.Algorithm = v
+}
+
+func (self *ActionNxBundle) GetFields() NxHashFields {
+	return self.Fields
+}
+
+func (self *ActionNxBundle) SetFields(v NxHashFields) {
+	self.Fields = v
+}
+
+func (self *ActionNxBundle) GetBasis() uint16 {
+	return self.Basis
+}
+
+func (self *ActionNxBundle) SetBasis(v uint16) {
+	self.Basis = v
+}
+
+func (self *ActionNxBundle) GetSlaveType() ActionNxBundleSlaveType {
+	return self.SlaveType
+}
+
+func (self *ActionNxBundle) SetSlaveType(v ActionNxBundleSlaveType) {
+	self.SlaveType = v
+}
+
+func (self *ActionNxBundle) GetNSlaves() uint16 {
+	return self.NSlaves
+}
+
+func (self *ActionNxBundle) SetNSlaves(v uint16) {
+	self.NSlaves = v
+}
+
+func (self *ActionNxBundle) GetOfsNbits() uint16 {
+	return self.OfsNbits
+}
+
+func (self *ActionNxBundle) SetOfsNbits(v uint16) {
+	self.OfsNbits = v
+}
+
+func (self *ActionNxBundle) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *ActionNxBundle) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *ActionNxBundle) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Algorithm))
+	encoder.PutUint16(uint16(self.Fields))
+	encoder.PutUint16(uint16(self.Basis))
+	encoder.PutUint32(uint32(self.SlaveType))
+	encoder.PutUint16(uint16(self.NSlaves))
+	encoder.PutUint16(uint16(self.OfsNbits))
+	self.Dst.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxBundle(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxBundle, error) {
+	_actionnxbundle := &ActionNxBundle{ActionNicira: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("ActionNxBundle packet too short: %d < 22", decoder.Length())
+	}
+	_actionnxbundle.Algorithm = uint16(decoder.ReadUint16())
+	_actionnxbundle.Fields = NxHashFields(decoder.ReadUint16())
+	_actionnxbundle.Basis = uint16(decoder.ReadUint16())
+	_actionnxbundle.SlaveType = ActionNxBundleSlaveType(decoder.ReadUint32())
+	_actionnxbundle.NSlaves = uint16(decoder.ReadUint16())
+	_actionnxbundle.OfsNbits = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxbundle.Dst = obj
+	}
+
+	decoder.Skip(4)
+	return _actionnxbundle, nil
+}
+
+func NewActionNxBundle() *ActionNxBundle {
+	obj := &ActionNxBundle{
+		ActionNicira: NewActionNicira(12),
+	}
+	return obj
+}
+func (self *ActionNxBundle) GetActionName() string {
+	return "nx_bundle"
+}
+
+func (self *ActionNxBundle) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Algorithm": self.Algorithm,
+		"Fields":    self.Fields,
+		"Basis":     self.Basis,
+		"SlaveType": self.SlaveType,
+		"NSlaves":   self.NSlaves,
+		"OfsNbits":  self.OfsNbits,
+		"Dst":       self.Dst,
+	}
+}
+
+func (self *ActionNxBundle) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxBundleLoad struct {
+	*ActionNicira
+	Algorithm NxBdAlgorithms
+	Fields    NxHashFields
+	Basis     uint16
+	SlaveType ActionNxBundleSlaveType
+	NSlaves   uint16
+	OfsNbits  uint16
+	Dst       goloxi.IOxmId
+}
+
+type IActionNxBundleLoad interface {
+	IActionNicira
+	GetAlgorithm() NxBdAlgorithms
+	GetFields() NxHashFields
+	GetBasis() uint16
+	GetSlaveType() ActionNxBundleSlaveType
+	GetNSlaves() uint16
+	GetOfsNbits() uint16
+	GetDst() goloxi.IOxmId
+}
+
+func (self *ActionNxBundleLoad) GetAlgorithm() NxBdAlgorithms {
+	return self.Algorithm
+}
+
+func (self *ActionNxBundleLoad) SetAlgorithm(v NxBdAlgorithms) {
+	self.Algorithm = v
+}
+
+func (self *ActionNxBundleLoad) GetFields() NxHashFields {
+	return self.Fields
+}
+
+func (self *ActionNxBundleLoad) SetFields(v NxHashFields) {
+	self.Fields = v
+}
+
+func (self *ActionNxBundleLoad) GetBasis() uint16 {
+	return self.Basis
+}
+
+func (self *ActionNxBundleLoad) SetBasis(v uint16) {
+	self.Basis = v
+}
+
+func (self *ActionNxBundleLoad) GetSlaveType() ActionNxBundleSlaveType {
+	return self.SlaveType
+}
+
+func (self *ActionNxBundleLoad) SetSlaveType(v ActionNxBundleSlaveType) {
+	self.SlaveType = v
+}
+
+func (self *ActionNxBundleLoad) GetNSlaves() uint16 {
+	return self.NSlaves
+}
+
+func (self *ActionNxBundleLoad) SetNSlaves(v uint16) {
+	self.NSlaves = v
+}
+
+func (self *ActionNxBundleLoad) GetOfsNbits() uint16 {
+	return self.OfsNbits
+}
+
+func (self *ActionNxBundleLoad) SetOfsNbits(v uint16) {
+	self.OfsNbits = v
+}
+
+func (self *ActionNxBundleLoad) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *ActionNxBundleLoad) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *ActionNxBundleLoad) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Algorithm))
+	encoder.PutUint16(uint16(self.Fields))
+	encoder.PutUint16(uint16(self.Basis))
+	encoder.PutUint32(uint32(self.SlaveType))
+	encoder.PutUint16(uint16(self.NSlaves))
+	encoder.PutUint16(uint16(self.OfsNbits))
+	self.Dst.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeActionNxBundleLoad(parent *ActionNicira, decoder *goloxi.Decoder) (IActionNxBundleLoad, error) {
+	_actionnxbundleload := &ActionNxBundleLoad{ActionNicira: parent}
+	if decoder.Length() < 18 {
+		return nil, fmt.Errorf("ActionNxBundleLoad packet too short: %d < 18", decoder.Length())
+	}
+	_actionnxbundleload.Algorithm = NxBdAlgorithms(decoder.ReadUint16())
+	_actionnxbundleload.Fields = NxHashFields(decoder.ReadUint16())
+	_actionnxbundleload.Basis = uint16(decoder.ReadUint16())
+	_actionnxbundleload.SlaveType = ActionNxBundleSlaveType(decoder.ReadUint32())
+	_actionnxbundleload.NSlaves = uint16(decoder.ReadUint16())
+	_actionnxbundleload.OfsNbits = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxbundleload.Dst = obj
+	}
+
+	return _actionnxbundleload, nil
+}
+
+func NewActionNxBundleLoad(_slave_type ActionNxBundleSlaveType) *ActionNxBundleLoad {
+	obj := &ActionNxBundleLoad{
+		ActionNicira: NewActionNicira(13),
+	}
+	obj.SlaveType = _slave_type
+	return obj
+}
+func (self *ActionNxBundleLoad) GetActionName() string {
+	return "nx_bundle_load"
+}
+
+func (self *ActionNxBundleLoad) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Algorithm": self.Algorithm,
+		"Fields":    self.Fields,
+		"Basis":     self.Basis,
+		"SlaveType": self.SlaveType,
+		"NSlaves":   self.NSlaves,
+		"OfsNbits":  self.OfsNbits,
+		"Dst":       self.Dst,
+	}
+}
+
+func (self *ActionNxBundleLoad) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxBundleLoadInPort struct {
+	*ActionNicira
+	Algorithm NxBdAlgorithms
+	Fields    NxHashFields
+	Basis     uint16
+	SlaveType ActionNxBundleSlaveType
+	NSlaves   uint16
+	OfsNbits  uint16
+	Dst       goloxi.IOxmId
+	InPorts   []*ActionNxBundleLoadSlave
+}
+
+type IActionNxBundleLoadInPort interface {
+	IActionNicira
+	GetAlgorithm() NxBdAlgorithms
+	GetFields() NxHashFields
+	GetBasis() uint16
+	GetSlaveType() ActionNxBundleSlaveType
+	GetNSlaves() uint16
+	GetOfsNbits() uint16
+	GetDst() goloxi.IOxmId
+	GetInPorts() []*ActionNxBundleLoadSlave
+}
+
+func (self *ActionNxBundleLoadInPort) GetAlgorithm() NxBdAlgorithms {
+	return self.Algorithm
+}
+
+func (self *ActionNxBundleLoadInPort) SetAlgorithm(v NxBdAlgorithms) {
+	self.Algorithm = v
+}
+
+func (self *ActionNxBundleLoadInPort) GetFields() NxHashFields {
+	return self.Fields
+}
+
+func (self *ActionNxBundleLoadInPort) SetFields(v NxHashFields) {
+	self.Fields = v
+}
+
+func (self *ActionNxBundleLoadInPort) GetBasis() uint16 {
+	return self.Basis
+}
+
+func (self *ActionNxBundleLoadInPort) SetBasis(v uint16) {
+	self.Basis = v
+}
+
+func (self *ActionNxBundleLoadInPort) GetSlaveType() ActionNxBundleSlaveType {
+	return self.SlaveType
+}
+
+func (self *ActionNxBundleLoadInPort) SetSlaveType(v ActionNxBundleSlaveType) {
+	self.SlaveType = v
+}
+
+func (self *ActionNxBundleLoadInPort) GetNSlaves() uint16 {
+	return self.NSlaves
+}
+
+func (self *ActionNxBundleLoadInPort) SetNSlaves(v uint16) {
+	self.NSlaves = v
+}
+
+func (self *ActionNxBundleLoadInPort) GetOfsNbits() uint16 {
+	return self.OfsNbits
+}
+
+func (self *ActionNxBundleLoadInPort) SetOfsNbits(v uint16) {
+	self.OfsNbits = v
+}
+
+func (self *ActionNxBundleLoadInPort) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *ActionNxBundleLoadInPort) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *ActionNxBundleLoadInPort) GetInPorts() []*ActionNxBundleLoadSlave {
+	return self.InPorts
+}
+
+func (self *ActionNxBundleLoadInPort) SetInPorts(v []*ActionNxBundleLoadSlave) {
+	self.InPorts = v
+}
+
+func (self *ActionNxBundleLoadInPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Algorithm))
+	encoder.PutUint16(uint16(self.Fields))
+	encoder.PutUint16(uint16(self.Basis))
+	encoder.PutUint32(uint32(self.SlaveType))
+	encoder.PutUint16(uint16(self.NSlaves))
+	encoder.PutUint16(uint16(self.OfsNbits))
+	self.Dst.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.InPorts {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxBundleLoadInPort(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxBundleLoadInPort, error) {
+	_actionnxbundleloadinport := &ActionNxBundleLoadInPort{ActionNicira: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("ActionNxBundleLoadInPort packet too short: %d < 22", decoder.Length())
+	}
+	_actionnxbundleloadinport.Algorithm = NxBdAlgorithms(decoder.ReadUint16())
+	_actionnxbundleloadinport.Fields = NxHashFields(decoder.ReadUint16())
+	_actionnxbundleloadinport.Basis = uint16(decoder.ReadUint16())
+	_actionnxbundleloadinport.SlaveType = ActionNxBundleSlaveType(decoder.ReadUint32())
+	_actionnxbundleloadinport.NSlaves = uint16(decoder.ReadUint16())
+	_actionnxbundleloadinport.OfsNbits = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxbundleloadinport.Dst = obj
+	}
+
+	decoder.Skip(4)
+
+	for i := 0; i < int(_actionnxbundleloadinport.NSlaves); i++ {
+		item, err := DecodeActionNxBundleLoadSlave(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_actionnxbundleloadinport.InPorts = append(_actionnxbundleloadinport.InPorts, item)
+		}
+	}
+	return _actionnxbundleloadinport, nil
+}
+
+func NewActionNxBundleLoadInPort() *ActionNxBundleLoadInPort {
+	obj := &ActionNxBundleLoadInPort{
+		ActionNicira: NewActionNicira(13),
+	}
+	return obj
+}
+func (self *ActionNxBundleLoadInPort) GetActionName() string {
+	return "nx_bundle_load_in_port"
+}
+
+func (self *ActionNxBundleLoadInPort) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Algorithm": self.Algorithm,
+		"Fields":    self.Fields,
+		"Basis":     self.Basis,
+		"SlaveType": self.SlaveType,
+		"NSlaves":   self.NSlaves,
+		"OfsNbits":  self.OfsNbits,
+		"Dst":       self.Dst,
+		"InPorts":   self.InPorts,
+	}
+}
+
+func (self *ActionNxBundleLoadInPort) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxClone struct {
+	*ActionNicira
+	Actions []goloxi.IAction
+}
+
+type IActionNxClone interface {
+	IActionNicira
+	GetActions() []goloxi.IAction
+}
+
+func (self *ActionNxClone) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *ActionNxClone) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *ActionNxClone) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxClone(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxClone, error) {
+	_actionnxclone := &ActionNxClone{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxClone packet too short: %d < 6", decoder.Length())
+	}
+	decoder.Skip(6)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_actionnxclone.Actions = append(_actionnxclone.Actions, item)
+		}
+	}
+	return _actionnxclone, nil
+}
+
+func NewActionNxClone() *ActionNxClone {
+	obj := &ActionNxClone{
+		ActionNicira: NewActionNicira(42),
+	}
+	return obj
+}
+func (self *ActionNxClone) GetActionName() string {
+	return "nx_clone"
+}
+
+func (self *ActionNxClone) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Actions": self.Actions,
+	}
+}
+
+func (self *ActionNxClone) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxConjunction struct {
+	*ActionNicira
+	Clause   uint8
+	NClauses uint8
+	Id       uint32
+}
+
+type IActionNxConjunction interface {
+	IActionNicira
+	GetClause() uint8
+	GetNClauses() uint8
+	GetId() uint32
+}
+
+func (self *ActionNxConjunction) GetClause() uint8 {
+	return self.Clause
+}
+
+func (self *ActionNxConjunction) SetClause(v uint8) {
+	self.Clause = v
+}
+
+func (self *ActionNxConjunction) GetNClauses() uint8 {
+	return self.NClauses
+}
+
+func (self *ActionNxConjunction) SetNClauses(v uint8) {
+	self.NClauses = v
+}
+
+func (self *ActionNxConjunction) GetId() uint32 {
+	return self.Id
+}
+
+func (self *ActionNxConjunction) SetId(v uint32) {
+	self.Id = v
+}
+
+func (self *ActionNxConjunction) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Clause))
+	encoder.PutUint8(uint8(self.NClauses))
+	encoder.PutUint32(uint32(self.Id))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxConjunction(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxConjunction, error) {
+	_actionnxconjunction := &ActionNxConjunction{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxConjunction packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxconjunction.Clause = uint8(decoder.ReadByte())
+	_actionnxconjunction.NClauses = uint8(decoder.ReadByte())
+	_actionnxconjunction.Id = uint32(decoder.ReadUint32())
+	return _actionnxconjunction, nil
+}
+
+func NewActionNxConjunction() *ActionNxConjunction {
+	obj := &ActionNxConjunction{
+		ActionNicira: NewActionNicira(34),
+	}
+	return obj
+}
+func (self *ActionNxConjunction) GetActionName() string {
+	return "nx_conjunction"
+}
+
+func (self *ActionNxConjunction) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Clause":   self.Clause,
+		"NClauses": self.NClauses,
+		"Id":       self.Id,
+	}
+}
+
+func (self *ActionNxConjunction) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxController struct {
+	*ActionNicira
+	MaxLen       uint16
+	ControllerId uint16
+	Reason       uint8
+}
+
+type IActionNxController interface {
+	IActionNicira
+	GetMaxLen() uint16
+	GetControllerId() uint16
+	GetReason() uint8
+}
+
+func (self *ActionNxController) GetMaxLen() uint16 {
+	return self.MaxLen
+}
+
+func (self *ActionNxController) SetMaxLen(v uint16) {
+	self.MaxLen = v
+}
+
+func (self *ActionNxController) GetControllerId() uint16 {
+	return self.ControllerId
+}
+
+func (self *ActionNxController) SetControllerId(v uint16) {
+	self.ControllerId = v
+}
+
+func (self *ActionNxController) GetReason() uint8 {
+	return self.Reason
+}
+
+func (self *ActionNxController) SetReason(v uint8) {
+	self.Reason = v
+}
+
+func (self *ActionNxController) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.MaxLen))
+	encoder.PutUint16(uint16(self.ControllerId))
+	encoder.PutUint8(uint8(self.Reason))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxController(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxController, error) {
+	_actionnxcontroller := &ActionNxController{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxController packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxcontroller.MaxLen = uint16(decoder.ReadUint16())
+	_actionnxcontroller.ControllerId = uint16(decoder.ReadUint16())
+	_actionnxcontroller.Reason = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	return _actionnxcontroller, nil
+}
+
+func NewActionNxController() *ActionNxController {
+	obj := &ActionNxController{
+		ActionNicira: NewActionNicira(20),
+	}
+	return obj
+}
+func (self *ActionNxController) GetActionName() string {
+	return "nx_controller"
+}
+
+func (self *ActionNxController) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"MaxLen":       self.MaxLen,
+		"ControllerId": self.ControllerId,
+		"Reason":       self.Reason,
+	}
+}
+
+func (self *ActionNxController) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxController2 struct {
+	*ActionNicira
+	Properties []IActionNxController2Property
+}
+
+type IActionNxController2 interface {
+	IActionNicira
+	GetProperties() []IActionNxController2Property
+}
+
+func (self *ActionNxController2) GetProperties() []IActionNxController2Property {
+	return self.Properties
+}
+
+func (self *ActionNxController2) SetProperties(v []IActionNxController2Property) {
+	self.Properties = v
+}
+
+func (self *ActionNxController2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+	for _, obj := range self.Properties {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxController2(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxController2, error) {
+	_actionnxcontroller2 := &ActionNxController2{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxController2 packet too short: %d < 6", decoder.Length())
+	}
+	decoder.Skip(6)
+
+	for decoder.Length() >= 2 {
+		item, err := DecodeActionNxController2Property(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_actionnxcontroller2.Properties = append(_actionnxcontroller2.Properties, item)
+		}
+	}
+	return _actionnxcontroller2, nil
+}
+
+func NewActionNxController2() *ActionNxController2 {
+	obj := &ActionNxController2{
+		ActionNicira: NewActionNicira(37),
+	}
+	return obj
+}
+func (self *ActionNxController2) GetActionName() string {
+	return "nx_controller2"
+}
+
+func (self *ActionNxController2) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Properties": self.Properties,
+	}
+}
+
+func (self *ActionNxController2) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxCt struct {
+	*ActionNicira
+	Flags       NxConntrackFlags
+	ZoneSrc     goloxi.IOxmId
+	Value       uint16
+	RecircTable uint8
+	Alg         uint16
+	Actions     []goloxi.IAction
+}
+
+type IActionNxCt interface {
+	IActionNicira
+	GetFlags() NxConntrackFlags
+	GetZoneSrc() goloxi.IOxmId
+	GetValue() uint16
+	GetRecircTable() uint8
+	GetAlg() uint16
+	GetActions() []goloxi.IAction
+}
+
+func (self *ActionNxCt) GetFlags() NxConntrackFlags {
+	return self.Flags
+}
+
+func (self *ActionNxCt) SetFlags(v NxConntrackFlags) {
+	self.Flags = v
+}
+
+func (self *ActionNxCt) GetZoneSrc() goloxi.IOxmId {
+	return self.ZoneSrc
+}
+
+func (self *ActionNxCt) SetZoneSrc(v goloxi.IOxmId) {
+	self.ZoneSrc = v
+}
+
+func (self *ActionNxCt) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *ActionNxCt) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *ActionNxCt) GetRecircTable() uint8 {
+	return self.RecircTable
+}
+
+func (self *ActionNxCt) SetRecircTable(v uint8) {
+	self.RecircTable = v
+}
+
+func (self *ActionNxCt) GetAlg() uint16 {
+	return self.Alg
+}
+
+func (self *ActionNxCt) SetAlg(v uint16) {
+	self.Alg = v
+}
+
+func (self *ActionNxCt) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *ActionNxCt) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *ActionNxCt) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Flags))
+	self.ZoneSrc.Serialize(encoder)
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint8(uint8(self.RecircTable))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	encoder.PutUint16(uint16(self.Alg))
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxCt(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxCt, error) {
+	_actionnxct := &ActionNxCt{ActionNicira: parent}
+	if decoder.Length() < 14 {
+		return nil, fmt.Errorf("ActionNxCt packet too short: %d < 14", decoder.Length())
+	}
+	_actionnxct.Flags = NxConntrackFlags(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxct.ZoneSrc = obj
+	}
+
+	_actionnxct.Value = uint16(decoder.ReadUint16())
+	_actionnxct.RecircTable = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_actionnxct.Alg = uint16(decoder.ReadUint16())
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_actionnxct.Actions = append(_actionnxct.Actions, item)
+		}
+	}
+	return _actionnxct, nil
+}
+
+func NewActionNxCt() *ActionNxCt {
+	obj := &ActionNxCt{
+		ActionNicira: NewActionNicira(35),
+	}
+	return obj
+}
+func (self *ActionNxCt) GetActionName() string {
+	return "nx_ct"
+}
+
+func (self *ActionNxCt) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Flags":       self.Flags,
+		"ZoneSrc":     self.ZoneSrc,
+		"Value":       self.Value,
+		"RecircTable": self.RecircTable,
+		"Alg":         self.Alg,
+		"Actions":     self.Actions,
+	}
+}
+
+func (self *ActionNxCt) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxCtClear struct {
+	*ActionNicira
+}
+
+type IActionNxCtClear interface {
+	IActionNicira
+}
+
+func (self *ActionNxCtClear) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxCtClear(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxCtClear, error) {
+	_actionnxctclear := &ActionNxCtClear{ActionNicira: parent}
+	return _actionnxctclear, nil
+}
+
+func NewActionNxCtClear() *ActionNxCtClear {
+	obj := &ActionNxCtClear{
+		ActionNicira: NewActionNicira(43),
+	}
+	return obj
+}
+func (self *ActionNxCtClear) GetActionName() string {
+	return "nx_ct_clear"
+}
+
+func (self *ActionNxCtClear) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxCtClear) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxDebugRecirc struct {
+	*ActionNicira
+}
+
+type IActionNxDebugRecirc interface {
+	IActionNicira
+}
+
+func (self *ActionNxDebugRecirc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxDebugRecirc(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxDebugRecirc, error) {
+	_actionnxdebugrecirc := &ActionNxDebugRecirc{ActionNicira: parent}
+	return _actionnxdebugrecirc, nil
+}
+
+func NewActionNxDebugRecirc() *ActionNxDebugRecirc {
+	obj := &ActionNxDebugRecirc{
+		ActionNicira: NewActionNicira(255),
+	}
+	return obj
+}
+func (self *ActionNxDebugRecirc) GetActionName() string {
+	return "nx_debug_recirc"
+}
+
+func (self *ActionNxDebugRecirc) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxDebugRecirc) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxDebugSlow struct {
+	*ActionNicira
+}
+
+type IActionNxDebugSlow interface {
+	IActionNicira
+}
+
+func (self *ActionNxDebugSlow) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxDebugSlow(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxDebugSlow, error) {
+	_actionnxdebugslow := &ActionNxDebugSlow{ActionNicira: parent}
+	return _actionnxdebugslow, nil
+}
+
+func NewActionNxDebugSlow() *ActionNxDebugSlow {
+	obj := &ActionNxDebugSlow{
+		ActionNicira: NewActionNicira(254),
+	}
+	return obj
+}
+func (self *ActionNxDebugSlow) GetActionName() string {
+	return "nx_debug_slow"
+}
+
+func (self *ActionNxDebugSlow) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxDebugSlow) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxDecMplsTtl struct {
+	*ActionNicira
+}
+
+type IActionNxDecMplsTtl interface {
+	IActionNicira
+}
+
+func (self *ActionNxDecMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxDecMplsTtl(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxDecMplsTtl, error) {
+	_actionnxdecmplsttl := &ActionNxDecMplsTtl{ActionNicira: parent}
+	return _actionnxdecmplsttl, nil
+}
+
+func NewActionNxDecMplsTtl() *ActionNxDecMplsTtl {
+	obj := &ActionNxDecMplsTtl{
+		ActionNicira: NewActionNicira(26),
+	}
+	return obj
+}
+func (self *ActionNxDecMplsTtl) GetActionName() string {
+	return "nx_dec_mpls_ttl"
+}
+
+func (self *ActionNxDecMplsTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxDecMplsTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxDecNshTtl struct {
+	*ActionNicira
+}
+
+type IActionNxDecNshTtl interface {
+	IActionNicira
+}
+
+func (self *ActionNxDecNshTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxDecNshTtl(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxDecNshTtl, error) {
+	_actionnxdecnshttl := &ActionNxDecNshTtl{ActionNicira: parent}
+	return _actionnxdecnshttl, nil
+}
+
+func NewActionNxDecNshTtl() *ActionNxDecNshTtl {
+	obj := &ActionNxDecNshTtl{
+		ActionNicira: NewActionNicira(48),
+	}
+	return obj
+}
+func (self *ActionNxDecNshTtl) GetActionName() string {
+	return "nx_dec_nsh_ttl"
+}
+
+func (self *ActionNxDecNshTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxDecNshTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxDecTtlCntIds struct {
+	*ActionNicira
+	NControllers uint16
+}
+
+type IActionNxDecTtlCntIds interface {
+	IActionNicira
+	GetNControllers() uint16
+}
+
+func (self *ActionNxDecTtlCntIds) GetNControllers() uint16 {
+	return self.NControllers
+}
+
+func (self *ActionNxDecTtlCntIds) SetNControllers(v uint16) {
+	self.NControllers = v
+}
+
+func (self *ActionNxDecTtlCntIds) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.NControllers))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxDecTtlCntIds(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxDecTtlCntIds, error) {
+	_actionnxdecttlcntids := &ActionNxDecTtlCntIds{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxDecTtlCntIds packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxdecttlcntids.NControllers = uint16(decoder.ReadUint16())
+	decoder.Skip(4)
+	return _actionnxdecttlcntids, nil
+}
+
+func NewActionNxDecTtlCntIds() *ActionNxDecTtlCntIds {
+	obj := &ActionNxDecTtlCntIds{
+		ActionNicira: NewActionNicira(21),
+	}
+	return obj
+}
+func (self *ActionNxDecTtlCntIds) GetActionName() string {
+	return "nx_dec_ttl_cnt_ids"
+}
+
+func (self *ActionNxDecTtlCntIds) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"NControllers": self.NControllers,
+	}
+}
+
+func (self *ActionNxDecTtlCntIds) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxDecap struct {
+	*ActionNicira
+	NewPktType uint32
+}
+
+type IActionNxDecap interface {
+	IActionNicira
+	GetNewPktType() uint32
+}
+
+func (self *ActionNxDecap) GetNewPktType() uint32 {
+	return self.NewPktType
+}
+
+func (self *ActionNxDecap) SetNewPktType(v uint32) {
+	self.NewPktType = v
+}
+
+func (self *ActionNxDecap) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.NewPktType))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxDecap(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxDecap, error) {
+	_actionnxdecap := &ActionNxDecap{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxDecap packet too short: %d < 6", decoder.Length())
+	}
+	decoder.Skip(2)
+	_actionnxdecap.NewPktType = uint32(decoder.ReadUint32())
+	return _actionnxdecap, nil
+}
+
+func NewActionNxDecap() *ActionNxDecap {
+	obj := &ActionNxDecap{
+		ActionNicira: NewActionNicira(47),
+	}
+	return obj
+}
+func (self *ActionNxDecap) GetActionName() string {
+	return "nx_decap"
+}
+
+func (self *ActionNxDecap) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"NewPktType": self.NewPktType,
+	}
+}
+
+func (self *ActionNxDecap) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxEncap struct {
+	*ActionNicira
+	HdrSize    uint16
+	PacketType PacketType
+	Props      []IEdPropHeader
+}
+
+type IActionNxEncap interface {
+	IActionNicira
+	GetHdrSize() uint16
+	GetPacketType() PacketType
+	GetProps() []IEdPropHeader
+}
+
+func (self *ActionNxEncap) GetHdrSize() uint16 {
+	return self.HdrSize
+}
+
+func (self *ActionNxEncap) SetHdrSize(v uint16) {
+	self.HdrSize = v
+}
+
+func (self *ActionNxEncap) GetPacketType() PacketType {
+	return self.PacketType
+}
+
+func (self *ActionNxEncap) SetPacketType(v PacketType) {
+	self.PacketType = v
+}
+
+func (self *ActionNxEncap) GetProps() []IEdPropHeader {
+	return self.Props
+}
+
+func (self *ActionNxEncap) SetProps(v []IEdPropHeader) {
+	self.Props = v
+}
+
+func (self *ActionNxEncap) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.HdrSize))
+	encoder.PutUint32(uint32(self.PacketType))
+	for _, obj := range self.Props {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxEncap(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxEncap, error) {
+	_actionnxencap := &ActionNxEncap{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxEncap packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxencap.HdrSize = uint16(decoder.ReadUint16())
+	_actionnxencap.PacketType = PacketType(decoder.ReadUint32())
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeEdPropHeader(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_actionnxencap.Props = append(_actionnxencap.Props, item)
+		}
+	}
+	return _actionnxencap, nil
+}
+
+func NewActionNxEncap() *ActionNxEncap {
+	obj := &ActionNxEncap{
+		ActionNicira: NewActionNicira(46),
+	}
+	return obj
+}
+func (self *ActionNxEncap) GetActionName() string {
+	return "nx_encap"
+}
+
+func (self *ActionNxEncap) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"HdrSize":    self.HdrSize,
+		"PacketType": self.PacketType,
+		"Props":      self.Props,
+	}
+}
+
+func (self *ActionNxEncap) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxExit struct {
+	*ActionNicira
+}
+
+type IActionNxExit interface {
+	IActionNicira
+}
+
+func (self *ActionNxExit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxExit(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxExit, error) {
+	_actionnxexit := &ActionNxExit{ActionNicira: parent}
+	return _actionnxexit, nil
+}
+
+func NewActionNxExit() *ActionNxExit {
+	obj := &ActionNxExit{
+		ActionNicira: NewActionNicira(17),
+	}
+	return obj
+}
+func (self *ActionNxExit) GetActionName() string {
+	return "nx_exit"
+}
+
+func (self *ActionNxExit) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxExit) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxFinTimeout struct {
+	*ActionNicira
+	FinIdleTimeout uint16
+	FinHardTimeout uint16
+}
+
+type IActionNxFinTimeout interface {
+	IActionNicira
+	GetFinIdleTimeout() uint16
+	GetFinHardTimeout() uint16
+}
+
+func (self *ActionNxFinTimeout) GetFinIdleTimeout() uint16 {
+	return self.FinIdleTimeout
+}
+
+func (self *ActionNxFinTimeout) SetFinIdleTimeout(v uint16) {
+	self.FinIdleTimeout = v
+}
+
+func (self *ActionNxFinTimeout) GetFinHardTimeout() uint16 {
+	return self.FinHardTimeout
+}
+
+func (self *ActionNxFinTimeout) SetFinHardTimeout(v uint16) {
+	self.FinHardTimeout = v
+}
+
+func (self *ActionNxFinTimeout) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.FinIdleTimeout))
+	encoder.PutUint16(uint16(self.FinHardTimeout))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxFinTimeout(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxFinTimeout, error) {
+	_actionnxfintimeout := &ActionNxFinTimeout{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxFinTimeout packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxfintimeout.FinIdleTimeout = uint16(decoder.ReadUint16())
+	_actionnxfintimeout.FinHardTimeout = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	return _actionnxfintimeout, nil
+}
+
+func NewActionNxFinTimeout() *ActionNxFinTimeout {
+	obj := &ActionNxFinTimeout{
+		ActionNicira: NewActionNicira(19),
+	}
+	return obj
+}
+func (self *ActionNxFinTimeout) GetActionName() string {
+	return "nx_fin_timeout"
+}
+
+func (self *ActionNxFinTimeout) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"FinIdleTimeout": self.FinIdleTimeout,
+		"FinHardTimeout": self.FinHardTimeout,
+	}
+}
+
+func (self *ActionNxFinTimeout) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxGroup struct {
+	*ActionNicira
+	Value uint32
+}
+
+type IActionNxGroup interface {
+	IActionNicira
+	GetValue() uint32
+}
+
+func (self *ActionNxGroup) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *ActionNxGroup) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *ActionNxGroup) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxGroup(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxGroup, error) {
+	_actionnxgroup := &ActionNxGroup{ActionNicira: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionNxGroup packet too short: %d < 4", decoder.Length())
+	}
+	_actionnxgroup.Value = uint32(decoder.ReadUint32())
+	return _actionnxgroup, nil
+}
+
+func NewActionNxGroup() *ActionNxGroup {
+	obj := &ActionNxGroup{
+		ActionNicira: NewActionNicira(40),
+	}
+	return obj
+}
+func (self *ActionNxGroup) GetActionName() string {
+	return "nx_group"
+}
+
+func (self *ActionNxGroup) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxGroup) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxLearn struct {
+	*ActionNicira
+	IdleTimeout    uint16
+	HardTimeout    uint16
+	Priority       uint16
+	Cookie         uint64
+	Flags          uint16
+	TableId        uint8
+	FinIdleTimeout uint16
+	FinHardTimeout uint16
+	FlowMods       []IFlowModSpec
+}
+
+type IActionNxLearn interface {
+	IActionNicira
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetPriority() uint16
+	GetCookie() uint64
+	GetFlags() uint16
+	GetTableId() uint8
+	GetFinIdleTimeout() uint16
+	GetFinHardTimeout() uint16
+	GetFlowMods() []IFlowModSpec
+}
+
+func (self *ActionNxLearn) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *ActionNxLearn) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *ActionNxLearn) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *ActionNxLearn) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *ActionNxLearn) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *ActionNxLearn) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *ActionNxLearn) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *ActionNxLearn) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *ActionNxLearn) GetFlags() uint16 {
+	return self.Flags
+}
+
+func (self *ActionNxLearn) SetFlags(v uint16) {
+	self.Flags = v
+}
+
+func (self *ActionNxLearn) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *ActionNxLearn) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *ActionNxLearn) GetFinIdleTimeout() uint16 {
+	return self.FinIdleTimeout
+}
+
+func (self *ActionNxLearn) SetFinIdleTimeout(v uint16) {
+	self.FinIdleTimeout = v
+}
+
+func (self *ActionNxLearn) GetFinHardTimeout() uint16 {
+	return self.FinHardTimeout
+}
+
+func (self *ActionNxLearn) SetFinHardTimeout(v uint16) {
+	self.FinHardTimeout = v
+}
+
+func (self *ActionNxLearn) GetFlowMods() []IFlowModSpec {
+	return self.FlowMods
+}
+
+func (self *ActionNxLearn) SetFlowMods(v []IFlowModSpec) {
+	self.FlowMods = v
+}
+
+func (self *ActionNxLearn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint16(uint16(self.FinIdleTimeout))
+	encoder.PutUint16(uint16(self.FinHardTimeout))
+	for _, obj := range self.FlowMods {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxLearn(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxLearn, error) {
+	_actionnxlearn := &ActionNxLearn{ActionNicira: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("ActionNxLearn packet too short: %d < 22", decoder.Length())
+	}
+	_actionnxlearn.IdleTimeout = uint16(decoder.ReadUint16())
+	_actionnxlearn.HardTimeout = uint16(decoder.ReadUint16())
+	_actionnxlearn.Priority = uint16(decoder.ReadUint16())
+	_actionnxlearn.Cookie = uint64(decoder.ReadUint64())
+	_actionnxlearn.Flags = uint16(decoder.ReadUint16())
+	_actionnxlearn.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_actionnxlearn.FinIdleTimeout = uint16(decoder.ReadUint16())
+	_actionnxlearn.FinHardTimeout = uint16(decoder.ReadUint16())
+
+	for decoder.Length() >= 2 {
+		item, err := DecodeFlowModSpec(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_actionnxlearn.FlowMods = append(_actionnxlearn.FlowMods, item)
+		}
+	}
+	return _actionnxlearn, nil
+}
+
+func NewActionNxLearn() *ActionNxLearn {
+	obj := &ActionNxLearn{
+		ActionNicira: NewActionNicira(16),
+	}
+	return obj
+}
+func (self *ActionNxLearn) GetActionName() string {
+	return "nx_learn"
+}
+
+func (self *ActionNxLearn) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"IdleTimeout":    self.IdleTimeout,
+		"HardTimeout":    self.HardTimeout,
+		"Priority":       self.Priority,
+		"Cookie":         self.Cookie,
+		"Flags":          self.Flags,
+		"TableId":        self.TableId,
+		"FinIdleTimeout": self.FinIdleTimeout,
+		"FinHardTimeout": self.FinHardTimeout,
+		"FlowMods":       self.FlowMods,
+	}
+}
+
+func (self *ActionNxLearn) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxLearn2 struct {
+	*ActionNicira
+}
+
+type IActionNxLearn2 interface {
+	IActionNicira
+}
+
+func (self *ActionNxLearn2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxLearn2(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxLearn2, error) {
+	_actionnxlearn2 := &ActionNxLearn2{ActionNicira: parent}
+	return _actionnxlearn2, nil
+}
+
+func NewActionNxLearn2() *ActionNxLearn2 {
+	obj := &ActionNxLearn2{
+		ActionNicira: NewActionNicira(45),
+	}
+	return obj
+}
+func (self *ActionNxLearn2) GetActionName() string {
+	return "nx_learn2"
+}
+
+func (self *ActionNxLearn2) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxLearn2) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxMultipath struct {
+	*ActionNicira
+	Fields    NxHashFields
+	Basis     uint16
+	Algorithm NxMpAlgorithm
+	MaxLink   uint16
+	Arg       uint32
+	OfsNbits  uint16
+	Dst       goloxi.IOxmId
+}
+
+type IActionNxMultipath interface {
+	IActionNicira
+	GetFields() NxHashFields
+	GetBasis() uint16
+	GetAlgorithm() NxMpAlgorithm
+	GetMaxLink() uint16
+	GetArg() uint32
+	GetOfsNbits() uint16
+	GetDst() goloxi.IOxmId
+}
+
+func (self *ActionNxMultipath) GetFields() NxHashFields {
+	return self.Fields
+}
+
+func (self *ActionNxMultipath) SetFields(v NxHashFields) {
+	self.Fields = v
+}
+
+func (self *ActionNxMultipath) GetBasis() uint16 {
+	return self.Basis
+}
+
+func (self *ActionNxMultipath) SetBasis(v uint16) {
+	self.Basis = v
+}
+
+func (self *ActionNxMultipath) GetAlgorithm() NxMpAlgorithm {
+	return self.Algorithm
+}
+
+func (self *ActionNxMultipath) SetAlgorithm(v NxMpAlgorithm) {
+	self.Algorithm = v
+}
+
+func (self *ActionNxMultipath) GetMaxLink() uint16 {
+	return self.MaxLink
+}
+
+func (self *ActionNxMultipath) SetMaxLink(v uint16) {
+	self.MaxLink = v
+}
+
+func (self *ActionNxMultipath) GetArg() uint32 {
+	return self.Arg
+}
+
+func (self *ActionNxMultipath) SetArg(v uint32) {
+	self.Arg = v
+}
+
+func (self *ActionNxMultipath) GetOfsNbits() uint16 {
+	return self.OfsNbits
+}
+
+func (self *ActionNxMultipath) SetOfsNbits(v uint16) {
+	self.OfsNbits = v
+}
+
+func (self *ActionNxMultipath) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *ActionNxMultipath) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *ActionNxMultipath) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Fields))
+	encoder.PutUint16(uint16(self.Basis))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint16(uint16(self.Algorithm))
+	encoder.PutUint16(uint16(self.MaxLink))
+	encoder.PutUint32(uint32(self.Arg))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint16(uint16(self.OfsNbits))
+	self.Dst.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxMultipath(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxMultipath, error) {
+	_actionnxmultipath := &ActionNxMultipath{ActionNicira: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("ActionNxMultipath packet too short: %d < 22", decoder.Length())
+	}
+	_actionnxmultipath.Fields = NxHashFields(decoder.ReadUint16())
+	_actionnxmultipath.Basis = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_actionnxmultipath.Algorithm = NxMpAlgorithm(decoder.ReadUint16())
+	_actionnxmultipath.MaxLink = uint16(decoder.ReadUint16())
+	_actionnxmultipath.Arg = uint32(decoder.ReadUint32())
+	decoder.Skip(2)
+	_actionnxmultipath.OfsNbits = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxmultipath.Dst = obj
+	}
+
+	return _actionnxmultipath, nil
+}
+
+func NewActionNxMultipath() *ActionNxMultipath {
+	obj := &ActionNxMultipath{
+		ActionNicira: NewActionNicira(10),
+	}
+	return obj
+}
+func (self *ActionNxMultipath) GetActionName() string {
+	return "nx_multipath"
+}
+
+func (self *ActionNxMultipath) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Fields":    self.Fields,
+		"Basis":     self.Basis,
+		"Algorithm": self.Algorithm,
+		"MaxLink":   self.MaxLink,
+		"Arg":       self.Arg,
+		"OfsNbits":  self.OfsNbits,
+		"Dst":       self.Dst,
+	}
+}
+
+func (self *ActionNxMultipath) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxNat struct {
+	*ActionNicira
+	Flags        uint16
+	RangePresent NxNatRange
+	Ipv4Min      net.IP
+	Ipv4Max      net.IP
+	Ipv6Min      net.IP
+	Ipv6Max      net.IP
+	ProtoMin     uint32
+	ProtoMax     uint32
+}
+
+type IActionNxNat interface {
+	IActionNicira
+	GetFlags() uint16
+	GetRangePresent() NxNatRange
+	GetIpv4Min() net.IP
+	GetIpv4Max() net.IP
+	GetIpv6Min() net.IP
+	GetIpv6Max() net.IP
+	GetProtoMin() uint32
+	GetProtoMax() uint32
+}
+
+func (self *ActionNxNat) GetFlags() uint16 {
+	return self.Flags
+}
+
+func (self *ActionNxNat) SetFlags(v uint16) {
+	self.Flags = v
+}
+
+func (self *ActionNxNat) GetRangePresent() NxNatRange {
+	return self.RangePresent
+}
+
+func (self *ActionNxNat) SetRangePresent(v NxNatRange) {
+	self.RangePresent = v
+}
+
+func (self *ActionNxNat) GetIpv4Min() net.IP {
+	return self.Ipv4Min
+}
+
+func (self *ActionNxNat) SetIpv4Min(v net.IP) {
+	self.Ipv4Min = v
+}
+
+func (self *ActionNxNat) GetIpv4Max() net.IP {
+	return self.Ipv4Max
+}
+
+func (self *ActionNxNat) SetIpv4Max(v net.IP) {
+	self.Ipv4Max = v
+}
+
+func (self *ActionNxNat) GetIpv6Min() net.IP {
+	return self.Ipv6Min
+}
+
+func (self *ActionNxNat) SetIpv6Min(v net.IP) {
+	self.Ipv6Min = v
+}
+
+func (self *ActionNxNat) GetIpv6Max() net.IP {
+	return self.Ipv6Max
+}
+
+func (self *ActionNxNat) SetIpv6Max(v net.IP) {
+	self.Ipv6Max = v
+}
+
+func (self *ActionNxNat) GetProtoMin() uint32 {
+	return self.ProtoMin
+}
+
+func (self *ActionNxNat) SetProtoMin(v uint32) {
+	self.ProtoMin = v
+}
+
+func (self *ActionNxNat) GetProtoMax() uint32 {
+	return self.ProtoMax
+}
+
+func (self *ActionNxNat) SetProtoMax(v uint32) {
+	self.ProtoMax = v
+}
+
+func (self *ActionNxNat) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.PutUint16(uint16(self.RangePresent))
+	encoder.Write(self.Ipv4Min.To4())
+	encoder.Write(self.Ipv4Max.To4())
+	encoder.Write(self.Ipv6Min.To16())
+	encoder.Write(self.Ipv6Max.To16())
+	encoder.PutUint32(uint32(self.ProtoMin))
+	encoder.PutUint32(uint32(self.ProtoMax))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxNat(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxNat, error) {
+	_actionnxnat := &ActionNxNat{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxNat packet too short: %d < 6", decoder.Length())
+	}
+	decoder.Skip(2)
+	_actionnxnat.Flags = uint16(decoder.ReadUint16())
+	_actionnxnat.RangePresent = NxNatRange(decoder.ReadUint16())
+	if _actionnxnat.RangePresent&1 == 1 {
+		_actionnxnat.Ipv4Min = net.IP(decoder.Read(4))
+	}
+	if _actionnxnat.RangePresent&2 == 2 {
+		_actionnxnat.Ipv4Max = net.IP(decoder.Read(4))
+	}
+	if _actionnxnat.RangePresent&4 == 4 {
+		_actionnxnat.Ipv6Min = net.IP(decoder.Read(16))
+	}
+	if _actionnxnat.RangePresent&8 == 8 {
+		_actionnxnat.Ipv6Max = net.IP(decoder.Read(16))
+	}
+	if _actionnxnat.RangePresent&16 == 16 {
+		_actionnxnat.ProtoMin = uint32(decoder.ReadUint32())
+	}
+	if _actionnxnat.RangePresent&32 == 32 {
+		_actionnxnat.ProtoMax = uint32(decoder.ReadUint32())
+	}
+	return _actionnxnat, nil
+}
+
+func NewActionNxNat() *ActionNxNat {
+	obj := &ActionNxNat{
+		ActionNicira: NewActionNicira(36),
+	}
+	return obj
+}
+func (self *ActionNxNat) GetActionName() string {
+	return "nx_nat"
+}
+
+func (self *ActionNxNat) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Flags":        self.Flags,
+		"RangePresent": self.RangePresent,
+		"Ipv4Min":      self.Ipv4Min,
+		"Ipv4Max":      self.Ipv4Max,
+		"Ipv6Min":      self.Ipv6Min,
+		"Ipv6Max":      self.Ipv6Max,
+		"ProtoMin":     self.ProtoMin,
+		"ProtoMax":     self.ProtoMax,
+	}
+}
+
+func (self *ActionNxNat) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxNote struct {
+	*ActionNicira
+	Note []byte
+}
+
+type IActionNxNote interface {
+	IActionNicira
+	GetNote() []byte
+}
+
+func (self *ActionNxNote) GetNote() []byte {
+	return self.Note
+}
+
+func (self *ActionNxNote) SetNote(v []byte) {
+	self.Note = v
+}
+
+func (self *ActionNxNote) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Note)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxNote(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxNote, error) {
+	_actionnxnote := &ActionNxNote{ActionNicira: parent}
+	_actionnxnote.Note = decoder.Read(int(decoder.Length()))
+	return _actionnxnote, nil
+}
+
+func NewActionNxNote() *ActionNxNote {
+	obj := &ActionNxNote{
+		ActionNicira: NewActionNicira(8),
+	}
+	return obj
+}
+func (self *ActionNxNote) GetActionName() string {
+	return "nx_note"
+}
+
+func (self *ActionNxNote) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Note": self.Note,
+	}
+}
+
+func (self *ActionNxNote) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxOutputReg struct {
+	*ActionNicira
+	OfsNbits uint16
+	Src      uint32
+	MaxLen   uint16
+}
+
+type IActionNxOutputReg interface {
+	IActionNicira
+	GetOfsNbits() uint16
+	GetSrc() uint32
+	GetMaxLen() uint16
+}
+
+func (self *ActionNxOutputReg) GetOfsNbits() uint16 {
+	return self.OfsNbits
+}
+
+func (self *ActionNxOutputReg) SetOfsNbits(v uint16) {
+	self.OfsNbits = v
+}
+
+func (self *ActionNxOutputReg) GetSrc() uint32 {
+	return self.Src
+}
+
+func (self *ActionNxOutputReg) SetSrc(v uint32) {
+	self.Src = v
+}
+
+func (self *ActionNxOutputReg) GetMaxLen() uint16 {
+	return self.MaxLen
+}
+
+func (self *ActionNxOutputReg) SetMaxLen(v uint16) {
+	self.MaxLen = v
+}
+
+func (self *ActionNxOutputReg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.OfsNbits))
+	encoder.PutUint32(uint32(self.Src))
+	encoder.PutUint16(uint16(self.MaxLen))
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxOutputReg(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxOutputReg, error) {
+	_actionnxoutputreg := &ActionNxOutputReg{ActionNicira: parent}
+	if decoder.Length() < 14 {
+		return nil, fmt.Errorf("ActionNxOutputReg packet too short: %d < 14", decoder.Length())
+	}
+	_actionnxoutputreg.OfsNbits = uint16(decoder.ReadUint16())
+	_actionnxoutputreg.Src = uint32(decoder.ReadUint32())
+	_actionnxoutputreg.MaxLen = uint16(decoder.ReadUint16())
+	decoder.Skip(6)
+	return _actionnxoutputreg, nil
+}
+
+func NewActionNxOutputReg() *ActionNxOutputReg {
+	obj := &ActionNxOutputReg{
+		ActionNicira: NewActionNicira(15),
+	}
+	return obj
+}
+func (self *ActionNxOutputReg) GetActionName() string {
+	return "nx_output_reg"
+}
+
+func (self *ActionNxOutputReg) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"OfsNbits": self.OfsNbits,
+		"Src":      self.Src,
+		"MaxLen":   self.MaxLen,
+	}
+}
+
+func (self *ActionNxOutputReg) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxOutputReg2 struct {
+	*ActionNicira
+	OfsNbits uint16
+	MaxLen   uint16
+}
+
+type IActionNxOutputReg2 interface {
+	IActionNicira
+	GetOfsNbits() uint16
+	GetMaxLen() uint16
+}
+
+func (self *ActionNxOutputReg2) GetOfsNbits() uint16 {
+	return self.OfsNbits
+}
+
+func (self *ActionNxOutputReg2) SetOfsNbits(v uint16) {
+	self.OfsNbits = v
+}
+
+func (self *ActionNxOutputReg2) GetMaxLen() uint16 {
+	return self.MaxLen
+}
+
+func (self *ActionNxOutputReg2) SetMaxLen(v uint16) {
+	self.MaxLen = v
+}
+
+func (self *ActionNxOutputReg2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.OfsNbits))
+	encoder.PutUint16(uint16(self.MaxLen))
+	encoder.Write(bytes.Repeat([]byte{0}, 10))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxOutputReg2(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxOutputReg2, error) {
+	_actionnxoutputreg2 := &ActionNxOutputReg2{ActionNicira: parent}
+	if decoder.Length() < 14 {
+		return nil, fmt.Errorf("ActionNxOutputReg2 packet too short: %d < 14", decoder.Length())
+	}
+	_actionnxoutputreg2.OfsNbits = uint16(decoder.ReadUint16())
+	_actionnxoutputreg2.MaxLen = uint16(decoder.ReadUint16())
+	decoder.Skip(10)
+	return _actionnxoutputreg2, nil
+}
+
+func NewActionNxOutputReg2() *ActionNxOutputReg2 {
+	obj := &ActionNxOutputReg2{
+		ActionNicira: NewActionNicira(32),
+	}
+	return obj
+}
+func (self *ActionNxOutputReg2) GetActionName() string {
+	return "nx_output_reg2"
+}
+
+func (self *ActionNxOutputReg2) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"OfsNbits": self.OfsNbits,
+		"MaxLen":   self.MaxLen,
+	}
+}
+
+func (self *ActionNxOutputReg2) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxOutputTrunc struct {
+	*ActionNicira
+	Port   uint16
+	MaxLen uint32
+}
+
+type IActionNxOutputTrunc interface {
+	IActionNicira
+	GetPort() uint16
+	GetMaxLen() uint32
+}
+
+func (self *ActionNxOutputTrunc) GetPort() uint16 {
+	return self.Port
+}
+
+func (self *ActionNxOutputTrunc) SetPort(v uint16) {
+	self.Port = v
+}
+
+func (self *ActionNxOutputTrunc) GetMaxLen() uint32 {
+	return self.MaxLen
+}
+
+func (self *ActionNxOutputTrunc) SetMaxLen(v uint32) {
+	self.MaxLen = v
+}
+
+func (self *ActionNxOutputTrunc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Port))
+	encoder.PutUint32(uint32(self.MaxLen))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxOutputTrunc(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxOutputTrunc, error) {
+	_actionnxoutputtrunc := &ActionNxOutputTrunc{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxOutputTrunc packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxoutputtrunc.Port = uint16(decoder.ReadUint16())
+	_actionnxoutputtrunc.MaxLen = uint32(decoder.ReadUint32())
+	return _actionnxoutputtrunc, nil
+}
+
+func NewActionNxOutputTrunc() *ActionNxOutputTrunc {
+	obj := &ActionNxOutputTrunc{
+		ActionNicira: NewActionNicira(39),
+	}
+	return obj
+}
+func (self *ActionNxOutputTrunc) GetActionName() string {
+	return "nx_output_trunc"
+}
+
+func (self *ActionNxOutputTrunc) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Port":   self.Port,
+		"MaxLen": self.MaxLen,
+	}
+}
+
+func (self *ActionNxOutputTrunc) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxPopMpls struct {
+	*ActionNicira
+	Value uint16
+}
+
+type IActionNxPopMpls interface {
+	IActionNicira
+	GetValue() uint16
+}
+
+func (self *ActionNxPopMpls) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *ActionNxPopMpls) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *ActionNxPopMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxPopMpls(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxPopMpls, error) {
+	_actionnxpopmpls := &ActionNxPopMpls{ActionNicira: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNxPopMpls packet too short: %d < 2", decoder.Length())
+	}
+	_actionnxpopmpls.Value = uint16(decoder.ReadUint16())
+	return _actionnxpopmpls, nil
+}
+
+func NewActionNxPopMpls() *ActionNxPopMpls {
+	obj := &ActionNxPopMpls{
+		ActionNicira: NewActionNicira(24),
+	}
+	return obj
+}
+func (self *ActionNxPopMpls) GetActionName() string {
+	return "nx_pop_mpls"
+}
+
+func (self *ActionNxPopMpls) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxPopMpls) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxPopQueue struct {
+	*ActionNicira
+}
+
+type IActionNxPopQueue interface {
+	IActionNicira
+}
+
+func (self *ActionNxPopQueue) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxPopQueue(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxPopQueue, error) {
+	_actionnxpopqueue := &ActionNxPopQueue{ActionNicira: parent}
+	return _actionnxpopqueue, nil
+}
+
+func NewActionNxPopQueue() *ActionNxPopQueue {
+	obj := &ActionNxPopQueue{
+		ActionNicira: NewActionNicira(5),
+	}
+	return obj
+}
+func (self *ActionNxPopQueue) GetActionName() string {
+	return "nx_pop_queue"
+}
+
+func (self *ActionNxPopQueue) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxPopQueue) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxPushMpls struct {
+	*ActionNicira
+	Value uint16
+}
+
+type IActionNxPushMpls interface {
+	IActionNicira
+	GetValue() uint16
+}
+
+func (self *ActionNxPushMpls) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *ActionNxPushMpls) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *ActionNxPushMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxPushMpls(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxPushMpls, error) {
+	_actionnxpushmpls := &ActionNxPushMpls{ActionNicira: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNxPushMpls packet too short: %d < 2", decoder.Length())
+	}
+	_actionnxpushmpls.Value = uint16(decoder.ReadUint16())
+	return _actionnxpushmpls, nil
+}
+
+func NewActionNxPushMpls() *ActionNxPushMpls {
+	obj := &ActionNxPushMpls{
+		ActionNicira: NewActionNicira(23),
+	}
+	return obj
+}
+func (self *ActionNxPushMpls) GetActionName() string {
+	return "nx_push_mpls"
+}
+
+func (self *ActionNxPushMpls) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxPushMpls) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxRegLoad struct {
+	*ActionNicira
+	OfsNbits uint16
+	SrcField goloxi.IOxmId
+	Value    uint64
+}
+
+type IActionNxRegLoad interface {
+	IActionNicira
+	GetOfsNbits() uint16
+	GetSrcField() goloxi.IOxmId
+	GetValue() uint64
+}
+
+func (self *ActionNxRegLoad) GetOfsNbits() uint16 {
+	return self.OfsNbits
+}
+
+func (self *ActionNxRegLoad) SetOfsNbits(v uint16) {
+	self.OfsNbits = v
+}
+
+func (self *ActionNxRegLoad) GetSrcField() goloxi.IOxmId {
+	return self.SrcField
+}
+
+func (self *ActionNxRegLoad) SetSrcField(v goloxi.IOxmId) {
+	self.SrcField = v
+}
+
+func (self *ActionNxRegLoad) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *ActionNxRegLoad) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *ActionNxRegLoad) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.OfsNbits))
+	self.SrcField.Serialize(encoder)
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxRegLoad(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxRegLoad, error) {
+	_actionnxregload := &ActionNxRegLoad{ActionNicira: parent}
+	if decoder.Length() < 14 {
+		return nil, fmt.Errorf("ActionNxRegLoad packet too short: %d < 14", decoder.Length())
+	}
+	_actionnxregload.OfsNbits = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxregload.SrcField = obj
+	}
+
+	_actionnxregload.Value = uint64(decoder.ReadUint64())
+	return _actionnxregload, nil
+}
+
+func NewActionNxRegLoad() *ActionNxRegLoad {
+	obj := &ActionNxRegLoad{
+		ActionNicira: NewActionNicira(7),
+	}
+	return obj
+}
+func (self *ActionNxRegLoad) GetActionName() string {
+	return "nx_reg_load"
+}
+
+func (self *ActionNxRegLoad) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"OfsNbits": self.OfsNbits,
+		"SrcField": self.SrcField,
+		"Value":    self.Value,
+	}
+}
+
+func (self *ActionNxRegLoad) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxRegLoad2 struct {
+	*ActionNicira
+}
+
+type IActionNxRegLoad2 interface {
+	IActionNicira
+}
+
+func (self *ActionNxRegLoad2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxRegLoad2(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxRegLoad2, error) {
+	_actionnxregload2 := &ActionNxRegLoad2{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxRegLoad2 packet too short: %d < 6", decoder.Length())
+	}
+	decoder.Skip(6)
+	return _actionnxregload2, nil
+}
+
+func NewActionNxRegLoad2() *ActionNxRegLoad2 {
+	obj := &ActionNxRegLoad2{
+		ActionNicira: NewActionNicira(33),
+	}
+	return obj
+}
+func (self *ActionNxRegLoad2) GetActionName() string {
+	return "nx_reg_load2"
+}
+
+func (self *ActionNxRegLoad2) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionNxRegLoad2) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxRegMove struct {
+	*ActionNicira
+	NBits  uint16
+	SrcOfs uint16
+	DstOfs uint16
+	Src    goloxi.IOxmId
+	Dst    goloxi.IOxmId
+}
+
+type IActionNxRegMove interface {
+	IActionNicira
+	GetNBits() uint16
+	GetSrcOfs() uint16
+	GetDstOfs() uint16
+	GetSrc() goloxi.IOxmId
+	GetDst() goloxi.IOxmId
+}
+
+func (self *ActionNxRegMove) GetNBits() uint16 {
+	return self.NBits
+}
+
+func (self *ActionNxRegMove) SetNBits(v uint16) {
+	self.NBits = v
+}
+
+func (self *ActionNxRegMove) GetSrcOfs() uint16 {
+	return self.SrcOfs
+}
+
+func (self *ActionNxRegMove) SetSrcOfs(v uint16) {
+	self.SrcOfs = v
+}
+
+func (self *ActionNxRegMove) GetDstOfs() uint16 {
+	return self.DstOfs
+}
+
+func (self *ActionNxRegMove) SetDstOfs(v uint16) {
+	self.DstOfs = v
+}
+
+func (self *ActionNxRegMove) GetSrc() goloxi.IOxmId {
+	return self.Src
+}
+
+func (self *ActionNxRegMove) SetSrc(v goloxi.IOxmId) {
+	self.Src = v
+}
+
+func (self *ActionNxRegMove) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *ActionNxRegMove) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *ActionNxRegMove) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.NBits))
+	encoder.PutUint16(uint16(self.SrcOfs))
+	encoder.PutUint16(uint16(self.DstOfs))
+	self.Src.Serialize(encoder)
+	self.Dst.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxRegMove(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxRegMove, error) {
+	_actionnxregmove := &ActionNxRegMove{ActionNicira: parent}
+	if decoder.Length() < 14 {
+		return nil, fmt.Errorf("ActionNxRegMove packet too short: %d < 14", decoder.Length())
+	}
+	_actionnxregmove.NBits = uint16(decoder.ReadUint16())
+	_actionnxregmove.SrcOfs = uint16(decoder.ReadUint16())
+	_actionnxregmove.DstOfs = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxregmove.Src = obj
+	}
+
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxregmove.Dst = obj
+	}
+
+	return _actionnxregmove, nil
+}
+
+func NewActionNxRegMove() *ActionNxRegMove {
+	obj := &ActionNxRegMove{
+		ActionNicira: NewActionNicira(6),
+	}
+	return obj
+}
+func (self *ActionNxRegMove) GetActionName() string {
+	return "nx_reg_move"
+}
+
+func (self *ActionNxRegMove) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"NBits":  self.NBits,
+		"SrcOfs": self.SrcOfs,
+		"DstOfs": self.DstOfs,
+		"Src":    self.Src,
+		"Dst":    self.Dst,
+	}
+}
+
+func (self *ActionNxRegMove) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxResubmit struct {
+	*ActionNicira
+	Value uint16
+}
+
+type IActionNxResubmit interface {
+	IActionNicira
+	GetValue() uint16
+}
+
+func (self *ActionNxResubmit) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *ActionNxResubmit) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *ActionNxResubmit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxResubmit(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxResubmit, error) {
+	_actionnxresubmit := &ActionNxResubmit{ActionNicira: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNxResubmit packet too short: %d < 2", decoder.Length())
+	}
+	_actionnxresubmit.Value = uint16(decoder.ReadUint16())
+	return _actionnxresubmit, nil
+}
+
+func NewActionNxResubmit() *ActionNxResubmit {
+	obj := &ActionNxResubmit{
+		ActionNicira: NewActionNicira(1),
+	}
+	return obj
+}
+func (self *ActionNxResubmit) GetActionName() string {
+	return "nx_resubmit"
+}
+
+func (self *ActionNxResubmit) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxResubmit) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxResubmitTable struct {
+	*ActionNicira
+	InPort uint16
+	Table  uint8
+}
+
+type IActionNxResubmitTable interface {
+	IActionNicira
+	GetInPort() uint16
+	GetTable() uint8
+}
+
+func (self *ActionNxResubmitTable) GetInPort() uint16 {
+	return self.InPort
+}
+
+func (self *ActionNxResubmitTable) SetInPort(v uint16) {
+	self.InPort = v
+}
+
+func (self *ActionNxResubmitTable) GetTable() uint8 {
+	return self.Table
+}
+
+func (self *ActionNxResubmitTable) SetTable(v uint8) {
+	self.Table = v
+}
+
+func (self *ActionNxResubmitTable) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.InPort))
+	encoder.PutUint8(uint8(self.Table))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxResubmitTable(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxResubmitTable, error) {
+	_actionnxresubmittable := &ActionNxResubmitTable{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxResubmitTable packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxresubmittable.InPort = uint16(decoder.ReadUint16())
+	_actionnxresubmittable.Table = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _actionnxresubmittable, nil
+}
+
+func NewActionNxResubmitTable() *ActionNxResubmitTable {
+	obj := &ActionNxResubmitTable{
+		ActionNicira: NewActionNicira(14),
+	}
+	return obj
+}
+func (self *ActionNxResubmitTable) GetActionName() string {
+	return "nx_resubmit_table"
+}
+
+func (self *ActionNxResubmitTable) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"InPort": self.InPort,
+		"Table":  self.Table,
+	}
+}
+
+func (self *ActionNxResubmitTable) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxResubmitTableCt struct {
+	*ActionNicira
+	InPort uint16
+	Table  uint8
+}
+
+type IActionNxResubmitTableCt interface {
+	IActionNicira
+	GetInPort() uint16
+	GetTable() uint8
+}
+
+func (self *ActionNxResubmitTableCt) GetInPort() uint16 {
+	return self.InPort
+}
+
+func (self *ActionNxResubmitTableCt) SetInPort(v uint16) {
+	self.InPort = v
+}
+
+func (self *ActionNxResubmitTableCt) GetTable() uint8 {
+	return self.Table
+}
+
+func (self *ActionNxResubmitTableCt) SetTable(v uint8) {
+	self.Table = v
+}
+
+func (self *ActionNxResubmitTableCt) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.InPort))
+	encoder.PutUint8(uint8(self.Table))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxResubmitTableCt(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxResubmitTableCt, error) {
+	_actionnxresubmittablect := &ActionNxResubmitTableCt{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionNxResubmitTableCt packet too short: %d < 6", decoder.Length())
+	}
+	_actionnxresubmittablect.InPort = uint16(decoder.ReadUint16())
+	_actionnxresubmittablect.Table = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _actionnxresubmittablect, nil
+}
+
+func NewActionNxResubmitTableCt() *ActionNxResubmitTableCt {
+	obj := &ActionNxResubmitTableCt{
+		ActionNicira: NewActionNicira(44),
+	}
+	return obj
+}
+func (self *ActionNxResubmitTableCt) GetActionName() string {
+	return "nx_resubmit_table_ct"
+}
+
+func (self *ActionNxResubmitTableCt) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"InPort": self.InPort,
+		"Table":  self.Table,
+	}
+}
+
+func (self *ActionNxResubmitTableCt) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSample struct {
+	*ActionNicira
+	Probability    uint16
+	CollectorSetId uint32
+	ObsDomainId    uint32
+	ObsPointId     uint32
+}
+
+type IActionNxSample interface {
+	IActionNicira
+	GetProbability() uint16
+	GetCollectorSetId() uint32
+	GetObsDomainId() uint32
+	GetObsPointId() uint32
+}
+
+func (self *ActionNxSample) GetProbability() uint16 {
+	return self.Probability
+}
+
+func (self *ActionNxSample) SetProbability(v uint16) {
+	self.Probability = v
+}
+
+func (self *ActionNxSample) GetCollectorSetId() uint32 {
+	return self.CollectorSetId
+}
+
+func (self *ActionNxSample) SetCollectorSetId(v uint32) {
+	self.CollectorSetId = v
+}
+
+func (self *ActionNxSample) GetObsDomainId() uint32 {
+	return self.ObsDomainId
+}
+
+func (self *ActionNxSample) SetObsDomainId(v uint32) {
+	self.ObsDomainId = v
+}
+
+func (self *ActionNxSample) GetObsPointId() uint32 {
+	return self.ObsPointId
+}
+
+func (self *ActionNxSample) SetObsPointId(v uint32) {
+	self.ObsPointId = v
+}
+
+func (self *ActionNxSample) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Probability))
+	encoder.PutUint32(uint32(self.CollectorSetId))
+	encoder.PutUint32(uint32(self.ObsDomainId))
+	encoder.PutUint32(uint32(self.ObsPointId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSample(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSample, error) {
+	_actionnxsample := &ActionNxSample{ActionNicira: parent}
+	if decoder.Length() < 14 {
+		return nil, fmt.Errorf("ActionNxSample packet too short: %d < 14", decoder.Length())
+	}
+	_actionnxsample.Probability = uint16(decoder.ReadUint16())
+	_actionnxsample.CollectorSetId = uint32(decoder.ReadUint32())
+	_actionnxsample.ObsDomainId = uint32(decoder.ReadUint32())
+	_actionnxsample.ObsPointId = uint32(decoder.ReadUint32())
+	return _actionnxsample, nil
+}
+
+func NewActionNxSample() *ActionNxSample {
+	obj := &ActionNxSample{
+		ActionNicira: NewActionNicira(29),
+	}
+	return obj
+}
+func (self *ActionNxSample) GetActionName() string {
+	return "nx_sample"
+}
+
+func (self *ActionNxSample) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Probability":    self.Probability,
+		"CollectorSetId": self.CollectorSetId,
+		"ObsDomainId":    self.ObsDomainId,
+		"ObsPointId":     self.ObsPointId,
+	}
+}
+
+func (self *ActionNxSample) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSample2 struct {
+	*ActionNicira
+	Probability    uint16
+	CollectorSetId uint32
+	ObsDomainId    uint32
+	ObsPointId     uint32
+	SamplingPort   uint16
+	Direction      uint8
+}
+
+type IActionNxSample2 interface {
+	IActionNicira
+	GetProbability() uint16
+	GetCollectorSetId() uint32
+	GetObsDomainId() uint32
+	GetObsPointId() uint32
+	GetSamplingPort() uint16
+	GetDirection() uint8
+}
+
+func (self *ActionNxSample2) GetProbability() uint16 {
+	return self.Probability
+}
+
+func (self *ActionNxSample2) SetProbability(v uint16) {
+	self.Probability = v
+}
+
+func (self *ActionNxSample2) GetCollectorSetId() uint32 {
+	return self.CollectorSetId
+}
+
+func (self *ActionNxSample2) SetCollectorSetId(v uint32) {
+	self.CollectorSetId = v
+}
+
+func (self *ActionNxSample2) GetObsDomainId() uint32 {
+	return self.ObsDomainId
+}
+
+func (self *ActionNxSample2) SetObsDomainId(v uint32) {
+	self.ObsDomainId = v
+}
+
+func (self *ActionNxSample2) GetObsPointId() uint32 {
+	return self.ObsPointId
+}
+
+func (self *ActionNxSample2) SetObsPointId(v uint32) {
+	self.ObsPointId = v
+}
+
+func (self *ActionNxSample2) GetSamplingPort() uint16 {
+	return self.SamplingPort
+}
+
+func (self *ActionNxSample2) SetSamplingPort(v uint16) {
+	self.SamplingPort = v
+}
+
+func (self *ActionNxSample2) GetDirection() uint8 {
+	return self.Direction
+}
+
+func (self *ActionNxSample2) SetDirection(v uint8) {
+	self.Direction = v
+}
+
+func (self *ActionNxSample2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Probability))
+	encoder.PutUint32(uint32(self.CollectorSetId))
+	encoder.PutUint32(uint32(self.ObsDomainId))
+	encoder.PutUint32(uint32(self.ObsPointId))
+	encoder.PutUint16(uint16(self.SamplingPort))
+	encoder.PutUint8(uint8(self.Direction))
+	encoder.Write(bytes.Repeat([]byte{0}, 5))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSample2(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSample2, error) {
+	_actionnxsample2 := &ActionNxSample2{ActionNicira: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("ActionNxSample2 packet too short: %d < 22", decoder.Length())
+	}
+	_actionnxsample2.Probability = uint16(decoder.ReadUint16())
+	_actionnxsample2.CollectorSetId = uint32(decoder.ReadUint32())
+	_actionnxsample2.ObsDomainId = uint32(decoder.ReadUint32())
+	_actionnxsample2.ObsPointId = uint32(decoder.ReadUint32())
+	_actionnxsample2.SamplingPort = uint16(decoder.ReadUint16())
+	_actionnxsample2.Direction = uint8(decoder.ReadByte())
+	decoder.Skip(5)
+	return _actionnxsample2, nil
+}
+
+func NewActionNxSample2() *ActionNxSample2 {
+	obj := &ActionNxSample2{
+		ActionNicira: NewActionNicira(38),
+	}
+	return obj
+}
+func (self *ActionNxSample2) GetActionName() string {
+	return "nx_sample2"
+}
+
+func (self *ActionNxSample2) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Probability":    self.Probability,
+		"CollectorSetId": self.CollectorSetId,
+		"ObsDomainId":    self.ObsDomainId,
+		"ObsPointId":     self.ObsPointId,
+		"SamplingPort":   self.SamplingPort,
+		"Direction":      self.Direction,
+	}
+}
+
+func (self *ActionNxSample2) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSample3 struct {
+	*ActionNicira
+	Probability    uint16
+	CollectorSetId uint32
+	ObsDomainId    uint32
+	ObsPointId     uint32
+	SamplingPort   uint16
+	Direction      uint8
+}
+
+type IActionNxSample3 interface {
+	IActionNicira
+	GetProbability() uint16
+	GetCollectorSetId() uint32
+	GetObsDomainId() uint32
+	GetObsPointId() uint32
+	GetSamplingPort() uint16
+	GetDirection() uint8
+}
+
+func (self *ActionNxSample3) GetProbability() uint16 {
+	return self.Probability
+}
+
+func (self *ActionNxSample3) SetProbability(v uint16) {
+	self.Probability = v
+}
+
+func (self *ActionNxSample3) GetCollectorSetId() uint32 {
+	return self.CollectorSetId
+}
+
+func (self *ActionNxSample3) SetCollectorSetId(v uint32) {
+	self.CollectorSetId = v
+}
+
+func (self *ActionNxSample3) GetObsDomainId() uint32 {
+	return self.ObsDomainId
+}
+
+func (self *ActionNxSample3) SetObsDomainId(v uint32) {
+	self.ObsDomainId = v
+}
+
+func (self *ActionNxSample3) GetObsPointId() uint32 {
+	return self.ObsPointId
+}
+
+func (self *ActionNxSample3) SetObsPointId(v uint32) {
+	self.ObsPointId = v
+}
+
+func (self *ActionNxSample3) GetSamplingPort() uint16 {
+	return self.SamplingPort
+}
+
+func (self *ActionNxSample3) SetSamplingPort(v uint16) {
+	self.SamplingPort = v
+}
+
+func (self *ActionNxSample3) GetDirection() uint8 {
+	return self.Direction
+}
+
+func (self *ActionNxSample3) SetDirection(v uint8) {
+	self.Direction = v
+}
+
+func (self *ActionNxSample3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Probability))
+	encoder.PutUint32(uint32(self.CollectorSetId))
+	encoder.PutUint32(uint32(self.ObsDomainId))
+	encoder.PutUint32(uint32(self.ObsPointId))
+	encoder.PutUint16(uint16(self.SamplingPort))
+	encoder.PutUint8(uint8(self.Direction))
+	encoder.Write(bytes.Repeat([]byte{0}, 5))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSample3(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSample3, error) {
+	_actionnxsample3 := &ActionNxSample3{ActionNicira: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("ActionNxSample3 packet too short: %d < 22", decoder.Length())
+	}
+	_actionnxsample3.Probability = uint16(decoder.ReadUint16())
+	_actionnxsample3.CollectorSetId = uint32(decoder.ReadUint32())
+	_actionnxsample3.ObsDomainId = uint32(decoder.ReadUint32())
+	_actionnxsample3.ObsPointId = uint32(decoder.ReadUint32())
+	_actionnxsample3.SamplingPort = uint16(decoder.ReadUint16())
+	_actionnxsample3.Direction = uint8(decoder.ReadByte())
+	decoder.Skip(5)
+	return _actionnxsample3, nil
+}
+
+func NewActionNxSample3() *ActionNxSample3 {
+	obj := &ActionNxSample3{
+		ActionNicira: NewActionNicira(41),
+	}
+	return obj
+}
+func (self *ActionNxSample3) GetActionName() string {
+	return "nx_sample3"
+}
+
+func (self *ActionNxSample3) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Probability":    self.Probability,
+		"CollectorSetId": self.CollectorSetId,
+		"ObsDomainId":    self.ObsDomainId,
+		"ObsPointId":     self.ObsPointId,
+		"SamplingPort":   self.SamplingPort,
+		"Direction":      self.Direction,
+	}
+}
+
+func (self *ActionNxSample3) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSetMplsLabel struct {
+	*ActionNicira
+	Value uint32
+}
+
+type IActionNxSetMplsLabel interface {
+	IActionNicira
+	GetValue() uint32
+}
+
+func (self *ActionNxSetMplsLabel) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *ActionNxSetMplsLabel) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *ActionNxSetMplsLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSetMplsLabel(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSetMplsLabel, error) {
+	_actionnxsetmplslabel := &ActionNxSetMplsLabel{ActionNicira: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionNxSetMplsLabel packet too short: %d < 4", decoder.Length())
+	}
+	_actionnxsetmplslabel.Value = uint32(decoder.ReadUint32())
+	return _actionnxsetmplslabel, nil
+}
+
+func NewActionNxSetMplsLabel() *ActionNxSetMplsLabel {
+	obj := &ActionNxSetMplsLabel{
+		ActionNicira: NewActionNicira(30),
+	}
+	return obj
+}
+func (self *ActionNxSetMplsLabel) GetActionName() string {
+	return "nx_set_mpls_label"
+}
+
+func (self *ActionNxSetMplsLabel) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxSetMplsLabel) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSetMplsTc struct {
+	*ActionNicira
+	Value uint8
+}
+
+type IActionNxSetMplsTc interface {
+	IActionNicira
+	GetValue() uint8
+}
+
+func (self *ActionNxSetMplsTc) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *ActionNxSetMplsTc) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *ActionNxSetMplsTc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSetMplsTc(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSetMplsTc, error) {
+	_actionnxsetmplstc := &ActionNxSetMplsTc{ActionNicira: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("ActionNxSetMplsTc packet too short: %d < 1", decoder.Length())
+	}
+	_actionnxsetmplstc.Value = uint8(decoder.ReadByte())
+	return _actionnxsetmplstc, nil
+}
+
+func NewActionNxSetMplsTc() *ActionNxSetMplsTc {
+	obj := &ActionNxSetMplsTc{
+		ActionNicira: NewActionNicira(31),
+	}
+	return obj
+}
+func (self *ActionNxSetMplsTc) GetActionName() string {
+	return "nx_set_mpls_tc"
+}
+
+func (self *ActionNxSetMplsTc) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxSetMplsTc) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSetMplsTtl struct {
+	*ActionNicira
+	Value uint8
+}
+
+type IActionNxSetMplsTtl interface {
+	IActionNicira
+	GetValue() uint8
+}
+
+func (self *ActionNxSetMplsTtl) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *ActionNxSetMplsTtl) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *ActionNxSetMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSetMplsTtl(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSetMplsTtl, error) {
+	_actionnxsetmplsttl := &ActionNxSetMplsTtl{ActionNicira: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("ActionNxSetMplsTtl packet too short: %d < 1", decoder.Length())
+	}
+	_actionnxsetmplsttl.Value = uint8(decoder.ReadByte())
+	return _actionnxsetmplsttl, nil
+}
+
+func NewActionNxSetMplsTtl() *ActionNxSetMplsTtl {
+	obj := &ActionNxSetMplsTtl{
+		ActionNicira: NewActionNicira(25),
+	}
+	return obj
+}
+func (self *ActionNxSetMplsTtl) GetActionName() string {
+	return "nx_set_mpls_ttl"
+}
+
+func (self *ActionNxSetMplsTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxSetMplsTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSetQueue struct {
+	*ActionNicira
+	Value uint32
+}
+
+type IActionNxSetQueue interface {
+	IActionNicira
+	GetValue() uint32
+}
+
+func (self *ActionNxSetQueue) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *ActionNxSetQueue) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *ActionNxSetQueue) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSetQueue(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSetQueue, error) {
+	_actionnxsetqueue := &ActionNxSetQueue{ActionNicira: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionNxSetQueue packet too short: %d < 4", decoder.Length())
+	}
+	_actionnxsetqueue.Value = uint32(decoder.ReadUint32())
+	return _actionnxsetqueue, nil
+}
+
+func NewActionNxSetQueue() *ActionNxSetQueue {
+	obj := &ActionNxSetQueue{
+		ActionNicira: NewActionNicira(4),
+	}
+	return obj
+}
+func (self *ActionNxSetQueue) GetActionName() string {
+	return "nx_set_queue"
+}
+
+func (self *ActionNxSetQueue) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxSetQueue) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSetTunnel struct {
+	*ActionNicira
+	Value uint32
+}
+
+type IActionNxSetTunnel interface {
+	IActionNicira
+	GetValue() uint32
+}
+
+func (self *ActionNxSetTunnel) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *ActionNxSetTunnel) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *ActionNxSetTunnel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSetTunnel(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSetTunnel, error) {
+	_actionnxsettunnel := &ActionNxSetTunnel{ActionNicira: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionNxSetTunnel packet too short: %d < 4", decoder.Length())
+	}
+	_actionnxsettunnel.Value = uint32(decoder.ReadUint32())
+	return _actionnxsettunnel, nil
+}
+
+func NewActionNxSetTunnel() *ActionNxSetTunnel {
+	obj := &ActionNxSetTunnel{
+		ActionNicira: NewActionNicira(2),
+	}
+	return obj
+}
+func (self *ActionNxSetTunnel) GetActionName() string {
+	return "nx_set_tunnel"
+}
+
+func (self *ActionNxSetTunnel) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxSetTunnel) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxSetTunnel64 struct {
+	*ActionNicira
+	Value uint64
+}
+
+type IActionNxSetTunnel64 interface {
+	IActionNicira
+	GetValue() uint64
+}
+
+func (self *ActionNxSetTunnel64) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *ActionNxSetTunnel64) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *ActionNxSetTunnel64) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxSetTunnel64(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxSetTunnel64, error) {
+	_actionnxsettunnel64 := &ActionNxSetTunnel64{ActionNicira: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("ActionNxSetTunnel64 packet too short: %d < 8", decoder.Length())
+	}
+	_actionnxsettunnel64.Value = uint64(decoder.ReadUint64())
+	return _actionnxsettunnel64, nil
+}
+
+func NewActionNxSetTunnel64() *ActionNxSetTunnel64 {
+	obj := &ActionNxSetTunnel64{
+		ActionNicira: NewActionNicira(9),
+	}
+	return obj
+}
+func (self *ActionNxSetTunnel64) GetActionName() string {
+	return "nx_set_tunnel64"
+}
+
+func (self *ActionNxSetTunnel64) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Value": self.Value,
+	}
+}
+
+func (self *ActionNxSetTunnel64) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxStackPop struct {
+	*ActionNicira
+	Offset uint16
+	Field  goloxi.IOxmId
+	NBits  uint16
+}
+
+type IActionNxStackPop interface {
+	IActionNicira
+	GetOffset() uint16
+	GetField() goloxi.IOxmId
+	GetNBits() uint16
+}
+
+func (self *ActionNxStackPop) GetOffset() uint16 {
+	return self.Offset
+}
+
+func (self *ActionNxStackPop) SetOffset(v uint16) {
+	self.Offset = v
+}
+
+func (self *ActionNxStackPop) GetField() goloxi.IOxmId {
+	return self.Field
+}
+
+func (self *ActionNxStackPop) SetField(v goloxi.IOxmId) {
+	self.Field = v
+}
+
+func (self *ActionNxStackPop) GetNBits() uint16 {
+	return self.NBits
+}
+
+func (self *ActionNxStackPop) SetNBits(v uint16) {
+	self.NBits = v
+}
+
+func (self *ActionNxStackPop) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Offset))
+	self.Field.Serialize(encoder)
+	encoder.PutUint16(uint16(self.NBits))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxStackPop(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxStackPop, error) {
+	_actionnxstackpop := &ActionNxStackPop{ActionNicira: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("ActionNxStackPop packet too short: %d < 8", decoder.Length())
+	}
+	_actionnxstackpop.Offset = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxstackpop.Field = obj
+	}
+
+	_actionnxstackpop.NBits = uint16(decoder.ReadUint16())
+	return _actionnxstackpop, nil
+}
+
+func NewActionNxStackPop() *ActionNxStackPop {
+	obj := &ActionNxStackPop{
+		ActionNicira: NewActionNicira(28),
+	}
+	return obj
+}
+func (self *ActionNxStackPop) GetActionName() string {
+	return "nx_stack_pop"
+}
+
+func (self *ActionNxStackPop) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Offset": self.Offset,
+		"Field":  self.Field,
+		"NBits":  self.NBits,
+	}
+}
+
+func (self *ActionNxStackPop) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxStackPush struct {
+	*ActionNicira
+	Offset uint16
+	Field  goloxi.IOxmId
+	NBits  uint16
+}
+
+type IActionNxStackPush interface {
+	IActionNicira
+	GetOffset() uint16
+	GetField() goloxi.IOxmId
+	GetNBits() uint16
+}
+
+func (self *ActionNxStackPush) GetOffset() uint16 {
+	return self.Offset
+}
+
+func (self *ActionNxStackPush) SetOffset(v uint16) {
+	self.Offset = v
+}
+
+func (self *ActionNxStackPush) GetField() goloxi.IOxmId {
+	return self.Field
+}
+
+func (self *ActionNxStackPush) SetField(v goloxi.IOxmId) {
+	self.Field = v
+}
+
+func (self *ActionNxStackPush) GetNBits() uint16 {
+	return self.NBits
+}
+
+func (self *ActionNxStackPush) SetNBits(v uint16) {
+	self.NBits = v
+}
+
+func (self *ActionNxStackPush) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Offset))
+	self.Field.Serialize(encoder)
+	encoder.PutUint16(uint16(self.NBits))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxStackPush(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxStackPush, error) {
+	_actionnxstackpush := &ActionNxStackPush{ActionNicira: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("ActionNxStackPush packet too short: %d < 8", decoder.Length())
+	}
+	_actionnxstackpush.Offset = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionnxstackpush.Field = obj
+	}
+
+	_actionnxstackpush.NBits = uint16(decoder.ReadUint16())
+	return _actionnxstackpush, nil
+}
+
+func NewActionNxStackPush() *ActionNxStackPush {
+	obj := &ActionNxStackPush{
+		ActionNicira: NewActionNicira(27),
+	}
+	return obj
+}
+func (self *ActionNxStackPush) GetActionName() string {
+	return "nx_stack_push"
+}
+
+func (self *ActionNxStackPush) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Offset": self.Offset,
+		"Field":  self.Field,
+		"NBits":  self.NBits,
+	}
+}
+
+func (self *ActionNxStackPush) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionNxWriteMetadata struct {
+	*ActionNicira
+	Metadata uint64
+	Mask     uint64
+}
+
+type IActionNxWriteMetadata interface {
+	IActionNicira
+	GetMetadata() uint64
+	GetMask() uint64
+}
+
+func (self *ActionNxWriteMetadata) GetMetadata() uint64 {
+	return self.Metadata
+}
+
+func (self *ActionNxWriteMetadata) SetMetadata(v uint64) {
+	self.Metadata = v
+}
+
+func (self *ActionNxWriteMetadata) GetMask() uint64 {
+	return self.Mask
+}
+
+func (self *ActionNxWriteMetadata) SetMask(v uint64) {
+	self.Mask = v
+}
+
+func (self *ActionNxWriteMetadata) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+	encoder.PutUint64(uint64(self.Metadata))
+	encoder.PutUint64(uint64(self.Mask))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxWriteMetadata(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionNxWriteMetadata, error) {
+	_actionnxwritemetadata := &ActionNxWriteMetadata{ActionNicira: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("ActionNxWriteMetadata packet too short: %d < 22", decoder.Length())
+	}
+	decoder.Skip(6)
+	_actionnxwritemetadata.Metadata = uint64(decoder.ReadUint64())
+	_actionnxwritemetadata.Mask = uint64(decoder.ReadUint64())
+	return _actionnxwritemetadata, nil
+}
+
+func NewActionNxWriteMetadata() *ActionNxWriteMetadata {
+	obj := &ActionNxWriteMetadata{
+		ActionNicira: NewActionNicira(22),
+	}
+	return obj
+}
+func (self *ActionNxWriteMetadata) GetActionName() string {
+	return "nx_write_metadata"
+}
+
+func (self *ActionNxWriteMetadata) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Metadata": self.Metadata,
+		"Mask":     self.Mask,
+	}
+}
+
+func (self *ActionNxWriteMetadata) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionOutput struct {
+	*Action
+	Port   Port
+	MaxLen uint16
+}
+
+type IActionOutput interface {
+	goloxi.IAction
+	GetPort() Port
+	GetMaxLen() uint16
+}
+
+func (self *ActionOutput) GetPort() Port {
+	return self.Port
+}
+
+func (self *ActionOutput) SetPort(v Port) {
+	self.Port = v
+}
+
+func (self *ActionOutput) GetMaxLen() uint16 {
+	return self.MaxLen
+}
+
+func (self *ActionOutput) SetMaxLen(v uint16) {
+	self.MaxLen = v
+}
+
+func (self *ActionOutput) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Port.Serialize(encoder)
+	encoder.PutUint16(uint16(self.MaxLen))
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionOutput(parent *Action, decoder *goloxi.Decoder) (*ActionOutput, error) {
+	_actionoutput := &ActionOutput{Action: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("ActionOutput packet too short: %d < 12", decoder.Length())
+	}
+	_actionoutput.Port.Decode(decoder)
+	_actionoutput.MaxLen = uint16(decoder.ReadUint16())
+	decoder.Skip(6)
+	return _actionoutput, nil
+}
+
+func NewActionOutput() *ActionOutput {
+	obj := &ActionOutput{
+		Action: NewAction(0),
+	}
+	return obj
+}
+func (self *ActionOutput) GetActionName() string {
+	return "output"
+}
+
+func (self *ActionOutput) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Port":   self.Port,
+		"MaxLen": self.MaxLen,
+	}
+}
+
+func (self *ActionOutput) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionPopMpls struct {
+	*Action
+	Ethertype uint16
+}
+
+type IActionPopMpls interface {
+	goloxi.IAction
+	GetEthertype() uint16
+}
+
+func (self *ActionPopMpls) GetEthertype() uint16 {
+	return self.Ethertype
+}
+
+func (self *ActionPopMpls) SetEthertype(v uint16) {
+	self.Ethertype = v
+}
+
+func (self *ActionPopMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Ethertype))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionPopMpls(parent *Action, decoder *goloxi.Decoder) (*ActionPopMpls, error) {
+	_actionpopmpls := &ActionPopMpls{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionPopMpls packet too short: %d < 4", decoder.Length())
+	}
+	_actionpopmpls.Ethertype = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	return _actionpopmpls, nil
+}
+
+func NewActionPopMpls() *ActionPopMpls {
+	obj := &ActionPopMpls{
+		Action: NewAction(20),
+	}
+	return obj
+}
+func (self *ActionPopMpls) GetActionName() string {
+	return "pop_mpls"
+}
+
+func (self *ActionPopMpls) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Ethertype": self.Ethertype,
+	}
+}
+
+func (self *ActionPopMpls) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionPopPbb struct {
+	*Action
+}
+
+type IActionPopPbb interface {
+	goloxi.IAction
+}
+
+func (self *ActionPopPbb) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionPopPbb(parent *Action, decoder *goloxi.Decoder) (*ActionPopPbb, error) {
+	_actionpoppbb := &ActionPopPbb{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionPopPbb packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _actionpoppbb, nil
+}
+
+func NewActionPopPbb() *ActionPopPbb {
+	obj := &ActionPopPbb{
+		Action: NewAction(27),
+	}
+	return obj
+}
+func (self *ActionPopPbb) GetActionName() string {
+	return "pop_pbb"
+}
+
+func (self *ActionPopPbb) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionPopPbb) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionPopVlan struct {
+	*Action
+}
+
+type IActionPopVlan interface {
+	goloxi.IAction
+}
+
+func (self *ActionPopVlan) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionPopVlan(parent *Action, decoder *goloxi.Decoder) (*ActionPopVlan, error) {
+	_actionpopvlan := &ActionPopVlan{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionPopVlan packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _actionpopvlan, nil
+}
+
+func NewActionPopVlan() *ActionPopVlan {
+	obj := &ActionPopVlan{
+		Action: NewAction(18),
+	}
+	return obj
+}
+func (self *ActionPopVlan) GetActionName() string {
+	return "pop_vlan"
+}
+
+func (self *ActionPopVlan) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{}
+}
+
+func (self *ActionPopVlan) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionPushMpls struct {
+	*Action
+	Ethertype uint16
+}
+
+type IActionPushMpls interface {
+	goloxi.IAction
+	GetEthertype() uint16
+}
+
+func (self *ActionPushMpls) GetEthertype() uint16 {
+	return self.Ethertype
+}
+
+func (self *ActionPushMpls) SetEthertype(v uint16) {
+	self.Ethertype = v
+}
+
+func (self *ActionPushMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Ethertype))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionPushMpls(parent *Action, decoder *goloxi.Decoder) (*ActionPushMpls, error) {
+	_actionpushmpls := &ActionPushMpls{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionPushMpls packet too short: %d < 4", decoder.Length())
+	}
+	_actionpushmpls.Ethertype = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	return _actionpushmpls, nil
+}
+
+func NewActionPushMpls() *ActionPushMpls {
+	obj := &ActionPushMpls{
+		Action: NewAction(19),
+	}
+	return obj
+}
+func (self *ActionPushMpls) GetActionName() string {
+	return "push_mpls"
+}
+
+func (self *ActionPushMpls) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Ethertype": self.Ethertype,
+	}
+}
+
+func (self *ActionPushMpls) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionPushPbb struct {
+	*Action
+	Ethertype uint16
+}
+
+type IActionPushPbb interface {
+	goloxi.IAction
+	GetEthertype() uint16
+}
+
+func (self *ActionPushPbb) GetEthertype() uint16 {
+	return self.Ethertype
+}
+
+func (self *ActionPushPbb) SetEthertype(v uint16) {
+	self.Ethertype = v
+}
+
+func (self *ActionPushPbb) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Ethertype))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionPushPbb(parent *Action, decoder *goloxi.Decoder) (*ActionPushPbb, error) {
+	_actionpushpbb := &ActionPushPbb{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionPushPbb packet too short: %d < 4", decoder.Length())
+	}
+	_actionpushpbb.Ethertype = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	return _actionpushpbb, nil
+}
+
+func NewActionPushPbb() *ActionPushPbb {
+	obj := &ActionPushPbb{
+		Action: NewAction(26),
+	}
+	return obj
+}
+func (self *ActionPushPbb) GetActionName() string {
+	return "push_pbb"
+}
+
+func (self *ActionPushPbb) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Ethertype": self.Ethertype,
+	}
+}
+
+func (self *ActionPushPbb) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionPushVlan struct {
+	*Action
+	Ethertype uint16
+}
+
+type IActionPushVlan interface {
+	goloxi.IAction
+	GetEthertype() uint16
+}
+
+func (self *ActionPushVlan) GetEthertype() uint16 {
+	return self.Ethertype
+}
+
+func (self *ActionPushVlan) SetEthertype(v uint16) {
+	self.Ethertype = v
+}
+
+func (self *ActionPushVlan) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Ethertype))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionPushVlan(parent *Action, decoder *goloxi.Decoder) (*ActionPushVlan, error) {
+	_actionpushvlan := &ActionPushVlan{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionPushVlan packet too short: %d < 4", decoder.Length())
+	}
+	_actionpushvlan.Ethertype = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	return _actionpushvlan, nil
+}
+
+func NewActionPushVlan() *ActionPushVlan {
+	obj := &ActionPushVlan{
+		Action: NewAction(17),
+	}
+	return obj
+}
+func (self *ActionPushVlan) GetActionName() string {
+	return "push_vlan"
+}
+
+func (self *ActionPushVlan) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Ethertype": self.Ethertype,
+	}
+}
+
+func (self *ActionPushVlan) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionResubmit struct {
+	*ActionNicira
+	InPort uint16
+	Table  uint8
+}
+
+type IActionResubmit interface {
+	IActionNicira
+	GetInPort() uint16
+	GetTable() uint8
+}
+
+func (self *ActionResubmit) GetInPort() uint16 {
+	return self.InPort
+}
+
+func (self *ActionResubmit) SetInPort(v uint16) {
+	self.InPort = v
+}
+
+func (self *ActionResubmit) GetTable() uint8 {
+	return self.Table
+}
+
+func (self *ActionResubmit) SetTable(v uint8) {
+	self.Table = v
+}
+
+func (self *ActionResubmit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.InPort))
+	encoder.PutUint8(uint8(self.Table))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionResubmit(parent *ActionNicira, decoder *goloxi.Decoder) (*ActionResubmit, error) {
+	_actionresubmit := &ActionResubmit{ActionNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionResubmit packet too short: %d < 6", decoder.Length())
+	}
+	_actionresubmit.InPort = uint16(decoder.ReadUint16())
+	_actionresubmit.Table = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _actionresubmit, nil
+}
+
+func NewActionResubmit() *ActionResubmit {
+	obj := &ActionResubmit{
+		ActionNicira: NewActionNicira(14),
+	}
+	return obj
+}
+func (self *ActionResubmit) GetActionName() string {
+	return "resubmit"
+}
+
+func (self *ActionResubmit) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"InPort": self.InPort,
+		"Table":  self.Table,
+	}
+}
+
+func (self *ActionResubmit) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionSetField struct {
+	*Action
+	Field goloxi.IOxm
+}
+
+type IActionSetField interface {
+	goloxi.IAction
+	GetField() goloxi.IOxm
+}
+
+func (self *ActionSetField) GetField() goloxi.IOxm {
+	return self.Field
+}
+
+func (self *ActionSetField) SetField(v goloxi.IOxm) {
+	self.Field = v
+}
+
+func (self *ActionSetField) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Field.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionSetField(parent *Action, decoder *goloxi.Decoder) (*ActionSetField, error) {
+	_actionsetfield := &ActionSetField{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionSetField packet too short: %d < 4", decoder.Length())
+	}
+	if obj, err := DecodeOxm(decoder); err != nil {
+		return nil, err
+	} else {
+		_actionsetfield.Field = obj
+	}
+
+	return _actionsetfield, nil
+}
+
+func NewActionSetField() *ActionSetField {
+	obj := &ActionSetField{
+		Action: NewAction(25),
+	}
+	return obj
+}
+func (self *ActionSetField) GetActionName() string {
+	return "set_field"
+}
+
+func (self *ActionSetField) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"Field": self.Field,
+	}
+}
+
+func (self *ActionSetField) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionSetMplsTtl struct {
+	*Action
+	MplsTtl uint8
+}
+
+type IActionSetMplsTtl interface {
+	goloxi.IAction
+	GetMplsTtl() uint8
+}
+
+func (self *ActionSetMplsTtl) GetMplsTtl() uint8 {
+	return self.MplsTtl
+}
+
+func (self *ActionSetMplsTtl) SetMplsTtl(v uint8) {
+	self.MplsTtl = v
+}
+
+func (self *ActionSetMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.MplsTtl))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionSetMplsTtl(parent *Action, decoder *goloxi.Decoder) (*ActionSetMplsTtl, error) {
+	_actionsetmplsttl := &ActionSetMplsTtl{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionSetMplsTtl packet too short: %d < 4", decoder.Length())
+	}
+	_actionsetmplsttl.MplsTtl = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _actionsetmplsttl, nil
+}
+
+func NewActionSetMplsTtl() *ActionSetMplsTtl {
+	obj := &ActionSetMplsTtl{
+		Action: NewAction(15),
+	}
+	return obj
+}
+func (self *ActionSetMplsTtl) GetActionName() string {
+	return "set_mpls_ttl"
+}
+
+func (self *ActionSetMplsTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"MplsTtl": self.MplsTtl,
+	}
+}
+
+func (self *ActionSetMplsTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionSetNwTtl struct {
+	*Action
+	NwTtl uint8
+}
+
+type IActionSetNwTtl interface {
+	goloxi.IAction
+	GetNwTtl() uint8
+}
+
+func (self *ActionSetNwTtl) GetNwTtl() uint8 {
+	return self.NwTtl
+}
+
+func (self *ActionSetNwTtl) SetNwTtl(v uint8) {
+	self.NwTtl = v
+}
+
+func (self *ActionSetNwTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.NwTtl))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionSetNwTtl(parent *Action, decoder *goloxi.Decoder) (*ActionSetNwTtl, error) {
+	_actionsetnwttl := &ActionSetNwTtl{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionSetNwTtl packet too short: %d < 4", decoder.Length())
+	}
+	_actionsetnwttl.NwTtl = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _actionsetnwttl, nil
+}
+
+func NewActionSetNwTtl() *ActionSetNwTtl {
+	obj := &ActionSetNwTtl{
+		Action: NewAction(23),
+	}
+	return obj
+}
+func (self *ActionSetNwTtl) GetActionName() string {
+	return "set_nw_ttl"
+}
+
+func (self *ActionSetNwTtl) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"NwTtl": self.NwTtl,
+	}
+}
+
+func (self *ActionSetNwTtl) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
+
+type ActionSetQueue struct {
+	*Action
+	QueueId uint32
+}
+
+type IActionSetQueue interface {
+	goloxi.IAction
+	GetQueueId() uint32
+}
+
+func (self *ActionSetQueue) GetQueueId() uint32 {
+	return self.QueueId
+}
+
+func (self *ActionSetQueue) SetQueueId(v uint32) {
+	self.QueueId = v
+}
+
+func (self *ActionSetQueue) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Action.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.QueueId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionSetQueue(parent *Action, decoder *goloxi.Decoder) (*ActionSetQueue, error) {
+	_actionsetqueue := &ActionSetQueue{Action: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionSetQueue packet too short: %d < 4", decoder.Length())
+	}
+	_actionsetqueue.QueueId = uint32(decoder.ReadUint32())
+	return _actionsetqueue, nil
+}
+
+func NewActionSetQueue() *ActionSetQueue {
+	obj := &ActionSetQueue{
+		Action: NewAction(21),
+	}
+	return obj
+}
+func (self *ActionSetQueue) GetActionName() string {
+	return "set_queue"
+}
+
+func (self *ActionSetQueue) GetActionFields() map[string]interface{} {
+	return map[string]interface{}{
+		"QueueId": self.QueueId,
+	}
+}
+
+func (self *ActionSetQueue) MarshalJSON() ([]byte, error) {
+	jsonValue, err := json.Marshal(self.GetActionFields())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Arguments\":%s}", self.GetActionName(), string(jsonValue))), nil
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/action_id.go b/vendor/github.com/skydive-project/goloxi/of13/action_id.go
new file mode 100644
index 0000000..68cb38a
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/action_id.go
@@ -0,0 +1,2507 @@
+/*
+ * Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+ * Copyright (c) 2011, 2012 Open Networking Foundation
+ * Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler.
+ * Copyright 2018, Red Hat, Inc.
+ */
+// Automatically generated by LOXI from template module.go
+// Do not modify
+
+package of13
+
+import (
+	"encoding/binary"
+	"fmt"
+
+	"github.com/skydive-project/goloxi"
+)
+
+type ActionId struct {
+	Type uint16
+	Len  uint16
+}
+
+type IActionId interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLen() uint16
+}
+
+func (self *ActionId) GetType() uint16 {
+	return self.Type
+}
+
+func (self *ActionId) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *ActionId) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *ActionId) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *ActionId) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Len))
+
+	return nil
+}
+
+func DecodeActionId(decoder *goloxi.Decoder) (IActionId, error) {
+	_actionid := &ActionId{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionId packet too short: %d < 4", decoder.Length())
+	}
+	_actionid.Type = uint16(decoder.ReadUint16())
+	_actionid.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_actionid.Len), 2+2)
+
+	switch _actionid.Type {
+	case 0:
+		return DecodeActionIdOutput(_actionid, decoder)
+	case 11:
+		return DecodeActionIdCopyTtlOut(_actionid, decoder)
+	case 12:
+		return DecodeActionIdCopyTtlIn(_actionid, decoder)
+	case 15:
+		return DecodeActionIdSetMplsTtl(_actionid, decoder)
+	case 16:
+		return DecodeActionIdDecMplsTtl(_actionid, decoder)
+	case 17:
+		return DecodeActionIdPushVlan(_actionid, decoder)
+	case 18:
+		return DecodeActionIdPopVlan(_actionid, decoder)
+	case 19:
+		return DecodeActionIdPushMpls(_actionid, decoder)
+	case 20:
+		return DecodeActionIdPopMpls(_actionid, decoder)
+	case 21:
+		return DecodeActionIdSetQueue(_actionid, decoder)
+	case 22:
+		return DecodeActionIdGroup(_actionid, decoder)
+	case 23:
+		return DecodeActionIdSetNwTtl(_actionid, decoder)
+	case 24:
+		return DecodeActionIdDecNwTtl(_actionid, decoder)
+	case 25:
+		return DecodeActionIdSetField(_actionid, decoder)
+	case 26:
+		return DecodeActionIdPushPbb(_actionid, decoder)
+	case 27:
+		return DecodeActionIdPopPbb(_actionid, decoder)
+	case 65535:
+		return DecodeActionIdExperimenter(_actionid, decoder)
+	default:
+		return _actionid, nil
+	}
+}
+
+func NewActionId(_type uint16) *ActionId {
+	obj := &ActionId{}
+	obj.Type = _type
+	return obj
+}
+
+type ActionIdExperimenter struct {
+	*ActionId
+	Experimenter uint32
+}
+
+type IActionIdExperimenter interface {
+	IActionId
+	GetExperimenter() uint32
+}
+
+func (self *ActionIdExperimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *ActionIdExperimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *ActionIdExperimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Experimenter))
+
+	return nil
+}
+
+func DecodeActionIdExperimenter(parent *ActionId, decoder *goloxi.Decoder) (IActionIdExperimenter, error) {
+	_actionidexperimenter := &ActionIdExperimenter{ActionId: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionIdExperimenter packet too short: %d < 4", decoder.Length())
+	}
+	_actionidexperimenter.Experimenter = uint32(decoder.ReadUint32())
+
+	switch _actionidexperimenter.Experimenter {
+	case 8992:
+		return DecodeActionIdNicira(_actionidexperimenter, decoder)
+	case 6035143:
+		return DecodeActionIdBsn(_actionidexperimenter, decoder)
+	default:
+		return _actionidexperimenter, nil
+	}
+}
+
+func NewActionIdExperimenter(_experimenter uint32) *ActionIdExperimenter {
+	obj := &ActionIdExperimenter{
+		ActionId: NewActionId(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type ActionIdBsn struct {
+	*ActionIdExperimenter
+	Subtype uint32
+}
+
+type IActionIdBsn interface {
+	IActionIdExperimenter
+	GetSubtype() uint32
+}
+
+func (self *ActionIdBsn) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *ActionIdBsn) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *ActionIdBsn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdExperimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Subtype))
+
+	return nil
+}
+
+func DecodeActionIdBsn(parent *ActionIdExperimenter, decoder *goloxi.Decoder) (IActionIdBsn, error) {
+	_actionidbsn := &ActionIdBsn{ActionIdExperimenter: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionIdBsn packet too short: %d < 4", decoder.Length())
+	}
+	_actionidbsn.Subtype = uint32(decoder.ReadUint32())
+
+	switch _actionidbsn.Subtype {
+	case 1:
+		return DecodeActionIdBsnMirror(_actionidbsn, decoder)
+	case 2:
+		return DecodeActionIdBsnSetTunnelDst(_actionidbsn, decoder)
+	case 4:
+		return DecodeActionIdBsnChecksum(_actionidbsn, decoder)
+	case 5:
+		return DecodeActionIdBsnGentable(_actionidbsn, decoder)
+	default:
+		return _actionidbsn, nil
+	}
+}
+
+func NewActionIdBsn(_subtype uint32) *ActionIdBsn {
+	obj := &ActionIdBsn{
+		ActionIdExperimenter: NewActionIdExperimenter(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type ActionIdBsnChecksum struct {
+	*ActionIdBsn
+}
+
+type IActionIdBsnChecksum interface {
+	IActionIdBsn
+}
+
+func (self *ActionIdBsnChecksum) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdBsnChecksum(parent *ActionIdBsn, decoder *goloxi.Decoder) (*ActionIdBsnChecksum, error) {
+	_actionidbsnchecksum := &ActionIdBsnChecksum{ActionIdBsn: parent}
+	return _actionidbsnchecksum, nil
+}
+
+func NewActionIdBsnChecksum() *ActionIdBsnChecksum {
+	obj := &ActionIdBsnChecksum{
+		ActionIdBsn: NewActionIdBsn(4),
+	}
+	return obj
+}
+
+type ActionIdBsnGentable struct {
+	*ActionIdBsn
+}
+
+type IActionIdBsnGentable interface {
+	IActionIdBsn
+}
+
+func (self *ActionIdBsnGentable) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdBsnGentable(parent *ActionIdBsn, decoder *goloxi.Decoder) (*ActionIdBsnGentable, error) {
+	_actionidbsngentable := &ActionIdBsnGentable{ActionIdBsn: parent}
+	return _actionidbsngentable, nil
+}
+
+func NewActionIdBsnGentable() *ActionIdBsnGentable {
+	obj := &ActionIdBsnGentable{
+		ActionIdBsn: NewActionIdBsn(5),
+	}
+	return obj
+}
+
+type ActionIdBsnMirror struct {
+	*ActionIdBsn
+}
+
+type IActionIdBsnMirror interface {
+	IActionIdBsn
+}
+
+func (self *ActionIdBsnMirror) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdBsnMirror(parent *ActionIdBsn, decoder *goloxi.Decoder) (*ActionIdBsnMirror, error) {
+	_actionidbsnmirror := &ActionIdBsnMirror{ActionIdBsn: parent}
+	return _actionidbsnmirror, nil
+}
+
+func NewActionIdBsnMirror() *ActionIdBsnMirror {
+	obj := &ActionIdBsnMirror{
+		ActionIdBsn: NewActionIdBsn(1),
+	}
+	return obj
+}
+
+type ActionIdBsnSetTunnelDst struct {
+	*ActionIdBsn
+}
+
+type IActionIdBsnSetTunnelDst interface {
+	IActionIdBsn
+}
+
+func (self *ActionIdBsnSetTunnelDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdBsnSetTunnelDst(parent *ActionIdBsn, decoder *goloxi.Decoder) (*ActionIdBsnSetTunnelDst, error) {
+	_actionidbsnsettunneldst := &ActionIdBsnSetTunnelDst{ActionIdBsn: parent}
+	return _actionidbsnsettunneldst, nil
+}
+
+func NewActionIdBsnSetTunnelDst() *ActionIdBsnSetTunnelDst {
+	obj := &ActionIdBsnSetTunnelDst{
+		ActionIdBsn: NewActionIdBsn(2),
+	}
+	return obj
+}
+
+type ActionIdCopyTtlIn struct {
+	*ActionId
+}
+
+type IActionIdCopyTtlIn interface {
+	IActionId
+}
+
+func (self *ActionIdCopyTtlIn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdCopyTtlIn(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdCopyTtlIn, error) {
+	_actionidcopyttlin := &ActionIdCopyTtlIn{ActionId: parent}
+	return _actionidcopyttlin, nil
+}
+
+func NewActionIdCopyTtlIn() *ActionIdCopyTtlIn {
+	obj := &ActionIdCopyTtlIn{
+		ActionId: NewActionId(12),
+	}
+	return obj
+}
+
+type ActionIdCopyTtlOut struct {
+	*ActionId
+}
+
+type IActionIdCopyTtlOut interface {
+	IActionId
+}
+
+func (self *ActionIdCopyTtlOut) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdCopyTtlOut(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdCopyTtlOut, error) {
+	_actionidcopyttlout := &ActionIdCopyTtlOut{ActionId: parent}
+	return _actionidcopyttlout, nil
+}
+
+func NewActionIdCopyTtlOut() *ActionIdCopyTtlOut {
+	obj := &ActionIdCopyTtlOut{
+		ActionId: NewActionId(11),
+	}
+	return obj
+}
+
+type ActionIdDecMplsTtl struct {
+	*ActionId
+}
+
+type IActionIdDecMplsTtl interface {
+	IActionId
+}
+
+func (self *ActionIdDecMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdDecMplsTtl(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdDecMplsTtl, error) {
+	_actioniddecmplsttl := &ActionIdDecMplsTtl{ActionId: parent}
+	return _actioniddecmplsttl, nil
+}
+
+func NewActionIdDecMplsTtl() *ActionIdDecMplsTtl {
+	obj := &ActionIdDecMplsTtl{
+		ActionId: NewActionId(16),
+	}
+	return obj
+}
+
+type ActionIdDecNwTtl struct {
+	*ActionId
+}
+
+type IActionIdDecNwTtl interface {
+	IActionId
+}
+
+func (self *ActionIdDecNwTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdDecNwTtl(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdDecNwTtl, error) {
+	_actioniddecnwttl := &ActionIdDecNwTtl{ActionId: parent}
+	return _actioniddecnwttl, nil
+}
+
+func NewActionIdDecNwTtl() *ActionIdDecNwTtl {
+	obj := &ActionIdDecNwTtl{
+		ActionId: NewActionId(24),
+	}
+	return obj
+}
+
+type ActionIdGroup struct {
+	*ActionId
+}
+
+type IActionIdGroup interface {
+	IActionId
+}
+
+func (self *ActionIdGroup) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdGroup(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdGroup, error) {
+	_actionidgroup := &ActionIdGroup{ActionId: parent}
+	return _actionidgroup, nil
+}
+
+func NewActionIdGroup() *ActionIdGroup {
+	obj := &ActionIdGroup{
+		ActionId: NewActionId(22),
+	}
+	return obj
+}
+
+type ActionIdNicira struct {
+	*ActionIdExperimenter
+	Subtype uint16
+}
+
+type IActionIdNicira interface {
+	IActionIdExperimenter
+	GetSubtype() uint16
+}
+
+func (self *ActionIdNicira) GetSubtype() uint16 {
+	return self.Subtype
+}
+
+func (self *ActionIdNicira) SetSubtype(v uint16) {
+	self.Subtype = v
+}
+
+func (self *ActionIdNicira) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdExperimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Subtype))
+
+	return nil
+}
+
+func DecodeActionIdNicira(parent *ActionIdExperimenter, decoder *goloxi.Decoder) (IActionIdNicira, error) {
+	_actionidnicira := &ActionIdNicira{ActionIdExperimenter: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionIdNicira packet too short: %d < 2", decoder.Length())
+	}
+	_actionidnicira.Subtype = uint16(decoder.ReadUint16())
+
+	switch _actionidnicira.Subtype {
+	case 1:
+		return DecodeActionIdNxResubmit(_actionidnicira, decoder)
+	case 2:
+		return DecodeActionIdNxSetTunnel(_actionidnicira, decoder)
+	case 4:
+		return DecodeActionIdNxSetQueue(_actionidnicira, decoder)
+	case 5:
+		return DecodeActionIdNxPopQueue(_actionidnicira, decoder)
+	case 6:
+		return DecodeActionIdNxRegMove(_actionidnicira, decoder)
+	case 7:
+		return DecodeActionIdNxRegLoad(_actionidnicira, decoder)
+	case 8:
+		return DecodeActionIdNxNote(_actionidnicira, decoder)
+	case 9:
+		return DecodeActionIdNxSetTunnel64(_actionidnicira, decoder)
+	case 10:
+		return DecodeActionIdNxMultipath(_actionidnicira, decoder)
+	case 12:
+		return DecodeActionIdNxBundle(_actionidnicira, decoder)
+	case 13:
+		return DecodeActionIdNxBundleLoadInPort(_actionidnicira, decoder)
+	case 14:
+		return DecodeActionIdResubmit(_actionidnicira, decoder)
+	case 15:
+		return DecodeActionIdNxOutputReg(_actionidnicira, decoder)
+	case 16:
+		return DecodeActionIdNxLearn(_actionidnicira, decoder)
+	case 17:
+		return DecodeActionIdNxExit(_actionidnicira, decoder)
+	case 18:
+		return DecodeActionIdNiciraDecTtl(_actionidnicira, decoder)
+	case 19:
+		return DecodeActionIdNxFinTimeout(_actionidnicira, decoder)
+	case 20:
+		return DecodeActionIdNxController(_actionidnicira, decoder)
+	case 21:
+		return DecodeActionIdNxDecTtlCntIds(_actionidnicira, decoder)
+	case 22:
+		return DecodeActionIdNxWriteMetadata(_actionidnicira, decoder)
+	case 23:
+		return DecodeActionIdNxPushMpls(_actionidnicira, decoder)
+	case 24:
+		return DecodeActionIdNxPopMpls(_actionidnicira, decoder)
+	case 25:
+		return DecodeActionIdNxSetMplsTtl(_actionidnicira, decoder)
+	case 26:
+		return DecodeActionIdNxDecMplsTtl(_actionidnicira, decoder)
+	case 27:
+		return DecodeActionIdNxStackPush(_actionidnicira, decoder)
+	case 28:
+		return DecodeActionIdNxStackPop(_actionidnicira, decoder)
+	case 29:
+		return DecodeActionIdNxSample(_actionidnicira, decoder)
+	case 30:
+		return DecodeActionIdNxSetMplsLabel(_actionidnicira, decoder)
+	case 31:
+		return DecodeActionIdNxSetMplsTc(_actionidnicira, decoder)
+	case 32:
+		return DecodeActionIdNxOutputReg2(_actionidnicira, decoder)
+	case 33:
+		return DecodeActionIdNxRegLoad2(_actionidnicira, decoder)
+	case 34:
+		return DecodeActionIdNxConjunction(_actionidnicira, decoder)
+	case 35:
+		return DecodeActionIdNxCt(_actionidnicira, decoder)
+	case 36:
+		return DecodeActionIdNxNat(_actionidnicira, decoder)
+	case 37:
+		return DecodeActionIdNxController2(_actionidnicira, decoder)
+	case 38:
+		return DecodeActionIdNxSample2(_actionidnicira, decoder)
+	case 39:
+		return DecodeActionIdNxOutputTrunc(_actionidnicira, decoder)
+	case 40:
+		return DecodeActionIdNxGroup(_actionidnicira, decoder)
+	case 41:
+		return DecodeActionIdNxSample3(_actionidnicira, decoder)
+	case 42:
+		return DecodeActionIdNxClone(_actionidnicira, decoder)
+	case 43:
+		return DecodeActionIdNxCtClear(_actionidnicira, decoder)
+	case 44:
+		return DecodeActionIdNxResubmitTableCt(_actionidnicira, decoder)
+	case 45:
+		return DecodeActionIdNxLearn2(_actionidnicira, decoder)
+	case 46:
+		return DecodeActionIdNxEncap(_actionidnicira, decoder)
+	case 47:
+		return DecodeActionIdNxDecap(_actionidnicira, decoder)
+	case 48:
+		return DecodeActionIdNxDecNshTtl(_actionidnicira, decoder)
+	case 254:
+		return DecodeActionIdNxDebugSlow(_actionidnicira, decoder)
+	case 255:
+		return DecodeActionIdNxDebugRecirc(_actionidnicira, decoder)
+	default:
+		return _actionidnicira, nil
+	}
+}
+
+func NewActionIdNicira(_subtype uint16) *ActionIdNicira {
+	obj := &ActionIdNicira{
+		ActionIdExperimenter: NewActionIdExperimenter(8992),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type ActionIdNiciraDecTtl struct {
+	*ActionIdNicira
+}
+
+type IActionIdNiciraDecTtl interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNiciraDecTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNiciraDecTtl(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNiciraDecTtl, error) {
+	_actionidniciradecttl := &ActionIdNiciraDecTtl{ActionIdNicira: parent}
+	return _actionidniciradecttl, nil
+}
+
+func NewActionIdNiciraDecTtl() *ActionIdNiciraDecTtl {
+	obj := &ActionIdNiciraDecTtl{
+		ActionIdNicira: NewActionIdNicira(18),
+	}
+	return obj
+}
+
+type ActionIdNxBundle struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxBundle interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxBundle) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxBundle(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxBundle, error) {
+	_actionidnxbundle := &ActionIdNxBundle{ActionIdNicira: parent}
+	return _actionidnxbundle, nil
+}
+
+func NewActionIdNxBundle() *ActionIdNxBundle {
+	obj := &ActionIdNxBundle{
+		ActionIdNicira: NewActionIdNicira(12),
+	}
+	return obj
+}
+
+type ActionIdNxBundleLoad struct {
+	*ActionIdNicira
+	SlaveType ActionNxBundleSlaveType
+}
+
+type IActionIdNxBundleLoad interface {
+	IActionIdNicira
+	GetSlaveType() ActionNxBundleSlaveType
+}
+
+func (self *ActionIdNxBundleLoad) GetSlaveType() ActionNxBundleSlaveType {
+	return self.SlaveType
+}
+
+func (self *ActionIdNxBundleLoad) SetSlaveType(v ActionNxBundleSlaveType) {
+	self.SlaveType = v
+}
+
+func (self *ActionIdNxBundleLoad) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.SlaveType))
+
+	return nil
+}
+
+func DecodeActionIdNxBundleLoad(parent *ActionIdNicira, decoder *goloxi.Decoder) (IActionIdNxBundleLoad, error) {
+	_actionidnxbundleload := &ActionIdNxBundleLoad{ActionIdNicira: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionIdNxBundleLoad packet too short: %d < 4", decoder.Length())
+	}
+	_actionidnxbundleload.SlaveType = ActionNxBundleSlaveType(decoder.ReadUint32())
+	return _actionidnxbundleload, nil
+}
+
+func NewActionIdNxBundleLoad(_slave_type ActionNxBundleSlaveType) *ActionIdNxBundleLoad {
+	obj := &ActionIdNxBundleLoad{
+		ActionIdNicira: NewActionIdNicira(13),
+	}
+	obj.SlaveType = _slave_type
+	return obj
+}
+
+type ActionIdNxBundleLoadInPort struct {
+	*ActionIdNicira
+	SlaveType ActionNxBundleSlaveType
+	NSlaves   uint16
+}
+
+type IActionIdNxBundleLoadInPort interface {
+	IActionIdNicira
+	GetSlaveType() ActionNxBundleSlaveType
+	GetNSlaves() uint16
+}
+
+func (self *ActionIdNxBundleLoadInPort) GetSlaveType() ActionNxBundleSlaveType {
+	return self.SlaveType
+}
+
+func (self *ActionIdNxBundleLoadInPort) SetSlaveType(v ActionNxBundleSlaveType) {
+	self.SlaveType = v
+}
+
+func (self *ActionIdNxBundleLoadInPort) GetNSlaves() uint16 {
+	return self.NSlaves
+}
+
+func (self *ActionIdNxBundleLoadInPort) SetNSlaves(v uint16) {
+	self.NSlaves = v
+}
+
+func (self *ActionIdNxBundleLoadInPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.SlaveType))
+	encoder.PutUint16(uint16(self.NSlaves))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxBundleLoadInPort(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxBundleLoadInPort, error) {
+	_actionidnxbundleloadinport := &ActionIdNxBundleLoadInPort{ActionIdNicira: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ActionIdNxBundleLoadInPort packet too short: %d < 6", decoder.Length())
+	}
+	_actionidnxbundleloadinport.SlaveType = ActionNxBundleSlaveType(decoder.ReadUint32())
+	_actionidnxbundleloadinport.NSlaves = uint16(decoder.ReadUint16())
+	return _actionidnxbundleloadinport, nil
+}
+
+func NewActionIdNxBundleLoadInPort() *ActionIdNxBundleLoadInPort {
+	obj := &ActionIdNxBundleLoadInPort{
+		ActionIdNicira: NewActionIdNicira(13),
+	}
+	return obj
+}
+
+type ActionIdNxClone struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxClone interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxClone) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxClone(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxClone, error) {
+	_actionidnxclone := &ActionIdNxClone{ActionIdNicira: parent}
+	return _actionidnxclone, nil
+}
+
+func NewActionIdNxClone() *ActionIdNxClone {
+	obj := &ActionIdNxClone{
+		ActionIdNicira: NewActionIdNicira(42),
+	}
+	return obj
+}
+
+type ActionIdNxConjunction struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxConjunction interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxConjunction) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxConjunction(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxConjunction, error) {
+	_actionidnxconjunction := &ActionIdNxConjunction{ActionIdNicira: parent}
+	return _actionidnxconjunction, nil
+}
+
+func NewActionIdNxConjunction() *ActionIdNxConjunction {
+	obj := &ActionIdNxConjunction{
+		ActionIdNicira: NewActionIdNicira(34),
+	}
+	return obj
+}
+
+type ActionIdNxController struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxController interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxController) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxController(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxController, error) {
+	_actionidnxcontroller := &ActionIdNxController{ActionIdNicira: parent}
+	return _actionidnxcontroller, nil
+}
+
+func NewActionIdNxController() *ActionIdNxController {
+	obj := &ActionIdNxController{
+		ActionIdNicira: NewActionIdNicira(20),
+	}
+	return obj
+}
+
+type ActionIdNxController2 struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxController2 interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxController2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxController2(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxController2, error) {
+	_actionidnxcontroller2 := &ActionIdNxController2{ActionIdNicira: parent}
+	return _actionidnxcontroller2, nil
+}
+
+func NewActionIdNxController2() *ActionIdNxController2 {
+	obj := &ActionIdNxController2{
+		ActionIdNicira: NewActionIdNicira(37),
+	}
+	return obj
+}
+
+type ActionIdNxCt struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxCt interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxCt) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxCt(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxCt, error) {
+	_actionidnxct := &ActionIdNxCt{ActionIdNicira: parent}
+	return _actionidnxct, nil
+}
+
+func NewActionIdNxCt() *ActionIdNxCt {
+	obj := &ActionIdNxCt{
+		ActionIdNicira: NewActionIdNicira(35),
+	}
+	return obj
+}
+
+type ActionIdNxCtClear struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxCtClear interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxCtClear) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxCtClear(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxCtClear, error) {
+	_actionidnxctclear := &ActionIdNxCtClear{ActionIdNicira: parent}
+	return _actionidnxctclear, nil
+}
+
+func NewActionIdNxCtClear() *ActionIdNxCtClear {
+	obj := &ActionIdNxCtClear{
+		ActionIdNicira: NewActionIdNicira(43),
+	}
+	return obj
+}
+
+type ActionIdNxDebugRecirc struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxDebugRecirc interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxDebugRecirc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxDebugRecirc(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxDebugRecirc, error) {
+	_actionidnxdebugrecirc := &ActionIdNxDebugRecirc{ActionIdNicira: parent}
+	return _actionidnxdebugrecirc, nil
+}
+
+func NewActionIdNxDebugRecirc() *ActionIdNxDebugRecirc {
+	obj := &ActionIdNxDebugRecirc{
+		ActionIdNicira: NewActionIdNicira(255),
+	}
+	return obj
+}
+
+type ActionIdNxDebugSlow struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxDebugSlow interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxDebugSlow) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxDebugSlow(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxDebugSlow, error) {
+	_actionidnxdebugslow := &ActionIdNxDebugSlow{ActionIdNicira: parent}
+	return _actionidnxdebugslow, nil
+}
+
+func NewActionIdNxDebugSlow() *ActionIdNxDebugSlow {
+	obj := &ActionIdNxDebugSlow{
+		ActionIdNicira: NewActionIdNicira(254),
+	}
+	return obj
+}
+
+type ActionIdNxDecMplsTtl struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxDecMplsTtl interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxDecMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxDecMplsTtl(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxDecMplsTtl, error) {
+	_actionidnxdecmplsttl := &ActionIdNxDecMplsTtl{ActionIdNicira: parent}
+	return _actionidnxdecmplsttl, nil
+}
+
+func NewActionIdNxDecMplsTtl() *ActionIdNxDecMplsTtl {
+	obj := &ActionIdNxDecMplsTtl{
+		ActionIdNicira: NewActionIdNicira(26),
+	}
+	return obj
+}
+
+type ActionIdNxDecNshTtl struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxDecNshTtl interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxDecNshTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxDecNshTtl(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxDecNshTtl, error) {
+	_actionidnxdecnshttl := &ActionIdNxDecNshTtl{ActionIdNicira: parent}
+	return _actionidnxdecnshttl, nil
+}
+
+func NewActionIdNxDecNshTtl() *ActionIdNxDecNshTtl {
+	obj := &ActionIdNxDecNshTtl{
+		ActionIdNicira: NewActionIdNicira(48),
+	}
+	return obj
+}
+
+type ActionIdNxDecTtlCntIds struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxDecTtlCntIds interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxDecTtlCntIds) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxDecTtlCntIds(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxDecTtlCntIds, error) {
+	_actionidnxdecttlcntids := &ActionIdNxDecTtlCntIds{ActionIdNicira: parent}
+	return _actionidnxdecttlcntids, nil
+}
+
+func NewActionIdNxDecTtlCntIds() *ActionIdNxDecTtlCntIds {
+	obj := &ActionIdNxDecTtlCntIds{
+		ActionIdNicira: NewActionIdNicira(21),
+	}
+	return obj
+}
+
+type ActionIdNxDecap struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxDecap interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxDecap) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxDecap(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxDecap, error) {
+	_actionidnxdecap := &ActionIdNxDecap{ActionIdNicira: parent}
+	return _actionidnxdecap, nil
+}
+
+func NewActionIdNxDecap() *ActionIdNxDecap {
+	obj := &ActionIdNxDecap{
+		ActionIdNicira: NewActionIdNicira(47),
+	}
+	return obj
+}
+
+type ActionIdNxEncap struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxEncap interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxEncap) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxEncap(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxEncap, error) {
+	_actionidnxencap := &ActionIdNxEncap{ActionIdNicira: parent}
+	return _actionidnxencap, nil
+}
+
+func NewActionIdNxEncap() *ActionIdNxEncap {
+	obj := &ActionIdNxEncap{
+		ActionIdNicira: NewActionIdNicira(46),
+	}
+	return obj
+}
+
+type ActionIdNxExit struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxExit interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxExit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxExit(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxExit, error) {
+	_actionidnxexit := &ActionIdNxExit{ActionIdNicira: parent}
+	return _actionidnxexit, nil
+}
+
+func NewActionIdNxExit() *ActionIdNxExit {
+	obj := &ActionIdNxExit{
+		ActionIdNicira: NewActionIdNicira(17),
+	}
+	return obj
+}
+
+type ActionIdNxFinTimeout struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxFinTimeout interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxFinTimeout) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxFinTimeout(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxFinTimeout, error) {
+	_actionidnxfintimeout := &ActionIdNxFinTimeout{ActionIdNicira: parent}
+	return _actionidnxfintimeout, nil
+}
+
+func NewActionIdNxFinTimeout() *ActionIdNxFinTimeout {
+	obj := &ActionIdNxFinTimeout{
+		ActionIdNicira: NewActionIdNicira(19),
+	}
+	return obj
+}
+
+type ActionIdNxGroup struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxGroup interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxGroup) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxGroup(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxGroup, error) {
+	_actionidnxgroup := &ActionIdNxGroup{ActionIdNicira: parent}
+	return _actionidnxgroup, nil
+}
+
+func NewActionIdNxGroup() *ActionIdNxGroup {
+	obj := &ActionIdNxGroup{
+		ActionIdNicira: NewActionIdNicira(40),
+	}
+	return obj
+}
+
+type ActionIdNxLearn struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxLearn interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxLearn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxLearn(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxLearn, error) {
+	_actionidnxlearn := &ActionIdNxLearn{ActionIdNicira: parent}
+	return _actionidnxlearn, nil
+}
+
+func NewActionIdNxLearn() *ActionIdNxLearn {
+	obj := &ActionIdNxLearn{
+		ActionIdNicira: NewActionIdNicira(16),
+	}
+	return obj
+}
+
+type ActionIdNxLearn2 struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxLearn2 interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxLearn2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxLearn2(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxLearn2, error) {
+	_actionidnxlearn2 := &ActionIdNxLearn2{ActionIdNicira: parent}
+	return _actionidnxlearn2, nil
+}
+
+func NewActionIdNxLearn2() *ActionIdNxLearn2 {
+	obj := &ActionIdNxLearn2{
+		ActionIdNicira: NewActionIdNicira(45),
+	}
+	return obj
+}
+
+type ActionIdNxMultipath struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxMultipath interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxMultipath) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxMultipath(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxMultipath, error) {
+	_actionidnxmultipath := &ActionIdNxMultipath{ActionIdNicira: parent}
+	return _actionidnxmultipath, nil
+}
+
+func NewActionIdNxMultipath() *ActionIdNxMultipath {
+	obj := &ActionIdNxMultipath{
+		ActionIdNicira: NewActionIdNicira(10),
+	}
+	return obj
+}
+
+type ActionIdNxNat struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxNat interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxNat) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxNat(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxNat, error) {
+	_actionidnxnat := &ActionIdNxNat{ActionIdNicira: parent}
+	return _actionidnxnat, nil
+}
+
+func NewActionIdNxNat() *ActionIdNxNat {
+	obj := &ActionIdNxNat{
+		ActionIdNicira: NewActionIdNicira(36),
+	}
+	return obj
+}
+
+type ActionIdNxNote struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxNote interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxNote) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxNote(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxNote, error) {
+	_actionidnxnote := &ActionIdNxNote{ActionIdNicira: parent}
+	return _actionidnxnote, nil
+}
+
+func NewActionIdNxNote() *ActionIdNxNote {
+	obj := &ActionIdNxNote{
+		ActionIdNicira: NewActionIdNicira(8),
+	}
+	return obj
+}
+
+type ActionIdNxOutputReg struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxOutputReg interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxOutputReg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxOutputReg(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxOutputReg, error) {
+	_actionidnxoutputreg := &ActionIdNxOutputReg{ActionIdNicira: parent}
+	return _actionidnxoutputreg, nil
+}
+
+func NewActionIdNxOutputReg() *ActionIdNxOutputReg {
+	obj := &ActionIdNxOutputReg{
+		ActionIdNicira: NewActionIdNicira(15),
+	}
+	return obj
+}
+
+type ActionIdNxOutputReg2 struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxOutputReg2 interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxOutputReg2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxOutputReg2(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxOutputReg2, error) {
+	_actionidnxoutputreg2 := &ActionIdNxOutputReg2{ActionIdNicira: parent}
+	return _actionidnxoutputreg2, nil
+}
+
+func NewActionIdNxOutputReg2() *ActionIdNxOutputReg2 {
+	obj := &ActionIdNxOutputReg2{
+		ActionIdNicira: NewActionIdNicira(32),
+	}
+	return obj
+}
+
+type ActionIdNxOutputTrunc struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxOutputTrunc interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxOutputTrunc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxOutputTrunc(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxOutputTrunc, error) {
+	_actionidnxoutputtrunc := &ActionIdNxOutputTrunc{ActionIdNicira: parent}
+	return _actionidnxoutputtrunc, nil
+}
+
+func NewActionIdNxOutputTrunc() *ActionIdNxOutputTrunc {
+	obj := &ActionIdNxOutputTrunc{
+		ActionIdNicira: NewActionIdNicira(39),
+	}
+	return obj
+}
+
+type ActionIdNxPopMpls struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxPopMpls interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxPopMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxPopMpls(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxPopMpls, error) {
+	_actionidnxpopmpls := &ActionIdNxPopMpls{ActionIdNicira: parent}
+	return _actionidnxpopmpls, nil
+}
+
+func NewActionIdNxPopMpls() *ActionIdNxPopMpls {
+	obj := &ActionIdNxPopMpls{
+		ActionIdNicira: NewActionIdNicira(24),
+	}
+	return obj
+}
+
+type ActionIdNxPopQueue struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxPopQueue interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxPopQueue) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxPopQueue(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxPopQueue, error) {
+	_actionidnxpopqueue := &ActionIdNxPopQueue{ActionIdNicira: parent}
+	return _actionidnxpopqueue, nil
+}
+
+func NewActionIdNxPopQueue() *ActionIdNxPopQueue {
+	obj := &ActionIdNxPopQueue{
+		ActionIdNicira: NewActionIdNicira(5),
+	}
+	return obj
+}
+
+type ActionIdNxPushMpls struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxPushMpls interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxPushMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxPushMpls(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxPushMpls, error) {
+	_actionidnxpushmpls := &ActionIdNxPushMpls{ActionIdNicira: parent}
+	return _actionidnxpushmpls, nil
+}
+
+func NewActionIdNxPushMpls() *ActionIdNxPushMpls {
+	obj := &ActionIdNxPushMpls{
+		ActionIdNicira: NewActionIdNicira(23),
+	}
+	return obj
+}
+
+type ActionIdNxRegLoad struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxRegLoad interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxRegLoad) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxRegLoad(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxRegLoad, error) {
+	_actionidnxregload := &ActionIdNxRegLoad{ActionIdNicira: parent}
+	return _actionidnxregload, nil
+}
+
+func NewActionIdNxRegLoad() *ActionIdNxRegLoad {
+	obj := &ActionIdNxRegLoad{
+		ActionIdNicira: NewActionIdNicira(7),
+	}
+	return obj
+}
+
+type ActionIdNxRegLoad2 struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxRegLoad2 interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxRegLoad2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxRegLoad2(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxRegLoad2, error) {
+	_actionidnxregload2 := &ActionIdNxRegLoad2{ActionIdNicira: parent}
+	return _actionidnxregload2, nil
+}
+
+func NewActionIdNxRegLoad2() *ActionIdNxRegLoad2 {
+	obj := &ActionIdNxRegLoad2{
+		ActionIdNicira: NewActionIdNicira(33),
+	}
+	return obj
+}
+
+type ActionIdNxRegMove struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxRegMove interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxRegMove) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxRegMove(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxRegMove, error) {
+	_actionidnxregmove := &ActionIdNxRegMove{ActionIdNicira: parent}
+	return _actionidnxregmove, nil
+}
+
+func NewActionIdNxRegMove() *ActionIdNxRegMove {
+	obj := &ActionIdNxRegMove{
+		ActionIdNicira: NewActionIdNicira(6),
+	}
+	return obj
+}
+
+type ActionIdNxResubmit struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxResubmit interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxResubmit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxResubmit(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxResubmit, error) {
+	_actionidnxresubmit := &ActionIdNxResubmit{ActionIdNicira: parent}
+	return _actionidnxresubmit, nil
+}
+
+func NewActionIdNxResubmit() *ActionIdNxResubmit {
+	obj := &ActionIdNxResubmit{
+		ActionIdNicira: NewActionIdNicira(1),
+	}
+	return obj
+}
+
+type ActionIdNxResubmitTable struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxResubmitTable interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxResubmitTable) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxResubmitTable(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxResubmitTable, error) {
+	_actionidnxresubmittable := &ActionIdNxResubmitTable{ActionIdNicira: parent}
+	return _actionidnxresubmittable, nil
+}
+
+func NewActionIdNxResubmitTable() *ActionIdNxResubmitTable {
+	obj := &ActionIdNxResubmitTable{
+		ActionIdNicira: NewActionIdNicira(14),
+	}
+	return obj
+}
+
+type ActionIdNxResubmitTableCt struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxResubmitTableCt interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxResubmitTableCt) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxResubmitTableCt(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxResubmitTableCt, error) {
+	_actionidnxresubmittablect := &ActionIdNxResubmitTableCt{ActionIdNicira: parent}
+	return _actionidnxresubmittablect, nil
+}
+
+func NewActionIdNxResubmitTableCt() *ActionIdNxResubmitTableCt {
+	obj := &ActionIdNxResubmitTableCt{
+		ActionIdNicira: NewActionIdNicira(44),
+	}
+	return obj
+}
+
+type ActionIdNxSample struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSample interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSample) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSample(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSample, error) {
+	_actionidnxsample := &ActionIdNxSample{ActionIdNicira: parent}
+	return _actionidnxsample, nil
+}
+
+func NewActionIdNxSample() *ActionIdNxSample {
+	obj := &ActionIdNxSample{
+		ActionIdNicira: NewActionIdNicira(29),
+	}
+	return obj
+}
+
+type ActionIdNxSample2 struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSample2 interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSample2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSample2(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSample2, error) {
+	_actionidnxsample2 := &ActionIdNxSample2{ActionIdNicira: parent}
+	return _actionidnxsample2, nil
+}
+
+func NewActionIdNxSample2() *ActionIdNxSample2 {
+	obj := &ActionIdNxSample2{
+		ActionIdNicira: NewActionIdNicira(38),
+	}
+	return obj
+}
+
+type ActionIdNxSample3 struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSample3 interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSample3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSample3(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSample3, error) {
+	_actionidnxsample3 := &ActionIdNxSample3{ActionIdNicira: parent}
+	return _actionidnxsample3, nil
+}
+
+func NewActionIdNxSample3() *ActionIdNxSample3 {
+	obj := &ActionIdNxSample3{
+		ActionIdNicira: NewActionIdNicira(41),
+	}
+	return obj
+}
+
+type ActionIdNxSetMplsLabel struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSetMplsLabel interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSetMplsLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSetMplsLabel(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSetMplsLabel, error) {
+	_actionidnxsetmplslabel := &ActionIdNxSetMplsLabel{ActionIdNicira: parent}
+	return _actionidnxsetmplslabel, nil
+}
+
+func NewActionIdNxSetMplsLabel() *ActionIdNxSetMplsLabel {
+	obj := &ActionIdNxSetMplsLabel{
+		ActionIdNicira: NewActionIdNicira(30),
+	}
+	return obj
+}
+
+type ActionIdNxSetMplsTc struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSetMplsTc interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSetMplsTc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSetMplsTc(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSetMplsTc, error) {
+	_actionidnxsetmplstc := &ActionIdNxSetMplsTc{ActionIdNicira: parent}
+	return _actionidnxsetmplstc, nil
+}
+
+func NewActionIdNxSetMplsTc() *ActionIdNxSetMplsTc {
+	obj := &ActionIdNxSetMplsTc{
+		ActionIdNicira: NewActionIdNicira(31),
+	}
+	return obj
+}
+
+type ActionIdNxSetMplsTtl struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSetMplsTtl interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSetMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSetMplsTtl(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSetMplsTtl, error) {
+	_actionidnxsetmplsttl := &ActionIdNxSetMplsTtl{ActionIdNicira: parent}
+	return _actionidnxsetmplsttl, nil
+}
+
+func NewActionIdNxSetMplsTtl() *ActionIdNxSetMplsTtl {
+	obj := &ActionIdNxSetMplsTtl{
+		ActionIdNicira: NewActionIdNicira(25),
+	}
+	return obj
+}
+
+type ActionIdNxSetQueue struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSetQueue interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSetQueue) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSetQueue(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSetQueue, error) {
+	_actionidnxsetqueue := &ActionIdNxSetQueue{ActionIdNicira: parent}
+	return _actionidnxsetqueue, nil
+}
+
+func NewActionIdNxSetQueue() *ActionIdNxSetQueue {
+	obj := &ActionIdNxSetQueue{
+		ActionIdNicira: NewActionIdNicira(4),
+	}
+	return obj
+}
+
+type ActionIdNxSetTunnel struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSetTunnel interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSetTunnel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSetTunnel(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSetTunnel, error) {
+	_actionidnxsettunnel := &ActionIdNxSetTunnel{ActionIdNicira: parent}
+	return _actionidnxsettunnel, nil
+}
+
+func NewActionIdNxSetTunnel() *ActionIdNxSetTunnel {
+	obj := &ActionIdNxSetTunnel{
+		ActionIdNicira: NewActionIdNicira(2),
+	}
+	return obj
+}
+
+type ActionIdNxSetTunnel64 struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxSetTunnel64 interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxSetTunnel64) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxSetTunnel64(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxSetTunnel64, error) {
+	_actionidnxsettunnel64 := &ActionIdNxSetTunnel64{ActionIdNicira: parent}
+	return _actionidnxsettunnel64, nil
+}
+
+func NewActionIdNxSetTunnel64() *ActionIdNxSetTunnel64 {
+	obj := &ActionIdNxSetTunnel64{
+		ActionIdNicira: NewActionIdNicira(9),
+	}
+	return obj
+}
+
+type ActionIdNxStackPop struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxStackPop interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxStackPop) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxStackPop(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxStackPop, error) {
+	_actionidnxstackpop := &ActionIdNxStackPop{ActionIdNicira: parent}
+	return _actionidnxstackpop, nil
+}
+
+func NewActionIdNxStackPop() *ActionIdNxStackPop {
+	obj := &ActionIdNxStackPop{
+		ActionIdNicira: NewActionIdNicira(28),
+	}
+	return obj
+}
+
+type ActionIdNxStackPush struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxStackPush interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxStackPush) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxStackPush(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxStackPush, error) {
+	_actionidnxstackpush := &ActionIdNxStackPush{ActionIdNicira: parent}
+	return _actionidnxstackpush, nil
+}
+
+func NewActionIdNxStackPush() *ActionIdNxStackPush {
+	obj := &ActionIdNxStackPush{
+		ActionIdNicira: NewActionIdNicira(27),
+	}
+	return obj
+}
+
+type ActionIdNxWriteMetadata struct {
+	*ActionIdNicira
+}
+
+type IActionIdNxWriteMetadata interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdNxWriteMetadata) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdNxWriteMetadata(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdNxWriteMetadata, error) {
+	_actionidnxwritemetadata := &ActionIdNxWriteMetadata{ActionIdNicira: parent}
+	return _actionidnxwritemetadata, nil
+}
+
+func NewActionIdNxWriteMetadata() *ActionIdNxWriteMetadata {
+	obj := &ActionIdNxWriteMetadata{
+		ActionIdNicira: NewActionIdNicira(22),
+	}
+	return obj
+}
+
+type ActionIdOutput struct {
+	*ActionId
+}
+
+type IActionIdOutput interface {
+	IActionId
+}
+
+func (self *ActionIdOutput) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdOutput(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdOutput, error) {
+	_actionidoutput := &ActionIdOutput{ActionId: parent}
+	return _actionidoutput, nil
+}
+
+func NewActionIdOutput() *ActionIdOutput {
+	obj := &ActionIdOutput{
+		ActionId: NewActionId(0),
+	}
+	return obj
+}
+
+type ActionIdPopMpls struct {
+	*ActionId
+}
+
+type IActionIdPopMpls interface {
+	IActionId
+}
+
+func (self *ActionIdPopMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdPopMpls(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdPopMpls, error) {
+	_actionidpopmpls := &ActionIdPopMpls{ActionId: parent}
+	return _actionidpopmpls, nil
+}
+
+func NewActionIdPopMpls() *ActionIdPopMpls {
+	obj := &ActionIdPopMpls{
+		ActionId: NewActionId(20),
+	}
+	return obj
+}
+
+type ActionIdPopPbb struct {
+	*ActionId
+}
+
+type IActionIdPopPbb interface {
+	IActionId
+}
+
+func (self *ActionIdPopPbb) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdPopPbb(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdPopPbb, error) {
+	_actionidpoppbb := &ActionIdPopPbb{ActionId: parent}
+	return _actionidpoppbb, nil
+}
+
+func NewActionIdPopPbb() *ActionIdPopPbb {
+	obj := &ActionIdPopPbb{
+		ActionId: NewActionId(27),
+	}
+	return obj
+}
+
+type ActionIdPopVlan struct {
+	*ActionId
+}
+
+type IActionIdPopVlan interface {
+	IActionId
+}
+
+func (self *ActionIdPopVlan) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdPopVlan(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdPopVlan, error) {
+	_actionidpopvlan := &ActionIdPopVlan{ActionId: parent}
+	return _actionidpopvlan, nil
+}
+
+func NewActionIdPopVlan() *ActionIdPopVlan {
+	obj := &ActionIdPopVlan{
+		ActionId: NewActionId(18),
+	}
+	return obj
+}
+
+type ActionIdPushMpls struct {
+	*ActionId
+}
+
+type IActionIdPushMpls interface {
+	IActionId
+}
+
+func (self *ActionIdPushMpls) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdPushMpls(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdPushMpls, error) {
+	_actionidpushmpls := &ActionIdPushMpls{ActionId: parent}
+	return _actionidpushmpls, nil
+}
+
+func NewActionIdPushMpls() *ActionIdPushMpls {
+	obj := &ActionIdPushMpls{
+		ActionId: NewActionId(19),
+	}
+	return obj
+}
+
+type ActionIdPushPbb struct {
+	*ActionId
+}
+
+type IActionIdPushPbb interface {
+	IActionId
+}
+
+func (self *ActionIdPushPbb) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdPushPbb(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdPushPbb, error) {
+	_actionidpushpbb := &ActionIdPushPbb{ActionId: parent}
+	return _actionidpushpbb, nil
+}
+
+func NewActionIdPushPbb() *ActionIdPushPbb {
+	obj := &ActionIdPushPbb{
+		ActionId: NewActionId(26),
+	}
+	return obj
+}
+
+type ActionIdPushVlan struct {
+	*ActionId
+}
+
+type IActionIdPushVlan interface {
+	IActionId
+}
+
+func (self *ActionIdPushVlan) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdPushVlan(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdPushVlan, error) {
+	_actionidpushvlan := &ActionIdPushVlan{ActionId: parent}
+	return _actionidpushvlan, nil
+}
+
+func NewActionIdPushVlan() *ActionIdPushVlan {
+	obj := &ActionIdPushVlan{
+		ActionId: NewActionId(17),
+	}
+	return obj
+}
+
+type ActionIdResubmit struct {
+	*ActionIdNicira
+}
+
+type IActionIdResubmit interface {
+	IActionIdNicira
+}
+
+func (self *ActionIdResubmit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionIdNicira.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdResubmit(parent *ActionIdNicira, decoder *goloxi.Decoder) (*ActionIdResubmit, error) {
+	_actionidresubmit := &ActionIdResubmit{ActionIdNicira: parent}
+	return _actionidresubmit, nil
+}
+
+func NewActionIdResubmit() *ActionIdResubmit {
+	obj := &ActionIdResubmit{
+		ActionIdNicira: NewActionIdNicira(14),
+	}
+	return obj
+}
+
+type ActionIdSetField struct {
+	*ActionId
+}
+
+type IActionIdSetField interface {
+	IActionId
+}
+
+func (self *ActionIdSetField) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdSetField(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdSetField, error) {
+	_actionidsetfield := &ActionIdSetField{ActionId: parent}
+	return _actionidsetfield, nil
+}
+
+func NewActionIdSetField() *ActionIdSetField {
+	obj := &ActionIdSetField{
+		ActionId: NewActionId(25),
+	}
+	return obj
+}
+
+type ActionIdSetMplsTtl struct {
+	*ActionId
+}
+
+type IActionIdSetMplsTtl interface {
+	IActionId
+}
+
+func (self *ActionIdSetMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdSetMplsTtl(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdSetMplsTtl, error) {
+	_actionidsetmplsttl := &ActionIdSetMplsTtl{ActionId: parent}
+	return _actionidsetmplsttl, nil
+}
+
+func NewActionIdSetMplsTtl() *ActionIdSetMplsTtl {
+	obj := &ActionIdSetMplsTtl{
+		ActionId: NewActionId(15),
+	}
+	return obj
+}
+
+type ActionIdSetNwTtl struct {
+	*ActionId
+}
+
+type IActionIdSetNwTtl interface {
+	IActionId
+}
+
+func (self *ActionIdSetNwTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdSetNwTtl(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdSetNwTtl, error) {
+	_actionidsetnwttl := &ActionIdSetNwTtl{ActionId: parent}
+	return _actionidsetnwttl, nil
+}
+
+func NewActionIdSetNwTtl() *ActionIdSetNwTtl {
+	obj := &ActionIdSetNwTtl{
+		ActionId: NewActionId(23),
+	}
+	return obj
+}
+
+type ActionIdSetQueue struct {
+	*ActionId
+}
+
+type IActionIdSetQueue interface {
+	IActionId
+}
+
+func (self *ActionIdSetQueue) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionIdSetQueue(parent *ActionId, decoder *goloxi.Decoder) (*ActionIdSetQueue, error) {
+	_actionidsetqueue := &ActionIdSetQueue{ActionId: parent}
+	return _actionidsetqueue, nil
+}
+
+func NewActionIdSetQueue() *ActionIdSetQueue {
+	obj := &ActionIdSetQueue{
+		ActionId: NewActionId(21),
+	}
+	return obj
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/common.go b/vendor/github.com/skydive-project/goloxi/of13/common.go
new file mode 100644
index 0000000..3ac2db7
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/common.go
@@ -0,0 +1,32834 @@
+/*
+ * Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+ * Copyright (c) 2011, 2012 Open Networking Foundation
+ * Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler.
+ * Copyright 2018, Red Hat, Inc.
+ */
+// Automatically generated by LOXI from template module.go
+// Do not modify
+
+package of13
+
+import (
+	"bytes"
+	"encoding/binary"
+	"fmt"
+	"net"
+
+	"github.com/skydive-project/goloxi"
+)
+
+type OxmId struct {
+	TypeLen uint32
+}
+
+type IOxmId interface {
+	goloxi.Serializable
+	GetTypeLen() uint32
+	GetOXMName() string
+}
+
+func (self *OxmId) GetTypeLen() uint32 {
+	return self.TypeLen
+}
+
+func (self *OxmId) SetTypeLen(v uint32) {
+	self.TypeLen = v
+}
+
+func (self *OxmId) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint32(uint32(self.TypeLen))
+
+	return nil
+}
+
+func DecodeOxmId(decoder *goloxi.Decoder) (IOxmId, error) {
+	_oxmid := &OxmId{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmid.TypeLen = uint32(decoder.ReadUint32())
+
+	switch _oxmid.TypeLen {
+	case 110204:
+		return DecodeOxmIdTunMetadata47(_oxmid, decoder)
+	case 129026:
+		return DecodeOxmIdConnTrackingTpSrc(_oxmid, decoder)
+	case 2147489796:
+		return DecodeOxmIdIpv4Dst(_oxmid, decoder)
+	case 77830:
+		return DecodeOxmIdNdSll(_oxmid, decoder)
+	case 80897:
+		return DecodeOxmIdMplsTtl(_oxmid, decoder)
+	case 73736:
+		return DecodeOxmIdTunId(_oxmid, decoder)
+	case 2:
+		return DecodeOxmIdInPort(_oxmid, decoder)
+	case 120848:
+		return DecodeOxmIdConnTrackingLabel(_oxmid, decoder)
+	case 65540:
+		return DecodeOxmIdReg0(_oxmid, decoder)
+	case 111228:
+		return DecodeOxmIdTunMetadata49(_oxmid, decoder)
+	case 74758:
+		return DecodeOxmIdArpTha(_oxmid, decoder)
+	case 2147499266:
+		return DecodeOxmIdIcmpv6CodeMasked(_oxmid, decoder)
+	case 2147503112:
+		return DecodeOxmIdTunnelId(_oxmid, decoder)
+	case 112252:
+		return DecodeOxmIdTunMetadata51(_oxmid, decoder)
+	case 108024:
+		return DecodeOxmIdTunMetadata42Masked(_oxmid, decoder)
+	case 113276:
+		return DecodeOxmIdTunMetadata53(_oxmid, decoder)
+	case 109048:
+		return DecodeOxmIdTunMetadata44Masked(_oxmid, decoder)
+	case 94332:
+		return DecodeOxmIdTunMetadata16(_oxmid, decoder)
+	case 114300:
+		return DecodeOxmIdTunMetadata55(_oxmid, decoder)
+	case 2050:
+		return DecodeOxmIdVlanTci(_oxmid, decoder)
+	case 3073:
+		return DecodeOxmIdNwProto(_oxmid, decoder)
+	case 110072:
+		return DecodeOxmIdTunMetadata46Masked(_oxmid, decoder)
+	case 2147502338:
+		return DecodeOxmIdMplsBosMasked(_oxmid, decoder)
+	case 66564:
+		return DecodeOxmIdReg2(_oxmid, decoder)
+	case 115324:
+		return DecodeOxmIdTunMetadata57(_oxmid, decoder)
+	case 2147486722:
+		return DecodeOxmIdVlanVid(_oxmid, decoder)
+	case 2147487745:
+		return DecodeOxmIdIpDscp(_oxmid, decoder)
+	case 111096:
+		return DecodeOxmIdTunMetadata48Masked(_oxmid, decoder)
+	case 83204:
+		return DecodeOxmIdTcpFlagsMasked(_oxmid, decoder)
+	case 3588:
+		return DecodeOxmIdIpSrc(_oxmid, decoder)
+	case 198660:
+		return DecodeOxmIdBsnL3InterfaceClassId(_oxmid, decoder)
+	case 2147488769:
+		return DecodeOxmIdIpProto(_oxmid, decoder)
+	case 112120:
+		return DecodeOxmIdTunMetadata50Masked(_oxmid, decoder)
+	case 121872:
+		return DecodeOxmIdTunIpv6Dst(_oxmid, decoder)
+	case 199172:
+		return DecodeOxmIdBsnL3SrcClassId(_oxmid, decoder)
+	case 1030:
+		return DecodeOxmIdEthSrc(_oxmid, decoder)
+	case 68612:
+		return DecodeOxmIdReg6(_oxmid, decoder)
+	case 117372:
+		return DecodeOxmIdTunMetadata61(_oxmid, decoder)
+	case 5122:
+		return DecodeOxmIdTcpDst(_oxmid, decoder)
+	case 113144:
+		return DecodeOxmIdTunMetadata52Masked(_oxmid, decoder)
+	case 122896:
+		return DecodeOxmIdXxreg1(_oxmid, decoder)
+	case 209156:
+		return DecodeOxmIdBsnInnerVlanVidMasked(_oxmid, decoder)
+	case 124192:
+		return DecodeOxmIdXxreg3Masked(_oxmid, decoder)
+	case 81672:
+		return DecodeOxmIdTunnelIpv4SrcMasked(_oxmid, decoder)
+	case 4100:
+		return DecodeOxmIdIpDst(_oxmid, decoder)
+	case 118396:
+		return DecodeOxmIdTunMetadata63(_oxmid, decoder)
+	case 2147494146:
+		return DecodeOxmIdIcmpv4CodeMasked(_oxmid, decoder)
+	case 129284:
+		return DecodeOxmIdConnTrackingTpSrcMasked(_oxmid, decoder)
+	case 114168:
+		return DecodeOxmIdTunMetadata54Masked(_oxmid, decoder)
+	case 123920:
+		return DecodeOxmIdXxreg3(_oxmid, decoder)
+	case 200968:
+		return DecodeOxmIdBsnUdf0Masked(_oxmid, decoder)
+	case 78091:
+		return DecodeOxmIdNdSllMasked(_oxmid, decoder)
+	case 2147500300:
+		return DecodeOxmIdIpv6NdSllMasked(_oxmid, decoder)
+	case 74000:
+		return DecodeOxmIdTunIdMasked(_oxmid, decoder)
+	case 86140:
+		return DecodeOxmIdTunMetadata0(_oxmid, decoder)
+	case 70660:
+		return DecodeOxmIdReg10(_oxmid, decoder)
+	case 121120:
+		return DecodeOxmIdConnTrackingLabelMasked(_oxmid, decoder)
+	case 107000:
+		return DecodeOxmIdTunMetadata40Masked(_oxmid, decoder)
+	case 3848:
+		return DecodeOxmIdIpSrcMasked(_oxmid, decoder)
+	case 87164:
+		return DecodeOxmIdTunMetadata2(_oxmid, decoder)
+	case 202756:
+		return DecodeOxmIdBsnUdf4(_oxmid, decoder)
+	case 204802:
+		return DecodeOxmIdBsnTcpFlags(_oxmid, decoder)
+	case 205825:
+		return DecodeOxmIdBsnL2CacheHit(_oxmid, decoder)
+	case 116216:
+		return DecodeOxmIdTunMetadata58Masked(_oxmid, decoder)
+	case 199432:
+		return DecodeOxmIdBsnL3SrcClassIdMasked(_oxmid, decoder)
+	case 88188:
+		return DecodeOxmIdTunMetadata4(_oxmid, decoder)
+	case 203780:
+		return DecodeOxmIdBsnUdf6(_oxmid, decoder)
+	case 2147492866:
+		return DecodeOxmIdSctpDst(_oxmid, decoder)
+	case 2147493889:
+		return DecodeOxmIdIcmpv4Code(_oxmid, decoder)
+	case 117240:
+		return DecodeOxmIdTunMetadata60Masked(_oxmid, decoder)
+	case 200196:
+		return DecodeOxmIdBsnEgrPortGroupId(_oxmid, decoder)
+	case 128288:
+		return DecodeOxmIdConnTrackingIpv6SrcMasked(_oxmid, decoder)
+	case 89212:
+		return DecodeOxmIdTunMetadata6(_oxmid, decoder)
+	case 8196:
+		return DecodeOxmIdArpSpa(_oxmid, decoder)
+	case 76801:
+		return DecodeOxmIdIcmpv6Code(_oxmid, decoder)
+	case 118264:
+		return DecodeOxmIdTunMetadata62Masked(_oxmid, decoder)
+	case 70148:
+		return DecodeOxmIdReg9(_oxmid, decoder)
+	case 119560:
+		return DecodeOxmIdConnTrackingStateMasked(_oxmid, decoder)
+	case 90236:
+		return DecodeOxmIdTunMetadata8(_oxmid, decoder)
+	case 119044:
+		return DecodeOxmIdTunFlagsMasked(_oxmid, decoder)
+	case 82696:
+		return DecodeOxmIdPktMarkMasked(_oxmid, decoder)
+	case 4294923528:
+		return DecodeOxmIdOvsTcpFlagsMasked(_oxmid, decoder)
+	case 120584:
+		return DecodeOxmIdConnTrackingMarkMasked(_oxmid, decoder)
+	case 91260:
+		return DecodeOxmIdTunMetadata10(_oxmid, decoder)
+	case 87032:
+		return DecodeOxmIdTunMetadata1Masked(_oxmid, decoder)
+	case 126722:
+		return DecodeOxmIdConnTrackingNwProtoMasked(_oxmid, decoder)
+	case 206852:
+		return DecodeOxmIdBsnIngressPortGroupId(_oxmid, decoder)
+	case 208898:
+		return DecodeOxmIdBsnInnerVlanVid(_oxmid, decoder)
+	case 209921:
+		return DecodeOxmIdBsnIpFragmentation(_oxmid, decoder)
+	case 196896:
+		return DecodeOxmIdBsnInPorts128Masked(_oxmid, decoder)
+	case 92284:
+		return DecodeOxmIdTunMetadata12(_oxmid, decoder)
+	case 88056:
+		return DecodeOxmIdTunMetadata3Masked(_oxmid, decoder)
+	case 79873:
+		return DecodeOxmIdNwEcn(_oxmid, decoder)
+	case 196624:
+		return DecodeOxmIdBsnInPorts128(_oxmid, decoder)
+	case 200456:
+		return DecodeOxmIdBsnEgrPortGroupIdMasked(_oxmid, decoder)
+	case 2147489284:
+		return DecodeOxmIdIpv4Src(_oxmid, decoder)
+	case 93308:
+		return DecodeOxmIdTunMetadata14(_oxmid, decoder)
+	case 115192:
+		return DecodeOxmIdTunMetadata56Masked(_oxmid, decoder)
+	case 2561:
+		return DecodeOxmIdNwTos(_oxmid, decoder)
+	case 129538:
+		return DecodeOxmIdConnTrackingTpDst(_oxmid, decoder)
+	case 2147500550:
+		return DecodeOxmIdIpv6NdTll(_oxmid, decoder)
+	case 84484:
+		return DecodeOxmIdConjId(_oxmid, decoder)
+	case 74246:
+		return DecodeOxmIdArpSha(_oxmid, decoder)
+	case 85762:
+		return DecodeOxmIdTunGbpFlagsMasked(_oxmid, decoder)
+	case 123408:
+		return DecodeOxmIdXxreg2(_oxmid, decoder)
+	case 90104:
+		return DecodeOxmIdTunMetadata7Masked(_oxmid, decoder)
+	case 2147486468:
+		return DecodeOxmIdEthTypeMasked(_oxmid, decoder)
+	case 70408:
+		return DecodeOxmIdReg9Masked(_oxmid, decoder)
+	case 91128:
+		return DecodeOxmIdTunMetadata9Masked(_oxmid, decoder)
+	case 83720:
+		return DecodeOxmIdDpHashMasked(_oxmid, decoder)
+	case 2147497988:
+		return DecodeOxmIdIpv6Flabel(_oxmid, decoder)
+	case 78603:
+		return DecodeOxmIdNdTllMasked(_oxmid, decoder)
+	case 2147503376:
+		return DecodeOxmIdTunnelIdMasked(_oxmid, decoder)
+	case 96380:
+		return DecodeOxmIdTunMetadata20(_oxmid, decoder)
+	case 92152:
+		return DecodeOxmIdTunMetadata11Masked(_oxmid, decoder)
+	case 129796:
+		return DecodeOxmIdConnTrackingTpDstMasked(_oxmid, decoder)
+	case 2147502081:
+		return DecodeOxmIdMplsBos(_oxmid, decoder)
+	case 97404:
+		return DecodeOxmIdTunMetadata22(_oxmid, decoder)
+	case 93176:
+		return DecodeOxmIdTunMetadata13Masked(_oxmid, decoder)
+	case 94844:
+		return DecodeOxmIdTunMetadata17(_oxmid, decoder)
+	case 81924:
+		return DecodeOxmIdTunnelIpv4Dst(_oxmid, decoder)
+	case 127752:
+		return DecodeOxmIdConnTrackingNwDstMasked(_oxmid, decoder)
+	case 98428:
+		return DecodeOxmIdTunMetadata24(_oxmid, decoder)
+	case 94200:
+		return DecodeOxmIdTunMetadata15Masked(_oxmid, decoder)
+	case 2147501060:
+		return DecodeOxmIdMplsLabel(_oxmid, decoder)
+	case 84994:
+		return DecodeOxmIdTunGbpId(_oxmid, decoder)
+	case 71432:
+		return DecodeOxmIdReg11Masked(_oxmid, decoder)
+	case 99452:
+		return DecodeOxmIdTunMetadata26(_oxmid, decoder)
+	case 95224:
+		return DecodeOxmIdTunMetadata17Masked(_oxmid, decoder)
+	case 2147500038:
+		return DecodeOxmIdIpv6NdSll(_oxmid, decoder)
+	case 83972:
+		return DecodeOxmIdRecircId(_oxmid, decoder)
+	case 128800:
+		return DecodeOxmIdConnTrackingIpv6DstMasked(_oxmid, decoder)
+	case 72196:
+		return DecodeOxmIdReg13(_oxmid, decoder)
+	case 100476:
+		return DecodeOxmIdTunMetadata28(_oxmid, decoder)
+	case 96248:
+		return DecodeOxmIdTunMetadata19Masked(_oxmid, decoder)
+	case 2147488514:
+		return DecodeOxmIdIpEcnMasked(_oxmid, decoder)
+	case 112764:
+		return DecodeOxmIdTunMetadata52(_oxmid, decoder)
+	case 101500:
+		return DecodeOxmIdTunMetadata30(_oxmid, decoder)
+	case 97272:
+		return DecodeOxmIdTunMetadata21Masked(_oxmid, decoder)
+	case 2147498754:
+		return DecodeOxmIdIcmpv6TypeMasked(_oxmid, decoder)
+	case 209668:
+		return DecodeOxmIdBsnVfiMasked(_oxmid, decoder)
+	case 2147484424:
+		return DecodeOxmIdInPhyPortMasked(_oxmid, decoder)
+	case 74507:
+		return DecodeOxmIdArpShaMasked(_oxmid, decoder)
+	case 2147500812:
+		return DecodeOxmIdIpv6NdTllMasked(_oxmid, decoder)
+	case 197384:
+		return DecodeOxmIdBsnLagIdMasked(_oxmid, decoder)
+	case 76064:
+		return DecodeOxmIdIpv6DstMasked(_oxmid, decoder)
+	case 102524:
+		return DecodeOxmIdTunMetadata32(_oxmid, decoder)
+	case 98296:
+		return DecodeOxmIdTunMetadata23Masked(_oxmid, decoder)
+	case 4868:
+		return DecodeOxmIdTcpSrcMasked(_oxmid, decoder)
+	case 121632:
+		return DecodeOxmIdTunIpv6SrcMasked(_oxmid, decoder)
+	case 75792:
+		return DecodeOxmIdIpv6Dst(_oxmid, decoder)
+	case 202504:
+		return DecodeOxmIdBsnUdf3Masked(_oxmid, decoder)
+	case 120324:
+		return DecodeOxmIdConnTrackingMark(_oxmid, decoder)
+	case 99320:
+		return DecodeOxmIdTunMetadata25Masked(_oxmid, decoder)
+	case 65800:
+		return DecodeOxmIdReg0Masked(_oxmid, decoder)
+	case 66824:
+		return DecodeOxmIdReg2Masked(_oxmid, decoder)
+	case 72456:
+		return DecodeOxmIdReg13Masked(_oxmid, decoder)
+	case 68360:
+		return DecodeOxmIdReg5Masked(_oxmid, decoder)
+	case 104572:
+		return DecodeOxmIdTunMetadata36(_oxmid, decoder)
+	case 95356:
+		return DecodeOxmIdTunMetadata18(_oxmid, decoder)
+	case 100344:
+		return DecodeOxmIdTunMetadata27Masked(_oxmid, decoder)
+	case 4294923270:
+		return DecodeOxmIdOvsTcpFlags(_oxmid, decoder)
+	case 779:
+		return DecodeOxmIdEthDstMasked(_oxmid, decoder)
+	case 69384:
+		return DecodeOxmIdReg7Masked(_oxmid, decoder)
+	case 105596:
+		return DecodeOxmIdTunMetadata38(_oxmid, decoder)
+	case 101368:
+		return DecodeOxmIdTunMetadata29Masked(_oxmid, decoder)
+	case 2147493634:
+		return DecodeOxmIdIcmpv4TypeMasked(_oxmid, decoder)
+	case 108668:
+		return DecodeOxmIdTunMetadata44(_oxmid, decoder)
+	case 201480:
+		return DecodeOxmIdBsnUdf1Masked(_oxmid, decoder)
+	case 106620:
+		return DecodeOxmIdTunMetadata40(_oxmid, decoder)
+	case 102392:
+		return DecodeOxmIdTunMetadata31Masked(_oxmid, decoder)
+	case 2147492612:
+		return DecodeOxmIdSctpSrcMasked(_oxmid, decoder)
+	case 72708:
+		return DecodeOxmIdReg14(_oxmid, decoder)
+	case 73480:
+		return DecodeOxmIdReg15Masked(_oxmid, decoder)
+	case 204292:
+		return DecodeOxmIdBsnUdf7(_oxmid, decoder)
+	case 2147489544:
+		return DecodeOxmIdIpv4SrcMasked(_oxmid, decoder)
+	case 107644:
+		return DecodeOxmIdTunMetadata42(_oxmid, decoder)
+	case 103416:
+		return DecodeOxmIdTunMetadata33Masked(_oxmid, decoder)
+	case 2147498248:
+		return DecodeOxmIdIpv6FlabelMasked(_oxmid, decoder)
+	case 203528:
+		return DecodeOxmIdBsnUdf5Masked(_oxmid, decoder)
+	case 89592:
+		return DecodeOxmIdTunMetadata6Masked(_oxmid, decoder)
+	case 104440:
+		return DecodeOxmIdTunMetadata35Masked(_oxmid, decoder)
+	case 2147494660:
+		return DecodeOxmIdArpOpMasked(_oxmid, decoder)
+	case 197636:
+		return DecodeOxmIdBsnVrf(_oxmid, decoder)
+	case 204552:
+		return DecodeOxmIdBsnUdf7Masked(_oxmid, decoder)
+	case 109692:
+		return DecodeOxmIdTunMetadata46(_oxmid, decoder)
+	case 105464:
+		return DecodeOxmIdTunMetadata37Masked(_oxmid, decoder)
+	case 89080:
+		return DecodeOxmIdTunMetadata5Masked(_oxmid, decoder)
+	case 67588:
+		return DecodeOxmIdReg4(_oxmid, decoder)
+	case 7169:
+		return DecodeOxmIdIcmpCode(_oxmid, decoder)
+	case 82946:
+		return DecodeOxmIdTcpFlags(_oxmid, decoder)
+	case 199684:
+		return DecodeOxmIdBsnL3DstClassId(_oxmid, decoder)
+	case 207878:
+		return DecodeOxmIdBsnInnerEthDst(_oxmid, decoder)
+	case 198145:
+		return DecodeOxmIdBsnGlobalVrfAllowed(_oxmid, decoder)
+	case 2147484680:
+		return DecodeOxmIdMetadata(_oxmid, decoder)
+	case 1538:
+		return DecodeOxmIdEthType(_oxmid, decoder)
+	case 8968:
+		return DecodeOxmIdArpTpaMasked(_oxmid, decoder)
+	case 128016:
+		return DecodeOxmIdConnTrackingIpv6Src(_oxmid, decoder)
+	case 110716:
+		return DecodeOxmIdTunMetadata48(_oxmid, decoder)
+	case 127492:
+		return DecodeOxmIdConnTrackingNwDst(_oxmid, decoder)
+	case 78342:
+		return DecodeOxmIdNdTll(_oxmid, decoder)
+	case 111740:
+		return DecodeOxmIdTunMetadata50(_oxmid, decoder)
+	case 107512:
+		return DecodeOxmIdTunMetadata41Masked(_oxmid, decoder)
+	case 207624:
+		return DecodeOxmIdBsnVxlanNetworkIdMasked(_oxmid, decoder)
+	case 121360:
+		return DecodeOxmIdTunIpv6Src(_oxmid, decoder)
+	case 113788:
+		return DecodeOxmIdTunMetadata54(_oxmid, decoder)
+	case 109560:
+		return DecodeOxmIdTunMetadata45Masked(_oxmid, decoder)
+	case 2147501826:
+		return DecodeOxmIdMplsTcMasked(_oxmid, decoder)
+	case 103548:
+		return DecodeOxmIdTunMetadata34(_oxmid, decoder)
+	case 2147484164:
+		return DecodeOxmIdInPhyPort(_oxmid, decoder)
+	case 205316:
+		return DecodeOxmIdBsnVlanXlatePortGroupId(_oxmid, decoder)
+	case 114812:
+		return DecodeOxmIdTunMetadata56(_oxmid, decoder)
+	case 2147487233:
+		return DecodeOxmIdVlanPcp(_oxmid, decoder)
+	case 110584:
+		return DecodeOxmIdTunMetadata47Masked(_oxmid, decoder)
+	case 79624:
+		return DecodeOxmIdIpv6LabelMasked(_oxmid, decoder)
+	case 115836:
+		return DecodeOxmIdTunMetadata58(_oxmid, decoder)
+	case 2147488257:
+		return DecodeOxmIdIpEcn(_oxmid, decoder)
+	case 111608:
+		return DecodeOxmIdTunMetadata49Masked(_oxmid, decoder)
+	case 518:
+		return DecodeOxmIdEthDst(_oxmid, decoder)
+	case 68100:
+		return DecodeOxmIdReg5(_oxmid, decoder)
+	case 116860:
+		return DecodeOxmIdTunMetadata60(_oxmid, decoder)
+	case 4610:
+		return DecodeOxmIdTcpSrc(_oxmid, decoder)
+	case 112632:
+		return DecodeOxmIdTunMetadata51Masked(_oxmid, decoder)
+	case 122384:
+		return DecodeOxmIdXxreg0(_oxmid, decoder)
+	case 123680:
+		return DecodeOxmIdXxreg2Masked(_oxmid, decoder)
+	case 69124:
+		return DecodeOxmIdReg7(_oxmid, decoder)
+	case 117884:
+		return DecodeOxmIdTunMetadata62(_oxmid, decoder)
+	case 5634:
+		return DecodeOxmIdUdpSrc(_oxmid, decoder)
+	case 6657:
+		return DecodeOxmIdIcmpType(_oxmid, decoder)
+	case 113656:
+		return DecodeOxmIdTunMetadata53Masked(_oxmid, decoder)
+	case 2147503876:
+		return DecodeOxmIdIpv6ExthdrMasked(_oxmid, decoder)
+	case 198920:
+		return DecodeOxmIdBsnL3InterfaceClassIdMasked(_oxmid, decoder)
+	case 2147489026:
+		return DecodeOxmIdIpProtoMasked(_oxmid, decoder)
+	case 120068:
+		return DecodeOxmIdConnTrackingZoneMasked(_oxmid, decoder)
+	case 1286:
+		return DecodeOxmIdEthSrcMasked(_oxmid, decoder)
+	case 204040:
+		return DecodeOxmIdBsnUdf6Masked(_oxmid, decoder)
+	case 75019:
+		return DecodeOxmIdArpThaMasked(_oxmid, decoder)
+	case 208140:
+		return DecodeOxmIdBsnInnerEthDstMasked(_oxmid, decoder)
+	case 201220:
+		return DecodeOxmIdBsnUdf1(_oxmid, decoder)
+	case 205576:
+		return DecodeOxmIdBsnVlanXlatePortGroupIdMasked(_oxmid, decoder)
+	case 2147484944:
+		return DecodeOxmIdMetadataMasked(_oxmid, decoder)
+	case 6146:
+		return DecodeOxmIdUdpDst(_oxmid, decoder)
+	case 114680:
+		return DecodeOxmIdTunMetadata55Masked(_oxmid, decoder)
+	case 122144:
+		return DecodeOxmIdTunIpv6DstMasked(_oxmid, decoder)
+	case 86652:
+		return DecodeOxmIdTunMetadata1(_oxmid, decoder)
+	case 202244:
+		return DecodeOxmIdBsnUdf3(_oxmid, decoder)
+	case 115704:
+		return DecodeOxmIdTunMetadata57Masked(_oxmid, decoder)
+	case 69636:
+		return DecodeOxmIdReg8(_oxmid, decoder)
+	case 87676:
+		return DecodeOxmIdTunMetadata3(_oxmid, decoder)
+	case 82184:
+		return DecodeOxmIdTunnelIpv4DstMasked(_oxmid, decoder)
+	case 203268:
+		return DecodeOxmIdBsnUdf5(_oxmid, decoder)
+	case 2147492354:
+		return DecodeOxmIdSctpSrc(_oxmid, decoder)
+	case 2147493377:
+		return DecodeOxmIdIcmpv4Type(_oxmid, decoder)
+	case 116728:
+		return DecodeOxmIdTunMetadata59Masked(_oxmid, decoder)
+	case 88700:
+		return DecodeOxmIdTunMetadata5(_oxmid, decoder)
+	case 73220:
+		return DecodeOxmIdReg15(_oxmid, decoder)
+	case 76289:
+		return DecodeOxmIdIcmpv6Type(_oxmid, decoder)
+	case 117752:
+		return DecodeOxmIdTunMetadata61Masked(_oxmid, decoder)
+	case 4360:
+		return DecodeOxmIdIpDstMasked(_oxmid, decoder)
+	case 89724:
+		return DecodeOxmIdTunMetadata7(_oxmid, decoder)
+	case 8708:
+		return DecodeOxmIdArpTpa(_oxmid, decoder)
+	case 118776:
+		return DecodeOxmIdTunMetadata63Masked(_oxmid, decoder)
+	case 199944:
+		return DecodeOxmIdBsnL3DstClassIdMasked(_oxmid, decoder)
+	case 90748:
+		return DecodeOxmIdTunMetadata9(_oxmid, decoder)
+	case 86520:
+		return DecodeOxmIdTunMetadata0Masked(_oxmid, decoder)
+	case 2147487490:
+		return DecodeOxmIdVlanPcpMasked(_oxmid, decoder)
+	case 2147501320:
+		return DecodeOxmIdMplsLabelMasked(_oxmid, decoder)
+	case 197124:
+		return DecodeOxmIdBsnLagId(_oxmid, decoder)
+	case 78849:
+		return DecodeOxmIdIpFrag(_oxmid, decoder)
+	case 200708:
+		return DecodeOxmIdBsnUdf0(_oxmid, decoder)
+	case 91772:
+		return DecodeOxmIdTunMetadata11(_oxmid, decoder)
+	case 87544:
+		return DecodeOxmIdTunMetadata2Masked(_oxmid, decoder)
+	case 207364:
+		return DecodeOxmIdBsnVxlanNetworkId(_oxmid, decoder)
+	case 209410:
+		return DecodeOxmIdBsnVfi(_oxmid, decoder)
+	case 92796:
+		return DecodeOxmIdTunMetadata13(_oxmid, decoder)
+	case 88568:
+		return DecodeOxmIdTunMetadata4Masked(_oxmid, decoder)
+	case 80385:
+		return DecodeOxmIdNwTtl(_oxmid, decoder)
+	case 105976:
+		return DecodeOxmIdTunMetadata38Masked(_oxmid, decoder)
+	case 126465:
+		return DecodeOxmIdConnTrackingNwProto(_oxmid, decoder)
+	case 7682:
+		return DecodeOxmIdArpOp(_oxmid, decoder)
+	case 71172:
+		return DecodeOxmIdReg11(_oxmid, decoder)
+	case 208390:
+		return DecodeOxmIdBsnInnerEthSrc(_oxmid, decoder)
+	case 210178:
+		return DecodeOxmIdBsnIpFragmentationMasked(_oxmid, decoder)
+	case 128528:
+		return DecodeOxmIdConnTrackingIpv6Dst(_oxmid, decoder)
+	case 85252:
+		return DecodeOxmIdTunGbpIdMasked(_oxmid, decoder)
+	case 90616:
+		return DecodeOxmIdTunMetadata8Masked(_oxmid, decoder)
+	case 79364:
+		return DecodeOxmIdIpv6Label(_oxmid, decoder)
+	case 207112:
+		return DecodeOxmIdBsnIngressPortGroupIdMasked(_oxmid, decoder)
+	case 206400:
+		return DecodeOxmIdBsnInPorts512(_oxmid, decoder)
+	case 95868:
+		return DecodeOxmIdTunMetadata19(_oxmid, decoder)
+	case 91640:
+		return DecodeOxmIdTunMetadata10Masked(_oxmid, decoder)
+	case 2147501569:
+		return DecodeOxmIdMplsTc(_oxmid, decoder)
+	case 70920:
+		return DecodeOxmIdReg10Masked(_oxmid, decoder)
+	case 96892:
+		return DecodeOxmIdTunMetadata21(_oxmid, decoder)
+	case 92664:
+		return DecodeOxmIdTunMetadata12Masked(_oxmid, decoder)
+	case 205060:
+		return DecodeOxmIdBsnTcpFlagsMasked(_oxmid, decoder)
+	case 81412:
+		return DecodeOxmIdTunnelIpv4Src(_oxmid, decoder)
+	case 99964:
+		return DecodeOxmIdTunMetadata27(_oxmid, decoder)
+	case 71684:
+		return DecodeOxmIdReg12(_oxmid, decoder)
+	case 127240:
+		return DecodeOxmIdConnTrackingNwSrcMasked(_oxmid, decoder)
+	case 97916:
+		return DecodeOxmIdTunMetadata23(_oxmid, decoder)
+	case 93688:
+		return DecodeOxmIdTunMetadata14Masked(_oxmid, decoder)
+	case 82436:
+		return DecodeOxmIdPktMark(_oxmid, decoder)
+	case 85505:
+		return DecodeOxmIdTunGbpFlags(_oxmid, decoder)
+	case 98940:
+		return DecodeOxmIdTunMetadata25(_oxmid, decoder)
+	case 94712:
+		return DecodeOxmIdTunMetadata16Masked(_oxmid, decoder)
+	case 83460:
+		return DecodeOxmIdDpHash(_oxmid, decoder)
+	case 2147503618:
+		return DecodeOxmIdIpv6Exthdr(_oxmid, decoder)
+	case 123168:
+		return DecodeOxmIdXxreg1Masked(_oxmid, decoder)
+	case 118786:
+		return DecodeOxmIdTunFlags(_oxmid, decoder)
+	case 95736:
+		return DecodeOxmIdTunMetadata18Masked(_oxmid, decoder)
+	case 2308:
+		return DecodeOxmIdVlanTciMasked(_oxmid, decoder)
+	case 2147488002:
+		return DecodeOxmIdIpDscpMasked(_oxmid, decoder)
+	case 100988:
+		return DecodeOxmIdTunMetadata29(_oxmid, decoder)
+	case 119810:
+		return DecodeOxmIdConnTrackingZone(_oxmid, decoder)
+	case 96760:
+		return DecodeOxmIdTunMetadata20Masked(_oxmid, decoder)
+	case 2147486980:
+		return DecodeOxmIdVlanVidMasked(_oxmid, decoder)
+	case 116348:
+		return DecodeOxmIdTunMetadata59(_oxmid, decoder)
+	case 5378:
+		return DecodeOxmIdTcpDstMasked(_oxmid, decoder)
+	case 71944:
+		return DecodeOxmIdReg12Masked(_oxmid, decoder)
+	case 2147483912:
+		return DecodeOxmIdInPortMasked(_oxmid, decoder)
+	case 75552:
+		return DecodeOxmIdIpv6SrcMasked(_oxmid, decoder)
+	case 102012:
+		return DecodeOxmIdTunMetadata31(_oxmid, decoder)
+	case 198402:
+		return DecodeOxmIdBsnGlobalVrfAllowedMasked(_oxmid, decoder)
+	case 5892:
+		return DecodeOxmIdUdpSrcMasked(_oxmid, decoder)
+	case 97784:
+		return DecodeOxmIdTunMetadata22Masked(_oxmid, decoder)
+	case 66052:
+		return DecodeOxmIdReg1(_oxmid, decoder)
+	case 67336:
+		return DecodeOxmIdReg3Masked(_oxmid, decoder)
+	case 208652:
+		return DecodeOxmIdBsnInnerEthSrcMasked(_oxmid, decoder)
+	case 75280:
+		return DecodeOxmIdIpv6Src(_oxmid, decoder)
+	case 197896:
+		return DecodeOxmIdBsnVrfMasked(_oxmid, decoder)
+	case 122656:
+		return DecodeOxmIdXxreg0Masked(_oxmid, decoder)
+	case 103036:
+		return DecodeOxmIdTunMetadata33(_oxmid, decoder)
+	case 98808:
+		return DecodeOxmIdTunMetadata24Masked(_oxmid, decoder)
+	case 67848:
+		return DecodeOxmIdReg4Masked(_oxmid, decoder)
+	case 77600:
+		return DecodeOxmIdNdTargetMasked(_oxmid, decoder)
+	case 104060:
+		return DecodeOxmIdTunMetadata35(_oxmid, decoder)
+	case 99832:
+		return DecodeOxmIdTunMetadata26Masked(_oxmid, decoder)
+	case 6404:
+		return DecodeOxmIdUdpDstMasked(_oxmid, decoder)
+	case 77328:
+		return DecodeOxmIdNdTarget(_oxmid, decoder)
+	case 68872:
+		return DecodeOxmIdReg6Masked(_oxmid, decoder)
+	case 105084:
+		return DecodeOxmIdTunMetadata37(_oxmid, decoder)
+	case 100856:
+		return DecodeOxmIdTunMetadata28Masked(_oxmid, decoder)
+	case 206082:
+		return DecodeOxmIdBsnL2CacheHitMasked(_oxmid, decoder)
+	case 203016:
+		return DecodeOxmIdBsnUdf4Masked(_oxmid, decoder)
+	case 69896:
+		return DecodeOxmIdReg8Masked(_oxmid, decoder)
+	case 206720:
+		return DecodeOxmIdBsnInPorts512Masked(_oxmid, decoder)
+	case 106108:
+		return DecodeOxmIdTunMetadata39(_oxmid, decoder)
+	case 101880:
+		return DecodeOxmIdTunMetadata30Masked(_oxmid, decoder)
+	case 8452:
+		return DecodeOxmIdArpSpaMasked(_oxmid, decoder)
+	case 66312:
+		return DecodeOxmIdReg1Masked(_oxmid, decoder)
+	case 201992:
+		return DecodeOxmIdBsnUdf2Masked(_oxmid, decoder)
+	case 107132:
+		return DecodeOxmIdTunMetadata41(_oxmid, decoder)
+	case 102904:
+		return DecodeOxmIdTunMetadata32Masked(_oxmid, decoder)
+	case 2147493124:
+		return DecodeOxmIdSctpDstMasked(_oxmid, decoder)
+	case 67076:
+		return DecodeOxmIdReg3(_oxmid, decoder)
+	case 119300:
+		return DecodeOxmIdConnTrackingState(_oxmid, decoder)
+	case 2147490056:
+		return DecodeOxmIdIpv4DstMasked(_oxmid, decoder)
+	case 2147499808:
+		return DecodeOxmIdIpv6NdTargetMasked(_oxmid, decoder)
+	case 108156:
+		return DecodeOxmIdTunMetadata43(_oxmid, decoder)
+	case 103928:
+		return DecodeOxmIdTunMetadata34Masked(_oxmid, decoder)
+	case 106488:
+		return DecodeOxmIdTunMetadata39Masked(_oxmid, decoder)
+	case 201732:
+		return DecodeOxmIdBsnUdf2(_oxmid, decoder)
+	case 2147499536:
+		return DecodeOxmIdIpv6NdTarget(_oxmid, decoder)
+	case 72968:
+		return DecodeOxmIdReg14Masked(_oxmid, decoder)
+	case 109180:
+		return DecodeOxmIdTunMetadata45(_oxmid, decoder)
+	case 104952:
+		return DecodeOxmIdTunMetadata36Masked(_oxmid, decoder)
+	case 93820:
+		return DecodeOxmIdTunMetadata15(_oxmid, decoder)
+	case 79106:
+		return DecodeOxmIdIpFragMasked(_oxmid, decoder)
+	case 108536:
+		return DecodeOxmIdTunMetadata43Masked(_oxmid, decoder)
+	case 126980:
+		return DecodeOxmIdConnTrackingNwSrc(_oxmid, decoder)
+	default:
+		return _oxmid, nil
+	}
+}
+
+func NewOxmId(_type_len uint32) *OxmId {
+	obj := &OxmId{}
+	obj.TypeLen = _type_len
+	return obj
+}
+func (self *OxmId) GetOXMName() string {
+	return ""
+}
+
+func (self *OxmId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type ActionNxBundleLoadSlave struct {
+	Port Port
+}
+
+type IActionNxBundleLoadSlave interface {
+	goloxi.Serializable
+	GetPort() Port
+}
+
+func (self *ActionNxBundleLoadSlave) GetPort() Port {
+	return self.Port
+}
+
+func (self *ActionNxBundleLoadSlave) SetPort(v Port) {
+	self.Port = v
+}
+
+func (self *ActionNxBundleLoadSlave) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint32(uint32(self.Port))
+
+	return nil
+}
+
+func DecodeActionNxBundleLoadSlave(decoder *goloxi.Decoder) (*ActionNxBundleLoadSlave, error) {
+	_actionnxbundleloadslave := &ActionNxBundleLoadSlave{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionNxBundleLoadSlave packet too short: %d < 4", decoder.Length())
+	}
+	_actionnxbundleloadslave.Port = Port(decoder.ReadUint32())
+	return _actionnxbundleloadslave, nil
+}
+
+func NewActionNxBundleLoadSlave() *ActionNxBundleLoadSlave {
+	obj := &ActionNxBundleLoadSlave{}
+	return obj
+}
+
+type ActionNxController2Property struct {
+	Type NxActionController2PropType
+}
+
+type IActionNxController2Property interface {
+	goloxi.Serializable
+	GetType() NxActionController2PropType
+}
+
+func (self *ActionNxController2Property) GetType() NxActionController2PropType {
+	return self.Type
+}
+
+func (self *ActionNxController2Property) SetType(v NxActionController2PropType) {
+	self.Type = v
+}
+
+func (self *ActionNxController2Property) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+
+	return nil
+}
+
+func DecodeActionNxController2Property(decoder *goloxi.Decoder) (IActionNxController2Property, error) {
+	_actionnxcontroller2property := &ActionNxController2Property{}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNxController2Property packet too short: %d < 2", decoder.Length())
+	}
+	_actionnxcontroller2property.Type = NxActionController2PropType(decoder.ReadUint16())
+
+	switch _actionnxcontroller2property.Type {
+	case 0:
+		return DecodeActionNxController2PropertyMaxLen(_actionnxcontroller2property, decoder)
+	case 1:
+		return DecodeActionNxController2PropertyControllerId(_actionnxcontroller2property, decoder)
+	case 2:
+		return DecodeActionNxController2PropertyReason(_actionnxcontroller2property, decoder)
+	case 3:
+		return DecodeActionNxController2PropertyUserdata(_actionnxcontroller2property, decoder)
+	case 4:
+		return DecodeActionNxController2PropertyPause(_actionnxcontroller2property, decoder)
+	case 5:
+		return DecodeActionNxController2PropertyMeterId(_actionnxcontroller2property, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ActionNxController2Property'", _actionnxcontroller2property.Type)
+	}
+}
+
+func NewActionNxController2Property(_type NxActionController2PropType) *ActionNxController2Property {
+	obj := &ActionNxController2Property{}
+	obj.Type = _type
+	return obj
+}
+
+type ActionNxController2PropertyControllerId struct {
+	*ActionNxController2Property
+	ControllerId uint16
+}
+
+type IActionNxController2PropertyControllerId interface {
+	IActionNxController2Property
+	GetControllerId() uint16
+}
+
+func (self *ActionNxController2PropertyControllerId) GetControllerId() uint16 {
+	return self.ControllerId
+}
+
+func (self *ActionNxController2PropertyControllerId) SetControllerId(v uint16) {
+	self.ControllerId = v
+}
+
+func (self *ActionNxController2PropertyControllerId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNxController2Property.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.ControllerId))
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeActionNxController2PropertyControllerId(parent *ActionNxController2Property, decoder *goloxi.Decoder) (*ActionNxController2PropertyControllerId, error) {
+	_actionnxcontroller2propertycontrollerid := &ActionNxController2PropertyControllerId{ActionNxController2Property: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNxController2PropertyControllerId packet too short: %d < 2", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_actionnxcontroller2propertycontrollerid.ControllerId = uint16(decoder.ReadUint16())
+	return _actionnxcontroller2propertycontrollerid, nil
+}
+
+func NewActionNxController2PropertyControllerId() *ActionNxController2PropertyControllerId {
+	obj := &ActionNxController2PropertyControllerId{
+		ActionNxController2Property: NewActionNxController2Property(1),
+	}
+	return obj
+}
+
+type ActionNxController2PropertyMaxLen struct {
+	*ActionNxController2Property
+	MaxLen uint16
+}
+
+type IActionNxController2PropertyMaxLen interface {
+	IActionNxController2Property
+	GetMaxLen() uint16
+}
+
+func (self *ActionNxController2PropertyMaxLen) GetMaxLen() uint16 {
+	return self.MaxLen
+}
+
+func (self *ActionNxController2PropertyMaxLen) SetMaxLen(v uint16) {
+	self.MaxLen = v
+}
+
+func (self *ActionNxController2PropertyMaxLen) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNxController2Property.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.MaxLen))
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeActionNxController2PropertyMaxLen(parent *ActionNxController2Property, decoder *goloxi.Decoder) (*ActionNxController2PropertyMaxLen, error) {
+	_actionnxcontroller2propertymaxlen := &ActionNxController2PropertyMaxLen{ActionNxController2Property: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNxController2PropertyMaxLen packet too short: %d < 2", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_actionnxcontroller2propertymaxlen.MaxLen = uint16(decoder.ReadUint16())
+	return _actionnxcontroller2propertymaxlen, nil
+}
+
+func NewActionNxController2PropertyMaxLen() *ActionNxController2PropertyMaxLen {
+	obj := &ActionNxController2PropertyMaxLen{
+		ActionNxController2Property: NewActionNxController2Property(0),
+	}
+	return obj
+}
+
+type ActionNxController2PropertyMeterId struct {
+	*ActionNxController2Property
+	MeterId uint32
+}
+
+type IActionNxController2PropertyMeterId interface {
+	IActionNxController2Property
+	GetMeterId() uint32
+}
+
+func (self *ActionNxController2PropertyMeterId) GetMeterId() uint32 {
+	return self.MeterId
+}
+
+func (self *ActionNxController2PropertyMeterId) SetMeterId(v uint32) {
+	self.MeterId = v
+}
+
+func (self *ActionNxController2PropertyMeterId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNxController2Property.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.MeterId))
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeActionNxController2PropertyMeterId(parent *ActionNxController2Property, decoder *goloxi.Decoder) (*ActionNxController2PropertyMeterId, error) {
+	_actionnxcontroller2propertymeterid := &ActionNxController2PropertyMeterId{ActionNxController2Property: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("ActionNxController2PropertyMeterId packet too short: %d < 4", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_actionnxcontroller2propertymeterid.MeterId = uint32(decoder.ReadUint32())
+	return _actionnxcontroller2propertymeterid, nil
+}
+
+func NewActionNxController2PropertyMeterId() *ActionNxController2PropertyMeterId {
+	obj := &ActionNxController2PropertyMeterId{
+		ActionNxController2Property: NewActionNxController2Property(5),
+	}
+	return obj
+}
+
+type ActionNxController2PropertyPause struct {
+	*ActionNxController2Property
+}
+
+type IActionNxController2PropertyPause interface {
+	IActionNxController2Property
+}
+
+func (self *ActionNxController2PropertyPause) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNxController2Property.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeActionNxController2PropertyPause(parent *ActionNxController2Property, decoder *goloxi.Decoder) (*ActionNxController2PropertyPause, error) {
+	_actionnxcontroller2propertypause := &ActionNxController2PropertyPause{ActionNxController2Property: parent}
+	defer decoder.SkipAlign()
+
+	return _actionnxcontroller2propertypause, nil
+}
+
+func NewActionNxController2PropertyPause() *ActionNxController2PropertyPause {
+	obj := &ActionNxController2PropertyPause{
+		ActionNxController2Property: NewActionNxController2Property(4),
+	}
+	return obj
+}
+
+type ActionNxController2PropertyReason struct {
+	*ActionNxController2Property
+	Reason PacketInReason
+}
+
+type IActionNxController2PropertyReason interface {
+	IActionNxController2Property
+	GetReason() PacketInReason
+}
+
+func (self *ActionNxController2PropertyReason) GetReason() PacketInReason {
+	return self.Reason
+}
+
+func (self *ActionNxController2PropertyReason) SetReason(v PacketInReason) {
+	self.Reason = v
+}
+
+func (self *ActionNxController2PropertyReason) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNxController2Property.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Reason))
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeActionNxController2PropertyReason(parent *ActionNxController2Property, decoder *goloxi.Decoder) (*ActionNxController2PropertyReason, error) {
+	_actionnxcontroller2propertyreason := &ActionNxController2PropertyReason{ActionNxController2Property: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("ActionNxController2PropertyReason packet too short: %d < 1", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_actionnxcontroller2propertyreason.Reason = PacketInReason(decoder.ReadByte())
+	return _actionnxcontroller2propertyreason, nil
+}
+
+func NewActionNxController2PropertyReason() *ActionNxController2PropertyReason {
+	obj := &ActionNxController2PropertyReason{
+		ActionNxController2Property: NewActionNxController2Property(2),
+	}
+	return obj
+}
+
+type ActionNxController2PropertyUserdata struct {
+	*ActionNxController2Property
+	Length   uint16
+	Userdata []byte
+}
+
+type IActionNxController2PropertyUserdata interface {
+	IActionNxController2Property
+	GetLength() uint16
+	GetUserdata() []byte
+}
+
+func (self *ActionNxController2PropertyUserdata) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *ActionNxController2PropertyUserdata) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *ActionNxController2PropertyUserdata) GetUserdata() []byte {
+	return self.Userdata
+}
+
+func (self *ActionNxController2PropertyUserdata) SetUserdata(v []byte) {
+	self.Userdata = v
+}
+
+func (self *ActionNxController2PropertyUserdata) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ActionNxController2Property.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.Write(self.Userdata)
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeActionNxController2PropertyUserdata(parent *ActionNxController2Property, decoder *goloxi.Decoder) (*ActionNxController2PropertyUserdata, error) {
+	_actionnxcontroller2propertyuserdata := &ActionNxController2PropertyUserdata{ActionNxController2Property: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ActionNxController2PropertyUserdata packet too short: %d < 2", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_actionnxcontroller2propertyuserdata.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(((_actionnxcontroller2propertyuserdata.Length)+7)/8*8), 2+2)
+	_actionnxcontroller2propertyuserdata.Userdata = decoder.Read(int(decoder.Length()))
+	return _actionnxcontroller2propertyuserdata, nil
+}
+
+func NewActionNxController2PropertyUserdata() *ActionNxController2PropertyUserdata {
+	obj := &ActionNxController2PropertyUserdata{
+		ActionNxController2Property: NewActionNxController2Property(3),
+	}
+	return obj
+}
+
+type BsnControllerConnection struct {
+	State       BsnControllerConnectionState
+	AuxiliaryId uint8
+	Role        ControllerRole
+	Uri         string
+}
+
+type IBsnControllerConnection interface {
+	goloxi.Serializable
+	GetState() BsnControllerConnectionState
+	GetAuxiliaryId() uint8
+	GetRole() ControllerRole
+	GetUri() string
+}
+
+func (self *BsnControllerConnection) GetState() BsnControllerConnectionState {
+	return self.State
+}
+
+func (self *BsnControllerConnection) SetState(v BsnControllerConnectionState) {
+	self.State = v
+}
+
+func (self *BsnControllerConnection) GetAuxiliaryId() uint8 {
+	return self.AuxiliaryId
+}
+
+func (self *BsnControllerConnection) SetAuxiliaryId(v uint8) {
+	self.AuxiliaryId = v
+}
+
+func (self *BsnControllerConnection) GetRole() ControllerRole {
+	return self.Role
+}
+
+func (self *BsnControllerConnection) SetRole(v ControllerRole) {
+	self.Role = v
+}
+
+func (self *BsnControllerConnection) GetUri() string {
+	return self.Uri
+}
+
+func (self *BsnControllerConnection) SetUri(v string) {
+	self.Uri = v
+}
+
+func (self *BsnControllerConnection) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint8(uint8(self.State))
+	encoder.PutUint8(uint8(self.AuxiliaryId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.Role))
+	encoder.Write([]byte(self.Uri))
+
+	return nil
+}
+
+func DecodeBsnControllerConnection(decoder *goloxi.Decoder) (*BsnControllerConnection, error) {
+	_bsncontrollerconnection := &BsnControllerConnection{}
+	if decoder.Length() < 264 {
+		return nil, fmt.Errorf("BsnControllerConnection packet too short: %d < 264", decoder.Length())
+	}
+	_bsncontrollerconnection.State = BsnControllerConnectionState(decoder.ReadByte())
+	_bsncontrollerconnection.AuxiliaryId = uint8(decoder.ReadByte())
+	decoder.Skip(2)
+	_bsncontrollerconnection.Role = ControllerRole(decoder.ReadUint32())
+	_bsncontrollerconnection.Uri = string(bytes.Trim(decoder.Read(256), "\x00"))
+	return _bsncontrollerconnection, nil
+}
+
+func NewBsnControllerConnection() *BsnControllerConnection {
+	obj := &BsnControllerConnection{}
+	return obj
+}
+
+type BsnDebugCounterDescStatsEntry struct {
+	CounterId   uint64
+	Name        string
+	Description string
+}
+
+type IBsnDebugCounterDescStatsEntry interface {
+	goloxi.Serializable
+	GetCounterId() uint64
+	GetName() string
+	GetDescription() string
+}
+
+func (self *BsnDebugCounterDescStatsEntry) GetCounterId() uint64 {
+	return self.CounterId
+}
+
+func (self *BsnDebugCounterDescStatsEntry) SetCounterId(v uint64) {
+	self.CounterId = v
+}
+
+func (self *BsnDebugCounterDescStatsEntry) GetName() string {
+	return self.Name
+}
+
+func (self *BsnDebugCounterDescStatsEntry) SetName(v string) {
+	self.Name = v
+}
+
+func (self *BsnDebugCounterDescStatsEntry) GetDescription() string {
+	return self.Description
+}
+
+func (self *BsnDebugCounterDescStatsEntry) SetDescription(v string) {
+	self.Description = v
+}
+
+func (self *BsnDebugCounterDescStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint64(uint64(self.CounterId))
+	encoder.Write([]byte(self.Name))
+	encoder.Write([]byte(self.Description))
+
+	return nil
+}
+
+func DecodeBsnDebugCounterDescStatsEntry(decoder *goloxi.Decoder) (*BsnDebugCounterDescStatsEntry, error) {
+	_bsndebugcounterdescstatsentry := &BsnDebugCounterDescStatsEntry{}
+	if decoder.Length() < 328 {
+		return nil, fmt.Errorf("BsnDebugCounterDescStatsEntry packet too short: %d < 328", decoder.Length())
+	}
+	_bsndebugcounterdescstatsentry.CounterId = uint64(decoder.ReadUint64())
+	_bsndebugcounterdescstatsentry.Name = string(bytes.Trim(decoder.Read(64), "\x00"))
+	_bsndebugcounterdescstatsentry.Description = string(bytes.Trim(decoder.Read(256), "\x00"))
+	return _bsndebugcounterdescstatsentry, nil
+}
+
+func NewBsnDebugCounterDescStatsEntry() *BsnDebugCounterDescStatsEntry {
+	obj := &BsnDebugCounterDescStatsEntry{}
+	return obj
+}
+
+type BsnDebugCounterStatsEntry struct {
+	CounterId uint64
+	Value     uint64
+}
+
+type IBsnDebugCounterStatsEntry interface {
+	goloxi.Serializable
+	GetCounterId() uint64
+	GetValue() uint64
+}
+
+func (self *BsnDebugCounterStatsEntry) GetCounterId() uint64 {
+	return self.CounterId
+}
+
+func (self *BsnDebugCounterStatsEntry) SetCounterId(v uint64) {
+	self.CounterId = v
+}
+
+func (self *BsnDebugCounterStatsEntry) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnDebugCounterStatsEntry) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnDebugCounterStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint64(uint64(self.CounterId))
+	encoder.PutUint64(uint64(self.Value))
+
+	return nil
+}
+
+func DecodeBsnDebugCounterStatsEntry(decoder *goloxi.Decoder) (*BsnDebugCounterStatsEntry, error) {
+	_bsndebugcounterstatsentry := &BsnDebugCounterStatsEntry{}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BsnDebugCounterStatsEntry packet too short: %d < 16", decoder.Length())
+	}
+	_bsndebugcounterstatsentry.CounterId = uint64(decoder.ReadUint64())
+	_bsndebugcounterstatsentry.Value = uint64(decoder.ReadUint64())
+	return _bsndebugcounterstatsentry, nil
+}
+
+func NewBsnDebugCounterStatsEntry() *BsnDebugCounterStatsEntry {
+	obj := &BsnDebugCounterStatsEntry{}
+	return obj
+}
+
+type BsnFlowChecksumBucketStatsEntry struct {
+	Checksum uint64
+}
+
+type IBsnFlowChecksumBucketStatsEntry interface {
+	goloxi.Serializable
+	GetChecksum() uint64
+}
+
+func (self *BsnFlowChecksumBucketStatsEntry) GetChecksum() uint64 {
+	return self.Checksum
+}
+
+func (self *BsnFlowChecksumBucketStatsEntry) SetChecksum(v uint64) {
+	self.Checksum = v
+}
+
+func (self *BsnFlowChecksumBucketStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint64(uint64(self.Checksum))
+
+	return nil
+}
+
+func DecodeBsnFlowChecksumBucketStatsEntry(decoder *goloxi.Decoder) (*BsnFlowChecksumBucketStatsEntry, error) {
+	_bsnflowchecksumbucketstatsentry := &BsnFlowChecksumBucketStatsEntry{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnFlowChecksumBucketStatsEntry packet too short: %d < 8", decoder.Length())
+	}
+	_bsnflowchecksumbucketstatsentry.Checksum = uint64(decoder.ReadUint64())
+	return _bsnflowchecksumbucketstatsentry, nil
+}
+
+func NewBsnFlowChecksumBucketStatsEntry() *BsnFlowChecksumBucketStatsEntry {
+	obj := &BsnFlowChecksumBucketStatsEntry{}
+	return obj
+}
+
+type BsnGenericStatsEntry struct {
+	Length uint16
+	Tlvs   []IBsnTlv
+}
+
+type IBsnGenericStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetTlvs() []IBsnTlv
+}
+
+func (self *BsnGenericStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnGenericStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnGenericStatsEntry) GetTlvs() []IBsnTlv {
+	return self.Tlvs
+}
+
+func (self *BsnGenericStatsEntry) SetTlvs(v []IBsnTlv) {
+	self.Tlvs = v
+}
+
+func (self *BsnGenericStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	for _, obj := range self.Tlvs {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGenericStatsEntry(decoder *goloxi.Decoder) (*BsnGenericStatsEntry, error) {
+	_bsngenericstatsentry := &BsnGenericStatsEntry{}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnGenericStatsEntry packet too short: %d < 2", decoder.Length())
+	}
+	_bsngenericstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsngenericstatsentry.Length), 2+0)
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngenericstatsentry.Tlvs = append(_bsngenericstatsentry.Tlvs, item)
+		}
+	}
+	return _bsngenericstatsentry, nil
+}
+
+func NewBsnGenericStatsEntry() *BsnGenericStatsEntry {
+	obj := &BsnGenericStatsEntry{}
+	return obj
+}
+
+type BsnGentableBucketStatsEntry struct {
+	Checksum Checksum128
+}
+
+type IBsnGentableBucketStatsEntry interface {
+	goloxi.Serializable
+	GetChecksum() Checksum128
+}
+
+func (self *BsnGentableBucketStatsEntry) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *BsnGentableBucketStatsEntry) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *BsnGentableBucketStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	self.Checksum.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeBsnGentableBucketStatsEntry(decoder *goloxi.Decoder) (*BsnGentableBucketStatsEntry, error) {
+	_bsngentablebucketstatsentry := &BsnGentableBucketStatsEntry{}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BsnGentableBucketStatsEntry packet too short: %d < 16", decoder.Length())
+	}
+	_bsngentablebucketstatsentry.Checksum.Decode(decoder)
+	return _bsngentablebucketstatsentry, nil
+}
+
+func NewBsnGentableBucketStatsEntry() *BsnGentableBucketStatsEntry {
+	obj := &BsnGentableBucketStatsEntry{}
+	return obj
+}
+
+type BsnGentableDescStatsEntry struct {
+	Length      uint16
+	TableId     uint16
+	Name        string
+	BucketsSize uint32
+	MaxEntries  uint32
+}
+
+type IBsnGentableDescStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetTableId() uint16
+	GetName() string
+	GetBucketsSize() uint32
+	GetMaxEntries() uint32
+}
+
+func (self *BsnGentableDescStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnGentableDescStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnGentableDescStatsEntry) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableDescStatsEntry) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableDescStatsEntry) GetName() string {
+	return self.Name
+}
+
+func (self *BsnGentableDescStatsEntry) SetName(v string) {
+	self.Name = v
+}
+
+func (self *BsnGentableDescStatsEntry) GetBucketsSize() uint32 {
+	return self.BucketsSize
+}
+
+func (self *BsnGentableDescStatsEntry) SetBucketsSize(v uint32) {
+	self.BucketsSize = v
+}
+
+func (self *BsnGentableDescStatsEntry) GetMaxEntries() uint32 {
+	return self.MaxEntries
+}
+
+func (self *BsnGentableDescStatsEntry) SetMaxEntries(v uint32) {
+	self.MaxEntries = v
+}
+
+func (self *BsnGentableDescStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.Write([]byte(self.Name))
+	encoder.PutUint32(uint32(self.BucketsSize))
+	encoder.PutUint32(uint32(self.MaxEntries))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableDescStatsEntry(decoder *goloxi.Decoder) (*BsnGentableDescStatsEntry, error) {
+	_bsngentabledescstatsentry := &BsnGentableDescStatsEntry{}
+	if decoder.Length() < 48 {
+		return nil, fmt.Errorf("BsnGentableDescStatsEntry packet too short: %d < 48", decoder.Length())
+	}
+	_bsngentabledescstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsngentabledescstatsentry.Length), 2+0)
+	_bsngentabledescstatsentry.TableId = uint16(decoder.ReadUint16())
+	_bsngentabledescstatsentry.Name = string(bytes.Trim(decoder.Read(32), "\x00"))
+	_bsngentabledescstatsentry.BucketsSize = uint32(decoder.ReadUint32())
+	_bsngentabledescstatsentry.MaxEntries = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _bsngentabledescstatsentry, nil
+}
+
+func NewBsnGentableDescStatsEntry() *BsnGentableDescStatsEntry {
+	obj := &BsnGentableDescStatsEntry{}
+	return obj
+}
+
+type BsnGentableEntryDescStatsEntry struct {
+	Length    uint16
+	KeyLength uint16
+	Checksum  Checksum128
+	Key       []IBsnTlv
+	Value     []IBsnTlv
+}
+
+type IBsnGentableEntryDescStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetKeyLength() uint16
+	GetChecksum() Checksum128
+	GetKey() []IBsnTlv
+	GetValue() []IBsnTlv
+}
+
+func (self *BsnGentableEntryDescStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnGentableEntryDescStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnGentableEntryDescStatsEntry) GetKeyLength() uint16 {
+	return self.KeyLength
+}
+
+func (self *BsnGentableEntryDescStatsEntry) SetKeyLength(v uint16) {
+	self.KeyLength = v
+}
+
+func (self *BsnGentableEntryDescStatsEntry) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *BsnGentableEntryDescStatsEntry) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *BsnGentableEntryDescStatsEntry) GetKey() []IBsnTlv {
+	return self.Key
+}
+
+func (self *BsnGentableEntryDescStatsEntry) SetKey(v []IBsnTlv) {
+	self.Key = v
+}
+
+func (self *BsnGentableEntryDescStatsEntry) GetValue() []IBsnTlv {
+	return self.Value
+}
+
+func (self *BsnGentableEntryDescStatsEntry) SetValue(v []IBsnTlv) {
+	self.Value = v
+}
+
+func (self *BsnGentableEntryDescStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint16(uint16(self.KeyLength))
+	self.Checksum.Serialize(encoder)
+	for _, obj := range self.Key {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+	for _, obj := range self.Value {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryDescStatsEntry(decoder *goloxi.Decoder) (*BsnGentableEntryDescStatsEntry, error) {
+	_bsngentableentrydescstatsentry := &BsnGentableEntryDescStatsEntry{}
+	if decoder.Length() < 20 {
+		return nil, fmt.Errorf("BsnGentableEntryDescStatsEntry packet too short: %d < 20", decoder.Length())
+	}
+	_bsngentableentrydescstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsngentableentrydescstatsentry.Length), 2+0)
+	_bsngentableentrydescstatsentry.KeyLength = uint16(decoder.ReadUint16())
+	_bsngentableentrydescstatsentry.Checksum.Decode(decoder)
+
+	for i := 0; i < int(_bsngentableentrydescstatsentry.KeyLength); i++ {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentrydescstatsentry.Key = append(_bsngentableentrydescstatsentry.Key, item)
+		}
+	}
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentrydescstatsentry.Value = append(_bsngentableentrydescstatsentry.Value, item)
+		}
+	}
+	return _bsngentableentrydescstatsentry, nil
+}
+
+func NewBsnGentableEntryDescStatsEntry() *BsnGentableEntryDescStatsEntry {
+	obj := &BsnGentableEntryDescStatsEntry{}
+	return obj
+}
+
+type BsnGentableEntryStatsEntry struct {
+	Length    uint16
+	KeyLength uint16
+	Key       []IBsnTlv
+	Stats     []IBsnTlv
+}
+
+type IBsnGentableEntryStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetKeyLength() uint16
+	GetKey() []IBsnTlv
+	GetStats() []IBsnTlv
+}
+
+func (self *BsnGentableEntryStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnGentableEntryStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnGentableEntryStatsEntry) GetKeyLength() uint16 {
+	return self.KeyLength
+}
+
+func (self *BsnGentableEntryStatsEntry) SetKeyLength(v uint16) {
+	self.KeyLength = v
+}
+
+func (self *BsnGentableEntryStatsEntry) GetKey() []IBsnTlv {
+	return self.Key
+}
+
+func (self *BsnGentableEntryStatsEntry) SetKey(v []IBsnTlv) {
+	self.Key = v
+}
+
+func (self *BsnGentableEntryStatsEntry) GetStats() []IBsnTlv {
+	return self.Stats
+}
+
+func (self *BsnGentableEntryStatsEntry) SetStats(v []IBsnTlv) {
+	self.Stats = v
+}
+
+func (self *BsnGentableEntryStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint16(uint16(self.KeyLength))
+	for _, obj := range self.Key {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+	for _, obj := range self.Stats {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryStatsEntry(decoder *goloxi.Decoder) (*BsnGentableEntryStatsEntry, error) {
+	_bsngentableentrystatsentry := &BsnGentableEntryStatsEntry{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnGentableEntryStatsEntry packet too short: %d < 4", decoder.Length())
+	}
+	_bsngentableentrystatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsngentableentrystatsentry.Length), 2+0)
+	_bsngentableentrystatsentry.KeyLength = uint16(decoder.ReadUint16())
+
+	for i := 0; i < int(_bsngentableentrystatsentry.KeyLength); i++ {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentrystatsentry.Key = append(_bsngentableentrystatsentry.Key, item)
+		}
+	}
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentrystatsentry.Stats = append(_bsngentableentrystatsentry.Stats, item)
+		}
+	}
+	return _bsngentableentrystatsentry, nil
+}
+
+func NewBsnGentableEntryStatsEntry() *BsnGentableEntryStatsEntry {
+	obj := &BsnGentableEntryStatsEntry{}
+	return obj
+}
+
+type BsnGentableStatsEntry struct {
+	TableId    uint16
+	EntryCount uint32
+	Checksum   Checksum128
+}
+
+type IBsnGentableStatsEntry interface {
+	goloxi.Serializable
+	GetTableId() uint16
+	GetEntryCount() uint32
+	GetChecksum() Checksum128
+}
+
+func (self *BsnGentableStatsEntry) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableStatsEntry) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableStatsEntry) GetEntryCount() uint32 {
+	return self.EntryCount
+}
+
+func (self *BsnGentableStatsEntry) SetEntryCount(v uint32) {
+	self.EntryCount = v
+}
+
+func (self *BsnGentableStatsEntry) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *BsnGentableStatsEntry) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *BsnGentableStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.EntryCount))
+	self.Checksum.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeBsnGentableStatsEntry(decoder *goloxi.Decoder) (*BsnGentableStatsEntry, error) {
+	_bsngentablestatsentry := &BsnGentableStatsEntry{}
+	if decoder.Length() < 24 {
+		return nil, fmt.Errorf("BsnGentableStatsEntry packet too short: %d < 24", decoder.Length())
+	}
+	_bsngentablestatsentry.TableId = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_bsngentablestatsentry.EntryCount = uint32(decoder.ReadUint32())
+	_bsngentablestatsentry.Checksum.Decode(decoder)
+	return _bsngentablestatsentry, nil
+}
+
+func NewBsnGentableStatsEntry() *BsnGentableStatsEntry {
+	obj := &BsnGentableStatsEntry{}
+	return obj
+}
+
+type BsnInterface struct {
+	HwAddr      net.HardwareAddr
+	Name        string
+	Ipv4Addr    net.IP
+	Ipv4Netmask net.IP
+}
+
+type IBsnInterface interface {
+	goloxi.Serializable
+	GetHwAddr() net.HardwareAddr
+	GetName() string
+	GetIpv4Addr() net.IP
+	GetIpv4Netmask() net.IP
+}
+
+func (self *BsnInterface) GetHwAddr() net.HardwareAddr {
+	return self.HwAddr
+}
+
+func (self *BsnInterface) SetHwAddr(v net.HardwareAddr) {
+	self.HwAddr = v
+}
+
+func (self *BsnInterface) GetName() string {
+	return self.Name
+}
+
+func (self *BsnInterface) SetName(v string) {
+	self.Name = v
+}
+
+func (self *BsnInterface) GetIpv4Addr() net.IP {
+	return self.Ipv4Addr
+}
+
+func (self *BsnInterface) SetIpv4Addr(v net.IP) {
+	self.Ipv4Addr = v
+}
+
+func (self *BsnInterface) GetIpv4Netmask() net.IP {
+	return self.Ipv4Netmask
+}
+
+func (self *BsnInterface) SetIpv4Netmask(v net.IP) {
+	self.Ipv4Netmask = v
+}
+
+func (self *BsnInterface) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.Write(self.HwAddr)
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.Write([]byte(self.Name))
+	encoder.Write(self.Ipv4Addr.To4())
+	encoder.Write(self.Ipv4Netmask.To4())
+
+	return nil
+}
+
+func DecodeBsnInterface(decoder *goloxi.Decoder) (*BsnInterface, error) {
+	_bsninterface := &BsnInterface{}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("BsnInterface packet too short: %d < 32", decoder.Length())
+	}
+	_bsninterface.HwAddr = net.HardwareAddr(decoder.Read(6))
+	decoder.Skip(2)
+	_bsninterface.Name = string(bytes.Trim(decoder.Read(16), "\x00"))
+	_bsninterface.Ipv4Addr = net.IP(decoder.Read(4))
+	_bsninterface.Ipv4Netmask = net.IP(decoder.Read(4))
+	return _bsninterface, nil
+}
+
+func NewBsnInterface() *BsnInterface {
+	obj := &BsnInterface{}
+	return obj
+}
+
+type BsnLacpStatsEntry struct {
+	PortNo              Port
+	ActorSysPriority    uint16
+	ActorSysMac         net.HardwareAddr
+	ActorPortPriority   uint16
+	ActorPortNum        uint16
+	ActorKey            uint16
+	ConvergenceStatus   uint8
+	PartnerSysPriority  uint16
+	PartnerSysMac       net.HardwareAddr
+	PartnerPortPriority uint16
+	PartnerPortNum      uint16
+	PartnerKey          uint16
+}
+
+type IBsnLacpStatsEntry interface {
+	goloxi.Serializable
+	GetPortNo() Port
+	GetActorSysPriority() uint16
+	GetActorSysMac() net.HardwareAddr
+	GetActorPortPriority() uint16
+	GetActorPortNum() uint16
+	GetActorKey() uint16
+	GetConvergenceStatus() uint8
+	GetPartnerSysPriority() uint16
+	GetPartnerSysMac() net.HardwareAddr
+	GetPartnerPortPriority() uint16
+	GetPartnerPortNum() uint16
+	GetPartnerKey() uint16
+}
+
+func (self *BsnLacpStatsEntry) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnLacpStatsEntry) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnLacpStatsEntry) GetActorSysPriority() uint16 {
+	return self.ActorSysPriority
+}
+
+func (self *BsnLacpStatsEntry) SetActorSysPriority(v uint16) {
+	self.ActorSysPriority = v
+}
+
+func (self *BsnLacpStatsEntry) GetActorSysMac() net.HardwareAddr {
+	return self.ActorSysMac
+}
+
+func (self *BsnLacpStatsEntry) SetActorSysMac(v net.HardwareAddr) {
+	self.ActorSysMac = v
+}
+
+func (self *BsnLacpStatsEntry) GetActorPortPriority() uint16 {
+	return self.ActorPortPriority
+}
+
+func (self *BsnLacpStatsEntry) SetActorPortPriority(v uint16) {
+	self.ActorPortPriority = v
+}
+
+func (self *BsnLacpStatsEntry) GetActorPortNum() uint16 {
+	return self.ActorPortNum
+}
+
+func (self *BsnLacpStatsEntry) SetActorPortNum(v uint16) {
+	self.ActorPortNum = v
+}
+
+func (self *BsnLacpStatsEntry) GetActorKey() uint16 {
+	return self.ActorKey
+}
+
+func (self *BsnLacpStatsEntry) SetActorKey(v uint16) {
+	self.ActorKey = v
+}
+
+func (self *BsnLacpStatsEntry) GetConvergenceStatus() uint8 {
+	return self.ConvergenceStatus
+}
+
+func (self *BsnLacpStatsEntry) SetConvergenceStatus(v uint8) {
+	self.ConvergenceStatus = v
+}
+
+func (self *BsnLacpStatsEntry) GetPartnerSysPriority() uint16 {
+	return self.PartnerSysPriority
+}
+
+func (self *BsnLacpStatsEntry) SetPartnerSysPriority(v uint16) {
+	self.PartnerSysPriority = v
+}
+
+func (self *BsnLacpStatsEntry) GetPartnerSysMac() net.HardwareAddr {
+	return self.PartnerSysMac
+}
+
+func (self *BsnLacpStatsEntry) SetPartnerSysMac(v net.HardwareAddr) {
+	self.PartnerSysMac = v
+}
+
+func (self *BsnLacpStatsEntry) GetPartnerPortPriority() uint16 {
+	return self.PartnerPortPriority
+}
+
+func (self *BsnLacpStatsEntry) SetPartnerPortPriority(v uint16) {
+	self.PartnerPortPriority = v
+}
+
+func (self *BsnLacpStatsEntry) GetPartnerPortNum() uint16 {
+	return self.PartnerPortNum
+}
+
+func (self *BsnLacpStatsEntry) SetPartnerPortNum(v uint16) {
+	self.PartnerPortNum = v
+}
+
+func (self *BsnLacpStatsEntry) GetPartnerKey() uint16 {
+	return self.PartnerKey
+}
+
+func (self *BsnLacpStatsEntry) SetPartnerKey(v uint16) {
+	self.PartnerKey = v
+}
+
+func (self *BsnLacpStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint16(uint16(self.ActorSysPriority))
+	encoder.Write(self.ActorSysMac)
+	encoder.PutUint16(uint16(self.ActorPortPriority))
+	encoder.PutUint16(uint16(self.ActorPortNum))
+	encoder.PutUint16(uint16(self.ActorKey))
+	encoder.PutUint8(uint8(self.ConvergenceStatus))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint16(uint16(self.PartnerSysPriority))
+	encoder.Write(self.PartnerSysMac)
+	encoder.PutUint16(uint16(self.PartnerPortPriority))
+	encoder.PutUint16(uint16(self.PartnerPortNum))
+	encoder.PutUint16(uint16(self.PartnerKey))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+
+	return nil
+}
+
+func DecodeBsnLacpStatsEntry(decoder *goloxi.Decoder) (*BsnLacpStatsEntry, error) {
+	_bsnlacpstatsentry := &BsnLacpStatsEntry{}
+	if decoder.Length() < 36 {
+		return nil, fmt.Errorf("BsnLacpStatsEntry packet too short: %d < 36", decoder.Length())
+	}
+	_bsnlacpstatsentry.PortNo.Decode(decoder)
+	_bsnlacpstatsentry.ActorSysPriority = uint16(decoder.ReadUint16())
+	_bsnlacpstatsentry.ActorSysMac = net.HardwareAddr(decoder.Read(6))
+	_bsnlacpstatsentry.ActorPortPriority = uint16(decoder.ReadUint16())
+	_bsnlacpstatsentry.ActorPortNum = uint16(decoder.ReadUint16())
+	_bsnlacpstatsentry.ActorKey = uint16(decoder.ReadUint16())
+	_bsnlacpstatsentry.ConvergenceStatus = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_bsnlacpstatsentry.PartnerSysPriority = uint16(decoder.ReadUint16())
+	_bsnlacpstatsentry.PartnerSysMac = net.HardwareAddr(decoder.Read(6))
+	_bsnlacpstatsentry.PartnerPortPriority = uint16(decoder.ReadUint16())
+	_bsnlacpstatsentry.PartnerPortNum = uint16(decoder.ReadUint16())
+	_bsnlacpstatsentry.PartnerKey = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	return _bsnlacpstatsentry, nil
+}
+
+func NewBsnLacpStatsEntry() *BsnLacpStatsEntry {
+	obj := &BsnLacpStatsEntry{}
+	return obj
+}
+
+type BsnPortCounterStatsEntry struct {
+	Length uint16
+	PortNo Port
+	Values []*Uint64
+}
+
+type IBsnPortCounterStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetPortNo() Port
+	GetValues() []*Uint64
+}
+
+func (self *BsnPortCounterStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnPortCounterStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnPortCounterStatsEntry) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnPortCounterStatsEntry) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnPortCounterStatsEntry) GetValues() []*Uint64 {
+	return self.Values
+}
+
+func (self *BsnPortCounterStatsEntry) SetValues(v []*Uint64) {
+	self.Values = v
+}
+
+func (self *BsnPortCounterStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	self.PortNo.Serialize(encoder)
+	for _, obj := range self.Values {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPortCounterStatsEntry(decoder *goloxi.Decoder) (*BsnPortCounterStatsEntry, error) {
+	_bsnportcounterstatsentry := &BsnPortCounterStatsEntry{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnPortCounterStatsEntry packet too short: %d < 8", decoder.Length())
+	}
+	_bsnportcounterstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsnportcounterstatsentry.Length), 2+0)
+	decoder.Skip(2)
+	_bsnportcounterstatsentry.PortNo.Decode(decoder)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeUint64(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnportcounterstatsentry.Values = append(_bsnportcounterstatsentry.Values, item)
+		}
+	}
+	return _bsnportcounterstatsentry, nil
+}
+
+func NewBsnPortCounterStatsEntry() *BsnPortCounterStatsEntry {
+	obj := &BsnPortCounterStatsEntry{}
+	return obj
+}
+
+type BsnSwitchPipelineStatsEntry struct {
+	Pipeline string
+}
+
+type IBsnSwitchPipelineStatsEntry interface {
+	goloxi.Serializable
+	GetPipeline() string
+}
+
+func (self *BsnSwitchPipelineStatsEntry) GetPipeline() string {
+	return self.Pipeline
+}
+
+func (self *BsnSwitchPipelineStatsEntry) SetPipeline(v string) {
+	self.Pipeline = v
+}
+
+func (self *BsnSwitchPipelineStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.Write([]byte(self.Pipeline))
+
+	return nil
+}
+
+func DecodeBsnSwitchPipelineStatsEntry(decoder *goloxi.Decoder) (*BsnSwitchPipelineStatsEntry, error) {
+	_bsnswitchpipelinestatsentry := &BsnSwitchPipelineStatsEntry{}
+	if decoder.Length() < 256 {
+		return nil, fmt.Errorf("BsnSwitchPipelineStatsEntry packet too short: %d < 256", decoder.Length())
+	}
+	_bsnswitchpipelinestatsentry.Pipeline = string(bytes.Trim(decoder.Read(256), "\x00"))
+	return _bsnswitchpipelinestatsentry, nil
+}
+
+func NewBsnSwitchPipelineStatsEntry() *BsnSwitchPipelineStatsEntry {
+	obj := &BsnSwitchPipelineStatsEntry{}
+	return obj
+}
+
+type BsnTableChecksumStatsEntry struct {
+	TableId  uint8
+	Checksum uint64
+}
+
+type IBsnTableChecksumStatsEntry interface {
+	goloxi.Serializable
+	GetTableId() uint8
+	GetChecksum() uint64
+}
+
+func (self *BsnTableChecksumStatsEntry) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *BsnTableChecksumStatsEntry) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *BsnTableChecksumStatsEntry) GetChecksum() uint64 {
+	return self.Checksum
+}
+
+func (self *BsnTableChecksumStatsEntry) SetChecksum(v uint64) {
+	self.Checksum = v
+}
+
+func (self *BsnTableChecksumStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.PutUint64(uint64(self.Checksum))
+
+	return nil
+}
+
+func DecodeBsnTableChecksumStatsEntry(decoder *goloxi.Decoder) (*BsnTableChecksumStatsEntry, error) {
+	_bsntablechecksumstatsentry := &BsnTableChecksumStatsEntry{}
+	if decoder.Length() < 9 {
+		return nil, fmt.Errorf("BsnTableChecksumStatsEntry packet too short: %d < 9", decoder.Length())
+	}
+	_bsntablechecksumstatsentry.TableId = uint8(decoder.ReadByte())
+	_bsntablechecksumstatsentry.Checksum = uint64(decoder.ReadUint64())
+	return _bsntablechecksumstatsentry, nil
+}
+
+func NewBsnTableChecksumStatsEntry() *BsnTableChecksumStatsEntry {
+	obj := &BsnTableChecksumStatsEntry{}
+	return obj
+}
+
+type BsnTlv struct {
+	Type   uint16
+	Length uint16
+}
+
+type IBsnTlv interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLength() uint16
+}
+
+func (self *BsnTlv) GetType() uint16 {
+	return self.Type
+}
+
+func (self *BsnTlv) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *BsnTlv) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnTlv) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnTlv) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Length))
+
+	return nil
+}
+
+func DecodeBsnTlv(decoder *goloxi.Decoder) (IBsnTlv, error) {
+	_bsntlv := &BsnTlv{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlv packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlv.Type = uint16(decoder.ReadUint16())
+	_bsntlv.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsntlv.Length), 2+2)
+
+	switch _bsntlv.Type {
+	case 0:
+		return DecodeBsnTlvPort(_bsntlv, decoder)
+	case 1:
+		return DecodeBsnTlvMac(_bsntlv, decoder)
+	case 2:
+		return DecodeBsnTlvRxPackets(_bsntlv, decoder)
+	case 3:
+		return DecodeBsnTlvTxPackets(_bsntlv, decoder)
+	case 4:
+		return DecodeBsnTlvIpv4(_bsntlv, decoder)
+	case 5:
+		return DecodeBsnTlvIdleTime(_bsntlv, decoder)
+	case 6:
+		return DecodeBsnTlvVlanVid(_bsntlv, decoder)
+	case 7:
+		return DecodeBsnTlvIdleNotification(_bsntlv, decoder)
+	case 8:
+		return DecodeBsnTlvIdleTimeout(_bsntlv, decoder)
+	case 9:
+		return DecodeBsnTlvUnicastQueryTimeout(_bsntlv, decoder)
+	case 10:
+		return DecodeBsnTlvBroadcastQueryTimeout(_bsntlv, decoder)
+	case 11:
+		return DecodeBsnTlvRequestPackets(_bsntlv, decoder)
+	case 12:
+		return DecodeBsnTlvReplyPackets(_bsntlv, decoder)
+	case 13:
+		return DecodeBsnTlvMissPackets(_bsntlv, decoder)
+	case 14:
+		return DecodeBsnTlvCircuitId(_bsntlv, decoder)
+	case 15:
+		return DecodeBsnTlvUdfId(_bsntlv, decoder)
+	case 16:
+		return DecodeBsnTlvUdfAnchor(_bsntlv, decoder)
+	case 17:
+		return DecodeBsnTlvUdfOffset(_bsntlv, decoder)
+	case 18:
+		return DecodeBsnTlvUdfLength(_bsntlv, decoder)
+	case 19:
+		return DecodeBsnTlvVrf(_bsntlv, decoder)
+	case 20:
+		return DecodeBsnTlvQueueId(_bsntlv, decoder)
+	case 21:
+		return DecodeBsnTlvQueueWeight(_bsntlv, decoder)
+	case 22:
+		return DecodeBsnTlvCrcEnabled(_bsntlv, decoder)
+	case 23:
+		return DecodeBsnTlvExternalIp(_bsntlv, decoder)
+	case 24:
+		return DecodeBsnTlvExternalMac(_bsntlv, decoder)
+	case 25:
+		return DecodeBsnTlvExternalNetmask(_bsntlv, decoder)
+	case 26:
+		return DecodeBsnTlvExternalGatewayIp(_bsntlv, decoder)
+	case 27:
+		return DecodeBsnTlvInternalMac(_bsntlv, decoder)
+	case 28:
+		return DecodeBsnTlvInternalGatewayMac(_bsntlv, decoder)
+	case 29:
+		return DecodeBsnTlvExternalGatewayMac(_bsntlv, decoder)
+	case 30:
+		return DecodeBsnTlvSamplingRate(_bsntlv, decoder)
+	case 31:
+		return DecodeBsnTlvHeaderSize(_bsntlv, decoder)
+	case 32:
+		return DecodeBsnTlvEthSrc(_bsntlv, decoder)
+	case 33:
+		return DecodeBsnTlvEthDst(_bsntlv, decoder)
+	case 34:
+		return DecodeBsnTlvIpv4Src(_bsntlv, decoder)
+	case 35:
+		return DecodeBsnTlvIpv4Dst(_bsntlv, decoder)
+	case 36:
+		return DecodeBsnTlvUdpSrc(_bsntlv, decoder)
+	case 37:
+		return DecodeBsnTlvUdpDst(_bsntlv, decoder)
+	case 38:
+		return DecodeBsnTlvSubAgentId(_bsntlv, decoder)
+	case 39:
+		return DecodeBsnTlvTxBytes(_bsntlv, decoder)
+	case 40:
+		return DecodeBsnTlvActorSystemPriority(_bsntlv, decoder)
+	case 41:
+		return DecodeBsnTlvActorSystemMac(_bsntlv, decoder)
+	case 42:
+		return DecodeBsnTlvActorPortPriority(_bsntlv, decoder)
+	case 43:
+		return DecodeBsnTlvActorPortNum(_bsntlv, decoder)
+	case 44:
+		return DecodeBsnTlvActorKey(_bsntlv, decoder)
+	case 45:
+		return DecodeBsnTlvConvergenceStatus(_bsntlv, decoder)
+	case 47:
+		return DecodeBsnTlvPartnerSystemPriority(_bsntlv, decoder)
+	case 48:
+		return DecodeBsnTlvPartnerSystemMac(_bsntlv, decoder)
+	case 49:
+		return DecodeBsnTlvPartnerPortPriority(_bsntlv, decoder)
+	case 50:
+		return DecodeBsnTlvPartnerPortNum(_bsntlv, decoder)
+	case 51:
+		return DecodeBsnTlvPartnerKey(_bsntlv, decoder)
+	case 52:
+		return DecodeBsnTlvName(_bsntlv, decoder)
+	case 53:
+		return DecodeBsnTlvActorState(_bsntlv, decoder)
+	case 54:
+		return DecodeBsnTlvPartnerState(_bsntlv, decoder)
+	case 55:
+		return DecodeBsnTlvData(_bsntlv, decoder)
+	case 56:
+		return DecodeBsnTlvMacMask(_bsntlv, decoder)
+	case 57:
+		return DecodeBsnTlvPriority(_bsntlv, decoder)
+	case 58:
+		return DecodeBsnTlvInterval(_bsntlv, decoder)
+	case 59:
+		return DecodeBsnTlvReference(_bsntlv, decoder)
+	case 60:
+		return DecodeBsnTlvIpv4Netmask(_bsntlv, decoder)
+	case 61:
+		return DecodeBsnTlvMplsLabel(_bsntlv, decoder)
+	case 62:
+		return DecodeBsnTlvMplsControlWord(_bsntlv, decoder)
+	case 63:
+		return DecodeBsnTlvMplsSequenced(_bsntlv, decoder)
+	case 64:
+		return DecodeBsnTlvBucket(_bsntlv, decoder)
+	case 65:
+		return DecodeBsnTlvTcpSrc(_bsntlv, decoder)
+	case 66:
+		return DecodeBsnTlvTcpDst(_bsntlv, decoder)
+	case 67:
+		return DecodeBsnTlvIpProto(_bsntlv, decoder)
+	case 68:
+		return DecodeBsnTlvIcmpType(_bsntlv, decoder)
+	case 69:
+		return DecodeBsnTlvIcmpCode(_bsntlv, decoder)
+	case 70:
+		return DecodeBsnTlvIcmpId(_bsntlv, decoder)
+	case 71:
+		return DecodeBsnTlvRxBytes(_bsntlv, decoder)
+	case 72:
+		return DecodeBsnTlvVlanPcp(_bsntlv, decoder)
+	case 73:
+		return DecodeBsnTlvStripVlanOnEgress(_bsntlv, decoder)
+	case 74:
+		return DecodeBsnTlvSetLoopbackMode(_bsntlv, decoder)
+	case 75:
+		return DecodeBsnTlvStripMplsL2OnIngress(_bsntlv, decoder)
+	case 76:
+		return DecodeBsnTlvStripMplsL3OnIngress(_bsntlv, decoder)
+	case 77:
+		return DecodeBsnTlvVlanVidMask(_bsntlv, decoder)
+	case 78:
+		return DecodeBsnTlvIgmpSnooping(_bsntlv, decoder)
+	case 79:
+		return DecodeBsnTlvL2MulticastLookup(_bsntlv, decoder)
+	case 80:
+		return DecodeBsnTlvGenerationId(_bsntlv, decoder)
+	case 81:
+		return DecodeBsnTlvAnchor(_bsntlv, decoder)
+	case 82:
+		return DecodeBsnTlvOffset(_bsntlv, decoder)
+	case 83:
+		return DecodeBsnTlvNegate(_bsntlv, decoder)
+	case 84:
+		return DecodeBsnTlvIpv6(_bsntlv, decoder)
+	case 85:
+		return DecodeBsnTlvDecap(_bsntlv, decoder)
+	case 86:
+		return DecodeBsnTlvVni(_bsntlv, decoder)
+	case 87:
+		return DecodeBsnTlvMcgTypeVxlan(_bsntlv, decoder)
+	case 88:
+		return DecodeBsnTlvPortVxlanMode(_bsntlv, decoder)
+	case 89:
+		return DecodeBsnTlvRateUnit(_bsntlv, decoder)
+	case 90:
+		return DecodeBsnTlvBroadcastRate(_bsntlv, decoder)
+	case 91:
+		return DecodeBsnTlvKnownMulticastRate(_bsntlv, decoder)
+	case 92:
+		return DecodeBsnTlvUnknownMulticastRate(_bsntlv, decoder)
+	case 93:
+		return DecodeBsnTlvUnicastRate(_bsntlv, decoder)
+	case 94:
+		return DecodeBsnTlvNexthopTypeVxlan(_bsntlv, decoder)
+	case 95:
+		return DecodeBsnTlvMulticastInterfaceId(_bsntlv, decoder)
+	case 96:
+		return DecodeBsnTlvUsePacketState(_bsntlv, decoder)
+	case 97:
+		return DecodeBsnTlvStatus(_bsntlv, decoder)
+	case 98:
+		return DecodeBsnTlvVlanMacList(_bsntlv, decoder)
+	case 99:
+		return DecodeBsnTlvVfi(_bsntlv, decoder)
+	case 100:
+		return DecodeBsnTlvHashSeed(_bsntlv, decoder)
+	case 101:
+		return DecodeBsnTlvHashType(_bsntlv, decoder)
+	case 102:
+		return DecodeBsnTlvHashPacketType(_bsntlv, decoder)
+	case 103:
+		return DecodeBsnTlvHashPacketField(_bsntlv, decoder)
+	case 104:
+		return DecodeBsnTlvHashGtpHeaderMatch(_bsntlv, decoder)
+	case 105:
+		return DecodeBsnTlvHashGtpPortMatch(_bsntlv, decoder)
+	case 106:
+		return DecodeBsnTlvUntagged(_bsntlv, decoder)
+	case 107:
+		return DecodeBsnTlvVfpClassId(_bsntlv, decoder)
+	case 108:
+		return DecodeBsnTlvQosPriority(_bsntlv, decoder)
+	case 109:
+		return DecodeBsnTlvParentPort(_bsntlv, decoder)
+	case 110:
+		return DecodeBsnTlvLoopbackPort(_bsntlv, decoder)
+	case 111:
+		return DecodeBsnTlvVpnKey(_bsntlv, decoder)
+	case 112:
+		return DecodeBsnTlvDscp(_bsntlv, decoder)
+	case 113:
+		return DecodeBsnTlvTtl(_bsntlv, decoder)
+	case 114:
+		return DecodeBsnTlvNextHopMac(_bsntlv, decoder)
+	case 115:
+		return DecodeBsnTlvNextHopIpv4(_bsntlv, decoder)
+	case 116:
+		return DecodeBsnTlvRateLimit(_bsntlv, decoder)
+	case 117:
+		return DecodeBsnTlvVxlanEgressLag(_bsntlv, decoder)
+	case 118:
+		return DecodeBsnTlvCpuLag(_bsntlv, decoder)
+	case 119:
+		return DecodeBsnTlvUint64List(_bsntlv, decoder)
+	case 120:
+		return DecodeBsnTlvDisableSrcMacCheck(_bsntlv, decoder)
+	case 121:
+		return DecodeBsnTlvDrop(_bsntlv, decoder)
+	case 122:
+		return DecodeBsnTlvIpv6Prefix(_bsntlv, decoder)
+	case 123:
+		return DecodeBsnTlvNdpOffload(_bsntlv, decoder)
+	case 124:
+		return DecodeBsnTlvNdpStatic(_bsntlv, decoder)
+	case 125:
+		return DecodeBsnTlvIcmpv6Chksum(_bsntlv, decoder)
+	case 126:
+		return DecodeBsnTlvIpv6Src(_bsntlv, decoder)
+	case 127:
+		return DecodeBsnTlvIpv6Dst(_bsntlv, decoder)
+	case 128:
+		return DecodeBsnTlvPushVlanOnIngress(_bsntlv, decoder)
+	case 129:
+		return DecodeBsnTlvApplyPackets(_bsntlv, decoder)
+	case 130:
+		return DecodeBsnTlvApplyBytes(_bsntlv, decoder)
+	case 131:
+		return DecodeBsnTlvEthType(_bsntlv, decoder)
+	case 132:
+		return DecodeBsnTlvEcn(_bsntlv, decoder)
+	case 133:
+		return DecodeBsnTlvTcpFlags(_bsntlv, decoder)
+	case 134:
+		return DecodeBsnTlvL3InterfaceClassId(_bsntlv, decoder)
+	case 135:
+		return DecodeBsnTlvL3SrcClassId(_bsntlv, decoder)
+	case 136:
+		return DecodeBsnTlvL3DstClassId(_bsntlv, decoder)
+	case 137:
+		return DecodeBsnTlvEgressOnly(_bsntlv, decoder)
+	case 138:
+		return DecodeBsnTlvIngressPortGroupId(_bsntlv, decoder)
+	case 139:
+		return DecodeBsnTlvEgressPortGroupId(_bsntlv, decoder)
+	case 140:
+		return DecodeBsnTlvDataMask(_bsntlv, decoder)
+	case 141:
+		return DecodeBsnTlvPortUsage(_bsntlv, decoder)
+	case 142:
+		return DecodeBsnTlvTunnelCapability(_bsntlv, decoder)
+	case 143:
+		return DecodeBsnTlvEnhancedHashCapability(_bsntlv, decoder)
+	case 144:
+		return DecodeBsnTlvAutoNegotiation(_bsntlv, decoder)
+	case 145:
+		return DecodeBsnTlvHashAlgorithm(_bsntlv, decoder)
+	case 146:
+		return DecodeBsnTlvLoopbackMode(_bsntlv, decoder)
+	case 147:
+		return DecodeBsnTlvNoArpResponse(_bsntlv, decoder)
+	case 148:
+		return DecodeBsnTlvNoNsResponse(_bsntlv, decoder)
+	case 149:
+		return DecodeBsnTlvForwardErrorCorrection(_bsntlv, decoder)
+	case 150:
+		return DecodeBsnTlvOpticsAlwaysEnabled(_bsntlv, decoder)
+	case 151:
+		return DecodeBsnTlvForceLinkUp(_bsntlv, decoder)
+	case 152:
+		return DecodeBsnTlvRestServer(_bsntlv, decoder)
+	case 153:
+		return DecodeBsnTlvUriScheme(_bsntlv, decoder)
+	case 154:
+		return DecodeBsnTlvTimestamp(_bsntlv, decoder)
+	case 155:
+		return DecodeBsnTlvRecordPackets(_bsntlv, decoder)
+	case 156:
+		return DecodeBsnTlvPortSpeedGbps(_bsntlv, decoder)
+	case 157:
+		return DecodeBsnTlvOuterSrcMac(_bsntlv, decoder)
+	case 158:
+		return DecodeBsnTlvVirtual(_bsntlv, decoder)
+	case 159:
+		return DecodeBsnTlvPduaRxInstance(_bsntlv, decoder)
+	case 160:
+		return DecodeBsnTlvLagOptions(_bsntlv, decoder)
+	case 161:
+		return DecodeBsnTlvRoutingParam(_bsntlv, decoder)
+	case 162:
+		return DecodeBsnTlvPushVlanOnEgress(_bsntlv, decoder)
+	case 163:
+		return DecodeBsnTlvFlood(_bsntlv, decoder)
+	case 164:
+		return DecodeBsnTlvUpgrade(_bsntlv, decoder)
+	case 165:
+		return DecodeBsnTlvFabricPortRole(_bsntlv, decoder)
+	case 166:
+		return DecodeBsnTlvUserConfigured(_bsntlv, decoder)
+	case 167:
+		return DecodeBsnTlvUint32(_bsntlv, decoder)
+	case 168:
+		return DecodeBsnTlvL3(_bsntlv, decoder)
+	case 169:
+		return DecodeBsnTlvIpTunnelType(_bsntlv, decoder)
+	case 170:
+		return DecodeBsnTlvMulticastPacket(_bsntlv, decoder)
+	case 171:
+		return DecodeBsnTlvPimDr(_bsntlv, decoder)
+	case 172:
+		return DecodeBsnTlvPassive(_bsntlv, decoder)
+	case 173:
+		return DecodeBsnTlvIdentifier(_bsntlv, decoder)
+	case 174:
+		return DecodeBsnTlvMultiplier(_bsntlv, decoder)
+	case 175:
+		return DecodeBsnTlvEncap(_bsntlv, decoder)
+	case 176:
+		return DecodeBsnTlvBfdEndpoint(_bsntlv, decoder)
+	case 177:
+		return DecodeBsnTlvBfdState(_bsntlv, decoder)
+	case 178:
+		return DecodeBsnTlvLrAllEnabled(_bsntlv, decoder)
+	case 179:
+		return DecodeBsnTlvPortMode(_bsntlv, decoder)
+	case 180:
+		return DecodeBsnTlvUdfCapability(_bsntlv, decoder)
+	case 181:
+		return DecodeBsnTlvPimHelloFlood(_bsntlv, decoder)
+	case 182:
+		return DecodeBsnTlvFlowClassify(_bsntlv, decoder)
+	case 183:
+		return DecodeBsnTlvFlowIdentifier(_bsntlv, decoder)
+	case 184:
+		return DecodeBsnTlvFlowClassifier(_bsntlv, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'BsnTlv'", _bsntlv.Type)
+	}
+}
+
+func NewBsnTlv(_type uint16) *BsnTlv {
+	obj := &BsnTlv{}
+	obj.Type = _type
+	return obj
+}
+
+type BsnTlvActorKey struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvActorKey interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvActorKey) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvActorKey) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvActorKey) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvActorKey(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvActorKey, error) {
+	_bsntlvactorkey := &BsnTlvActorKey{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvActorKey packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvactorkey.Value = uint16(decoder.ReadUint16())
+	return _bsntlvactorkey, nil
+}
+
+func NewBsnTlvActorKey() *BsnTlvActorKey {
+	obj := &BsnTlvActorKey{
+		BsnTlv: NewBsnTlv(44),
+	}
+	return obj
+}
+
+type BsnTlvActorPortNum struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvActorPortNum interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvActorPortNum) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvActorPortNum) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvActorPortNum) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvActorPortNum(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvActorPortNum, error) {
+	_bsntlvactorportnum := &BsnTlvActorPortNum{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvActorPortNum packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvactorportnum.Value = uint16(decoder.ReadUint16())
+	return _bsntlvactorportnum, nil
+}
+
+func NewBsnTlvActorPortNum() *BsnTlvActorPortNum {
+	obj := &BsnTlvActorPortNum{
+		BsnTlv: NewBsnTlv(43),
+	}
+	return obj
+}
+
+type BsnTlvActorPortPriority struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvActorPortPriority interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvActorPortPriority) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvActorPortPriority) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvActorPortPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvActorPortPriority(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvActorPortPriority, error) {
+	_bsntlvactorportpriority := &BsnTlvActorPortPriority{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvActorPortPriority packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvactorportpriority.Value = uint16(decoder.ReadUint16())
+	return _bsntlvactorportpriority, nil
+}
+
+func NewBsnTlvActorPortPriority() *BsnTlvActorPortPriority {
+	obj := &BsnTlvActorPortPriority{
+		BsnTlv: NewBsnTlv(42),
+	}
+	return obj
+}
+
+type BsnTlvActorState struct {
+	*BsnTlv
+	Value BsnLacpState
+}
+
+type IBsnTlvActorState interface {
+	IBsnTlv
+	GetValue() BsnLacpState
+}
+
+func (self *BsnTlvActorState) GetValue() BsnLacpState {
+	return self.Value
+}
+
+func (self *BsnTlvActorState) SetValue(v BsnLacpState) {
+	self.Value = v
+}
+
+func (self *BsnTlvActorState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvActorState(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvActorState, error) {
+	_bsntlvactorstate := &BsnTlvActorState{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvActorState packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvactorstate.Value = BsnLacpState(decoder.ReadByte())
+	return _bsntlvactorstate, nil
+}
+
+func NewBsnTlvActorState() *BsnTlvActorState {
+	obj := &BsnTlvActorState{
+		BsnTlv: NewBsnTlv(53),
+	}
+	return obj
+}
+
+type BsnTlvActorSystemMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvActorSystemMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvActorSystemMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvActorSystemMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvActorSystemMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvActorSystemMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvActorSystemMac, error) {
+	_bsntlvactorsystemmac := &BsnTlvActorSystemMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvActorSystemMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvactorsystemmac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvactorsystemmac, nil
+}
+
+func NewBsnTlvActorSystemMac() *BsnTlvActorSystemMac {
+	obj := &BsnTlvActorSystemMac{
+		BsnTlv: NewBsnTlv(41),
+	}
+	return obj
+}
+
+type BsnTlvActorSystemPriority struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvActorSystemPriority interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvActorSystemPriority) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvActorSystemPriority) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvActorSystemPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvActorSystemPriority(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvActorSystemPriority, error) {
+	_bsntlvactorsystempriority := &BsnTlvActorSystemPriority{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvActorSystemPriority packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvactorsystempriority.Value = uint16(decoder.ReadUint16())
+	return _bsntlvactorsystempriority, nil
+}
+
+func NewBsnTlvActorSystemPriority() *BsnTlvActorSystemPriority {
+	obj := &BsnTlvActorSystemPriority{
+		BsnTlv: NewBsnTlv(40),
+	}
+	return obj
+}
+
+type BsnTlvAnchor struct {
+	*BsnTlv
+	Value BsnAnchor
+}
+
+type IBsnTlvAnchor interface {
+	IBsnTlv
+	GetValue() BsnAnchor
+}
+
+func (self *BsnTlvAnchor) GetValue() BsnAnchor {
+	return self.Value
+}
+
+func (self *BsnTlvAnchor) SetValue(v BsnAnchor) {
+	self.Value = v
+}
+
+func (self *BsnTlvAnchor) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvAnchor(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvAnchor, error) {
+	_bsntlvanchor := &BsnTlvAnchor{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvAnchor packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvanchor.Value = BsnAnchor(decoder.ReadUint16())
+	return _bsntlvanchor, nil
+}
+
+func NewBsnTlvAnchor() *BsnTlvAnchor {
+	obj := &BsnTlvAnchor{
+		BsnTlv: NewBsnTlv(81),
+	}
+	return obj
+}
+
+type BsnTlvApplyBytes struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvApplyBytes interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvApplyBytes) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvApplyBytes) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvApplyBytes) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvApplyBytes(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvApplyBytes, error) {
+	_bsntlvapplybytes := &BsnTlvApplyBytes{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvApplyBytes packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvapplybytes.Value = uint64(decoder.ReadUint64())
+	return _bsntlvapplybytes, nil
+}
+
+func NewBsnTlvApplyBytes() *BsnTlvApplyBytes {
+	obj := &BsnTlvApplyBytes{
+		BsnTlv: NewBsnTlv(130),
+	}
+	return obj
+}
+
+type BsnTlvApplyPackets struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvApplyPackets interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvApplyPackets) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvApplyPackets) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvApplyPackets) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvApplyPackets(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvApplyPackets, error) {
+	_bsntlvapplypackets := &BsnTlvApplyPackets{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvApplyPackets packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvapplypackets.Value = uint64(decoder.ReadUint64())
+	return _bsntlvapplypackets, nil
+}
+
+func NewBsnTlvApplyPackets() *BsnTlvApplyPackets {
+	obj := &BsnTlvApplyPackets{
+		BsnTlv: NewBsnTlv(129),
+	}
+	return obj
+}
+
+type BsnTlvAutoNegotiation struct {
+	*BsnTlv
+	Value BsnAutoNegotiationType
+}
+
+type IBsnTlvAutoNegotiation interface {
+	IBsnTlv
+	GetValue() BsnAutoNegotiationType
+}
+
+func (self *BsnTlvAutoNegotiation) GetValue() BsnAutoNegotiationType {
+	return self.Value
+}
+
+func (self *BsnTlvAutoNegotiation) SetValue(v BsnAutoNegotiationType) {
+	self.Value = v
+}
+
+func (self *BsnTlvAutoNegotiation) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvAutoNegotiation(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvAutoNegotiation, error) {
+	_bsntlvautonegotiation := &BsnTlvAutoNegotiation{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvAutoNegotiation packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvautonegotiation.Value = BsnAutoNegotiationType(decoder.ReadByte())
+	return _bsntlvautonegotiation, nil
+}
+
+func NewBsnTlvAutoNegotiation() *BsnTlvAutoNegotiation {
+	obj := &BsnTlvAutoNegotiation{
+		BsnTlv: NewBsnTlv(144),
+	}
+	return obj
+}
+
+type BsnTlvBfdEndpoint struct {
+	*BsnTlv
+	Value BsnBfdEndpoint
+}
+
+type IBsnTlvBfdEndpoint interface {
+	IBsnTlv
+	GetValue() BsnBfdEndpoint
+}
+
+func (self *BsnTlvBfdEndpoint) GetValue() BsnBfdEndpoint {
+	return self.Value
+}
+
+func (self *BsnTlvBfdEndpoint) SetValue(v BsnBfdEndpoint) {
+	self.Value = v
+}
+
+func (self *BsnTlvBfdEndpoint) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvBfdEndpoint(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvBfdEndpoint, error) {
+	_bsntlvbfdendpoint := &BsnTlvBfdEndpoint{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvBfdEndpoint packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvbfdendpoint.Value = BsnBfdEndpoint(decoder.ReadByte())
+	return _bsntlvbfdendpoint, nil
+}
+
+func NewBsnTlvBfdEndpoint() *BsnTlvBfdEndpoint {
+	obj := &BsnTlvBfdEndpoint{
+		BsnTlv: NewBsnTlv(176),
+	}
+	return obj
+}
+
+type BsnTlvBfdState struct {
+	*BsnTlv
+	Value BsnBfdEndpointState
+}
+
+type IBsnTlvBfdState interface {
+	IBsnTlv
+	GetValue() BsnBfdEndpointState
+}
+
+func (self *BsnTlvBfdState) GetValue() BsnBfdEndpointState {
+	return self.Value
+}
+
+func (self *BsnTlvBfdState) SetValue(v BsnBfdEndpointState) {
+	self.Value = v
+}
+
+func (self *BsnTlvBfdState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvBfdState(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvBfdState, error) {
+	_bsntlvbfdstate := &BsnTlvBfdState{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvBfdState packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvbfdstate.Value = BsnBfdEndpointState(decoder.ReadByte())
+	return _bsntlvbfdstate, nil
+}
+
+func NewBsnTlvBfdState() *BsnTlvBfdState {
+	obj := &BsnTlvBfdState{
+		BsnTlv: NewBsnTlv(177),
+	}
+	return obj
+}
+
+type BsnTlvBroadcastQueryTimeout struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvBroadcastQueryTimeout interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvBroadcastQueryTimeout) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvBroadcastQueryTimeout) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvBroadcastQueryTimeout) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvBroadcastQueryTimeout(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvBroadcastQueryTimeout, error) {
+	_bsntlvbroadcastquerytimeout := &BsnTlvBroadcastQueryTimeout{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvBroadcastQueryTimeout packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvbroadcastquerytimeout.Value = uint32(decoder.ReadUint32())
+	return _bsntlvbroadcastquerytimeout, nil
+}
+
+func NewBsnTlvBroadcastQueryTimeout() *BsnTlvBroadcastQueryTimeout {
+	obj := &BsnTlvBroadcastQueryTimeout{
+		BsnTlv: NewBsnTlv(10),
+	}
+	return obj
+}
+
+type BsnTlvBroadcastRate struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvBroadcastRate interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvBroadcastRate) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvBroadcastRate) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvBroadcastRate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvBroadcastRate(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvBroadcastRate, error) {
+	_bsntlvbroadcastrate := &BsnTlvBroadcastRate{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvBroadcastRate packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvbroadcastrate.Value = uint32(decoder.ReadUint32())
+	return _bsntlvbroadcastrate, nil
+}
+
+func NewBsnTlvBroadcastRate() *BsnTlvBroadcastRate {
+	obj := &BsnTlvBroadcastRate{
+		BsnTlv: NewBsnTlv(90),
+	}
+	return obj
+}
+
+type BsnTlvBucket struct {
+	*BsnTlv
+	Value []IBsnTlv
+}
+
+type IBsnTlvBucket interface {
+	IBsnTlv
+	GetValue() []IBsnTlv
+}
+
+func (self *BsnTlvBucket) GetValue() []IBsnTlv {
+	return self.Value
+}
+
+func (self *BsnTlvBucket) SetValue(v []IBsnTlv) {
+	self.Value = v
+}
+
+func (self *BsnTlvBucket) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Value {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvBucket(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvBucket, error) {
+	_bsntlvbucket := &BsnTlvBucket{BsnTlv: parent}
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsntlvbucket.Value = append(_bsntlvbucket.Value, item)
+		}
+	}
+	return _bsntlvbucket, nil
+}
+
+func NewBsnTlvBucket() *BsnTlvBucket {
+	obj := &BsnTlvBucket{
+		BsnTlv: NewBsnTlv(64),
+	}
+	return obj
+}
+
+type BsnTlvCircuitId struct {
+	*BsnTlv
+	Value []byte
+}
+
+type IBsnTlvCircuitId interface {
+	IBsnTlv
+	GetValue() []byte
+}
+
+func (self *BsnTlvCircuitId) GetValue() []byte {
+	return self.Value
+}
+
+func (self *BsnTlvCircuitId) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *BsnTlvCircuitId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvCircuitId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvCircuitId, error) {
+	_bsntlvcircuitid := &BsnTlvCircuitId{BsnTlv: parent}
+	_bsntlvcircuitid.Value = decoder.Read(int(decoder.Length()))
+	return _bsntlvcircuitid, nil
+}
+
+func NewBsnTlvCircuitId() *BsnTlvCircuitId {
+	obj := &BsnTlvCircuitId{
+		BsnTlv: NewBsnTlv(14),
+	}
+	return obj
+}
+
+type BsnTlvConvergenceStatus struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvConvergenceStatus interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvConvergenceStatus) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvConvergenceStatus) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvConvergenceStatus) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvConvergenceStatus(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvConvergenceStatus, error) {
+	_bsntlvconvergencestatus := &BsnTlvConvergenceStatus{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvConvergenceStatus packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvconvergencestatus.Value = uint8(decoder.ReadByte())
+	return _bsntlvconvergencestatus, nil
+}
+
+func NewBsnTlvConvergenceStatus() *BsnTlvConvergenceStatus {
+	obj := &BsnTlvConvergenceStatus{
+		BsnTlv: NewBsnTlv(45),
+	}
+	return obj
+}
+
+type BsnTlvCpuLag struct {
+	*BsnTlv
+}
+
+type IBsnTlvCpuLag interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvCpuLag) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvCpuLag(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvCpuLag, error) {
+	_bsntlvcpulag := &BsnTlvCpuLag{BsnTlv: parent}
+	return _bsntlvcpulag, nil
+}
+
+func NewBsnTlvCpuLag() *BsnTlvCpuLag {
+	obj := &BsnTlvCpuLag{
+		BsnTlv: NewBsnTlv(118),
+	}
+	return obj
+}
+
+type BsnTlvCrcEnabled struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvCrcEnabled interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvCrcEnabled) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvCrcEnabled) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvCrcEnabled) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvCrcEnabled(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvCrcEnabled, error) {
+	_bsntlvcrcenabled := &BsnTlvCrcEnabled{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvCrcEnabled packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvcrcenabled.Value = uint8(decoder.ReadByte())
+	return _bsntlvcrcenabled, nil
+}
+
+func NewBsnTlvCrcEnabled() *BsnTlvCrcEnabled {
+	obj := &BsnTlvCrcEnabled{
+		BsnTlv: NewBsnTlv(22),
+	}
+	return obj
+}
+
+type BsnTlvData struct {
+	*BsnTlv
+	Value []byte
+}
+
+type IBsnTlvData interface {
+	IBsnTlv
+	GetValue() []byte
+}
+
+func (self *BsnTlvData) GetValue() []byte {
+	return self.Value
+}
+
+func (self *BsnTlvData) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *BsnTlvData) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvData(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvData, error) {
+	_bsntlvdata := &BsnTlvData{BsnTlv: parent}
+	_bsntlvdata.Value = decoder.Read(int(decoder.Length()))
+	return _bsntlvdata, nil
+}
+
+func NewBsnTlvData() *BsnTlvData {
+	obj := &BsnTlvData{
+		BsnTlv: NewBsnTlv(55),
+	}
+	return obj
+}
+
+type BsnTlvDataMask struct {
+	*BsnTlv
+	Value []byte
+}
+
+type IBsnTlvDataMask interface {
+	IBsnTlv
+	GetValue() []byte
+}
+
+func (self *BsnTlvDataMask) GetValue() []byte {
+	return self.Value
+}
+
+func (self *BsnTlvDataMask) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *BsnTlvDataMask) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvDataMask(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvDataMask, error) {
+	_bsntlvdatamask := &BsnTlvDataMask{BsnTlv: parent}
+	_bsntlvdatamask.Value = decoder.Read(int(decoder.Length()))
+	return _bsntlvdatamask, nil
+}
+
+func NewBsnTlvDataMask() *BsnTlvDataMask {
+	obj := &BsnTlvDataMask{
+		BsnTlv: NewBsnTlv(140),
+	}
+	return obj
+}
+
+type BsnTlvDecap struct {
+	*BsnTlv
+	Value BsnDecap
+}
+
+type IBsnTlvDecap interface {
+	IBsnTlv
+	GetValue() BsnDecap
+}
+
+func (self *BsnTlvDecap) GetValue() BsnDecap {
+	return self.Value
+}
+
+func (self *BsnTlvDecap) SetValue(v BsnDecap) {
+	self.Value = v
+}
+
+func (self *BsnTlvDecap) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvDecap(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvDecap, error) {
+	_bsntlvdecap := &BsnTlvDecap{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvDecap packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvdecap.Value = BsnDecap(decoder.ReadUint16())
+	return _bsntlvdecap, nil
+}
+
+func NewBsnTlvDecap() *BsnTlvDecap {
+	obj := &BsnTlvDecap{
+		BsnTlv: NewBsnTlv(85),
+	}
+	return obj
+}
+
+type BsnTlvDisableSrcMacCheck struct {
+	*BsnTlv
+}
+
+type IBsnTlvDisableSrcMacCheck interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvDisableSrcMacCheck) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvDisableSrcMacCheck(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvDisableSrcMacCheck, error) {
+	_bsntlvdisablesrcmaccheck := &BsnTlvDisableSrcMacCheck{BsnTlv: parent}
+	return _bsntlvdisablesrcmaccheck, nil
+}
+
+func NewBsnTlvDisableSrcMacCheck() *BsnTlvDisableSrcMacCheck {
+	obj := &BsnTlvDisableSrcMacCheck{
+		BsnTlv: NewBsnTlv(120),
+	}
+	return obj
+}
+
+type BsnTlvDrop struct {
+	*BsnTlv
+}
+
+type IBsnTlvDrop interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvDrop) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvDrop(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvDrop, error) {
+	_bsntlvdrop := &BsnTlvDrop{BsnTlv: parent}
+	return _bsntlvdrop, nil
+}
+
+func NewBsnTlvDrop() *BsnTlvDrop {
+	obj := &BsnTlvDrop{
+		BsnTlv: NewBsnTlv(121),
+	}
+	return obj
+}
+
+type BsnTlvDscp struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvDscp interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvDscp) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvDscp) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvDscp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvDscp(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvDscp, error) {
+	_bsntlvdscp := &BsnTlvDscp{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvDscp packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvdscp.Value = uint16(decoder.ReadUint16())
+	return _bsntlvdscp, nil
+}
+
+func NewBsnTlvDscp() *BsnTlvDscp {
+	obj := &BsnTlvDscp{
+		BsnTlv: NewBsnTlv(112),
+	}
+	return obj
+}
+
+type BsnTlvEcn struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvEcn interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvEcn) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvEcn) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvEcn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEcn(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEcn, error) {
+	_bsntlvecn := &BsnTlvEcn{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvEcn packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvecn.Value = uint8(decoder.ReadByte())
+	return _bsntlvecn, nil
+}
+
+func NewBsnTlvEcn() *BsnTlvEcn {
+	obj := &BsnTlvEcn{
+		BsnTlv: NewBsnTlv(132),
+	}
+	return obj
+}
+
+type BsnTlvEgressOnly struct {
+	*BsnTlv
+}
+
+type IBsnTlvEgressOnly interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvEgressOnly) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEgressOnly(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEgressOnly, error) {
+	_bsntlvegressonly := &BsnTlvEgressOnly{BsnTlv: parent}
+	return _bsntlvegressonly, nil
+}
+
+func NewBsnTlvEgressOnly() *BsnTlvEgressOnly {
+	obj := &BsnTlvEgressOnly{
+		BsnTlv: NewBsnTlv(137),
+	}
+	return obj
+}
+
+type BsnTlvEgressPortGroupId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvEgressPortGroupId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvEgressPortGroupId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvEgressPortGroupId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvEgressPortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEgressPortGroupId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEgressPortGroupId, error) {
+	_bsntlvegressportgroupid := &BsnTlvEgressPortGroupId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvEgressPortGroupId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvegressportgroupid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvegressportgroupid, nil
+}
+
+func NewBsnTlvEgressPortGroupId() *BsnTlvEgressPortGroupId {
+	obj := &BsnTlvEgressPortGroupId{
+		BsnTlv: NewBsnTlv(139),
+	}
+	return obj
+}
+
+type BsnTlvEncap struct {
+	*BsnTlv
+	Value BsnEncap
+}
+
+type IBsnTlvEncap interface {
+	IBsnTlv
+	GetValue() BsnEncap
+}
+
+func (self *BsnTlvEncap) GetValue() BsnEncap {
+	return self.Value
+}
+
+func (self *BsnTlvEncap) SetValue(v BsnEncap) {
+	self.Value = v
+}
+
+func (self *BsnTlvEncap) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEncap(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEncap, error) {
+	_bsntlvencap := &BsnTlvEncap{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvEncap packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvencap.Value = BsnEncap(decoder.ReadByte())
+	return _bsntlvencap, nil
+}
+
+func NewBsnTlvEncap() *BsnTlvEncap {
+	obj := &BsnTlvEncap{
+		BsnTlv: NewBsnTlv(175),
+	}
+	return obj
+}
+
+type BsnTlvEnhancedHashCapability struct {
+	*BsnTlv
+	Value BsnEnhancedHashType
+}
+
+type IBsnTlvEnhancedHashCapability interface {
+	IBsnTlv
+	GetValue() BsnEnhancedHashType
+}
+
+func (self *BsnTlvEnhancedHashCapability) GetValue() BsnEnhancedHashType {
+	return self.Value
+}
+
+func (self *BsnTlvEnhancedHashCapability) SetValue(v BsnEnhancedHashType) {
+	self.Value = v
+}
+
+func (self *BsnTlvEnhancedHashCapability) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEnhancedHashCapability(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEnhancedHashCapability, error) {
+	_bsntlvenhancedhashcapability := &BsnTlvEnhancedHashCapability{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvEnhancedHashCapability packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvenhancedhashcapability.Value = BsnEnhancedHashType(decoder.ReadUint64())
+	return _bsntlvenhancedhashcapability, nil
+}
+
+func NewBsnTlvEnhancedHashCapability() *BsnTlvEnhancedHashCapability {
+	obj := &BsnTlvEnhancedHashCapability{
+		BsnTlv: NewBsnTlv(143),
+	}
+	return obj
+}
+
+type BsnTlvEthDst struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvEthDst interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvEthDst) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvEthDst) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvEthDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEthDst(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEthDst, error) {
+	_bsntlvethdst := &BsnTlvEthDst{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvEthDst packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvethdst.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvethdst, nil
+}
+
+func NewBsnTlvEthDst() *BsnTlvEthDst {
+	obj := &BsnTlvEthDst{
+		BsnTlv: NewBsnTlv(33),
+	}
+	return obj
+}
+
+type BsnTlvEthSrc struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvEthSrc interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvEthSrc) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvEthSrc) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvEthSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEthSrc(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEthSrc, error) {
+	_bsntlvethsrc := &BsnTlvEthSrc{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvEthSrc packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvethsrc.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvethsrc, nil
+}
+
+func NewBsnTlvEthSrc() *BsnTlvEthSrc {
+	obj := &BsnTlvEthSrc{
+		BsnTlv: NewBsnTlv(32),
+	}
+	return obj
+}
+
+type BsnTlvEthType struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvEthType interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvEthType) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvEthType) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvEthType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvEthType(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvEthType, error) {
+	_bsntlvethtype := &BsnTlvEthType{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvEthType packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvethtype.Value = uint16(decoder.ReadUint16())
+	return _bsntlvethtype, nil
+}
+
+func NewBsnTlvEthType() *BsnTlvEthType {
+	obj := &BsnTlvEthType{
+		BsnTlv: NewBsnTlv(131),
+	}
+	return obj
+}
+
+type BsnTlvExternalGatewayIp struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvExternalGatewayIp interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvExternalGatewayIp) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvExternalGatewayIp) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvExternalGatewayIp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvExternalGatewayIp(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvExternalGatewayIp, error) {
+	_bsntlvexternalgatewayip := &BsnTlvExternalGatewayIp{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvExternalGatewayIp packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvexternalgatewayip.Value = net.IP(decoder.Read(4))
+	return _bsntlvexternalgatewayip, nil
+}
+
+func NewBsnTlvExternalGatewayIp() *BsnTlvExternalGatewayIp {
+	obj := &BsnTlvExternalGatewayIp{
+		BsnTlv: NewBsnTlv(26),
+	}
+	return obj
+}
+
+type BsnTlvExternalGatewayMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvExternalGatewayMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvExternalGatewayMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvExternalGatewayMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvExternalGatewayMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvExternalGatewayMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvExternalGatewayMac, error) {
+	_bsntlvexternalgatewaymac := &BsnTlvExternalGatewayMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvExternalGatewayMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvexternalgatewaymac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvexternalgatewaymac, nil
+}
+
+func NewBsnTlvExternalGatewayMac() *BsnTlvExternalGatewayMac {
+	obj := &BsnTlvExternalGatewayMac{
+		BsnTlv: NewBsnTlv(29),
+	}
+	return obj
+}
+
+type BsnTlvExternalIp struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvExternalIp interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvExternalIp) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvExternalIp) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvExternalIp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvExternalIp(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvExternalIp, error) {
+	_bsntlvexternalip := &BsnTlvExternalIp{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvExternalIp packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvexternalip.Value = net.IP(decoder.Read(4))
+	return _bsntlvexternalip, nil
+}
+
+func NewBsnTlvExternalIp() *BsnTlvExternalIp {
+	obj := &BsnTlvExternalIp{
+		BsnTlv: NewBsnTlv(23),
+	}
+	return obj
+}
+
+type BsnTlvExternalMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvExternalMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvExternalMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvExternalMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvExternalMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvExternalMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvExternalMac, error) {
+	_bsntlvexternalmac := &BsnTlvExternalMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvExternalMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvexternalmac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvexternalmac, nil
+}
+
+func NewBsnTlvExternalMac() *BsnTlvExternalMac {
+	obj := &BsnTlvExternalMac{
+		BsnTlv: NewBsnTlv(24),
+	}
+	return obj
+}
+
+type BsnTlvExternalNetmask struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvExternalNetmask interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvExternalNetmask) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvExternalNetmask) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvExternalNetmask) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvExternalNetmask(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvExternalNetmask, error) {
+	_bsntlvexternalnetmask := &BsnTlvExternalNetmask{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvExternalNetmask packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvexternalnetmask.Value = net.IP(decoder.Read(4))
+	return _bsntlvexternalnetmask, nil
+}
+
+func NewBsnTlvExternalNetmask() *BsnTlvExternalNetmask {
+	obj := &BsnTlvExternalNetmask{
+		BsnTlv: NewBsnTlv(25),
+	}
+	return obj
+}
+
+type BsnTlvFabricPortRole struct {
+	*BsnTlv
+	Value BsnFabricPortRole
+}
+
+type IBsnTlvFabricPortRole interface {
+	IBsnTlv
+	GetValue() BsnFabricPortRole
+}
+
+func (self *BsnTlvFabricPortRole) GetValue() BsnFabricPortRole {
+	return self.Value
+}
+
+func (self *BsnTlvFabricPortRole) SetValue(v BsnFabricPortRole) {
+	self.Value = v
+}
+
+func (self *BsnTlvFabricPortRole) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvFabricPortRole(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvFabricPortRole, error) {
+	_bsntlvfabricportrole := &BsnTlvFabricPortRole{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvFabricPortRole packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvfabricportrole.Value = BsnFabricPortRole(decoder.ReadUint16())
+	return _bsntlvfabricportrole, nil
+}
+
+func NewBsnTlvFabricPortRole() *BsnTlvFabricPortRole {
+	obj := &BsnTlvFabricPortRole{
+		BsnTlv: NewBsnTlv(165),
+	}
+	return obj
+}
+
+type BsnTlvFlood struct {
+	*BsnTlv
+}
+
+type IBsnTlvFlood interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvFlood) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvFlood(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvFlood, error) {
+	_bsntlvflood := &BsnTlvFlood{BsnTlv: parent}
+	return _bsntlvflood, nil
+}
+
+func NewBsnTlvFlood() *BsnTlvFlood {
+	obj := &BsnTlvFlood{
+		BsnTlv: NewBsnTlv(163),
+	}
+	return obj
+}
+
+type BsnTlvFlowClassifier struct {
+	*BsnTlv
+	Value BsnFlowClassifier
+}
+
+type IBsnTlvFlowClassifier interface {
+	IBsnTlv
+	GetValue() BsnFlowClassifier
+}
+
+func (self *BsnTlvFlowClassifier) GetValue() BsnFlowClassifier {
+	return self.Value
+}
+
+func (self *BsnTlvFlowClassifier) SetValue(v BsnFlowClassifier) {
+	self.Value = v
+}
+
+func (self *BsnTlvFlowClassifier) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvFlowClassifier(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvFlowClassifier, error) {
+	_bsntlvflowclassifier := &BsnTlvFlowClassifier{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvFlowClassifier packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvflowclassifier.Value = BsnFlowClassifier(decoder.ReadUint16())
+	return _bsntlvflowclassifier, nil
+}
+
+func NewBsnTlvFlowClassifier() *BsnTlvFlowClassifier {
+	obj := &BsnTlvFlowClassifier{
+		BsnTlv: NewBsnTlv(184),
+	}
+	return obj
+}
+
+type BsnTlvFlowClassify struct {
+	*BsnTlv
+}
+
+type IBsnTlvFlowClassify interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvFlowClassify) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvFlowClassify(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvFlowClassify, error) {
+	_bsntlvflowclassify := &BsnTlvFlowClassify{BsnTlv: parent}
+	return _bsntlvflowclassify, nil
+}
+
+func NewBsnTlvFlowClassify() *BsnTlvFlowClassify {
+	obj := &BsnTlvFlowClassify{
+		BsnTlv: NewBsnTlv(182),
+	}
+	return obj
+}
+
+type BsnTlvFlowIdentifier struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvFlowIdentifier interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvFlowIdentifier) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvFlowIdentifier) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvFlowIdentifier) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvFlowIdentifier(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvFlowIdentifier, error) {
+	_bsntlvflowidentifier := &BsnTlvFlowIdentifier{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvFlowIdentifier packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvflowidentifier.Value = uint32(decoder.ReadUint32())
+	return _bsntlvflowidentifier, nil
+}
+
+func NewBsnTlvFlowIdentifier() *BsnTlvFlowIdentifier {
+	obj := &BsnTlvFlowIdentifier{
+		BsnTlv: NewBsnTlv(183),
+	}
+	return obj
+}
+
+type BsnTlvForceLinkUp struct {
+	*BsnTlv
+}
+
+type IBsnTlvForceLinkUp interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvForceLinkUp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvForceLinkUp(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvForceLinkUp, error) {
+	_bsntlvforcelinkup := &BsnTlvForceLinkUp{BsnTlv: parent}
+	return _bsntlvforcelinkup, nil
+}
+
+func NewBsnTlvForceLinkUp() *BsnTlvForceLinkUp {
+	obj := &BsnTlvForceLinkUp{
+		BsnTlv: NewBsnTlv(151),
+	}
+	return obj
+}
+
+type BsnTlvForwardErrorCorrection struct {
+	*BsnTlv
+	Value BsnForwardErrorCorrectionType
+}
+
+type IBsnTlvForwardErrorCorrection interface {
+	IBsnTlv
+	GetValue() BsnForwardErrorCorrectionType
+}
+
+func (self *BsnTlvForwardErrorCorrection) GetValue() BsnForwardErrorCorrectionType {
+	return self.Value
+}
+
+func (self *BsnTlvForwardErrorCorrection) SetValue(v BsnForwardErrorCorrectionType) {
+	self.Value = v
+}
+
+func (self *BsnTlvForwardErrorCorrection) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvForwardErrorCorrection(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvForwardErrorCorrection, error) {
+	_bsntlvforwarderrorcorrection := &BsnTlvForwardErrorCorrection{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvForwardErrorCorrection packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvforwarderrorcorrection.Value = BsnForwardErrorCorrectionType(decoder.ReadByte())
+	return _bsntlvforwarderrorcorrection, nil
+}
+
+func NewBsnTlvForwardErrorCorrection() *BsnTlvForwardErrorCorrection {
+	obj := &BsnTlvForwardErrorCorrection{
+		BsnTlv: NewBsnTlv(149),
+	}
+	return obj
+}
+
+type BsnTlvGenerationId struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvGenerationId interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvGenerationId) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvGenerationId) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvGenerationId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvGenerationId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvGenerationId, error) {
+	_bsntlvgenerationid := &BsnTlvGenerationId{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvGenerationId packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvgenerationid.Value = uint64(decoder.ReadUint64())
+	return _bsntlvgenerationid, nil
+}
+
+func NewBsnTlvGenerationId() *BsnTlvGenerationId {
+	obj := &BsnTlvGenerationId{
+		BsnTlv: NewBsnTlv(80),
+	}
+	return obj
+}
+
+type BsnTlvHashAlgorithm struct {
+	*BsnTlv
+	Value BsnHashAlgorithmType
+}
+
+type IBsnTlvHashAlgorithm interface {
+	IBsnTlv
+	GetValue() BsnHashAlgorithmType
+}
+
+func (self *BsnTlvHashAlgorithm) GetValue() BsnHashAlgorithmType {
+	return self.Value
+}
+
+func (self *BsnTlvHashAlgorithm) SetValue(v BsnHashAlgorithmType) {
+	self.Value = v
+}
+
+func (self *BsnTlvHashAlgorithm) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHashAlgorithm(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHashAlgorithm, error) {
+	_bsntlvhashalgorithm := &BsnTlvHashAlgorithm{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvHashAlgorithm packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvhashalgorithm.Value = BsnHashAlgorithmType(decoder.ReadUint16())
+	return _bsntlvhashalgorithm, nil
+}
+
+func NewBsnTlvHashAlgorithm() *BsnTlvHashAlgorithm {
+	obj := &BsnTlvHashAlgorithm{
+		BsnTlv: NewBsnTlv(145),
+	}
+	return obj
+}
+
+type BsnTlvHashGtpHeaderMatch struct {
+	*BsnTlv
+	FirstHeaderByte uint8
+	FirstHeaderMask uint8
+}
+
+type IBsnTlvHashGtpHeaderMatch interface {
+	IBsnTlv
+	GetFirstHeaderByte() uint8
+	GetFirstHeaderMask() uint8
+}
+
+func (self *BsnTlvHashGtpHeaderMatch) GetFirstHeaderByte() uint8 {
+	return self.FirstHeaderByte
+}
+
+func (self *BsnTlvHashGtpHeaderMatch) SetFirstHeaderByte(v uint8) {
+	self.FirstHeaderByte = v
+}
+
+func (self *BsnTlvHashGtpHeaderMatch) GetFirstHeaderMask() uint8 {
+	return self.FirstHeaderMask
+}
+
+func (self *BsnTlvHashGtpHeaderMatch) SetFirstHeaderMask(v uint8) {
+	self.FirstHeaderMask = v
+}
+
+func (self *BsnTlvHashGtpHeaderMatch) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.FirstHeaderByte))
+	encoder.PutUint8(uint8(self.FirstHeaderMask))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHashGtpHeaderMatch(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHashGtpHeaderMatch, error) {
+	_bsntlvhashgtpheadermatch := &BsnTlvHashGtpHeaderMatch{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvHashGtpHeaderMatch packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvhashgtpheadermatch.FirstHeaderByte = uint8(decoder.ReadByte())
+	_bsntlvhashgtpheadermatch.FirstHeaderMask = uint8(decoder.ReadByte())
+	return _bsntlvhashgtpheadermatch, nil
+}
+
+func NewBsnTlvHashGtpHeaderMatch() *BsnTlvHashGtpHeaderMatch {
+	obj := &BsnTlvHashGtpHeaderMatch{
+		BsnTlv: NewBsnTlv(104),
+	}
+	return obj
+}
+
+type BsnTlvHashGtpPortMatch struct {
+	*BsnTlv
+	Match   BsnHashGtpPortMatch
+	SrcPort uint16
+	DstPort uint16
+}
+
+type IBsnTlvHashGtpPortMatch interface {
+	IBsnTlv
+	GetMatch() BsnHashGtpPortMatch
+	GetSrcPort() uint16
+	GetDstPort() uint16
+}
+
+func (self *BsnTlvHashGtpPortMatch) GetMatch() BsnHashGtpPortMatch {
+	return self.Match
+}
+
+func (self *BsnTlvHashGtpPortMatch) SetMatch(v BsnHashGtpPortMatch) {
+	self.Match = v
+}
+
+func (self *BsnTlvHashGtpPortMatch) GetSrcPort() uint16 {
+	return self.SrcPort
+}
+
+func (self *BsnTlvHashGtpPortMatch) SetSrcPort(v uint16) {
+	self.SrcPort = v
+}
+
+func (self *BsnTlvHashGtpPortMatch) GetDstPort() uint16 {
+	return self.DstPort
+}
+
+func (self *BsnTlvHashGtpPortMatch) SetDstPort(v uint16) {
+	self.DstPort = v
+}
+
+func (self *BsnTlvHashGtpPortMatch) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Match))
+	encoder.PutUint16(uint16(self.SrcPort))
+	encoder.PutUint16(uint16(self.DstPort))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHashGtpPortMatch(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHashGtpPortMatch, error) {
+	_bsntlvhashgtpportmatch := &BsnTlvHashGtpPortMatch{BsnTlv: parent}
+	if decoder.Length() < 5 {
+		return nil, fmt.Errorf("BsnTlvHashGtpPortMatch packet too short: %d < 5", decoder.Length())
+	}
+	_bsntlvhashgtpportmatch.Match = BsnHashGtpPortMatch(decoder.ReadByte())
+	_bsntlvhashgtpportmatch.SrcPort = uint16(decoder.ReadUint16())
+	_bsntlvhashgtpportmatch.DstPort = uint16(decoder.ReadUint16())
+	return _bsntlvhashgtpportmatch, nil
+}
+
+func NewBsnTlvHashGtpPortMatch() *BsnTlvHashGtpPortMatch {
+	obj := &BsnTlvHashGtpPortMatch{
+		BsnTlv: NewBsnTlv(105),
+	}
+	return obj
+}
+
+type BsnTlvHashPacketField struct {
+	*BsnTlv
+	Value BsnHashPacketField
+}
+
+type IBsnTlvHashPacketField interface {
+	IBsnTlv
+	GetValue() BsnHashPacketField
+}
+
+func (self *BsnTlvHashPacketField) GetValue() BsnHashPacketField {
+	return self.Value
+}
+
+func (self *BsnTlvHashPacketField) SetValue(v BsnHashPacketField) {
+	self.Value = v
+}
+
+func (self *BsnTlvHashPacketField) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHashPacketField(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHashPacketField, error) {
+	_bsntlvhashpacketfield := &BsnTlvHashPacketField{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvHashPacketField packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvhashpacketfield.Value = BsnHashPacketField(decoder.ReadUint64())
+	return _bsntlvhashpacketfield, nil
+}
+
+func NewBsnTlvHashPacketField() *BsnTlvHashPacketField {
+	obj := &BsnTlvHashPacketField{
+		BsnTlv: NewBsnTlv(103),
+	}
+	return obj
+}
+
+type BsnTlvHashPacketType struct {
+	*BsnTlv
+	Value BsnHashPacketType
+}
+
+type IBsnTlvHashPacketType interface {
+	IBsnTlv
+	GetValue() BsnHashPacketType
+}
+
+func (self *BsnTlvHashPacketType) GetValue() BsnHashPacketType {
+	return self.Value
+}
+
+func (self *BsnTlvHashPacketType) SetValue(v BsnHashPacketType) {
+	self.Value = v
+}
+
+func (self *BsnTlvHashPacketType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHashPacketType(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHashPacketType, error) {
+	_bsntlvhashpackettype := &BsnTlvHashPacketType{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvHashPacketType packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvhashpackettype.Value = BsnHashPacketType(decoder.ReadByte())
+	return _bsntlvhashpackettype, nil
+}
+
+func NewBsnTlvHashPacketType() *BsnTlvHashPacketType {
+	obj := &BsnTlvHashPacketType{
+		BsnTlv: NewBsnTlv(102),
+	}
+	return obj
+}
+
+type BsnTlvHashSeed struct {
+	*BsnTlv
+	Seed1 uint32
+	Seed2 uint32
+}
+
+type IBsnTlvHashSeed interface {
+	IBsnTlv
+	GetSeed1() uint32
+	GetSeed2() uint32
+}
+
+func (self *BsnTlvHashSeed) GetSeed1() uint32 {
+	return self.Seed1
+}
+
+func (self *BsnTlvHashSeed) SetSeed1(v uint32) {
+	self.Seed1 = v
+}
+
+func (self *BsnTlvHashSeed) GetSeed2() uint32 {
+	return self.Seed2
+}
+
+func (self *BsnTlvHashSeed) SetSeed2(v uint32) {
+	self.Seed2 = v
+}
+
+func (self *BsnTlvHashSeed) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Seed1))
+	encoder.PutUint32(uint32(self.Seed2))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHashSeed(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHashSeed, error) {
+	_bsntlvhashseed := &BsnTlvHashSeed{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvHashSeed packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvhashseed.Seed1 = uint32(decoder.ReadUint32())
+	_bsntlvhashseed.Seed2 = uint32(decoder.ReadUint32())
+	return _bsntlvhashseed, nil
+}
+
+func NewBsnTlvHashSeed() *BsnTlvHashSeed {
+	obj := &BsnTlvHashSeed{
+		BsnTlv: NewBsnTlv(100),
+	}
+	return obj
+}
+
+type BsnTlvHashType struct {
+	*BsnTlv
+	Value BsnHashType
+}
+
+type IBsnTlvHashType interface {
+	IBsnTlv
+	GetValue() BsnHashType
+}
+
+func (self *BsnTlvHashType) GetValue() BsnHashType {
+	return self.Value
+}
+
+func (self *BsnTlvHashType) SetValue(v BsnHashType) {
+	self.Value = v
+}
+
+func (self *BsnTlvHashType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHashType(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHashType, error) {
+	_bsntlvhashtype := &BsnTlvHashType{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvHashType packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvhashtype.Value = BsnHashType(decoder.ReadByte())
+	return _bsntlvhashtype, nil
+}
+
+func NewBsnTlvHashType() *BsnTlvHashType {
+	obj := &BsnTlvHashType{
+		BsnTlv: NewBsnTlv(101),
+	}
+	return obj
+}
+
+type BsnTlvHeaderSize struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvHeaderSize interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvHeaderSize) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvHeaderSize) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvHeaderSize) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvHeaderSize(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvHeaderSize, error) {
+	_bsntlvheadersize := &BsnTlvHeaderSize{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvHeaderSize packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvheadersize.Value = uint32(decoder.ReadUint32())
+	return _bsntlvheadersize, nil
+}
+
+func NewBsnTlvHeaderSize() *BsnTlvHeaderSize {
+	obj := &BsnTlvHeaderSize{
+		BsnTlv: NewBsnTlv(31),
+	}
+	return obj
+}
+
+type BsnTlvIcmpCode struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvIcmpCode interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvIcmpCode) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvIcmpCode) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvIcmpCode) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIcmpCode(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIcmpCode, error) {
+	_bsntlvicmpcode := &BsnTlvIcmpCode{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvIcmpCode packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvicmpcode.Value = uint8(decoder.ReadByte())
+	return _bsntlvicmpcode, nil
+}
+
+func NewBsnTlvIcmpCode() *BsnTlvIcmpCode {
+	obj := &BsnTlvIcmpCode{
+		BsnTlv: NewBsnTlv(69),
+	}
+	return obj
+}
+
+type BsnTlvIcmpId struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvIcmpId interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvIcmpId) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvIcmpId) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvIcmpId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIcmpId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIcmpId, error) {
+	_bsntlvicmpid := &BsnTlvIcmpId{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvIcmpId packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvicmpid.Value = uint16(decoder.ReadUint16())
+	return _bsntlvicmpid, nil
+}
+
+func NewBsnTlvIcmpId() *BsnTlvIcmpId {
+	obj := &BsnTlvIcmpId{
+		BsnTlv: NewBsnTlv(70),
+	}
+	return obj
+}
+
+type BsnTlvIcmpType struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvIcmpType interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvIcmpType) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvIcmpType) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvIcmpType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIcmpType(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIcmpType, error) {
+	_bsntlvicmptype := &BsnTlvIcmpType{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvIcmpType packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvicmptype.Value = uint8(decoder.ReadByte())
+	return _bsntlvicmptype, nil
+}
+
+func NewBsnTlvIcmpType() *BsnTlvIcmpType {
+	obj := &BsnTlvIcmpType{
+		BsnTlv: NewBsnTlv(68),
+	}
+	return obj
+}
+
+type BsnTlvIcmpv6Chksum struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvIcmpv6Chksum interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvIcmpv6Chksum) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvIcmpv6Chksum) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvIcmpv6Chksum) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIcmpv6Chksum(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIcmpv6Chksum, error) {
+	_bsntlvicmpv6chksum := &BsnTlvIcmpv6Chksum{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvIcmpv6Chksum packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvicmpv6chksum.Value = uint16(decoder.ReadUint16())
+	return _bsntlvicmpv6chksum, nil
+}
+
+func NewBsnTlvIcmpv6Chksum() *BsnTlvIcmpv6Chksum {
+	obj := &BsnTlvIcmpv6Chksum{
+		BsnTlv: NewBsnTlv(125),
+	}
+	return obj
+}
+
+type BsnTlvIdentifier struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvIdentifier interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvIdentifier) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvIdentifier) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvIdentifier) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIdentifier(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIdentifier, error) {
+	_bsntlvidentifier := &BsnTlvIdentifier{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvIdentifier packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvidentifier.Value = uint32(decoder.ReadUint32())
+	return _bsntlvidentifier, nil
+}
+
+func NewBsnTlvIdentifier() *BsnTlvIdentifier {
+	obj := &BsnTlvIdentifier{
+		BsnTlv: NewBsnTlv(173),
+	}
+	return obj
+}
+
+type BsnTlvIdleNotification struct {
+	*BsnTlv
+}
+
+type IBsnTlvIdleNotification interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvIdleNotification) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIdleNotification(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIdleNotification, error) {
+	_bsntlvidlenotification := &BsnTlvIdleNotification{BsnTlv: parent}
+	return _bsntlvidlenotification, nil
+}
+
+func NewBsnTlvIdleNotification() *BsnTlvIdleNotification {
+	obj := &BsnTlvIdleNotification{
+		BsnTlv: NewBsnTlv(7),
+	}
+	return obj
+}
+
+type BsnTlvIdleTime struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvIdleTime interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvIdleTime) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvIdleTime) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvIdleTime) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIdleTime(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIdleTime, error) {
+	_bsntlvidletime := &BsnTlvIdleTime{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvIdleTime packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvidletime.Value = uint64(decoder.ReadUint64())
+	return _bsntlvidletime, nil
+}
+
+func NewBsnTlvIdleTime() *BsnTlvIdleTime {
+	obj := &BsnTlvIdleTime{
+		BsnTlv: NewBsnTlv(5),
+	}
+	return obj
+}
+
+type BsnTlvIdleTimeout struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvIdleTimeout interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvIdleTimeout) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvIdleTimeout) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvIdleTimeout) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIdleTimeout(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIdleTimeout, error) {
+	_bsntlvidletimeout := &BsnTlvIdleTimeout{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvIdleTimeout packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvidletimeout.Value = uint32(decoder.ReadUint32())
+	return _bsntlvidletimeout, nil
+}
+
+func NewBsnTlvIdleTimeout() *BsnTlvIdleTimeout {
+	obj := &BsnTlvIdleTimeout{
+		BsnTlv: NewBsnTlv(8),
+	}
+	return obj
+}
+
+type BsnTlvIgmpSnooping struct {
+	*BsnTlv
+}
+
+type IBsnTlvIgmpSnooping interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvIgmpSnooping) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIgmpSnooping(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIgmpSnooping, error) {
+	_bsntlvigmpsnooping := &BsnTlvIgmpSnooping{BsnTlv: parent}
+	return _bsntlvigmpsnooping, nil
+}
+
+func NewBsnTlvIgmpSnooping() *BsnTlvIgmpSnooping {
+	obj := &BsnTlvIgmpSnooping{
+		BsnTlv: NewBsnTlv(78),
+	}
+	return obj
+}
+
+type BsnTlvIngressPortGroupId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvIngressPortGroupId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvIngressPortGroupId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvIngressPortGroupId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvIngressPortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIngressPortGroupId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIngressPortGroupId, error) {
+	_bsntlvingressportgroupid := &BsnTlvIngressPortGroupId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvIngressPortGroupId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvingressportgroupid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvingressportgroupid, nil
+}
+
+func NewBsnTlvIngressPortGroupId() *BsnTlvIngressPortGroupId {
+	obj := &BsnTlvIngressPortGroupId{
+		BsnTlv: NewBsnTlv(138),
+	}
+	return obj
+}
+
+type BsnTlvInternalGatewayMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvInternalGatewayMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvInternalGatewayMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvInternalGatewayMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvInternalGatewayMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvInternalGatewayMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvInternalGatewayMac, error) {
+	_bsntlvinternalgatewaymac := &BsnTlvInternalGatewayMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvInternalGatewayMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvinternalgatewaymac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvinternalgatewaymac, nil
+}
+
+func NewBsnTlvInternalGatewayMac() *BsnTlvInternalGatewayMac {
+	obj := &BsnTlvInternalGatewayMac{
+		BsnTlv: NewBsnTlv(28),
+	}
+	return obj
+}
+
+type BsnTlvInternalMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvInternalMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvInternalMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvInternalMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvInternalMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvInternalMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvInternalMac, error) {
+	_bsntlvinternalmac := &BsnTlvInternalMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvInternalMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvinternalmac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvinternalmac, nil
+}
+
+func NewBsnTlvInternalMac() *BsnTlvInternalMac {
+	obj := &BsnTlvInternalMac{
+		BsnTlv: NewBsnTlv(27),
+	}
+	return obj
+}
+
+type BsnTlvInterval struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvInterval interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvInterval) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvInterval) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvInterval) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvInterval(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvInterval, error) {
+	_bsntlvinterval := &BsnTlvInterval{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvInterval packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvinterval.Value = uint32(decoder.ReadUint32())
+	return _bsntlvinterval, nil
+}
+
+func NewBsnTlvInterval() *BsnTlvInterval {
+	obj := &BsnTlvInterval{
+		BsnTlv: NewBsnTlv(58),
+	}
+	return obj
+}
+
+type BsnTlvIpProto struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvIpProto interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvIpProto) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvIpProto) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpProto(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpProto, error) {
+	_bsntlvipproto := &BsnTlvIpProto{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvIpProto packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvipproto.Value = uint8(decoder.ReadByte())
+	return _bsntlvipproto, nil
+}
+
+func NewBsnTlvIpProto() *BsnTlvIpProto {
+	obj := &BsnTlvIpProto{
+		BsnTlv: NewBsnTlv(67),
+	}
+	return obj
+}
+
+type BsnTlvIpTunnelType struct {
+	*BsnTlv
+	Value BsnIpTunnelType
+}
+
+type IBsnTlvIpTunnelType interface {
+	IBsnTlv
+	GetValue() BsnIpTunnelType
+}
+
+func (self *BsnTlvIpTunnelType) GetValue() BsnIpTunnelType {
+	return self.Value
+}
+
+func (self *BsnTlvIpTunnelType) SetValue(v BsnIpTunnelType) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpTunnelType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpTunnelType(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpTunnelType, error) {
+	_bsntlviptunneltype := &BsnTlvIpTunnelType{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvIpTunnelType packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlviptunneltype.Value = BsnIpTunnelType(decoder.ReadUint16())
+	return _bsntlviptunneltype, nil
+}
+
+func NewBsnTlvIpTunnelType() *BsnTlvIpTunnelType {
+	obj := &BsnTlvIpTunnelType{
+		BsnTlv: NewBsnTlv(169),
+	}
+	return obj
+}
+
+type BsnTlvIpv4 struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvIpv4 interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvIpv4) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv4) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv4(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv4, error) {
+	_bsntlvipv4 := &BsnTlvIpv4{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvIpv4 packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvipv4.Value = net.IP(decoder.Read(4))
+	return _bsntlvipv4, nil
+}
+
+func NewBsnTlvIpv4() *BsnTlvIpv4 {
+	obj := &BsnTlvIpv4{
+		BsnTlv: NewBsnTlv(4),
+	}
+	return obj
+}
+
+type BsnTlvIpv4Dst struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvIpv4Dst interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvIpv4Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv4Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv4Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv4Dst(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv4Dst, error) {
+	_bsntlvipv4dst := &BsnTlvIpv4Dst{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvIpv4Dst packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvipv4dst.Value = net.IP(decoder.Read(4))
+	return _bsntlvipv4dst, nil
+}
+
+func NewBsnTlvIpv4Dst() *BsnTlvIpv4Dst {
+	obj := &BsnTlvIpv4Dst{
+		BsnTlv: NewBsnTlv(35),
+	}
+	return obj
+}
+
+type BsnTlvIpv4Netmask struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvIpv4Netmask interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvIpv4Netmask) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv4Netmask) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv4Netmask) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv4Netmask(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv4Netmask, error) {
+	_bsntlvipv4netmask := &BsnTlvIpv4Netmask{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvIpv4Netmask packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvipv4netmask.Value = net.IP(decoder.Read(4))
+	return _bsntlvipv4netmask, nil
+}
+
+func NewBsnTlvIpv4Netmask() *BsnTlvIpv4Netmask {
+	obj := &BsnTlvIpv4Netmask{
+		BsnTlv: NewBsnTlv(60),
+	}
+	return obj
+}
+
+type BsnTlvIpv4Src struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvIpv4Src interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvIpv4Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv4Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv4Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv4Src(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv4Src, error) {
+	_bsntlvipv4src := &BsnTlvIpv4Src{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvIpv4Src packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvipv4src.Value = net.IP(decoder.Read(4))
+	return _bsntlvipv4src, nil
+}
+
+func NewBsnTlvIpv4Src() *BsnTlvIpv4Src {
+	obj := &BsnTlvIpv4Src{
+		BsnTlv: NewBsnTlv(34),
+	}
+	return obj
+}
+
+type BsnTlvIpv6 struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvIpv6 interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvIpv6) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv6) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv6) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv6(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv6, error) {
+	_bsntlvipv6 := &BsnTlvIpv6{BsnTlv: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BsnTlvIpv6 packet too short: %d < 16", decoder.Length())
+	}
+	_bsntlvipv6.Value = net.IP(decoder.Read(16))
+	return _bsntlvipv6, nil
+}
+
+func NewBsnTlvIpv6() *BsnTlvIpv6 {
+	obj := &BsnTlvIpv6{
+		BsnTlv: NewBsnTlv(84),
+	}
+	return obj
+}
+
+type BsnTlvIpv6Dst struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvIpv6Dst interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvIpv6Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv6Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv6Dst(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv6Dst, error) {
+	_bsntlvipv6dst := &BsnTlvIpv6Dst{BsnTlv: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BsnTlvIpv6Dst packet too short: %d < 16", decoder.Length())
+	}
+	_bsntlvipv6dst.Value = net.IP(decoder.Read(16))
+	return _bsntlvipv6dst, nil
+}
+
+func NewBsnTlvIpv6Dst() *BsnTlvIpv6Dst {
+	obj := &BsnTlvIpv6Dst{
+		BsnTlv: NewBsnTlv(127),
+	}
+	return obj
+}
+
+type BsnTlvIpv6Prefix struct {
+	*BsnTlv
+	Value        net.IP
+	PrefixLength uint8
+}
+
+type IBsnTlvIpv6Prefix interface {
+	IBsnTlv
+	GetValue() net.IP
+	GetPrefixLength() uint8
+}
+
+func (self *BsnTlvIpv6Prefix) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv6Prefix) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv6Prefix) GetPrefixLength() uint8 {
+	return self.PrefixLength
+}
+
+func (self *BsnTlvIpv6Prefix) SetPrefixLength(v uint8) {
+	self.PrefixLength = v
+}
+
+func (self *BsnTlvIpv6Prefix) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.PutUint8(uint8(self.PrefixLength))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv6Prefix(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv6Prefix, error) {
+	_bsntlvipv6prefix := &BsnTlvIpv6Prefix{BsnTlv: parent}
+	if decoder.Length() < 17 {
+		return nil, fmt.Errorf("BsnTlvIpv6Prefix packet too short: %d < 17", decoder.Length())
+	}
+	_bsntlvipv6prefix.Value = net.IP(decoder.Read(16))
+	_bsntlvipv6prefix.PrefixLength = uint8(decoder.ReadByte())
+	return _bsntlvipv6prefix, nil
+}
+
+func NewBsnTlvIpv6Prefix() *BsnTlvIpv6Prefix {
+	obj := &BsnTlvIpv6Prefix{
+		BsnTlv: NewBsnTlv(122),
+	}
+	return obj
+}
+
+type BsnTlvIpv6Src struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvIpv6Src interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvIpv6Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvIpv6Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvIpv6Src(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvIpv6Src, error) {
+	_bsntlvipv6src := &BsnTlvIpv6Src{BsnTlv: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BsnTlvIpv6Src packet too short: %d < 16", decoder.Length())
+	}
+	_bsntlvipv6src.Value = net.IP(decoder.Read(16))
+	return _bsntlvipv6src, nil
+}
+
+func NewBsnTlvIpv6Src() *BsnTlvIpv6Src {
+	obj := &BsnTlvIpv6Src{
+		BsnTlv: NewBsnTlv(126),
+	}
+	return obj
+}
+
+type BsnTlvKnownMulticastRate struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvKnownMulticastRate interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvKnownMulticastRate) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvKnownMulticastRate) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvKnownMulticastRate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvKnownMulticastRate(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvKnownMulticastRate, error) {
+	_bsntlvknownmulticastrate := &BsnTlvKnownMulticastRate{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvKnownMulticastRate packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvknownmulticastrate.Value = uint32(decoder.ReadUint32())
+	return _bsntlvknownmulticastrate, nil
+}
+
+func NewBsnTlvKnownMulticastRate() *BsnTlvKnownMulticastRate {
+	obj := &BsnTlvKnownMulticastRate{
+		BsnTlv: NewBsnTlv(91),
+	}
+	return obj
+}
+
+type BsnTlvL2MulticastLookup struct {
+	*BsnTlv
+}
+
+type IBsnTlvL2MulticastLookup interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvL2MulticastLookup) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvL2MulticastLookup(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvL2MulticastLookup, error) {
+	_bsntlvl2multicastlookup := &BsnTlvL2MulticastLookup{BsnTlv: parent}
+	return _bsntlvl2multicastlookup, nil
+}
+
+func NewBsnTlvL2MulticastLookup() *BsnTlvL2MulticastLookup {
+	obj := &BsnTlvL2MulticastLookup{
+		BsnTlv: NewBsnTlv(79),
+	}
+	return obj
+}
+
+type BsnTlvL3 struct {
+	*BsnTlv
+}
+
+type IBsnTlvL3 interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvL3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvL3(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvL3, error) {
+	_bsntlvl3 := &BsnTlvL3{BsnTlv: parent}
+	return _bsntlvl3, nil
+}
+
+func NewBsnTlvL3() *BsnTlvL3 {
+	obj := &BsnTlvL3{
+		BsnTlv: NewBsnTlv(168),
+	}
+	return obj
+}
+
+type BsnTlvL3DstClassId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvL3DstClassId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvL3DstClassId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvL3DstClassId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvL3DstClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvL3DstClassId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvL3DstClassId, error) {
+	_bsntlvl3dstclassid := &BsnTlvL3DstClassId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvL3DstClassId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvl3dstclassid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvl3dstclassid, nil
+}
+
+func NewBsnTlvL3DstClassId() *BsnTlvL3DstClassId {
+	obj := &BsnTlvL3DstClassId{
+		BsnTlv: NewBsnTlv(136),
+	}
+	return obj
+}
+
+type BsnTlvL3InterfaceClassId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvL3InterfaceClassId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvL3InterfaceClassId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvL3InterfaceClassId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvL3InterfaceClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvL3InterfaceClassId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvL3InterfaceClassId, error) {
+	_bsntlvl3interfaceclassid := &BsnTlvL3InterfaceClassId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvL3InterfaceClassId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvl3interfaceclassid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvl3interfaceclassid, nil
+}
+
+func NewBsnTlvL3InterfaceClassId() *BsnTlvL3InterfaceClassId {
+	obj := &BsnTlvL3InterfaceClassId{
+		BsnTlv: NewBsnTlv(134),
+	}
+	return obj
+}
+
+type BsnTlvL3SrcClassId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvL3SrcClassId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvL3SrcClassId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvL3SrcClassId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvL3SrcClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvL3SrcClassId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvL3SrcClassId, error) {
+	_bsntlvl3srcclassid := &BsnTlvL3SrcClassId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvL3SrcClassId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvl3srcclassid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvl3srcclassid, nil
+}
+
+func NewBsnTlvL3SrcClassId() *BsnTlvL3SrcClassId {
+	obj := &BsnTlvL3SrcClassId{
+		BsnTlv: NewBsnTlv(135),
+	}
+	return obj
+}
+
+type BsnTlvLagOptions struct {
+	*BsnTlv
+	Flags BsnLagFlag
+}
+
+type IBsnTlvLagOptions interface {
+	IBsnTlv
+	GetFlags() BsnLagFlag
+}
+
+func (self *BsnTlvLagOptions) GetFlags() BsnLagFlag {
+	return self.Flags
+}
+
+func (self *BsnTlvLagOptions) SetFlags(v BsnLagFlag) {
+	self.Flags = v
+}
+
+func (self *BsnTlvLagOptions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Flags))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvLagOptions(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvLagOptions, error) {
+	_bsntlvlagoptions := &BsnTlvLagOptions{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvLagOptions packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvlagoptions.Flags = BsnLagFlag(decoder.ReadUint16())
+	return _bsntlvlagoptions, nil
+}
+
+func NewBsnTlvLagOptions() *BsnTlvLagOptions {
+	obj := &BsnTlvLagOptions{
+		BsnTlv: NewBsnTlv(160),
+	}
+	return obj
+}
+
+type BsnTlvLoopbackMode struct {
+	*BsnTlv
+	Value BsnLoopbackMode
+}
+
+type IBsnTlvLoopbackMode interface {
+	IBsnTlv
+	GetValue() BsnLoopbackMode
+}
+
+func (self *BsnTlvLoopbackMode) GetValue() BsnLoopbackMode {
+	return self.Value
+}
+
+func (self *BsnTlvLoopbackMode) SetValue(v BsnLoopbackMode) {
+	self.Value = v
+}
+
+func (self *BsnTlvLoopbackMode) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvLoopbackMode(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvLoopbackMode, error) {
+	_bsntlvloopbackmode := &BsnTlvLoopbackMode{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvLoopbackMode packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvloopbackmode.Value = BsnLoopbackMode(decoder.ReadByte())
+	return _bsntlvloopbackmode, nil
+}
+
+func NewBsnTlvLoopbackMode() *BsnTlvLoopbackMode {
+	obj := &BsnTlvLoopbackMode{
+		BsnTlv: NewBsnTlv(146),
+	}
+	return obj
+}
+
+type BsnTlvLoopbackPort struct {
+	*BsnTlv
+	Value Port
+}
+
+type IBsnTlvLoopbackPort interface {
+	IBsnTlv
+	GetValue() Port
+}
+
+func (self *BsnTlvLoopbackPort) GetValue() Port {
+	return self.Value
+}
+
+func (self *BsnTlvLoopbackPort) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *BsnTlvLoopbackPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvLoopbackPort(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvLoopbackPort, error) {
+	_bsntlvloopbackport := &BsnTlvLoopbackPort{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvLoopbackPort packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvloopbackport.Value.Decode(decoder)
+	return _bsntlvloopbackport, nil
+}
+
+func NewBsnTlvLoopbackPort() *BsnTlvLoopbackPort {
+	obj := &BsnTlvLoopbackPort{
+		BsnTlv: NewBsnTlv(110),
+	}
+	return obj
+}
+
+type BsnTlvLrAllEnabled struct {
+	*BsnTlv
+}
+
+type IBsnTlvLrAllEnabled interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvLrAllEnabled) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvLrAllEnabled(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvLrAllEnabled, error) {
+	_bsntlvlrallenabled := &BsnTlvLrAllEnabled{BsnTlv: parent}
+	return _bsntlvlrallenabled, nil
+}
+
+func NewBsnTlvLrAllEnabled() *BsnTlvLrAllEnabled {
+	obj := &BsnTlvLrAllEnabled{
+		BsnTlv: NewBsnTlv(178),
+	}
+	return obj
+}
+
+type BsnTlvMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMac, error) {
+	_bsntlvmac := &BsnTlvMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvmac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvmac, nil
+}
+
+func NewBsnTlvMac() *BsnTlvMac {
+	obj := &BsnTlvMac{
+		BsnTlv: NewBsnTlv(1),
+	}
+	return obj
+}
+
+type BsnTlvMacMask struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvMacMask interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvMacMask) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvMacMask) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvMacMask) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMacMask(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMacMask, error) {
+	_bsntlvmacmask := &BsnTlvMacMask{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvMacMask packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvmacmask.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvmacmask, nil
+}
+
+func NewBsnTlvMacMask() *BsnTlvMacMask {
+	obj := &BsnTlvMacMask{
+		BsnTlv: NewBsnTlv(56),
+	}
+	return obj
+}
+
+type BsnTlvMcgTypeVxlan struct {
+	*BsnTlv
+}
+
+type IBsnTlvMcgTypeVxlan interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvMcgTypeVxlan) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMcgTypeVxlan(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMcgTypeVxlan, error) {
+	_bsntlvmcgtypevxlan := &BsnTlvMcgTypeVxlan{BsnTlv: parent}
+	return _bsntlvmcgtypevxlan, nil
+}
+
+func NewBsnTlvMcgTypeVxlan() *BsnTlvMcgTypeVxlan {
+	obj := &BsnTlvMcgTypeVxlan{
+		BsnTlv: NewBsnTlv(87),
+	}
+	return obj
+}
+
+type BsnTlvMissPackets struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvMissPackets interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvMissPackets) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvMissPackets) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvMissPackets) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMissPackets(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMissPackets, error) {
+	_bsntlvmisspackets := &BsnTlvMissPackets{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvMissPackets packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvmisspackets.Value = uint64(decoder.ReadUint64())
+	return _bsntlvmisspackets, nil
+}
+
+func NewBsnTlvMissPackets() *BsnTlvMissPackets {
+	obj := &BsnTlvMissPackets{
+		BsnTlv: NewBsnTlv(13),
+	}
+	return obj
+}
+
+type BsnTlvMplsControlWord struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvMplsControlWord interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvMplsControlWord) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvMplsControlWord) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvMplsControlWord) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMplsControlWord(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMplsControlWord, error) {
+	_bsntlvmplscontrolword := &BsnTlvMplsControlWord{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvMplsControlWord packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvmplscontrolword.Value = uint8(decoder.ReadByte())
+	return _bsntlvmplscontrolword, nil
+}
+
+func NewBsnTlvMplsControlWord() *BsnTlvMplsControlWord {
+	obj := &BsnTlvMplsControlWord{
+		BsnTlv: NewBsnTlv(62),
+	}
+	return obj
+}
+
+type BsnTlvMplsLabel struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvMplsLabel interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvMplsLabel) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvMplsLabel) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvMplsLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMplsLabel(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMplsLabel, error) {
+	_bsntlvmplslabel := &BsnTlvMplsLabel{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvMplsLabel packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvmplslabel.Value = uint32(decoder.ReadUint32())
+	return _bsntlvmplslabel, nil
+}
+
+func NewBsnTlvMplsLabel() *BsnTlvMplsLabel {
+	obj := &BsnTlvMplsLabel{
+		BsnTlv: NewBsnTlv(61),
+	}
+	return obj
+}
+
+type BsnTlvMplsSequenced struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvMplsSequenced interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvMplsSequenced) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvMplsSequenced) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvMplsSequenced) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMplsSequenced(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMplsSequenced, error) {
+	_bsntlvmplssequenced := &BsnTlvMplsSequenced{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvMplsSequenced packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvmplssequenced.Value = uint8(decoder.ReadByte())
+	return _bsntlvmplssequenced, nil
+}
+
+func NewBsnTlvMplsSequenced() *BsnTlvMplsSequenced {
+	obj := &BsnTlvMplsSequenced{
+		BsnTlv: NewBsnTlv(63),
+	}
+	return obj
+}
+
+type BsnTlvMulticastInterfaceId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvMulticastInterfaceId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvMulticastInterfaceId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvMulticastInterfaceId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvMulticastInterfaceId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMulticastInterfaceId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMulticastInterfaceId, error) {
+	_bsntlvmulticastinterfaceid := &BsnTlvMulticastInterfaceId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvMulticastInterfaceId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvmulticastinterfaceid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvmulticastinterfaceid, nil
+}
+
+func NewBsnTlvMulticastInterfaceId() *BsnTlvMulticastInterfaceId {
+	obj := &BsnTlvMulticastInterfaceId{
+		BsnTlv: NewBsnTlv(95),
+	}
+	return obj
+}
+
+type BsnTlvMulticastPacket struct {
+	*BsnTlv
+	Value BsnMulticastPacket
+}
+
+type IBsnTlvMulticastPacket interface {
+	IBsnTlv
+	GetValue() BsnMulticastPacket
+}
+
+func (self *BsnTlvMulticastPacket) GetValue() BsnMulticastPacket {
+	return self.Value
+}
+
+func (self *BsnTlvMulticastPacket) SetValue(v BsnMulticastPacket) {
+	self.Value = v
+}
+
+func (self *BsnTlvMulticastPacket) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMulticastPacket(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMulticastPacket, error) {
+	_bsntlvmulticastpacket := &BsnTlvMulticastPacket{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvMulticastPacket packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvmulticastpacket.Value = BsnMulticastPacket(decoder.ReadUint16())
+	return _bsntlvmulticastpacket, nil
+}
+
+func NewBsnTlvMulticastPacket() *BsnTlvMulticastPacket {
+	obj := &BsnTlvMulticastPacket{
+		BsnTlv: NewBsnTlv(170),
+	}
+	return obj
+}
+
+type BsnTlvMultiplier struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvMultiplier interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvMultiplier) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvMultiplier) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvMultiplier) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvMultiplier(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvMultiplier, error) {
+	_bsntlvmultiplier := &BsnTlvMultiplier{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvMultiplier packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvmultiplier.Value = uint32(decoder.ReadUint32())
+	return _bsntlvmultiplier, nil
+}
+
+func NewBsnTlvMultiplier() *BsnTlvMultiplier {
+	obj := &BsnTlvMultiplier{
+		BsnTlv: NewBsnTlv(174),
+	}
+	return obj
+}
+
+type BsnTlvName struct {
+	*BsnTlv
+	Value []byte
+}
+
+type IBsnTlvName interface {
+	IBsnTlv
+	GetValue() []byte
+}
+
+func (self *BsnTlvName) GetValue() []byte {
+	return self.Value
+}
+
+func (self *BsnTlvName) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *BsnTlvName) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvName(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvName, error) {
+	_bsntlvname := &BsnTlvName{BsnTlv: parent}
+	_bsntlvname.Value = decoder.Read(int(decoder.Length()))
+	return _bsntlvname, nil
+}
+
+func NewBsnTlvName() *BsnTlvName {
+	obj := &BsnTlvName{
+		BsnTlv: NewBsnTlv(52),
+	}
+	return obj
+}
+
+type BsnTlvNdpOffload struct {
+	*BsnTlv
+}
+
+type IBsnTlvNdpOffload interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvNdpOffload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNdpOffload(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNdpOffload, error) {
+	_bsntlvndpoffload := &BsnTlvNdpOffload{BsnTlv: parent}
+	return _bsntlvndpoffload, nil
+}
+
+func NewBsnTlvNdpOffload() *BsnTlvNdpOffload {
+	obj := &BsnTlvNdpOffload{
+		BsnTlv: NewBsnTlv(123),
+	}
+	return obj
+}
+
+type BsnTlvNdpStatic struct {
+	*BsnTlv
+}
+
+type IBsnTlvNdpStatic interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvNdpStatic) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNdpStatic(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNdpStatic, error) {
+	_bsntlvndpstatic := &BsnTlvNdpStatic{BsnTlv: parent}
+	return _bsntlvndpstatic, nil
+}
+
+func NewBsnTlvNdpStatic() *BsnTlvNdpStatic {
+	obj := &BsnTlvNdpStatic{
+		BsnTlv: NewBsnTlv(124),
+	}
+	return obj
+}
+
+type BsnTlvNegate struct {
+	*BsnTlv
+}
+
+type IBsnTlvNegate interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvNegate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNegate(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNegate, error) {
+	_bsntlvnegate := &BsnTlvNegate{BsnTlv: parent}
+	return _bsntlvnegate, nil
+}
+
+func NewBsnTlvNegate() *BsnTlvNegate {
+	obj := &BsnTlvNegate{
+		BsnTlv: NewBsnTlv(83),
+	}
+	return obj
+}
+
+type BsnTlvNextHopIpv4 struct {
+	*BsnTlv
+	Value net.IP
+}
+
+type IBsnTlvNextHopIpv4 interface {
+	IBsnTlv
+	GetValue() net.IP
+}
+
+func (self *BsnTlvNextHopIpv4) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *BsnTlvNextHopIpv4) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *BsnTlvNextHopIpv4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNextHopIpv4(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNextHopIpv4, error) {
+	_bsntlvnexthopipv4 := &BsnTlvNextHopIpv4{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvNextHopIpv4 packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvnexthopipv4.Value = net.IP(decoder.Read(4))
+	return _bsntlvnexthopipv4, nil
+}
+
+func NewBsnTlvNextHopIpv4() *BsnTlvNextHopIpv4 {
+	obj := &BsnTlvNextHopIpv4{
+		BsnTlv: NewBsnTlv(115),
+	}
+	return obj
+}
+
+type BsnTlvNextHopMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvNextHopMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvNextHopMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvNextHopMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvNextHopMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNextHopMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNextHopMac, error) {
+	_bsntlvnexthopmac := &BsnTlvNextHopMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvNextHopMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvnexthopmac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvnexthopmac, nil
+}
+
+func NewBsnTlvNextHopMac() *BsnTlvNextHopMac {
+	obj := &BsnTlvNextHopMac{
+		BsnTlv: NewBsnTlv(114),
+	}
+	return obj
+}
+
+type BsnTlvNexthopTypeVxlan struct {
+	*BsnTlv
+}
+
+type IBsnTlvNexthopTypeVxlan interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvNexthopTypeVxlan) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNexthopTypeVxlan(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNexthopTypeVxlan, error) {
+	_bsntlvnexthoptypevxlan := &BsnTlvNexthopTypeVxlan{BsnTlv: parent}
+	return _bsntlvnexthoptypevxlan, nil
+}
+
+func NewBsnTlvNexthopTypeVxlan() *BsnTlvNexthopTypeVxlan {
+	obj := &BsnTlvNexthopTypeVxlan{
+		BsnTlv: NewBsnTlv(94),
+	}
+	return obj
+}
+
+type BsnTlvNoArpResponse struct {
+	*BsnTlv
+}
+
+type IBsnTlvNoArpResponse interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvNoArpResponse) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNoArpResponse(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNoArpResponse, error) {
+	_bsntlvnoarpresponse := &BsnTlvNoArpResponse{BsnTlv: parent}
+	return _bsntlvnoarpresponse, nil
+}
+
+func NewBsnTlvNoArpResponse() *BsnTlvNoArpResponse {
+	obj := &BsnTlvNoArpResponse{
+		BsnTlv: NewBsnTlv(147),
+	}
+	return obj
+}
+
+type BsnTlvNoNsResponse struct {
+	*BsnTlv
+}
+
+type IBsnTlvNoNsResponse interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvNoNsResponse) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvNoNsResponse(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvNoNsResponse, error) {
+	_bsntlvnonsresponse := &BsnTlvNoNsResponse{BsnTlv: parent}
+	return _bsntlvnonsresponse, nil
+}
+
+func NewBsnTlvNoNsResponse() *BsnTlvNoNsResponse {
+	obj := &BsnTlvNoNsResponse{
+		BsnTlv: NewBsnTlv(148),
+	}
+	return obj
+}
+
+type BsnTlvOffset struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvOffset interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvOffset) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvOffset) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvOffset) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvOffset(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvOffset, error) {
+	_bsntlvoffset := &BsnTlvOffset{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvOffset packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvoffset.Value = uint16(decoder.ReadUint16())
+	return _bsntlvoffset, nil
+}
+
+func NewBsnTlvOffset() *BsnTlvOffset {
+	obj := &BsnTlvOffset{
+		BsnTlv: NewBsnTlv(82),
+	}
+	return obj
+}
+
+type BsnTlvOpticsAlwaysEnabled struct {
+	*BsnTlv
+}
+
+type IBsnTlvOpticsAlwaysEnabled interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvOpticsAlwaysEnabled) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvOpticsAlwaysEnabled(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvOpticsAlwaysEnabled, error) {
+	_bsntlvopticsalwaysenabled := &BsnTlvOpticsAlwaysEnabled{BsnTlv: parent}
+	return _bsntlvopticsalwaysenabled, nil
+}
+
+func NewBsnTlvOpticsAlwaysEnabled() *BsnTlvOpticsAlwaysEnabled {
+	obj := &BsnTlvOpticsAlwaysEnabled{
+		BsnTlv: NewBsnTlv(150),
+	}
+	return obj
+}
+
+type BsnTlvOuterSrcMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvOuterSrcMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvOuterSrcMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvOuterSrcMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvOuterSrcMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvOuterSrcMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvOuterSrcMac, error) {
+	_bsntlvoutersrcmac := &BsnTlvOuterSrcMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvOuterSrcMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvoutersrcmac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvoutersrcmac, nil
+}
+
+func NewBsnTlvOuterSrcMac() *BsnTlvOuterSrcMac {
+	obj := &BsnTlvOuterSrcMac{
+		BsnTlv: NewBsnTlv(157),
+	}
+	return obj
+}
+
+type BsnTlvParentPort struct {
+	*BsnTlv
+	Value Port
+}
+
+type IBsnTlvParentPort interface {
+	IBsnTlv
+	GetValue() Port
+}
+
+func (self *BsnTlvParentPort) GetValue() Port {
+	return self.Value
+}
+
+func (self *BsnTlvParentPort) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *BsnTlvParentPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvParentPort(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvParentPort, error) {
+	_bsntlvparentport := &BsnTlvParentPort{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvParentPort packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvparentport.Value.Decode(decoder)
+	return _bsntlvparentport, nil
+}
+
+func NewBsnTlvParentPort() *BsnTlvParentPort {
+	obj := &BsnTlvParentPort{
+		BsnTlv: NewBsnTlv(109),
+	}
+	return obj
+}
+
+type BsnTlvPartnerKey struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvPartnerKey interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvPartnerKey) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvPartnerKey) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvPartnerKey) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPartnerKey(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPartnerKey, error) {
+	_bsntlvpartnerkey := &BsnTlvPartnerKey{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvPartnerKey packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvpartnerkey.Value = uint16(decoder.ReadUint16())
+	return _bsntlvpartnerkey, nil
+}
+
+func NewBsnTlvPartnerKey() *BsnTlvPartnerKey {
+	obj := &BsnTlvPartnerKey{
+		BsnTlv: NewBsnTlv(51),
+	}
+	return obj
+}
+
+type BsnTlvPartnerPortNum struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvPartnerPortNum interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvPartnerPortNum) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvPartnerPortNum) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvPartnerPortNum) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPartnerPortNum(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPartnerPortNum, error) {
+	_bsntlvpartnerportnum := &BsnTlvPartnerPortNum{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvPartnerPortNum packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvpartnerportnum.Value = uint16(decoder.ReadUint16())
+	return _bsntlvpartnerportnum, nil
+}
+
+func NewBsnTlvPartnerPortNum() *BsnTlvPartnerPortNum {
+	obj := &BsnTlvPartnerPortNum{
+		BsnTlv: NewBsnTlv(50),
+	}
+	return obj
+}
+
+type BsnTlvPartnerPortPriority struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvPartnerPortPriority interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvPartnerPortPriority) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvPartnerPortPriority) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvPartnerPortPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPartnerPortPriority(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPartnerPortPriority, error) {
+	_bsntlvpartnerportpriority := &BsnTlvPartnerPortPriority{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvPartnerPortPriority packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvpartnerportpriority.Value = uint16(decoder.ReadUint16())
+	return _bsntlvpartnerportpriority, nil
+}
+
+func NewBsnTlvPartnerPortPriority() *BsnTlvPartnerPortPriority {
+	obj := &BsnTlvPartnerPortPriority{
+		BsnTlv: NewBsnTlv(49),
+	}
+	return obj
+}
+
+type BsnTlvPartnerState struct {
+	*BsnTlv
+	Value BsnLacpState
+}
+
+type IBsnTlvPartnerState interface {
+	IBsnTlv
+	GetValue() BsnLacpState
+}
+
+func (self *BsnTlvPartnerState) GetValue() BsnLacpState {
+	return self.Value
+}
+
+func (self *BsnTlvPartnerState) SetValue(v BsnLacpState) {
+	self.Value = v
+}
+
+func (self *BsnTlvPartnerState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPartnerState(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPartnerState, error) {
+	_bsntlvpartnerstate := &BsnTlvPartnerState{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvPartnerState packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvpartnerstate.Value = BsnLacpState(decoder.ReadByte())
+	return _bsntlvpartnerstate, nil
+}
+
+func NewBsnTlvPartnerState() *BsnTlvPartnerState {
+	obj := &BsnTlvPartnerState{
+		BsnTlv: NewBsnTlv(54),
+	}
+	return obj
+}
+
+type BsnTlvPartnerSystemMac struct {
+	*BsnTlv
+	Value net.HardwareAddr
+}
+
+type IBsnTlvPartnerSystemMac interface {
+	IBsnTlv
+	GetValue() net.HardwareAddr
+}
+
+func (self *BsnTlvPartnerSystemMac) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *BsnTlvPartnerSystemMac) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *BsnTlvPartnerSystemMac) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPartnerSystemMac(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPartnerSystemMac, error) {
+	_bsntlvpartnersystemmac := &BsnTlvPartnerSystemMac{BsnTlv: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("BsnTlvPartnerSystemMac packet too short: %d < 6", decoder.Length())
+	}
+	_bsntlvpartnersystemmac.Value = net.HardwareAddr(decoder.Read(6))
+	return _bsntlvpartnersystemmac, nil
+}
+
+func NewBsnTlvPartnerSystemMac() *BsnTlvPartnerSystemMac {
+	obj := &BsnTlvPartnerSystemMac{
+		BsnTlv: NewBsnTlv(48),
+	}
+	return obj
+}
+
+type BsnTlvPartnerSystemPriority struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvPartnerSystemPriority interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvPartnerSystemPriority) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvPartnerSystemPriority) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvPartnerSystemPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPartnerSystemPriority(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPartnerSystemPriority, error) {
+	_bsntlvpartnersystempriority := &BsnTlvPartnerSystemPriority{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvPartnerSystemPriority packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvpartnersystempriority.Value = uint16(decoder.ReadUint16())
+	return _bsntlvpartnersystempriority, nil
+}
+
+func NewBsnTlvPartnerSystemPriority() *BsnTlvPartnerSystemPriority {
+	obj := &BsnTlvPartnerSystemPriority{
+		BsnTlv: NewBsnTlv(47),
+	}
+	return obj
+}
+
+type BsnTlvPassive struct {
+	*BsnTlv
+}
+
+type IBsnTlvPassive interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvPassive) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPassive(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPassive, error) {
+	_bsntlvpassive := &BsnTlvPassive{BsnTlv: parent}
+	return _bsntlvpassive, nil
+}
+
+func NewBsnTlvPassive() *BsnTlvPassive {
+	obj := &BsnTlvPassive{
+		BsnTlv: NewBsnTlv(172),
+	}
+	return obj
+}
+
+type BsnTlvPduaRxInstance struct {
+	*BsnTlv
+	Value []byte
+}
+
+type IBsnTlvPduaRxInstance interface {
+	IBsnTlv
+	GetValue() []byte
+}
+
+func (self *BsnTlvPduaRxInstance) GetValue() []byte {
+	return self.Value
+}
+
+func (self *BsnTlvPduaRxInstance) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *BsnTlvPduaRxInstance) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPduaRxInstance(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPduaRxInstance, error) {
+	_bsntlvpduarxinstance := &BsnTlvPduaRxInstance{BsnTlv: parent}
+	_bsntlvpduarxinstance.Value = decoder.Read(int(decoder.Length()))
+	return _bsntlvpduarxinstance, nil
+}
+
+func NewBsnTlvPduaRxInstance() *BsnTlvPduaRxInstance {
+	obj := &BsnTlvPduaRxInstance{
+		BsnTlv: NewBsnTlv(159),
+	}
+	return obj
+}
+
+type BsnTlvPimDr struct {
+	*BsnTlv
+}
+
+type IBsnTlvPimDr interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvPimDr) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPimDr(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPimDr, error) {
+	_bsntlvpimdr := &BsnTlvPimDr{BsnTlv: parent}
+	return _bsntlvpimdr, nil
+}
+
+func NewBsnTlvPimDr() *BsnTlvPimDr {
+	obj := &BsnTlvPimDr{
+		BsnTlv: NewBsnTlv(171),
+	}
+	return obj
+}
+
+type BsnTlvPimHelloFlood struct {
+	*BsnTlv
+}
+
+type IBsnTlvPimHelloFlood interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvPimHelloFlood) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPimHelloFlood(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPimHelloFlood, error) {
+	_bsntlvpimhelloflood := &BsnTlvPimHelloFlood{BsnTlv: parent}
+	return _bsntlvpimhelloflood, nil
+}
+
+func NewBsnTlvPimHelloFlood() *BsnTlvPimHelloFlood {
+	obj := &BsnTlvPimHelloFlood{
+		BsnTlv: NewBsnTlv(181),
+	}
+	return obj
+}
+
+type BsnTlvPort struct {
+	*BsnTlv
+	Value Port
+}
+
+type IBsnTlvPort interface {
+	IBsnTlv
+	GetValue() Port
+}
+
+func (self *BsnTlvPort) GetValue() Port {
+	return self.Value
+}
+
+func (self *BsnTlvPort) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *BsnTlvPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPort(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPort, error) {
+	_bsntlvport := &BsnTlvPort{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvPort packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvport.Value.Decode(decoder)
+	return _bsntlvport, nil
+}
+
+func NewBsnTlvPort() *BsnTlvPort {
+	obj := &BsnTlvPort{
+		BsnTlv: NewBsnTlv(0),
+	}
+	return obj
+}
+
+type BsnTlvPortMode struct {
+	*BsnTlv
+	Value BsnPortMode
+}
+
+type IBsnTlvPortMode interface {
+	IBsnTlv
+	GetValue() BsnPortMode
+}
+
+func (self *BsnTlvPortMode) GetValue() BsnPortMode {
+	return self.Value
+}
+
+func (self *BsnTlvPortMode) SetValue(v BsnPortMode) {
+	self.Value = v
+}
+
+func (self *BsnTlvPortMode) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPortMode(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPortMode, error) {
+	_bsntlvportmode := &BsnTlvPortMode{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvPortMode packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvportmode.Value = BsnPortMode(decoder.ReadUint16())
+	return _bsntlvportmode, nil
+}
+
+func NewBsnTlvPortMode() *BsnTlvPortMode {
+	obj := &BsnTlvPortMode{
+		BsnTlv: NewBsnTlv(179),
+	}
+	return obj
+}
+
+type BsnTlvPortSpeedGbps struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvPortSpeedGbps interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvPortSpeedGbps) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvPortSpeedGbps) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvPortSpeedGbps) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPortSpeedGbps(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPortSpeedGbps, error) {
+	_bsntlvportspeedgbps := &BsnTlvPortSpeedGbps{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvPortSpeedGbps packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvportspeedgbps.Value = uint32(decoder.ReadUint32())
+	return _bsntlvportspeedgbps, nil
+}
+
+func NewBsnTlvPortSpeedGbps() *BsnTlvPortSpeedGbps {
+	obj := &BsnTlvPortSpeedGbps{
+		BsnTlv: NewBsnTlv(156),
+	}
+	return obj
+}
+
+type BsnTlvPortUsage struct {
+	*BsnTlv
+	Value BsnPortUsage
+}
+
+type IBsnTlvPortUsage interface {
+	IBsnTlv
+	GetValue() BsnPortUsage
+}
+
+func (self *BsnTlvPortUsage) GetValue() BsnPortUsage {
+	return self.Value
+}
+
+func (self *BsnTlvPortUsage) SetValue(v BsnPortUsage) {
+	self.Value = v
+}
+
+func (self *BsnTlvPortUsage) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPortUsage(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPortUsage, error) {
+	_bsntlvportusage := &BsnTlvPortUsage{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvPortUsage packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvportusage.Value = BsnPortUsage(decoder.ReadUint16())
+	return _bsntlvportusage, nil
+}
+
+func NewBsnTlvPortUsage() *BsnTlvPortUsage {
+	obj := &BsnTlvPortUsage{
+		BsnTlv: NewBsnTlv(141),
+	}
+	return obj
+}
+
+type BsnTlvPortVxlanMode struct {
+	*BsnTlv
+	Value BsnPortVxlanMode
+}
+
+type IBsnTlvPortVxlanMode interface {
+	IBsnTlv
+	GetValue() BsnPortVxlanMode
+}
+
+func (self *BsnTlvPortVxlanMode) GetValue() BsnPortVxlanMode {
+	return self.Value
+}
+
+func (self *BsnTlvPortVxlanMode) SetValue(v BsnPortVxlanMode) {
+	self.Value = v
+}
+
+func (self *BsnTlvPortVxlanMode) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPortVxlanMode(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPortVxlanMode, error) {
+	_bsntlvportvxlanmode := &BsnTlvPortVxlanMode{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvPortVxlanMode packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvportvxlanmode.Value = BsnPortVxlanMode(decoder.ReadByte())
+	return _bsntlvportvxlanmode, nil
+}
+
+func NewBsnTlvPortVxlanMode() *BsnTlvPortVxlanMode {
+	obj := &BsnTlvPortVxlanMode{
+		BsnTlv: NewBsnTlv(88),
+	}
+	return obj
+}
+
+type BsnTlvPriority struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvPriority interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvPriority) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvPriority) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPriority(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPriority, error) {
+	_bsntlvpriority := &BsnTlvPriority{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvPriority packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvpriority.Value = uint32(decoder.ReadUint32())
+	return _bsntlvpriority, nil
+}
+
+func NewBsnTlvPriority() *BsnTlvPriority {
+	obj := &BsnTlvPriority{
+		BsnTlv: NewBsnTlv(57),
+	}
+	return obj
+}
+
+type BsnTlvPushVlanOnEgress struct {
+	*BsnTlv
+}
+
+type IBsnTlvPushVlanOnEgress interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvPushVlanOnEgress) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPushVlanOnEgress(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPushVlanOnEgress, error) {
+	_bsntlvpushvlanonegress := &BsnTlvPushVlanOnEgress{BsnTlv: parent}
+	return _bsntlvpushvlanonegress, nil
+}
+
+func NewBsnTlvPushVlanOnEgress() *BsnTlvPushVlanOnEgress {
+	obj := &BsnTlvPushVlanOnEgress{
+		BsnTlv: NewBsnTlv(162),
+	}
+	return obj
+}
+
+type BsnTlvPushVlanOnIngress struct {
+	*BsnTlv
+	Flags BsnPushVlan
+}
+
+type IBsnTlvPushVlanOnIngress interface {
+	IBsnTlv
+	GetFlags() BsnPushVlan
+}
+
+func (self *BsnTlvPushVlanOnIngress) GetFlags() BsnPushVlan {
+	return self.Flags
+}
+
+func (self *BsnTlvPushVlanOnIngress) SetFlags(v BsnPushVlan) {
+	self.Flags = v
+}
+
+func (self *BsnTlvPushVlanOnIngress) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Flags))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvPushVlanOnIngress(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvPushVlanOnIngress, error) {
+	_bsntlvpushvlanoningress := &BsnTlvPushVlanOnIngress{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvPushVlanOnIngress packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvpushvlanoningress.Flags = BsnPushVlan(decoder.ReadByte())
+	return _bsntlvpushvlanoningress, nil
+}
+
+func NewBsnTlvPushVlanOnIngress() *BsnTlvPushVlanOnIngress {
+	obj := &BsnTlvPushVlanOnIngress{
+		BsnTlv: NewBsnTlv(128),
+	}
+	return obj
+}
+
+type BsnTlvQosPriority struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvQosPriority interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvQosPriority) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvQosPriority) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvQosPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvQosPriority(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvQosPriority, error) {
+	_bsntlvqospriority := &BsnTlvQosPriority{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvQosPriority packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvqospriority.Value = uint32(decoder.ReadUint32())
+	return _bsntlvqospriority, nil
+}
+
+func NewBsnTlvQosPriority() *BsnTlvQosPriority {
+	obj := &BsnTlvQosPriority{
+		BsnTlv: NewBsnTlv(108),
+	}
+	return obj
+}
+
+type BsnTlvQueueId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvQueueId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvQueueId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvQueueId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvQueueId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvQueueId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvQueueId, error) {
+	_bsntlvqueueid := &BsnTlvQueueId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvQueueId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvqueueid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvqueueid, nil
+}
+
+func NewBsnTlvQueueId() *BsnTlvQueueId {
+	obj := &BsnTlvQueueId{
+		BsnTlv: NewBsnTlv(20),
+	}
+	return obj
+}
+
+type BsnTlvQueueWeight struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvQueueWeight interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvQueueWeight) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvQueueWeight) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvQueueWeight) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvQueueWeight(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvQueueWeight, error) {
+	_bsntlvqueueweight := &BsnTlvQueueWeight{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvQueueWeight packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvqueueweight.Value = uint32(decoder.ReadUint32())
+	return _bsntlvqueueweight, nil
+}
+
+func NewBsnTlvQueueWeight() *BsnTlvQueueWeight {
+	obj := &BsnTlvQueueWeight{
+		BsnTlv: NewBsnTlv(21),
+	}
+	return obj
+}
+
+type BsnTlvRateLimit struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvRateLimit interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvRateLimit) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvRateLimit) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvRateLimit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRateLimit(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRateLimit, error) {
+	_bsntlvratelimit := &BsnTlvRateLimit{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvRateLimit packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvratelimit.Value = uint32(decoder.ReadUint32())
+	return _bsntlvratelimit, nil
+}
+
+func NewBsnTlvRateLimit() *BsnTlvRateLimit {
+	obj := &BsnTlvRateLimit{
+		BsnTlv: NewBsnTlv(116),
+	}
+	return obj
+}
+
+type BsnTlvRateUnit struct {
+	*BsnTlv
+	Value BsnRateUnit
+}
+
+type IBsnTlvRateUnit interface {
+	IBsnTlv
+	GetValue() BsnRateUnit
+}
+
+func (self *BsnTlvRateUnit) GetValue() BsnRateUnit {
+	return self.Value
+}
+
+func (self *BsnTlvRateUnit) SetValue(v BsnRateUnit) {
+	self.Value = v
+}
+
+func (self *BsnTlvRateUnit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRateUnit(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRateUnit, error) {
+	_bsntlvrateunit := &BsnTlvRateUnit{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvRateUnit packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvrateunit.Value = BsnRateUnit(decoder.ReadByte())
+	return _bsntlvrateunit, nil
+}
+
+func NewBsnTlvRateUnit() *BsnTlvRateUnit {
+	obj := &BsnTlvRateUnit{
+		BsnTlv: NewBsnTlv(89),
+	}
+	return obj
+}
+
+type BsnTlvRecordPackets struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvRecordPackets interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvRecordPackets) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvRecordPackets) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvRecordPackets) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRecordPackets(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRecordPackets, error) {
+	_bsntlvrecordpackets := &BsnTlvRecordPackets{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvRecordPackets packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvrecordpackets.Value = uint32(decoder.ReadUint32())
+	return _bsntlvrecordpackets, nil
+}
+
+func NewBsnTlvRecordPackets() *BsnTlvRecordPackets {
+	obj := &BsnTlvRecordPackets{
+		BsnTlv: NewBsnTlv(155),
+	}
+	return obj
+}
+
+type BsnTlvReference struct {
+	*BsnTlv
+	TableId uint16
+	Key     []IBsnTlv
+}
+
+type IBsnTlvReference interface {
+	IBsnTlv
+	GetTableId() uint16
+	GetKey() []IBsnTlv
+}
+
+func (self *BsnTlvReference) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnTlvReference) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnTlvReference) GetKey() []IBsnTlv {
+	return self.Key
+}
+
+func (self *BsnTlvReference) SetKey(v []IBsnTlv) {
+	self.Key = v
+}
+
+func (self *BsnTlvReference) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	for _, obj := range self.Key {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvReference(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvReference, error) {
+	_bsntlvreference := &BsnTlvReference{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvReference packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvreference.TableId = uint16(decoder.ReadUint16())
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsntlvreference.Key = append(_bsntlvreference.Key, item)
+		}
+	}
+	return _bsntlvreference, nil
+}
+
+func NewBsnTlvReference() *BsnTlvReference {
+	obj := &BsnTlvReference{
+		BsnTlv: NewBsnTlv(59),
+	}
+	return obj
+}
+
+type BsnTlvReplyPackets struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvReplyPackets interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvReplyPackets) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvReplyPackets) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvReplyPackets) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvReplyPackets(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvReplyPackets, error) {
+	_bsntlvreplypackets := &BsnTlvReplyPackets{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvReplyPackets packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvreplypackets.Value = uint64(decoder.ReadUint64())
+	return _bsntlvreplypackets, nil
+}
+
+func NewBsnTlvReplyPackets() *BsnTlvReplyPackets {
+	obj := &BsnTlvReplyPackets{
+		BsnTlv: NewBsnTlv(12),
+	}
+	return obj
+}
+
+type BsnTlvRequestPackets struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvRequestPackets interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvRequestPackets) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvRequestPackets) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvRequestPackets) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRequestPackets(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRequestPackets, error) {
+	_bsntlvrequestpackets := &BsnTlvRequestPackets{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvRequestPackets packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvrequestpackets.Value = uint64(decoder.ReadUint64())
+	return _bsntlvrequestpackets, nil
+}
+
+func NewBsnTlvRequestPackets() *BsnTlvRequestPackets {
+	obj := &BsnTlvRequestPackets{
+		BsnTlv: NewBsnTlv(11),
+	}
+	return obj
+}
+
+type BsnTlvRestServer struct {
+	*BsnTlv
+}
+
+type IBsnTlvRestServer interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvRestServer) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRestServer(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRestServer, error) {
+	_bsntlvrestserver := &BsnTlvRestServer{BsnTlv: parent}
+	return _bsntlvrestserver, nil
+}
+
+func NewBsnTlvRestServer() *BsnTlvRestServer {
+	obj := &BsnTlvRestServer{
+		BsnTlv: NewBsnTlv(152),
+	}
+	return obj
+}
+
+type BsnTlvRoutingParam struct {
+	*BsnTlv
+	Value BsnRoutingParam
+}
+
+type IBsnTlvRoutingParam interface {
+	IBsnTlv
+	GetValue() BsnRoutingParam
+}
+
+func (self *BsnTlvRoutingParam) GetValue() BsnRoutingParam {
+	return self.Value
+}
+
+func (self *BsnTlvRoutingParam) SetValue(v BsnRoutingParam) {
+	self.Value = v
+}
+
+func (self *BsnTlvRoutingParam) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRoutingParam(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRoutingParam, error) {
+	_bsntlvroutingparam := &BsnTlvRoutingParam{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvRoutingParam packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvroutingparam.Value = BsnRoutingParam(decoder.ReadUint16())
+	return _bsntlvroutingparam, nil
+}
+
+func NewBsnTlvRoutingParam() *BsnTlvRoutingParam {
+	obj := &BsnTlvRoutingParam{
+		BsnTlv: NewBsnTlv(161),
+	}
+	return obj
+}
+
+type BsnTlvRxBytes struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvRxBytes interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvRxBytes) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvRxBytes) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvRxBytes) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRxBytes(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRxBytes, error) {
+	_bsntlvrxbytes := &BsnTlvRxBytes{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvRxBytes packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvrxbytes.Value = uint64(decoder.ReadUint64())
+	return _bsntlvrxbytes, nil
+}
+
+func NewBsnTlvRxBytes() *BsnTlvRxBytes {
+	obj := &BsnTlvRxBytes{
+		BsnTlv: NewBsnTlv(71),
+	}
+	return obj
+}
+
+type BsnTlvRxPackets struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvRxPackets interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvRxPackets) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvRxPackets) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvRxPackets) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvRxPackets(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvRxPackets, error) {
+	_bsntlvrxpackets := &BsnTlvRxPackets{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvRxPackets packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvrxpackets.Value = uint64(decoder.ReadUint64())
+	return _bsntlvrxpackets, nil
+}
+
+func NewBsnTlvRxPackets() *BsnTlvRxPackets {
+	obj := &BsnTlvRxPackets{
+		BsnTlv: NewBsnTlv(2),
+	}
+	return obj
+}
+
+type BsnTlvSamplingRate struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvSamplingRate interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvSamplingRate) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvSamplingRate) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvSamplingRate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvSamplingRate(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvSamplingRate, error) {
+	_bsntlvsamplingrate := &BsnTlvSamplingRate{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvSamplingRate packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvsamplingrate.Value = uint32(decoder.ReadUint32())
+	return _bsntlvsamplingrate, nil
+}
+
+func NewBsnTlvSamplingRate() *BsnTlvSamplingRate {
+	obj := &BsnTlvSamplingRate{
+		BsnTlv: NewBsnTlv(30),
+	}
+	return obj
+}
+
+type BsnTlvSetLoopbackMode struct {
+	*BsnTlv
+}
+
+type IBsnTlvSetLoopbackMode interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvSetLoopbackMode) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvSetLoopbackMode(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvSetLoopbackMode, error) {
+	_bsntlvsetloopbackmode := &BsnTlvSetLoopbackMode{BsnTlv: parent}
+	return _bsntlvsetloopbackmode, nil
+}
+
+func NewBsnTlvSetLoopbackMode() *BsnTlvSetLoopbackMode {
+	obj := &BsnTlvSetLoopbackMode{
+		BsnTlv: NewBsnTlv(74),
+	}
+	return obj
+}
+
+type BsnTlvStatus struct {
+	*BsnTlv
+	Value BsnStatus
+}
+
+type IBsnTlvStatus interface {
+	IBsnTlv
+	GetValue() BsnStatus
+}
+
+func (self *BsnTlvStatus) GetValue() BsnStatus {
+	return self.Value
+}
+
+func (self *BsnTlvStatus) SetValue(v BsnStatus) {
+	self.Value = v
+}
+
+func (self *BsnTlvStatus) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvStatus(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvStatus, error) {
+	_bsntlvstatus := &BsnTlvStatus{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvStatus packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvstatus.Value = BsnStatus(decoder.ReadByte())
+	return _bsntlvstatus, nil
+}
+
+func NewBsnTlvStatus() *BsnTlvStatus {
+	obj := &BsnTlvStatus{
+		BsnTlv: NewBsnTlv(97),
+	}
+	return obj
+}
+
+type BsnTlvStripMplsL2OnIngress struct {
+	*BsnTlv
+}
+
+type IBsnTlvStripMplsL2OnIngress interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvStripMplsL2OnIngress) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvStripMplsL2OnIngress(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvStripMplsL2OnIngress, error) {
+	_bsntlvstripmplsl2oningress := &BsnTlvStripMplsL2OnIngress{BsnTlv: parent}
+	return _bsntlvstripmplsl2oningress, nil
+}
+
+func NewBsnTlvStripMplsL2OnIngress() *BsnTlvStripMplsL2OnIngress {
+	obj := &BsnTlvStripMplsL2OnIngress{
+		BsnTlv: NewBsnTlv(75),
+	}
+	return obj
+}
+
+type BsnTlvStripMplsL3OnIngress struct {
+	*BsnTlv
+}
+
+type IBsnTlvStripMplsL3OnIngress interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvStripMplsL3OnIngress) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvStripMplsL3OnIngress(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvStripMplsL3OnIngress, error) {
+	_bsntlvstripmplsl3oningress := &BsnTlvStripMplsL3OnIngress{BsnTlv: parent}
+	return _bsntlvstripmplsl3oningress, nil
+}
+
+func NewBsnTlvStripMplsL3OnIngress() *BsnTlvStripMplsL3OnIngress {
+	obj := &BsnTlvStripMplsL3OnIngress{
+		BsnTlv: NewBsnTlv(76),
+	}
+	return obj
+}
+
+type BsnTlvStripVlanOnEgress struct {
+	*BsnTlv
+	Flags BsnStripVlan
+}
+
+type IBsnTlvStripVlanOnEgress interface {
+	IBsnTlv
+	GetFlags() BsnStripVlan
+}
+
+func (self *BsnTlvStripVlanOnEgress) GetFlags() BsnStripVlan {
+	return self.Flags
+}
+
+func (self *BsnTlvStripVlanOnEgress) SetFlags(v BsnStripVlan) {
+	self.Flags = v
+}
+
+func (self *BsnTlvStripVlanOnEgress) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Flags))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvStripVlanOnEgress(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvStripVlanOnEgress, error) {
+	_bsntlvstripvlanonegress := &BsnTlvStripVlanOnEgress{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvStripVlanOnEgress packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvstripvlanonegress.Flags = BsnStripVlan(decoder.ReadByte())
+	return _bsntlvstripvlanonegress, nil
+}
+
+func NewBsnTlvStripVlanOnEgress() *BsnTlvStripVlanOnEgress {
+	obj := &BsnTlvStripVlanOnEgress{
+		BsnTlv: NewBsnTlv(73),
+	}
+	return obj
+}
+
+type BsnTlvSubAgentId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvSubAgentId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvSubAgentId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvSubAgentId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvSubAgentId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvSubAgentId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvSubAgentId, error) {
+	_bsntlvsubagentid := &BsnTlvSubAgentId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvSubAgentId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvsubagentid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvsubagentid, nil
+}
+
+func NewBsnTlvSubAgentId() *BsnTlvSubAgentId {
+	obj := &BsnTlvSubAgentId{
+		BsnTlv: NewBsnTlv(38),
+	}
+	return obj
+}
+
+type BsnTlvTcpDst struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvTcpDst interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvTcpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvTcpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvTcpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTcpDst(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTcpDst, error) {
+	_bsntlvtcpdst := &BsnTlvTcpDst{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvTcpDst packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvtcpdst.Value = uint16(decoder.ReadUint16())
+	return _bsntlvtcpdst, nil
+}
+
+func NewBsnTlvTcpDst() *BsnTlvTcpDst {
+	obj := &BsnTlvTcpDst{
+		BsnTlv: NewBsnTlv(66),
+	}
+	return obj
+}
+
+type BsnTlvTcpFlags struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvTcpFlags interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvTcpFlags) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvTcpFlags) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvTcpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTcpFlags(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTcpFlags, error) {
+	_bsntlvtcpflags := &BsnTlvTcpFlags{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvTcpFlags packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvtcpflags.Value = uint16(decoder.ReadUint16())
+	return _bsntlvtcpflags, nil
+}
+
+func NewBsnTlvTcpFlags() *BsnTlvTcpFlags {
+	obj := &BsnTlvTcpFlags{
+		BsnTlv: NewBsnTlv(133),
+	}
+	return obj
+}
+
+type BsnTlvTcpSrc struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvTcpSrc interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvTcpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvTcpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvTcpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTcpSrc(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTcpSrc, error) {
+	_bsntlvtcpsrc := &BsnTlvTcpSrc{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvTcpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvtcpsrc.Value = uint16(decoder.ReadUint16())
+	return _bsntlvtcpsrc, nil
+}
+
+func NewBsnTlvTcpSrc() *BsnTlvTcpSrc {
+	obj := &BsnTlvTcpSrc{
+		BsnTlv: NewBsnTlv(65),
+	}
+	return obj
+}
+
+type BsnTlvTimestamp struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvTimestamp interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvTimestamp) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvTimestamp) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvTimestamp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTimestamp(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTimestamp, error) {
+	_bsntlvtimestamp := &BsnTlvTimestamp{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvTimestamp packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvtimestamp.Value = uint64(decoder.ReadUint64())
+	return _bsntlvtimestamp, nil
+}
+
+func NewBsnTlvTimestamp() *BsnTlvTimestamp {
+	obj := &BsnTlvTimestamp{
+		BsnTlv: NewBsnTlv(154),
+	}
+	return obj
+}
+
+type BsnTlvTtl struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvTtl interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvTtl) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvTtl) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTtl(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTtl, error) {
+	_bsntlvttl := &BsnTlvTtl{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvTtl packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvttl.Value = uint16(decoder.ReadUint16())
+	return _bsntlvttl, nil
+}
+
+func NewBsnTlvTtl() *BsnTlvTtl {
+	obj := &BsnTlvTtl{
+		BsnTlv: NewBsnTlv(113),
+	}
+	return obj
+}
+
+type BsnTlvTunnelCapability struct {
+	*BsnTlv
+	Value BsnTunnelType
+}
+
+type IBsnTlvTunnelCapability interface {
+	IBsnTlv
+	GetValue() BsnTunnelType
+}
+
+func (self *BsnTlvTunnelCapability) GetValue() BsnTunnelType {
+	return self.Value
+}
+
+func (self *BsnTlvTunnelCapability) SetValue(v BsnTunnelType) {
+	self.Value = v
+}
+
+func (self *BsnTlvTunnelCapability) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTunnelCapability(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTunnelCapability, error) {
+	_bsntlvtunnelcapability := &BsnTlvTunnelCapability{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvTunnelCapability packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvtunnelcapability.Value = BsnTunnelType(decoder.ReadUint64())
+	return _bsntlvtunnelcapability, nil
+}
+
+func NewBsnTlvTunnelCapability() *BsnTlvTunnelCapability {
+	obj := &BsnTlvTunnelCapability{
+		BsnTlv: NewBsnTlv(142),
+	}
+	return obj
+}
+
+type BsnTlvTxBytes struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvTxBytes interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvTxBytes) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvTxBytes) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvTxBytes) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTxBytes(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTxBytes, error) {
+	_bsntlvtxbytes := &BsnTlvTxBytes{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvTxBytes packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvtxbytes.Value = uint64(decoder.ReadUint64())
+	return _bsntlvtxbytes, nil
+}
+
+func NewBsnTlvTxBytes() *BsnTlvTxBytes {
+	obj := &BsnTlvTxBytes{
+		BsnTlv: NewBsnTlv(39),
+	}
+	return obj
+}
+
+type BsnTlvTxPackets struct {
+	*BsnTlv
+	Value uint64
+}
+
+type IBsnTlvTxPackets interface {
+	IBsnTlv
+	GetValue() uint64
+}
+
+func (self *BsnTlvTxPackets) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvTxPackets) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvTxPackets) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvTxPackets(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvTxPackets, error) {
+	_bsntlvtxpackets := &BsnTlvTxPackets{BsnTlv: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTlvTxPackets packet too short: %d < 8", decoder.Length())
+	}
+	_bsntlvtxpackets.Value = uint64(decoder.ReadUint64())
+	return _bsntlvtxpackets, nil
+}
+
+func NewBsnTlvTxPackets() *BsnTlvTxPackets {
+	obj := &BsnTlvTxPackets{
+		BsnTlv: NewBsnTlv(3),
+	}
+	return obj
+}
+
+type BsnTlvUdfAnchor struct {
+	*BsnTlv
+	Value BsnUdfAnchor
+}
+
+type IBsnTlvUdfAnchor interface {
+	IBsnTlv
+	GetValue() BsnUdfAnchor
+}
+
+func (self *BsnTlvUdfAnchor) GetValue() BsnUdfAnchor {
+	return self.Value
+}
+
+func (self *BsnTlvUdfAnchor) SetValue(v BsnUdfAnchor) {
+	self.Value = v
+}
+
+func (self *BsnTlvUdfAnchor) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUdfAnchor(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUdfAnchor, error) {
+	_bsntlvudfanchor := &BsnTlvUdfAnchor{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvUdfAnchor packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvudfanchor.Value = BsnUdfAnchor(decoder.ReadUint16())
+	return _bsntlvudfanchor, nil
+}
+
+func NewBsnTlvUdfAnchor() *BsnTlvUdfAnchor {
+	obj := &BsnTlvUdfAnchor{
+		BsnTlv: NewBsnTlv(16),
+	}
+	return obj
+}
+
+type BsnTlvUdfCapability struct {
+	*BsnTlv
+	Value BsnUdfMode
+}
+
+type IBsnTlvUdfCapability interface {
+	IBsnTlv
+	GetValue() BsnUdfMode
+}
+
+func (self *BsnTlvUdfCapability) GetValue() BsnUdfMode {
+	return self.Value
+}
+
+func (self *BsnTlvUdfCapability) SetValue(v BsnUdfMode) {
+	self.Value = v
+}
+
+func (self *BsnTlvUdfCapability) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUdfCapability(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUdfCapability, error) {
+	_bsntlvudfcapability := &BsnTlvUdfCapability{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvUdfCapability packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvudfcapability.Value = BsnUdfMode(decoder.ReadByte())
+	return _bsntlvudfcapability, nil
+}
+
+func NewBsnTlvUdfCapability() *BsnTlvUdfCapability {
+	obj := &BsnTlvUdfCapability{
+		BsnTlv: NewBsnTlv(180),
+	}
+	return obj
+}
+
+type BsnTlvUdfId struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvUdfId interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvUdfId) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvUdfId) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvUdfId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUdfId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUdfId, error) {
+	_bsntlvudfid := &BsnTlvUdfId{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvUdfId packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvudfid.Value = uint16(decoder.ReadUint16())
+	return _bsntlvudfid, nil
+}
+
+func NewBsnTlvUdfId() *BsnTlvUdfId {
+	obj := &BsnTlvUdfId{
+		BsnTlv: NewBsnTlv(15),
+	}
+	return obj
+}
+
+type BsnTlvUdfLength struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvUdfLength interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvUdfLength) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvUdfLength) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvUdfLength) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUdfLength(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUdfLength, error) {
+	_bsntlvudflength := &BsnTlvUdfLength{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvUdfLength packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvudflength.Value = uint16(decoder.ReadUint16())
+	return _bsntlvudflength, nil
+}
+
+func NewBsnTlvUdfLength() *BsnTlvUdfLength {
+	obj := &BsnTlvUdfLength{
+		BsnTlv: NewBsnTlv(18),
+	}
+	return obj
+}
+
+type BsnTlvUdfOffset struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvUdfOffset interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvUdfOffset) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvUdfOffset) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvUdfOffset) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUdfOffset(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUdfOffset, error) {
+	_bsntlvudfoffset := &BsnTlvUdfOffset{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvUdfOffset packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvudfoffset.Value = uint16(decoder.ReadUint16())
+	return _bsntlvudfoffset, nil
+}
+
+func NewBsnTlvUdfOffset() *BsnTlvUdfOffset {
+	obj := &BsnTlvUdfOffset{
+		BsnTlv: NewBsnTlv(17),
+	}
+	return obj
+}
+
+type BsnTlvUdpDst struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvUdpDst interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvUdpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvUdpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvUdpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUdpDst(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUdpDst, error) {
+	_bsntlvudpdst := &BsnTlvUdpDst{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvUdpDst packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvudpdst.Value = uint16(decoder.ReadUint16())
+	return _bsntlvudpdst, nil
+}
+
+func NewBsnTlvUdpDst() *BsnTlvUdpDst {
+	obj := &BsnTlvUdpDst{
+		BsnTlv: NewBsnTlv(37),
+	}
+	return obj
+}
+
+type BsnTlvUdpSrc struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvUdpSrc interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvUdpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvUdpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvUdpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUdpSrc(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUdpSrc, error) {
+	_bsntlvudpsrc := &BsnTlvUdpSrc{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvUdpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvudpsrc.Value = uint16(decoder.ReadUint16())
+	return _bsntlvudpsrc, nil
+}
+
+func NewBsnTlvUdpSrc() *BsnTlvUdpSrc {
+	obj := &BsnTlvUdpSrc{
+		BsnTlv: NewBsnTlv(36),
+	}
+	return obj
+}
+
+type BsnTlvUint32 struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvUint32 interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvUint32) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvUint32) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvUint32) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUint32(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUint32, error) {
+	_bsntlvuint32 := &BsnTlvUint32{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvUint32 packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvuint32.Value = uint32(decoder.ReadUint32())
+	return _bsntlvuint32, nil
+}
+
+func NewBsnTlvUint32() *BsnTlvUint32 {
+	obj := &BsnTlvUint32{
+		BsnTlv: NewBsnTlv(167),
+	}
+	return obj
+}
+
+type BsnTlvUint64List struct {
+	*BsnTlv
+	Value []*Uint64
+}
+
+type IBsnTlvUint64List interface {
+	IBsnTlv
+	GetValue() []*Uint64
+}
+
+func (self *BsnTlvUint64List) GetValue() []*Uint64 {
+	return self.Value
+}
+
+func (self *BsnTlvUint64List) SetValue(v []*Uint64) {
+	self.Value = v
+}
+
+func (self *BsnTlvUint64List) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Value {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUint64List(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUint64List, error) {
+	_bsntlvuint64list := &BsnTlvUint64List{BsnTlv: parent}
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeUint64(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsntlvuint64list.Value = append(_bsntlvuint64list.Value, item)
+		}
+	}
+	return _bsntlvuint64list, nil
+}
+
+func NewBsnTlvUint64List() *BsnTlvUint64List {
+	obj := &BsnTlvUint64List{
+		BsnTlv: NewBsnTlv(119),
+	}
+	return obj
+}
+
+type BsnTlvUnicastQueryTimeout struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvUnicastQueryTimeout interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvUnicastQueryTimeout) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvUnicastQueryTimeout) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvUnicastQueryTimeout) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUnicastQueryTimeout(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUnicastQueryTimeout, error) {
+	_bsntlvunicastquerytimeout := &BsnTlvUnicastQueryTimeout{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvUnicastQueryTimeout packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvunicastquerytimeout.Value = uint32(decoder.ReadUint32())
+	return _bsntlvunicastquerytimeout, nil
+}
+
+func NewBsnTlvUnicastQueryTimeout() *BsnTlvUnicastQueryTimeout {
+	obj := &BsnTlvUnicastQueryTimeout{
+		BsnTlv: NewBsnTlv(9),
+	}
+	return obj
+}
+
+type BsnTlvUnicastRate struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvUnicastRate interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvUnicastRate) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvUnicastRate) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvUnicastRate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUnicastRate(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUnicastRate, error) {
+	_bsntlvunicastrate := &BsnTlvUnicastRate{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvUnicastRate packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvunicastrate.Value = uint32(decoder.ReadUint32())
+	return _bsntlvunicastrate, nil
+}
+
+func NewBsnTlvUnicastRate() *BsnTlvUnicastRate {
+	obj := &BsnTlvUnicastRate{
+		BsnTlv: NewBsnTlv(93),
+	}
+	return obj
+}
+
+type BsnTlvUnknownMulticastRate struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvUnknownMulticastRate interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvUnknownMulticastRate) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvUnknownMulticastRate) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvUnknownMulticastRate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUnknownMulticastRate(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUnknownMulticastRate, error) {
+	_bsntlvunknownmulticastrate := &BsnTlvUnknownMulticastRate{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvUnknownMulticastRate packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvunknownmulticastrate.Value = uint32(decoder.ReadUint32())
+	return _bsntlvunknownmulticastrate, nil
+}
+
+func NewBsnTlvUnknownMulticastRate() *BsnTlvUnknownMulticastRate {
+	obj := &BsnTlvUnknownMulticastRate{
+		BsnTlv: NewBsnTlv(92),
+	}
+	return obj
+}
+
+type BsnTlvUntagged struct {
+	*BsnTlv
+}
+
+type IBsnTlvUntagged interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvUntagged) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUntagged(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUntagged, error) {
+	_bsntlvuntagged := &BsnTlvUntagged{BsnTlv: parent}
+	return _bsntlvuntagged, nil
+}
+
+func NewBsnTlvUntagged() *BsnTlvUntagged {
+	obj := &BsnTlvUntagged{
+		BsnTlv: NewBsnTlv(106),
+	}
+	return obj
+}
+
+type BsnTlvUpgrade struct {
+	*BsnTlv
+	Value BsnUpgrade
+}
+
+type IBsnTlvUpgrade interface {
+	IBsnTlv
+	GetValue() BsnUpgrade
+}
+
+func (self *BsnTlvUpgrade) GetValue() BsnUpgrade {
+	return self.Value
+}
+
+func (self *BsnTlvUpgrade) SetValue(v BsnUpgrade) {
+	self.Value = v
+}
+
+func (self *BsnTlvUpgrade) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUpgrade(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUpgrade, error) {
+	_bsntlvupgrade := &BsnTlvUpgrade{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvUpgrade packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvupgrade.Value = BsnUpgrade(decoder.ReadUint16())
+	return _bsntlvupgrade, nil
+}
+
+func NewBsnTlvUpgrade() *BsnTlvUpgrade {
+	obj := &BsnTlvUpgrade{
+		BsnTlv: NewBsnTlv(164),
+	}
+	return obj
+}
+
+type BsnTlvUriScheme struct {
+	*BsnTlv
+	Value []byte
+}
+
+type IBsnTlvUriScheme interface {
+	IBsnTlv
+	GetValue() []byte
+}
+
+func (self *BsnTlvUriScheme) GetValue() []byte {
+	return self.Value
+}
+
+func (self *BsnTlvUriScheme) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *BsnTlvUriScheme) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUriScheme(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUriScheme, error) {
+	_bsntlvurischeme := &BsnTlvUriScheme{BsnTlv: parent}
+	_bsntlvurischeme.Value = decoder.Read(int(decoder.Length()))
+	return _bsntlvurischeme, nil
+}
+
+func NewBsnTlvUriScheme() *BsnTlvUriScheme {
+	obj := &BsnTlvUriScheme{
+		BsnTlv: NewBsnTlv(153),
+	}
+	return obj
+}
+
+type BsnTlvUsePacketState struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvUsePacketState interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvUsePacketState) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvUsePacketState) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvUsePacketState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUsePacketState(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUsePacketState, error) {
+	_bsntlvusepacketstate := &BsnTlvUsePacketState{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvUsePacketState packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvusepacketstate.Value = uint8(decoder.ReadByte())
+	return _bsntlvusepacketstate, nil
+}
+
+func NewBsnTlvUsePacketState() *BsnTlvUsePacketState {
+	obj := &BsnTlvUsePacketState{
+		BsnTlv: NewBsnTlv(96),
+	}
+	return obj
+}
+
+type BsnTlvUserConfigured struct {
+	*BsnTlv
+}
+
+type IBsnTlvUserConfigured interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvUserConfigured) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvUserConfigured(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvUserConfigured, error) {
+	_bsntlvuserconfigured := &BsnTlvUserConfigured{BsnTlv: parent}
+	return _bsntlvuserconfigured, nil
+}
+
+func NewBsnTlvUserConfigured() *BsnTlvUserConfigured {
+	obj := &BsnTlvUserConfigured{
+		BsnTlv: NewBsnTlv(166),
+	}
+	return obj
+}
+
+type BsnTlvVfi struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvVfi interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvVfi) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvVfi) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvVfi) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVfi(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVfi, error) {
+	_bsntlvvfi := &BsnTlvVfi{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvVfi packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvvfi.Value = uint16(decoder.ReadUint16())
+	return _bsntlvvfi, nil
+}
+
+func NewBsnTlvVfi() *BsnTlvVfi {
+	obj := &BsnTlvVfi{
+		BsnTlv: NewBsnTlv(99),
+	}
+	return obj
+}
+
+type BsnTlvVfpClassId struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvVfpClassId interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvVfpClassId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvVfpClassId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvVfpClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVfpClassId(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVfpClassId, error) {
+	_bsntlvvfpclassid := &BsnTlvVfpClassId{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvVfpClassId packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvvfpclassid.Value = uint32(decoder.ReadUint32())
+	return _bsntlvvfpclassid, nil
+}
+
+func NewBsnTlvVfpClassId() *BsnTlvVfpClassId {
+	obj := &BsnTlvVfpClassId{
+		BsnTlv: NewBsnTlv(107),
+	}
+	return obj
+}
+
+type BsnTlvVirtual struct {
+	*BsnTlv
+}
+
+type IBsnTlvVirtual interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvVirtual) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVirtual(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVirtual, error) {
+	_bsntlvvirtual := &BsnTlvVirtual{BsnTlv: parent}
+	return _bsntlvvirtual, nil
+}
+
+func NewBsnTlvVirtual() *BsnTlvVirtual {
+	obj := &BsnTlvVirtual{
+		BsnTlv: NewBsnTlv(158),
+	}
+	return obj
+}
+
+type BsnTlvVlanMacList struct {
+	*BsnTlv
+	Key []*BsnVlanMac
+}
+
+type IBsnTlvVlanMacList interface {
+	IBsnTlv
+	GetKey() []*BsnVlanMac
+}
+
+func (self *BsnTlvVlanMacList) GetKey() []*BsnVlanMac {
+	return self.Key
+}
+
+func (self *BsnTlvVlanMacList) SetKey(v []*BsnVlanMac) {
+	self.Key = v
+}
+
+func (self *BsnTlvVlanMacList) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Key {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVlanMacList(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVlanMacList, error) {
+	_bsntlvvlanmaclist := &BsnTlvVlanMacList{BsnTlv: parent}
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeBsnVlanMac(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsntlvvlanmaclist.Key = append(_bsntlvvlanmaclist.Key, item)
+		}
+	}
+	return _bsntlvvlanmaclist, nil
+}
+
+func NewBsnTlvVlanMacList() *BsnTlvVlanMacList {
+	obj := &BsnTlvVlanMacList{
+		BsnTlv: NewBsnTlv(98),
+	}
+	return obj
+}
+
+type BsnTlvVlanPcp struct {
+	*BsnTlv
+	Value uint8
+}
+
+type IBsnTlvVlanPcp interface {
+	IBsnTlv
+	GetValue() uint8
+}
+
+func (self *BsnTlvVlanPcp) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *BsnTlvVlanPcp) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *BsnTlvVlanPcp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVlanPcp(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVlanPcp, error) {
+	_bsntlvvlanpcp := &BsnTlvVlanPcp{BsnTlv: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnTlvVlanPcp packet too short: %d < 1", decoder.Length())
+	}
+	_bsntlvvlanpcp.Value = uint8(decoder.ReadByte())
+	return _bsntlvvlanpcp, nil
+}
+
+func NewBsnTlvVlanPcp() *BsnTlvVlanPcp {
+	obj := &BsnTlvVlanPcp{
+		BsnTlv: NewBsnTlv(72),
+	}
+	return obj
+}
+
+type BsnTlvVlanVid struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvVlanVid interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvVlanVid) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvVlanVid) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvVlanVid) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVlanVid(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVlanVid, error) {
+	_bsntlvvlanvid := &BsnTlvVlanVid{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvVlanVid packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvvlanvid.Value = uint16(decoder.ReadUint16())
+	return _bsntlvvlanvid, nil
+}
+
+func NewBsnTlvVlanVid() *BsnTlvVlanVid {
+	obj := &BsnTlvVlanVid{
+		BsnTlv: NewBsnTlv(6),
+	}
+	return obj
+}
+
+type BsnTlvVlanVidMask struct {
+	*BsnTlv
+	Value uint16
+}
+
+type IBsnTlvVlanVidMask interface {
+	IBsnTlv
+	GetValue() uint16
+}
+
+func (self *BsnTlvVlanVidMask) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *BsnTlvVlanVidMask) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *BsnTlvVlanVidMask) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVlanVidMask(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVlanVidMask, error) {
+	_bsntlvvlanvidmask := &BsnTlvVlanVidMask{BsnTlv: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnTlvVlanVidMask packet too short: %d < 2", decoder.Length())
+	}
+	_bsntlvvlanvidmask.Value = uint16(decoder.ReadUint16())
+	return _bsntlvvlanvidmask, nil
+}
+
+func NewBsnTlvVlanVidMask() *BsnTlvVlanVidMask {
+	obj := &BsnTlvVlanVidMask{
+		BsnTlv: NewBsnTlv(77),
+	}
+	return obj
+}
+
+type BsnTlvVni struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvVni interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvVni) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvVni) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvVni) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVni(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVni, error) {
+	_bsntlvvni := &BsnTlvVni{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvVni packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvvni.Value = uint32(decoder.ReadUint32())
+	return _bsntlvvni, nil
+}
+
+func NewBsnTlvVni() *BsnTlvVni {
+	obj := &BsnTlvVni{
+		BsnTlv: NewBsnTlv(86),
+	}
+	return obj
+}
+
+type BsnTlvVpnKey struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvVpnKey interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvVpnKey) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvVpnKey) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvVpnKey) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVpnKey(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVpnKey, error) {
+	_bsntlvvpnkey := &BsnTlvVpnKey{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvVpnKey packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvvpnkey.Value = uint32(decoder.ReadUint32())
+	return _bsntlvvpnkey, nil
+}
+
+func NewBsnTlvVpnKey() *BsnTlvVpnKey {
+	obj := &BsnTlvVpnKey{
+		BsnTlv: NewBsnTlv(111),
+	}
+	return obj
+}
+
+type BsnTlvVrf struct {
+	*BsnTlv
+	Value uint32
+}
+
+type IBsnTlvVrf interface {
+	IBsnTlv
+	GetValue() uint32
+}
+
+func (self *BsnTlvVrf) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *BsnTlvVrf) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *BsnTlvVrf) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVrf(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVrf, error) {
+	_bsntlvvrf := &BsnTlvVrf{BsnTlv: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnTlvVrf packet too short: %d < 4", decoder.Length())
+	}
+	_bsntlvvrf.Value = uint32(decoder.ReadUint32())
+	return _bsntlvvrf, nil
+}
+
+func NewBsnTlvVrf() *BsnTlvVrf {
+	obj := &BsnTlvVrf{
+		BsnTlv: NewBsnTlv(19),
+	}
+	return obj
+}
+
+type BsnTlvVxlanEgressLag struct {
+	*BsnTlv
+}
+
+type IBsnTlvVxlanEgressLag interface {
+	IBsnTlv
+}
+
+func (self *BsnTlvVxlanEgressLag) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnTlv.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTlvVxlanEgressLag(parent *BsnTlv, decoder *goloxi.Decoder) (*BsnTlvVxlanEgressLag, error) {
+	_bsntlvvxlanegresslag := &BsnTlvVxlanEgressLag{BsnTlv: parent}
+	return _bsntlvvxlanegresslag, nil
+}
+
+func NewBsnTlvVxlanEgressLag() *BsnTlvVxlanEgressLag {
+	obj := &BsnTlvVxlanEgressLag{
+		BsnTlv: NewBsnTlv(117),
+	}
+	return obj
+}
+
+type BsnVport struct {
+	Type   uint16
+	Length uint16
+}
+
+type IBsnVport interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLength() uint16
+}
+
+func (self *BsnVport) GetType() uint16 {
+	return self.Type
+}
+
+func (self *BsnVport) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *BsnVport) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnVport) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnVport) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Length))
+
+	return nil
+}
+func (self *BsnVport) Decode(decoder *goloxi.Decoder) error {
+	if decoder.Length() < 4 {
+		return fmt.Errorf("BsnVport packet too short: %d < 4", decoder.Length())
+	}
+
+	self.Type = uint16(decoder.ReadUint16())
+	self.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(self.Length), 2+2)
+
+	return nil
+}
+
+func NewBsnVport(_type uint16) *BsnVport {
+	obj := &BsnVport{}
+	obj.Type = _type
+	return obj
+}
+
+type BsnVlanCounterStatsEntry struct {
+	Length  uint16
+	VlanVid uint16
+	Values  []*Uint64
+}
+
+type IBsnVlanCounterStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetVlanVid() uint16
+	GetValues() []*Uint64
+}
+
+func (self *BsnVlanCounterStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnVlanCounterStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnVlanCounterStatsEntry) GetVlanVid() uint16 {
+	return self.VlanVid
+}
+
+func (self *BsnVlanCounterStatsEntry) SetVlanVid(v uint16) {
+	self.VlanVid = v
+}
+
+func (self *BsnVlanCounterStatsEntry) GetValues() []*Uint64 {
+	return self.Values
+}
+
+func (self *BsnVlanCounterStatsEntry) SetValues(v []*Uint64) {
+	self.Values = v
+}
+
+func (self *BsnVlanCounterStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint16(uint16(self.VlanVid))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Values {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVlanCounterStatsEntry(decoder *goloxi.Decoder) (*BsnVlanCounterStatsEntry, error) {
+	_bsnvlancounterstatsentry := &BsnVlanCounterStatsEntry{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnVlanCounterStatsEntry packet too short: %d < 8", decoder.Length())
+	}
+	_bsnvlancounterstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsnvlancounterstatsentry.Length), 2+0)
+	_bsnvlancounterstatsentry.VlanVid = uint16(decoder.ReadUint16())
+	decoder.Skip(4)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeUint64(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnvlancounterstatsentry.Values = append(_bsnvlancounterstatsentry.Values, item)
+		}
+	}
+	return _bsnvlancounterstatsentry, nil
+}
+
+func NewBsnVlanCounterStatsEntry() *BsnVlanCounterStatsEntry {
+	obj := &BsnVlanCounterStatsEntry{}
+	return obj
+}
+
+type BsnVlanMac struct {
+	VlanVid uint16
+	Mac     net.HardwareAddr
+}
+
+type IBsnVlanMac interface {
+	goloxi.Serializable
+	GetVlanVid() uint16
+	GetMac() net.HardwareAddr
+}
+
+func (self *BsnVlanMac) GetVlanVid() uint16 {
+	return self.VlanVid
+}
+
+func (self *BsnVlanMac) SetVlanVid(v uint16) {
+	self.VlanVid = v
+}
+
+func (self *BsnVlanMac) GetMac() net.HardwareAddr {
+	return self.Mac
+}
+
+func (self *BsnVlanMac) SetMac(v net.HardwareAddr) {
+	self.Mac = v
+}
+
+func (self *BsnVlanMac) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.VlanVid))
+	encoder.Write(self.Mac)
+
+	return nil
+}
+
+func DecodeBsnVlanMac(decoder *goloxi.Decoder) (*BsnVlanMac, error) {
+	_bsnvlanmac := &BsnVlanMac{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnVlanMac packet too short: %d < 8", decoder.Length())
+	}
+	_bsnvlanmac.VlanVid = uint16(decoder.ReadUint16())
+	_bsnvlanmac.Mac = net.HardwareAddr(decoder.Read(6))
+	return _bsnvlanmac, nil
+}
+
+func NewBsnVlanMac() *BsnVlanMac {
+	obj := &BsnVlanMac{}
+	return obj
+}
+
+type BsnVportL2Gre struct {
+	*BsnVport
+	Flags          BsnVportL2GreFlags
+	PortNo         Port
+	LoopbackPortNo Port
+	LocalMac       net.HardwareAddr
+	NhMac          net.HardwareAddr
+	SrcIp          net.IP
+	DstIp          net.IP
+	Dscp           uint8
+	Ttl            uint8
+	Vpn            uint32
+	RateLimit      uint32
+	IfName         string
+}
+
+type IBsnVportL2Gre interface {
+	IBsnVport
+	GetFlags() BsnVportL2GreFlags
+	GetPortNo() Port
+	GetLoopbackPortNo() Port
+	GetLocalMac() net.HardwareAddr
+	GetNhMac() net.HardwareAddr
+	GetSrcIp() net.IP
+	GetDstIp() net.IP
+	GetDscp() uint8
+	GetTtl() uint8
+	GetVpn() uint32
+	GetRateLimit() uint32
+	GetIfName() string
+}
+
+func (self *BsnVportL2Gre) GetFlags() BsnVportL2GreFlags {
+	return self.Flags
+}
+
+func (self *BsnVportL2Gre) SetFlags(v BsnVportL2GreFlags) {
+	self.Flags = v
+}
+
+func (self *BsnVportL2Gre) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnVportL2Gre) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnVportL2Gre) GetLoopbackPortNo() Port {
+	return self.LoopbackPortNo
+}
+
+func (self *BsnVportL2Gre) SetLoopbackPortNo(v Port) {
+	self.LoopbackPortNo = v
+}
+
+func (self *BsnVportL2Gre) GetLocalMac() net.HardwareAddr {
+	return self.LocalMac
+}
+
+func (self *BsnVportL2Gre) SetLocalMac(v net.HardwareAddr) {
+	self.LocalMac = v
+}
+
+func (self *BsnVportL2Gre) GetNhMac() net.HardwareAddr {
+	return self.NhMac
+}
+
+func (self *BsnVportL2Gre) SetNhMac(v net.HardwareAddr) {
+	self.NhMac = v
+}
+
+func (self *BsnVportL2Gre) GetSrcIp() net.IP {
+	return self.SrcIp
+}
+
+func (self *BsnVportL2Gre) SetSrcIp(v net.IP) {
+	self.SrcIp = v
+}
+
+func (self *BsnVportL2Gre) GetDstIp() net.IP {
+	return self.DstIp
+}
+
+func (self *BsnVportL2Gre) SetDstIp(v net.IP) {
+	self.DstIp = v
+}
+
+func (self *BsnVportL2Gre) GetDscp() uint8 {
+	return self.Dscp
+}
+
+func (self *BsnVportL2Gre) SetDscp(v uint8) {
+	self.Dscp = v
+}
+
+func (self *BsnVportL2Gre) GetTtl() uint8 {
+	return self.Ttl
+}
+
+func (self *BsnVportL2Gre) SetTtl(v uint8) {
+	self.Ttl = v
+}
+
+func (self *BsnVportL2Gre) GetVpn() uint32 {
+	return self.Vpn
+}
+
+func (self *BsnVportL2Gre) SetVpn(v uint32) {
+	self.Vpn = v
+}
+
+func (self *BsnVportL2Gre) GetRateLimit() uint32 {
+	return self.RateLimit
+}
+
+func (self *BsnVportL2Gre) SetRateLimit(v uint32) {
+	self.RateLimit = v
+}
+
+func (self *BsnVportL2Gre) GetIfName() string {
+	return self.IfName
+}
+
+func (self *BsnVportL2Gre) SetIfName(v string) {
+	self.IfName = v
+}
+
+func (self *BsnVportL2Gre) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnVport.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Flags))
+	self.PortNo.Serialize(encoder)
+	self.LoopbackPortNo.Serialize(encoder)
+	encoder.Write(self.LocalMac)
+	encoder.Write(self.NhMac)
+	encoder.Write(self.SrcIp.To4())
+	encoder.Write(self.DstIp.To4())
+	encoder.PutUint8(uint8(self.Dscp))
+	encoder.PutUint8(uint8(self.Ttl))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.Vpn))
+	encoder.PutUint32(uint32(self.RateLimit))
+	encoder.Write([]byte(self.IfName))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVportL2Gre(parent *BsnVport, decoder *goloxi.Decoder) (*BsnVportL2Gre, error) {
+	_bsnvportl2gre := &BsnVportL2Gre{BsnVport: parent}
+	if decoder.Length() < 60 {
+		return nil, fmt.Errorf("BsnVportL2Gre packet too short: %d < 60", decoder.Length())
+	}
+	_bsnvportl2gre.Flags = BsnVportL2GreFlags(decoder.ReadUint32())
+	_bsnvportl2gre.PortNo.Decode(decoder)
+	_bsnvportl2gre.LoopbackPortNo.Decode(decoder)
+	_bsnvportl2gre.LocalMac = net.HardwareAddr(decoder.Read(6))
+	_bsnvportl2gre.NhMac = net.HardwareAddr(decoder.Read(6))
+	_bsnvportl2gre.SrcIp = net.IP(decoder.Read(4))
+	_bsnvportl2gre.DstIp = net.IP(decoder.Read(4))
+	_bsnvportl2gre.Dscp = uint8(decoder.ReadByte())
+	_bsnvportl2gre.Ttl = uint8(decoder.ReadByte())
+	decoder.Skip(2)
+	_bsnvportl2gre.Vpn = uint32(decoder.ReadUint32())
+	_bsnvportl2gre.RateLimit = uint32(decoder.ReadUint32())
+	_bsnvportl2gre.IfName = string(bytes.Trim(decoder.Read(16), "\x00"))
+	return _bsnvportl2gre, nil
+}
+
+func NewBsnVportL2Gre() *BsnVportL2Gre {
+	obj := &BsnVportL2Gre{
+		BsnVport: NewBsnVport(1),
+	}
+	return obj
+}
+
+type BsnVportQInQ struct {
+	*BsnVport
+	PortNo        uint32
+	IngressTpid   uint16
+	IngressVlanId uint16
+	EgressTpid    uint16
+	EgressVlanId  uint16
+	IfName        string
+}
+
+type IBsnVportQInQ interface {
+	IBsnVport
+	GetPortNo() uint32
+	GetIngressTpid() uint16
+	GetIngressVlanId() uint16
+	GetEgressTpid() uint16
+	GetEgressVlanId() uint16
+	GetIfName() string
+}
+
+func (self *BsnVportQInQ) GetPortNo() uint32 {
+	return self.PortNo
+}
+
+func (self *BsnVportQInQ) SetPortNo(v uint32) {
+	self.PortNo = v
+}
+
+func (self *BsnVportQInQ) GetIngressTpid() uint16 {
+	return self.IngressTpid
+}
+
+func (self *BsnVportQInQ) SetIngressTpid(v uint16) {
+	self.IngressTpid = v
+}
+
+func (self *BsnVportQInQ) GetIngressVlanId() uint16 {
+	return self.IngressVlanId
+}
+
+func (self *BsnVportQInQ) SetIngressVlanId(v uint16) {
+	self.IngressVlanId = v
+}
+
+func (self *BsnVportQInQ) GetEgressTpid() uint16 {
+	return self.EgressTpid
+}
+
+func (self *BsnVportQInQ) SetEgressTpid(v uint16) {
+	self.EgressTpid = v
+}
+
+func (self *BsnVportQInQ) GetEgressVlanId() uint16 {
+	return self.EgressVlanId
+}
+
+func (self *BsnVportQInQ) SetEgressVlanId(v uint16) {
+	self.EgressVlanId = v
+}
+
+func (self *BsnVportQInQ) GetIfName() string {
+	return self.IfName
+}
+
+func (self *BsnVportQInQ) SetIfName(v string) {
+	self.IfName = v
+}
+
+func (self *BsnVportQInQ) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnVport.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.PortNo))
+	encoder.PutUint16(uint16(self.IngressTpid))
+	encoder.PutUint16(uint16(self.IngressVlanId))
+	encoder.PutUint16(uint16(self.EgressTpid))
+	encoder.PutUint16(uint16(self.EgressVlanId))
+	encoder.Write([]byte(self.IfName))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVportQInQ(parent *BsnVport, decoder *goloxi.Decoder) (*BsnVportQInQ, error) {
+	_bsnvportqinq := &BsnVportQInQ{BsnVport: parent}
+	if decoder.Length() < 28 {
+		return nil, fmt.Errorf("BsnVportQInQ packet too short: %d < 28", decoder.Length())
+	}
+	_bsnvportqinq.PortNo = uint32(decoder.ReadUint32())
+	_bsnvportqinq.IngressTpid = uint16(decoder.ReadUint16())
+	_bsnvportqinq.IngressVlanId = uint16(decoder.ReadUint16())
+	_bsnvportqinq.EgressTpid = uint16(decoder.ReadUint16())
+	_bsnvportqinq.EgressVlanId = uint16(decoder.ReadUint16())
+	_bsnvportqinq.IfName = string(bytes.Trim(decoder.Read(16), "\x00"))
+	return _bsnvportqinq, nil
+}
+
+func NewBsnVportQInQ() *BsnVportQInQ {
+	obj := &BsnVportQInQ{
+		BsnVport: NewBsnVport(0),
+	}
+	return obj
+}
+
+type BsnVrfCounterStatsEntry struct {
+	Length uint16
+	Vrf    uint32
+	Values []*Uint64
+}
+
+type IBsnVrfCounterStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetVrf() uint32
+	GetValues() []*Uint64
+}
+
+func (self *BsnVrfCounterStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *BsnVrfCounterStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *BsnVrfCounterStatsEntry) GetVrf() uint32 {
+	return self.Vrf
+}
+
+func (self *BsnVrfCounterStatsEntry) SetVrf(v uint32) {
+	self.Vrf = v
+}
+
+func (self *BsnVrfCounterStatsEntry) GetValues() []*Uint64 {
+	return self.Values
+}
+
+func (self *BsnVrfCounterStatsEntry) SetValues(v []*Uint64) {
+	self.Values = v
+}
+
+func (self *BsnVrfCounterStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.Vrf))
+	for _, obj := range self.Values {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVrfCounterStatsEntry(decoder *goloxi.Decoder) (*BsnVrfCounterStatsEntry, error) {
+	_bsnvrfcounterstatsentry := &BsnVrfCounterStatsEntry{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnVrfCounterStatsEntry packet too short: %d < 8", decoder.Length())
+	}
+	_bsnvrfcounterstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bsnvrfcounterstatsentry.Length), 2+0)
+	decoder.Skip(2)
+	_bsnvrfcounterstatsentry.Vrf = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeUint64(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnvrfcounterstatsentry.Values = append(_bsnvrfcounterstatsentry.Values, item)
+		}
+	}
+	return _bsnvrfcounterstatsentry, nil
+}
+
+func NewBsnVrfCounterStatsEntry() *BsnVrfCounterStatsEntry {
+	obj := &BsnVrfCounterStatsEntry{}
+	return obj
+}
+
+type Bucket struct {
+	Len        uint16
+	Weight     uint16
+	WatchPort  Port
+	WatchGroup uint32
+	Actions    []goloxi.IAction
+}
+
+type IBucket interface {
+	goloxi.Serializable
+	GetLen() uint16
+	GetWeight() uint16
+	GetWatchPort() Port
+	GetWatchGroup() uint32
+	GetActions() []goloxi.IAction
+}
+
+func (self *Bucket) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *Bucket) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *Bucket) GetWeight() uint16 {
+	return self.Weight
+}
+
+func (self *Bucket) SetWeight(v uint16) {
+	self.Weight = v
+}
+
+func (self *Bucket) GetWatchPort() Port {
+	return self.WatchPort
+}
+
+func (self *Bucket) SetWatchPort(v Port) {
+	self.WatchPort = v
+}
+
+func (self *Bucket) GetWatchGroup() uint32 {
+	return self.WatchGroup
+}
+
+func (self *Bucket) SetWatchGroup(v uint32) {
+	self.WatchGroup = v
+}
+
+func (self *Bucket) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *Bucket) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *Bucket) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Len))
+	encoder.PutUint16(uint16(self.Weight))
+	self.WatchPort.Serialize(encoder)
+	encoder.PutUint32(uint32(self.WatchGroup))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBucket(decoder *goloxi.Decoder) (*Bucket, error) {
+	_bucket := &Bucket{}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("Bucket packet too short: %d < 16", decoder.Length())
+	}
+	_bucket.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_bucket.Len), 2+0)
+	_bucket.Weight = uint16(decoder.ReadUint16())
+	_bucket.WatchPort.Decode(decoder)
+	_bucket.WatchGroup = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bucket.Actions = append(_bucket.Actions, item)
+		}
+	}
+	return _bucket, nil
+}
+
+func NewBucket() *Bucket {
+	obj := &Bucket{}
+	return obj
+}
+
+type BucketCounter struct {
+	PacketCount uint64
+	ByteCount   uint64
+}
+
+type IBucketCounter interface {
+	goloxi.Serializable
+	GetPacketCount() uint64
+	GetByteCount() uint64
+}
+
+func (self *BucketCounter) GetPacketCount() uint64 {
+	return self.PacketCount
+}
+
+func (self *BucketCounter) SetPacketCount(v uint64) {
+	self.PacketCount = v
+}
+
+func (self *BucketCounter) GetByteCount() uint64 {
+	return self.ByteCount
+}
+
+func (self *BucketCounter) SetByteCount(v uint64) {
+	self.ByteCount = v
+}
+
+func (self *BucketCounter) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint64(uint64(self.PacketCount))
+	encoder.PutUint64(uint64(self.ByteCount))
+
+	return nil
+}
+
+func DecodeBucketCounter(decoder *goloxi.Decoder) (*BucketCounter, error) {
+	_bucketcounter := &BucketCounter{}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BucketCounter packet too short: %d < 16", decoder.Length())
+	}
+	_bucketcounter.PacketCount = uint64(decoder.ReadUint64())
+	_bucketcounter.ByteCount = uint64(decoder.ReadUint64())
+	return _bucketcounter, nil
+}
+
+func NewBucketCounter() *BucketCounter {
+	obj := &BucketCounter{}
+	return obj
+}
+
+type EdPropHeader struct {
+	PropClass uint16
+}
+
+type IEdPropHeader interface {
+	goloxi.Serializable
+	GetPropClass() uint16
+}
+
+func (self *EdPropHeader) GetPropClass() uint16 {
+	return self.PropClass
+}
+
+func (self *EdPropHeader) SetPropClass(v uint16) {
+	self.PropClass = v
+}
+
+func (self *EdPropHeader) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.PropClass))
+
+	return nil
+}
+
+func DecodeEdPropHeader(decoder *goloxi.Decoder) (IEdPropHeader, error) {
+	_edpropheader := &EdPropHeader{}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("EdPropHeader packet too short: %d < 2", decoder.Length())
+	}
+	_edpropheader.PropClass = uint16(decoder.ReadUint16())
+
+	switch _edpropheader.PropClass {
+	case 4:
+		return DecodeEdPropNsh(_edpropheader, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'EdPropHeader'", _edpropheader.PropClass)
+	}
+}
+
+func NewEdPropHeader(_prop_class uint16) *EdPropHeader {
+	obj := &EdPropHeader{}
+	obj.PropClass = _prop_class
+	return obj
+}
+
+type EdPropNsh struct {
+	*EdPropHeader
+	Type uint8
+	Len  uint8
+}
+
+type IEdPropNsh interface {
+	IEdPropHeader
+	GetType() uint8
+	GetLen() uint8
+}
+
+func (self *EdPropNsh) GetType() uint8 {
+	return self.Type
+}
+
+func (self *EdPropNsh) SetType(v uint8) {
+	self.Type = v
+}
+
+func (self *EdPropNsh) GetLen() uint8 {
+	return self.Len
+}
+
+func (self *EdPropNsh) SetLen(v uint8) {
+	self.Len = v
+}
+
+func (self *EdPropNsh) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.EdPropHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Type))
+	encoder.PutUint8(uint8(self.Len))
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeEdPropNsh(parent *EdPropHeader, decoder *goloxi.Decoder) (IEdPropNsh, error) {
+	_edpropnsh := &EdPropNsh{EdPropHeader: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("EdPropNsh packet too short: %d < 2", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_edpropnsh.Type = uint8(decoder.ReadByte())
+	_edpropnsh.Len = uint8(decoder.ReadByte())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(((_edpropnsh.Len)+7)/8*8), 1+3)
+
+	switch _edpropnsh.Type {
+	case 1:
+		return DecodeEdPropNshMdType(_edpropnsh, decoder)
+	case 2:
+		return DecodeEdPropNshTlv(_edpropnsh, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'EdPropNsh'", _edpropnsh.Type)
+	}
+}
+
+func NewEdPropNsh(_type uint8) *EdPropNsh {
+	obj := &EdPropNsh{
+		EdPropHeader: NewEdPropHeader(4),
+	}
+	obj.Type = _type
+	return obj
+}
+
+type EdPropNshMdType struct {
+	*EdPropNsh
+	MdType uint8
+}
+
+type IEdPropNshMdType interface {
+	IEdPropNsh
+	GetMdType() uint8
+}
+
+func (self *EdPropNshMdType) GetMdType() uint8 {
+	return self.MdType
+}
+
+func (self *EdPropNshMdType) SetMdType(v uint8) {
+	self.MdType = v
+}
+
+func (self *EdPropNshMdType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.EdPropNsh.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.MdType))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	encoder.Bytes()[3] = uint8(len(encoder.Bytes()))
+
+	return nil
+}
+
+func DecodeEdPropNshMdType(parent *EdPropNsh, decoder *goloxi.Decoder) (*EdPropNshMdType, error) {
+	_edpropnshmdtype := &EdPropNshMdType{EdPropNsh: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("EdPropNshMdType packet too short: %d < 4", decoder.Length())
+	}
+	_edpropnshmdtype.MdType = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _edpropnshmdtype, nil
+}
+
+func NewEdPropNshMdType() *EdPropNshMdType {
+	obj := &EdPropNshMdType{
+		EdPropNsh: NewEdPropNsh(1),
+	}
+	return obj
+}
+
+type EdPropNshTlv struct {
+	*EdPropNsh
+	TlvClass uint16
+	TlvType  uint8
+	TlvLen   uint8
+	Value    []byte
+}
+
+type IEdPropNshTlv interface {
+	IEdPropNsh
+	GetTlvClass() uint16
+	GetTlvType() uint8
+	GetTlvLen() uint8
+	GetValue() []byte
+}
+
+func (self *EdPropNshTlv) GetTlvClass() uint16 {
+	return self.TlvClass
+}
+
+func (self *EdPropNshTlv) SetTlvClass(v uint16) {
+	self.TlvClass = v
+}
+
+func (self *EdPropNshTlv) GetTlvType() uint8 {
+	return self.TlvType
+}
+
+func (self *EdPropNshTlv) SetTlvType(v uint8) {
+	self.TlvType = v
+}
+
+func (self *EdPropNshTlv) GetTlvLen() uint8 {
+	return self.TlvLen
+}
+
+func (self *EdPropNshTlv) SetTlvLen(v uint8) {
+	self.TlvLen = v
+}
+
+func (self *EdPropNshTlv) GetValue() []byte {
+	return self.Value
+}
+
+func (self *EdPropNshTlv) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *EdPropNshTlv) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.EdPropNsh.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TlvClass))
+	encoder.PutUint8(uint8(self.TlvType))
+	encoder.PutUint8(uint8(self.TlvLen))
+	encoder.Write(self.Value)
+
+	encoder.Bytes()[3] = uint8(len(encoder.Bytes()))
+
+	return nil
+}
+
+func DecodeEdPropNshTlv(parent *EdPropNsh, decoder *goloxi.Decoder) (*EdPropNshTlv, error) {
+	_edpropnshtlv := &EdPropNshTlv{EdPropNsh: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("EdPropNshTlv packet too short: %d < 4", decoder.Length())
+	}
+	_edpropnshtlv.TlvClass = uint16(decoder.ReadUint16())
+	_edpropnshtlv.TlvType = uint8(decoder.ReadByte())
+	_edpropnshtlv.TlvLen = uint8(decoder.ReadByte())
+	_edpropnshtlv.Value = decoder.SliceDecoder(int(_edpropnshtlv.TlvLen), 0).Read(int(_edpropnshtlv.TlvLen))
+	return _edpropnshtlv, nil
+}
+
+func NewEdPropNshTlv() *EdPropNshTlv {
+	obj := &EdPropNshTlv{
+		EdPropNsh: NewEdPropNsh(2),
+	}
+	return obj
+}
+
+type FlowModSpec struct {
+	SrcDst uint8
+	NBits  uint8
+}
+
+type IFlowModSpec interface {
+	goloxi.Serializable
+	GetSrcDst() uint8
+	GetNBits() uint8
+}
+
+func (self *FlowModSpec) GetSrcDst() uint8 {
+	return self.SrcDst
+}
+
+func (self *FlowModSpec) SetSrcDst(v uint8) {
+	self.SrcDst = v
+}
+
+func (self *FlowModSpec) GetNBits() uint8 {
+	return self.NBits
+}
+
+func (self *FlowModSpec) SetNBits(v uint8) {
+	self.NBits = v
+}
+
+func (self *FlowModSpec) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint8(uint8(self.SrcDst))
+	encoder.PutUint8(uint8(self.NBits))
+
+	return nil
+}
+
+func DecodeFlowModSpec(decoder *goloxi.Decoder) (IFlowModSpec, error) {
+	_flowmodspec := &FlowModSpec{}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("FlowModSpec packet too short: %d < 2", decoder.Length())
+	}
+	_flowmodspec.SrcDst = uint8(decoder.ReadByte())
+	_flowmodspec.NBits = uint8(decoder.ReadByte())
+	if _flowmodspec.SrcDst == 0 && _flowmodspec.NBits == 0 {
+		return nil, nil
+	}
+
+	switch _flowmodspec.SrcDst {
+	case 0:
+		return DecodeFlowModSpecSrc0Dst0(_flowmodspec, decoder)
+	case 8:
+		return DecodeFlowModSpecSrc0Dst1(_flowmodspec, decoder)
+	case 40:
+		return DecodeFlowModSpecSrc1Dst1(_flowmodspec, decoder)
+	case 16:
+		return DecodeFlowModSpecSrc0Dst2(_flowmodspec, decoder)
+	case 32:
+		return DecodeFlowModSpecSrc1Dst0(_flowmodspec, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'FlowModSpec'", _flowmodspec.SrcDst)
+	}
+}
+
+func NewFlowModSpec(_src_dst uint8) *FlowModSpec {
+	obj := &FlowModSpec{}
+	obj.SrcDst = _src_dst
+	return obj
+}
+
+type FlowModSpecSrc0Dst0 struct {
+	*FlowModSpec
+	Src    goloxi.IOxmId
+	SrcOfs uint16
+	Dst    goloxi.IOxmId
+	DstOfs uint16
+}
+
+type IFlowModSpecSrc0Dst0 interface {
+	IFlowModSpec
+	GetSrc() goloxi.IOxmId
+	GetSrcOfs() uint16
+	GetDst() goloxi.IOxmId
+	GetDstOfs() uint16
+}
+
+func (self *FlowModSpecSrc0Dst0) GetSrc() goloxi.IOxmId {
+	return self.Src
+}
+
+func (self *FlowModSpecSrc0Dst0) SetSrc(v goloxi.IOxmId) {
+	self.Src = v
+}
+
+func (self *FlowModSpecSrc0Dst0) GetSrcOfs() uint16 {
+	return self.SrcOfs
+}
+
+func (self *FlowModSpecSrc0Dst0) SetSrcOfs(v uint16) {
+	self.SrcOfs = v
+}
+
+func (self *FlowModSpecSrc0Dst0) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *FlowModSpecSrc0Dst0) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *FlowModSpecSrc0Dst0) GetDstOfs() uint16 {
+	return self.DstOfs
+}
+
+func (self *FlowModSpecSrc0Dst0) SetDstOfs(v uint16) {
+	self.DstOfs = v
+}
+
+func (self *FlowModSpecSrc0Dst0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowModSpec.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Src.Serialize(encoder)
+	encoder.PutUint16(uint16(self.SrcOfs))
+	self.Dst.Serialize(encoder)
+	encoder.PutUint16(uint16(self.DstOfs))
+
+	return nil
+}
+
+func DecodeFlowModSpecSrc0Dst0(parent *FlowModSpec, decoder *goloxi.Decoder) (IFlowModSpecSrc0Dst0, error) {
+	_flowmodspecsrc0dst0 := &FlowModSpecSrc0Dst0{FlowModSpec: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("FlowModSpecSrc0Dst0 packet too short: %d < 12", decoder.Length())
+	}
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_flowmodspecsrc0dst0.Src = obj
+	}
+
+	_flowmodspecsrc0dst0.SrcOfs = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_flowmodspecsrc0dst0.Dst = obj
+	}
+
+	_flowmodspecsrc0dst0.DstOfs = uint16(decoder.ReadUint16())
+	return _flowmodspecsrc0dst0, nil
+}
+
+func NewFlowModSpecSrc0Dst0(_n_bits uint8) *FlowModSpecSrc0Dst0 {
+	obj := &FlowModSpecSrc0Dst0{
+		FlowModSpec: NewFlowModSpec(0),
+	}
+	obj.NBits = _n_bits
+	return obj
+}
+
+type FlowModSpecSrc0Dst1 struct {
+	*FlowModSpec
+	Src    goloxi.IOxmId
+	SrcOfs uint16
+	Dst    goloxi.IOxmId
+	DstOfs uint16
+}
+
+type IFlowModSpecSrc0Dst1 interface {
+	IFlowModSpec
+	GetSrc() goloxi.IOxmId
+	GetSrcOfs() uint16
+	GetDst() goloxi.IOxmId
+	GetDstOfs() uint16
+}
+
+func (self *FlowModSpecSrc0Dst1) GetSrc() goloxi.IOxmId {
+	return self.Src
+}
+
+func (self *FlowModSpecSrc0Dst1) SetSrc(v goloxi.IOxmId) {
+	self.Src = v
+}
+
+func (self *FlowModSpecSrc0Dst1) GetSrcOfs() uint16 {
+	return self.SrcOfs
+}
+
+func (self *FlowModSpecSrc0Dst1) SetSrcOfs(v uint16) {
+	self.SrcOfs = v
+}
+
+func (self *FlowModSpecSrc0Dst1) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *FlowModSpecSrc0Dst1) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *FlowModSpecSrc0Dst1) GetDstOfs() uint16 {
+	return self.DstOfs
+}
+
+func (self *FlowModSpecSrc0Dst1) SetDstOfs(v uint16) {
+	self.DstOfs = v
+}
+
+func (self *FlowModSpecSrc0Dst1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowModSpec.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Src.Serialize(encoder)
+	encoder.PutUint16(uint16(self.SrcOfs))
+	self.Dst.Serialize(encoder)
+	encoder.PutUint16(uint16(self.DstOfs))
+
+	return nil
+}
+
+func DecodeFlowModSpecSrc0Dst1(parent *FlowModSpec, decoder *goloxi.Decoder) (*FlowModSpecSrc0Dst1, error) {
+	_flowmodspecsrc0dst1 := &FlowModSpecSrc0Dst1{FlowModSpec: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("FlowModSpecSrc0Dst1 packet too short: %d < 12", decoder.Length())
+	}
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_flowmodspecsrc0dst1.Src = obj
+	}
+
+	_flowmodspecsrc0dst1.SrcOfs = uint16(decoder.ReadUint16())
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_flowmodspecsrc0dst1.Dst = obj
+	}
+
+	_flowmodspecsrc0dst1.DstOfs = uint16(decoder.ReadUint16())
+	return _flowmodspecsrc0dst1, nil
+}
+
+func NewFlowModSpecSrc0Dst1() *FlowModSpecSrc0Dst1 {
+	obj := &FlowModSpecSrc0Dst1{
+		FlowModSpec: NewFlowModSpec(8),
+	}
+	return obj
+}
+
+type FlowModSpecSrc0Dst2 struct {
+	*FlowModSpec
+	Src    goloxi.IOxmId
+	SrcOfs uint16
+}
+
+type IFlowModSpecSrc0Dst2 interface {
+	IFlowModSpec
+	GetSrc() goloxi.IOxmId
+	GetSrcOfs() uint16
+}
+
+func (self *FlowModSpecSrc0Dst2) GetSrc() goloxi.IOxmId {
+	return self.Src
+}
+
+func (self *FlowModSpecSrc0Dst2) SetSrc(v goloxi.IOxmId) {
+	self.Src = v
+}
+
+func (self *FlowModSpecSrc0Dst2) GetSrcOfs() uint16 {
+	return self.SrcOfs
+}
+
+func (self *FlowModSpecSrc0Dst2) SetSrcOfs(v uint16) {
+	self.SrcOfs = v
+}
+
+func (self *FlowModSpecSrc0Dst2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowModSpec.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Src.Serialize(encoder)
+	encoder.PutUint16(uint16(self.SrcOfs))
+
+	return nil
+}
+
+func DecodeFlowModSpecSrc0Dst2(parent *FlowModSpec, decoder *goloxi.Decoder) (*FlowModSpecSrc0Dst2, error) {
+	_flowmodspecsrc0dst2 := &FlowModSpecSrc0Dst2{FlowModSpec: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("FlowModSpecSrc0Dst2 packet too short: %d < 6", decoder.Length())
+	}
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_flowmodspecsrc0dst2.Src = obj
+	}
+
+	_flowmodspecsrc0dst2.SrcOfs = uint16(decoder.ReadUint16())
+	return _flowmodspecsrc0dst2, nil
+}
+
+func NewFlowModSpecSrc0Dst2() *FlowModSpecSrc0Dst2 {
+	obj := &FlowModSpecSrc0Dst2{
+		FlowModSpec: NewFlowModSpec(16),
+	}
+	return obj
+}
+
+type FlowModSpecSrc1Dst0 struct {
+	*FlowModSpec
+	Src    []byte
+	Dst    goloxi.IOxmId
+	DstOfs uint16
+}
+
+type IFlowModSpecSrc1Dst0 interface {
+	IFlowModSpec
+	GetSrc() []byte
+	GetDst() goloxi.IOxmId
+	GetDstOfs() uint16
+}
+
+func (self *FlowModSpecSrc1Dst0) GetSrc() []byte {
+	return self.Src
+}
+
+func (self *FlowModSpecSrc1Dst0) SetSrc(v []byte) {
+	self.Src = v
+}
+
+func (self *FlowModSpecSrc1Dst0) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *FlowModSpecSrc1Dst0) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *FlowModSpecSrc1Dst0) GetDstOfs() uint16 {
+	return self.DstOfs
+}
+
+func (self *FlowModSpecSrc1Dst0) SetDstOfs(v uint16) {
+	self.DstOfs = v
+}
+
+func (self *FlowModSpecSrc1Dst0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowModSpec.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Src)
+	self.Dst.Serialize(encoder)
+	encoder.PutUint16(uint16(self.DstOfs))
+
+	return nil
+}
+
+func DecodeFlowModSpecSrc1Dst0(parent *FlowModSpec, decoder *goloxi.Decoder) (*FlowModSpecSrc1Dst0, error) {
+	_flowmodspecsrc1dst0 := &FlowModSpecSrc1Dst0{FlowModSpec: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("FlowModSpecSrc1Dst0 packet too short: %d < 6", decoder.Length())
+	}
+	_flowmodspecsrc1dst0.Src = decoder.SliceDecoder(int((_flowmodspecsrc1dst0.NBits+15)/16*2), 0).Read(int(_flowmodspecsrc1dst0.NBits))
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_flowmodspecsrc1dst0.Dst = obj
+	}
+
+	_flowmodspecsrc1dst0.DstOfs = uint16(decoder.ReadUint16())
+	return _flowmodspecsrc1dst0, nil
+}
+
+func NewFlowModSpecSrc1Dst0() *FlowModSpecSrc1Dst0 {
+	obj := &FlowModSpecSrc1Dst0{
+		FlowModSpec: NewFlowModSpec(32),
+	}
+	return obj
+}
+
+type FlowModSpecSrc1Dst1 struct {
+	*FlowModSpec
+	Src    []byte
+	Dst    goloxi.IOxmId
+	DstOfs uint16
+}
+
+type IFlowModSpecSrc1Dst1 interface {
+	IFlowModSpec
+	GetSrc() []byte
+	GetDst() goloxi.IOxmId
+	GetDstOfs() uint16
+}
+
+func (self *FlowModSpecSrc1Dst1) GetSrc() []byte {
+	return self.Src
+}
+
+func (self *FlowModSpecSrc1Dst1) SetSrc(v []byte) {
+	self.Src = v
+}
+
+func (self *FlowModSpecSrc1Dst1) GetDst() goloxi.IOxmId {
+	return self.Dst
+}
+
+func (self *FlowModSpecSrc1Dst1) SetDst(v goloxi.IOxmId) {
+	self.Dst = v
+}
+
+func (self *FlowModSpecSrc1Dst1) GetDstOfs() uint16 {
+	return self.DstOfs
+}
+
+func (self *FlowModSpecSrc1Dst1) SetDstOfs(v uint16) {
+	self.DstOfs = v
+}
+
+func (self *FlowModSpecSrc1Dst1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowModSpec.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Src)
+	self.Dst.Serialize(encoder)
+	encoder.PutUint16(uint16(self.DstOfs))
+
+	return nil
+}
+
+func DecodeFlowModSpecSrc1Dst1(parent *FlowModSpec, decoder *goloxi.Decoder) (*FlowModSpecSrc1Dst1, error) {
+	_flowmodspecsrc1dst1 := &FlowModSpecSrc1Dst1{FlowModSpec: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("FlowModSpecSrc1Dst1 packet too short: %d < 6", decoder.Length())
+	}
+	_flowmodspecsrc1dst1.Src = decoder.SliceDecoder(int((_flowmodspecsrc1dst1.NBits+15)/16*2), 0).Read(int(_flowmodspecsrc1dst1.NBits))
+	if obj, err := DecodeOxmId(decoder); err != nil {
+		return nil, err
+	} else {
+		_flowmodspecsrc1dst1.Dst = obj
+	}
+
+	_flowmodspecsrc1dst1.DstOfs = uint16(decoder.ReadUint16())
+	return _flowmodspecsrc1dst1, nil
+}
+
+func NewFlowModSpecSrc1Dst1() *FlowModSpecSrc1Dst1 {
+	obj := &FlowModSpecSrc1Dst1{
+		FlowModSpec: NewFlowModSpec(40),
+	}
+	return obj
+}
+
+type FlowStatsEntry struct {
+	Length       uint16
+	TableId      uint8
+	DurationSec  uint32
+	DurationNsec uint32
+	Priority     uint16
+	IdleTimeout  uint16
+	HardTimeout  uint16
+	Flags        FlowModFlags
+	Cookie       uint64
+	PacketCount  uint64
+	ByteCount    uint64
+	Match        Match
+	Instructions []IInstruction
+}
+
+type IFlowStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetTableId() uint8
+	GetDurationSec() uint32
+	GetDurationNsec() uint32
+	GetPriority() uint16
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetFlags() FlowModFlags
+	GetCookie() uint64
+	GetPacketCount() uint64
+	GetByteCount() uint64
+	GetMatch() Match
+	GetInstructions() []IInstruction
+}
+
+func (self *FlowStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *FlowStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *FlowStatsEntry) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *FlowStatsEntry) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *FlowStatsEntry) GetDurationSec() uint32 {
+	return self.DurationSec
+}
+
+func (self *FlowStatsEntry) SetDurationSec(v uint32) {
+	self.DurationSec = v
+}
+
+func (self *FlowStatsEntry) GetDurationNsec() uint32 {
+	return self.DurationNsec
+}
+
+func (self *FlowStatsEntry) SetDurationNsec(v uint32) {
+	self.DurationNsec = v
+}
+
+func (self *FlowStatsEntry) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *FlowStatsEntry) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *FlowStatsEntry) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *FlowStatsEntry) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *FlowStatsEntry) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *FlowStatsEntry) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *FlowStatsEntry) GetFlags() FlowModFlags {
+	return self.Flags
+}
+
+func (self *FlowStatsEntry) SetFlags(v FlowModFlags) {
+	self.Flags = v
+}
+
+func (self *FlowStatsEntry) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *FlowStatsEntry) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *FlowStatsEntry) GetPacketCount() uint64 {
+	return self.PacketCount
+}
+
+func (self *FlowStatsEntry) SetPacketCount(v uint64) {
+	self.PacketCount = v
+}
+
+func (self *FlowStatsEntry) GetByteCount() uint64 {
+	return self.ByteCount
+}
+
+func (self *FlowStatsEntry) SetByteCount(v uint64) {
+	self.ByteCount = v
+}
+
+func (self *FlowStatsEntry) GetMatch() Match {
+	return self.Match
+}
+
+func (self *FlowStatsEntry) SetMatch(v Match) {
+	self.Match = v
+}
+
+func (self *FlowStatsEntry) GetInstructions() []IInstruction {
+	return self.Instructions
+}
+
+func (self *FlowStatsEntry) SetInstructions(v []IInstruction) {
+	self.Instructions = v
+}
+
+func (self *FlowStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint32(uint32(self.DurationSec))
+	encoder.PutUint32(uint32(self.DurationNsec))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint64(uint64(self.PacketCount))
+	encoder.PutUint64(uint64(self.ByteCount))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Instructions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowStatsEntry(decoder *goloxi.Decoder) (*FlowStatsEntry, error) {
+	_flowstatsentry := &FlowStatsEntry{}
+	if decoder.Length() < 56 {
+		return nil, fmt.Errorf("FlowStatsEntry packet too short: %d < 56", decoder.Length())
+	}
+	_flowstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_flowstatsentry.Length), 2+0)
+	_flowstatsentry.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_flowstatsentry.DurationSec = uint32(decoder.ReadUint32())
+	_flowstatsentry.DurationNsec = uint32(decoder.ReadUint32())
+	_flowstatsentry.Priority = uint16(decoder.ReadUint16())
+	_flowstatsentry.IdleTimeout = uint16(decoder.ReadUint16())
+	_flowstatsentry.HardTimeout = uint16(decoder.ReadUint16())
+	_flowstatsentry.Flags = FlowModFlags(decoder.ReadUint16())
+	decoder.Skip(4)
+	_flowstatsentry.Cookie = uint64(decoder.ReadUint64())
+	_flowstatsentry.PacketCount = uint64(decoder.ReadUint64())
+	_flowstatsentry.ByteCount = uint64(decoder.ReadUint64())
+	if err := _flowstatsentry.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeInstruction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_flowstatsentry.Instructions = append(_flowstatsentry.Instructions, item)
+		}
+	}
+	return _flowstatsentry, nil
+}
+
+func NewFlowStatsEntry() *FlowStatsEntry {
+	obj := &FlowStatsEntry{}
+	return obj
+}
+
+type GroupDescStatsEntry struct {
+	Length    uint16
+	GroupType GroupType
+	GroupId   uint32
+	Buckets   []*Bucket
+}
+
+type IGroupDescStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetGroupType() GroupType
+	GetGroupId() uint32
+	GetBuckets() []*Bucket
+}
+
+func (self *GroupDescStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *GroupDescStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *GroupDescStatsEntry) GetGroupType() GroupType {
+	return self.GroupType
+}
+
+func (self *GroupDescStatsEntry) SetGroupType(v GroupType) {
+	self.GroupType = v
+}
+
+func (self *GroupDescStatsEntry) GetGroupId() uint32 {
+	return self.GroupId
+}
+
+func (self *GroupDescStatsEntry) SetGroupId(v uint32) {
+	self.GroupId = v
+}
+
+func (self *GroupDescStatsEntry) GetBuckets() []*Bucket {
+	return self.Buckets
+}
+
+func (self *GroupDescStatsEntry) SetBuckets(v []*Bucket) {
+	self.Buckets = v
+}
+
+func (self *GroupDescStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint8(uint8(self.GroupType))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint32(uint32(self.GroupId))
+	for _, obj := range self.Buckets {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupDescStatsEntry(decoder *goloxi.Decoder) (*GroupDescStatsEntry, error) {
+	_groupdescstatsentry := &GroupDescStatsEntry{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("GroupDescStatsEntry packet too short: %d < 8", decoder.Length())
+	}
+	_groupdescstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_groupdescstatsentry.Length), 2+0)
+	_groupdescstatsentry.GroupType = GroupType(decoder.ReadByte())
+	decoder.Skip(1)
+	_groupdescstatsentry.GroupId = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 16 {
+		item, err := DecodeBucket(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_groupdescstatsentry.Buckets = append(_groupdescstatsentry.Buckets, item)
+		}
+	}
+	return _groupdescstatsentry, nil
+}
+
+func NewGroupDescStatsEntry() *GroupDescStatsEntry {
+	obj := &GroupDescStatsEntry{}
+	return obj
+}
+
+type GroupStatsEntry struct {
+	Length       uint16
+	GroupId      uint32
+	RefCount     uint32
+	PacketCount  uint64
+	ByteCount    uint64
+	DurationSec  uint32
+	DurationNsec uint32
+	BucketStats  []*BucketCounter
+}
+
+type IGroupStatsEntry interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetGroupId() uint32
+	GetRefCount() uint32
+	GetPacketCount() uint64
+	GetByteCount() uint64
+	GetDurationSec() uint32
+	GetDurationNsec() uint32
+	GetBucketStats() []*BucketCounter
+}
+
+func (self *GroupStatsEntry) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *GroupStatsEntry) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *GroupStatsEntry) GetGroupId() uint32 {
+	return self.GroupId
+}
+
+func (self *GroupStatsEntry) SetGroupId(v uint32) {
+	self.GroupId = v
+}
+
+func (self *GroupStatsEntry) GetRefCount() uint32 {
+	return self.RefCount
+}
+
+func (self *GroupStatsEntry) SetRefCount(v uint32) {
+	self.RefCount = v
+}
+
+func (self *GroupStatsEntry) GetPacketCount() uint64 {
+	return self.PacketCount
+}
+
+func (self *GroupStatsEntry) SetPacketCount(v uint64) {
+	self.PacketCount = v
+}
+
+func (self *GroupStatsEntry) GetByteCount() uint64 {
+	return self.ByteCount
+}
+
+func (self *GroupStatsEntry) SetByteCount(v uint64) {
+	self.ByteCount = v
+}
+
+func (self *GroupStatsEntry) GetDurationSec() uint32 {
+	return self.DurationSec
+}
+
+func (self *GroupStatsEntry) SetDurationSec(v uint32) {
+	self.DurationSec = v
+}
+
+func (self *GroupStatsEntry) GetDurationNsec() uint32 {
+	return self.DurationNsec
+}
+
+func (self *GroupStatsEntry) SetDurationNsec(v uint32) {
+	self.DurationNsec = v
+}
+
+func (self *GroupStatsEntry) GetBucketStats() []*BucketCounter {
+	return self.BucketStats
+}
+
+func (self *GroupStatsEntry) SetBucketStats(v []*BucketCounter) {
+	self.BucketStats = v
+}
+
+func (self *GroupStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.GroupId))
+	encoder.PutUint32(uint32(self.RefCount))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.PacketCount))
+	encoder.PutUint64(uint64(self.ByteCount))
+	encoder.PutUint32(uint32(self.DurationSec))
+	encoder.PutUint32(uint32(self.DurationNsec))
+	for _, obj := range self.BucketStats {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupStatsEntry(decoder *goloxi.Decoder) (*GroupStatsEntry, error) {
+	_groupstatsentry := &GroupStatsEntry{}
+	if decoder.Length() < 40 {
+		return nil, fmt.Errorf("GroupStatsEntry packet too short: %d < 40", decoder.Length())
+	}
+	_groupstatsentry.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_groupstatsentry.Length), 2+0)
+	decoder.Skip(2)
+	_groupstatsentry.GroupId = uint32(decoder.ReadUint32())
+	_groupstatsentry.RefCount = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	_groupstatsentry.PacketCount = uint64(decoder.ReadUint64())
+	_groupstatsentry.ByteCount = uint64(decoder.ReadUint64())
+	_groupstatsentry.DurationSec = uint32(decoder.ReadUint32())
+	_groupstatsentry.DurationNsec = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 16 {
+		item, err := DecodeBucketCounter(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_groupstatsentry.BucketStats = append(_groupstatsentry.BucketStats, item)
+		}
+	}
+	return _groupstatsentry, nil
+}
+
+func NewGroupStatsEntry() *GroupStatsEntry {
+	obj := &GroupStatsEntry{}
+	return obj
+}
+
+type HelloElem struct {
+	Type   uint16
+	Length uint16
+}
+
+type IHelloElem interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLength() uint16
+}
+
+func (self *HelloElem) GetType() uint16 {
+	return self.Type
+}
+
+func (self *HelloElem) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *HelloElem) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *HelloElem) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *HelloElem) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Length))
+
+	return nil
+}
+
+func DecodeHelloElem(decoder *goloxi.Decoder) (IHelloElem, error) {
+	_helloelem := &HelloElem{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("HelloElem packet too short: %d < 4", decoder.Length())
+	}
+	_helloelem.Type = uint16(decoder.ReadUint16())
+	_helloelem.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_helloelem.Length), 2+2)
+
+	switch _helloelem.Type {
+	case 1:
+		return DecodeHelloElemVersionbitmap(_helloelem, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'HelloElem'", _helloelem.Type)
+	}
+}
+
+func NewHelloElem(_type uint16) *HelloElem {
+	obj := &HelloElem{}
+	obj.Type = _type
+	return obj
+}
+
+type HelloElemVersionbitmap struct {
+	*HelloElem
+	Bitmaps []*Uint32
+}
+
+type IHelloElemVersionbitmap interface {
+	IHelloElem
+	GetBitmaps() []*Uint32
+}
+
+func (self *HelloElemVersionbitmap) GetBitmaps() []*Uint32 {
+	return self.Bitmaps
+}
+
+func (self *HelloElemVersionbitmap) SetBitmaps(v []*Uint32) {
+	self.Bitmaps = v
+}
+
+func (self *HelloElemVersionbitmap) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.HelloElem.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Bitmaps {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeHelloElemVersionbitmap(parent *HelloElem, decoder *goloxi.Decoder) (*HelloElemVersionbitmap, error) {
+	_helloelemversionbitmap := &HelloElemVersionbitmap{HelloElem: parent}
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeUint32(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_helloelemversionbitmap.Bitmaps = append(_helloelemversionbitmap.Bitmaps, item)
+		}
+	}
+	return _helloelemversionbitmap, nil
+}
+
+func NewHelloElemVersionbitmap() *HelloElemVersionbitmap {
+	obj := &HelloElemVersionbitmap{
+		HelloElem: NewHelloElem(1),
+	}
+	return obj
+}
+
+type InstructionId struct {
+	Type uint16
+	Len  uint16
+}
+
+type IInstructionId interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLen() uint16
+}
+
+func (self *InstructionId) GetType() uint16 {
+	return self.Type
+}
+
+func (self *InstructionId) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *InstructionId) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *InstructionId) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *InstructionId) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Len))
+
+	return nil
+}
+
+func DecodeInstructionId(decoder *goloxi.Decoder) (IInstructionId, error) {
+	_instructionid := &InstructionId{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionId packet too short: %d < 4", decoder.Length())
+	}
+	_instructionid.Type = uint16(decoder.ReadUint16())
+	_instructionid.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_instructionid.Len), 2+2)
+
+	switch _instructionid.Type {
+	case 1:
+		return DecodeInstructionIdGotoTable(_instructionid, decoder)
+	case 2:
+		return DecodeInstructionIdWriteMetadata(_instructionid, decoder)
+	case 3:
+		return DecodeInstructionIdWriteActions(_instructionid, decoder)
+	case 4:
+		return DecodeInstructionIdApplyActions(_instructionid, decoder)
+	case 5:
+		return DecodeInstructionIdClearActions(_instructionid, decoder)
+	case 6:
+		return DecodeInstructionIdMeter(_instructionid, decoder)
+	case 65535:
+		return DecodeInstructionIdExperimenter(_instructionid, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'InstructionId'", _instructionid.Type)
+	}
+}
+
+func NewInstructionId(_type uint16) *InstructionId {
+	obj := &InstructionId{}
+	obj.Type = _type
+	return obj
+}
+
+type InstructionIdApplyActions struct {
+	*InstructionId
+}
+
+type IInstructionIdApplyActions interface {
+	IInstructionId
+}
+
+func (self *InstructionIdApplyActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdApplyActions(parent *InstructionId, decoder *goloxi.Decoder) (*InstructionIdApplyActions, error) {
+	_instructionidapplyactions := &InstructionIdApplyActions{InstructionId: parent}
+	return _instructionidapplyactions, nil
+}
+
+func NewInstructionIdApplyActions() *InstructionIdApplyActions {
+	obj := &InstructionIdApplyActions{
+		InstructionId: NewInstructionId(4),
+	}
+	return obj
+}
+
+type InstructionIdExperimenter struct {
+	*InstructionId
+	Experimenter uint32
+}
+
+type IInstructionIdExperimenter interface {
+	IInstructionId
+	GetExperimenter() uint32
+}
+
+func (self *InstructionIdExperimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *InstructionIdExperimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *InstructionIdExperimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Experimenter))
+
+	return nil
+}
+
+func DecodeInstructionIdExperimenter(parent *InstructionId, decoder *goloxi.Decoder) (IInstructionIdExperimenter, error) {
+	_instructionidexperimenter := &InstructionIdExperimenter{InstructionId: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionIdExperimenter packet too short: %d < 4", decoder.Length())
+	}
+	_instructionidexperimenter.Experimenter = uint32(decoder.ReadUint32())
+
+	switch _instructionidexperimenter.Experimenter {
+	case 6035143:
+		return DecodeInstructionIdBsn(_instructionidexperimenter, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'InstructionIdExperimenter'", _instructionidexperimenter.Experimenter)
+	}
+}
+
+func NewInstructionIdExperimenter(_experimenter uint32) *InstructionIdExperimenter {
+	obj := &InstructionIdExperimenter{
+		InstructionId: NewInstructionId(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type InstructionIdBsn struct {
+	*InstructionIdExperimenter
+	Subtype uint32
+}
+
+type IInstructionIdBsn interface {
+	IInstructionIdExperimenter
+	GetSubtype() uint32
+}
+
+func (self *InstructionIdBsn) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *InstructionIdBsn) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *InstructionIdBsn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdExperimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Subtype))
+
+	return nil
+}
+
+func DecodeInstructionIdBsn(parent *InstructionIdExperimenter, decoder *goloxi.Decoder) (IInstructionIdBsn, error) {
+	_instructionidbsn := &InstructionIdBsn{InstructionIdExperimenter: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionIdBsn packet too short: %d < 4", decoder.Length())
+	}
+	_instructionidbsn.Subtype = uint32(decoder.ReadUint32())
+
+	switch _instructionidbsn.Subtype {
+	case 0:
+		return DecodeInstructionIdBsnDisableSrcMacCheck(_instructionidbsn, decoder)
+	case 1:
+		return DecodeInstructionIdBsnArpOffload(_instructionidbsn, decoder)
+	case 2:
+		return DecodeInstructionIdBsnDhcpOffload(_instructionidbsn, decoder)
+	case 3:
+		return DecodeInstructionIdBsnDisableSplitHorizonCheck(_instructionidbsn, decoder)
+	case 4:
+		return DecodeInstructionIdBsnPermit(_instructionidbsn, decoder)
+	case 5:
+		return DecodeInstructionIdBsnDeny(_instructionidbsn, decoder)
+	case 6:
+		return DecodeInstructionIdBsnPacketOfDeath(_instructionidbsn, decoder)
+	case 7:
+		return DecodeInstructionIdBsnPrioritizePdus(_instructionidbsn, decoder)
+	case 8:
+		return DecodeInstructionIdBsnRequireVlanXlate(_instructionidbsn, decoder)
+	case 9:
+		return DecodeInstructionIdBsnDisableVlanCounters(_instructionidbsn, decoder)
+	case 10:
+		return DecodeInstructionIdBsnSpanDestination(_instructionidbsn, decoder)
+	case 11:
+		return DecodeInstructionIdBsnAutoNegotiation(_instructionidbsn, decoder)
+	case 12:
+		return DecodeInstructionIdBsnInternalPriority(_instructionidbsn, decoder)
+	case 13:
+		return DecodeInstructionIdBsnDisableL3(_instructionidbsn, decoder)
+	case 14:
+		return DecodeInstructionIdBsnNdpOffload(_instructionidbsn, decoder)
+	case 15:
+		return DecodeInstructionIdBsnHashSelect(_instructionidbsn, decoder)
+	case 16:
+		return DecodeInstructionIdBsnDirectedBroadcast(_instructionidbsn, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'InstructionIdBsn'", _instructionidbsn.Subtype)
+	}
+}
+
+func NewInstructionIdBsn(_subtype uint32) *InstructionIdBsn {
+	obj := &InstructionIdBsn{
+		InstructionIdExperimenter: NewInstructionIdExperimenter(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type InstructionIdBsnArpOffload struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnArpOffload interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnArpOffload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnArpOffload(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnArpOffload, error) {
+	_instructionidbsnarpoffload := &InstructionIdBsnArpOffload{InstructionIdBsn: parent}
+	return _instructionidbsnarpoffload, nil
+}
+
+func NewInstructionIdBsnArpOffload() *InstructionIdBsnArpOffload {
+	obj := &InstructionIdBsnArpOffload{
+		InstructionIdBsn: NewInstructionIdBsn(1),
+	}
+	return obj
+}
+
+type InstructionIdBsnAutoNegotiation struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnAutoNegotiation interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnAutoNegotiation) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnAutoNegotiation(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnAutoNegotiation, error) {
+	_instructionidbsnautonegotiation := &InstructionIdBsnAutoNegotiation{InstructionIdBsn: parent}
+	return _instructionidbsnautonegotiation, nil
+}
+
+func NewInstructionIdBsnAutoNegotiation() *InstructionIdBsnAutoNegotiation {
+	obj := &InstructionIdBsnAutoNegotiation{
+		InstructionIdBsn: NewInstructionIdBsn(11),
+	}
+	return obj
+}
+
+type InstructionIdBsnDeny struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnDeny interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnDeny) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnDeny(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnDeny, error) {
+	_instructionidbsndeny := &InstructionIdBsnDeny{InstructionIdBsn: parent}
+	return _instructionidbsndeny, nil
+}
+
+func NewInstructionIdBsnDeny() *InstructionIdBsnDeny {
+	obj := &InstructionIdBsnDeny{
+		InstructionIdBsn: NewInstructionIdBsn(5),
+	}
+	return obj
+}
+
+type InstructionIdBsnDhcpOffload struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnDhcpOffload interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnDhcpOffload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnDhcpOffload(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnDhcpOffload, error) {
+	_instructionidbsndhcpoffload := &InstructionIdBsnDhcpOffload{InstructionIdBsn: parent}
+	return _instructionidbsndhcpoffload, nil
+}
+
+func NewInstructionIdBsnDhcpOffload() *InstructionIdBsnDhcpOffload {
+	obj := &InstructionIdBsnDhcpOffload{
+		InstructionIdBsn: NewInstructionIdBsn(2),
+	}
+	return obj
+}
+
+type InstructionIdBsnDirectedBroadcast struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnDirectedBroadcast interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnDirectedBroadcast) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnDirectedBroadcast(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnDirectedBroadcast, error) {
+	_instructionidbsndirectedbroadcast := &InstructionIdBsnDirectedBroadcast{InstructionIdBsn: parent}
+	return _instructionidbsndirectedbroadcast, nil
+}
+
+func NewInstructionIdBsnDirectedBroadcast() *InstructionIdBsnDirectedBroadcast {
+	obj := &InstructionIdBsnDirectedBroadcast{
+		InstructionIdBsn: NewInstructionIdBsn(16),
+	}
+	return obj
+}
+
+type InstructionIdBsnDisableL3 struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnDisableL3 interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnDisableL3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnDisableL3(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnDisableL3, error) {
+	_instructionidbsndisablel3 := &InstructionIdBsnDisableL3{InstructionIdBsn: parent}
+	return _instructionidbsndisablel3, nil
+}
+
+func NewInstructionIdBsnDisableL3() *InstructionIdBsnDisableL3 {
+	obj := &InstructionIdBsnDisableL3{
+		InstructionIdBsn: NewInstructionIdBsn(13),
+	}
+	return obj
+}
+
+type InstructionIdBsnDisableSplitHorizonCheck struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnDisableSplitHorizonCheck interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnDisableSplitHorizonCheck) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnDisableSplitHorizonCheck(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnDisableSplitHorizonCheck, error) {
+	_instructionidbsndisablesplithorizoncheck := &InstructionIdBsnDisableSplitHorizonCheck{InstructionIdBsn: parent}
+	return _instructionidbsndisablesplithorizoncheck, nil
+}
+
+func NewInstructionIdBsnDisableSplitHorizonCheck() *InstructionIdBsnDisableSplitHorizonCheck {
+	obj := &InstructionIdBsnDisableSplitHorizonCheck{
+		InstructionIdBsn: NewInstructionIdBsn(3),
+	}
+	return obj
+}
+
+type InstructionIdBsnDisableSrcMacCheck struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnDisableSrcMacCheck interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnDisableSrcMacCheck) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnDisableSrcMacCheck(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnDisableSrcMacCheck, error) {
+	_instructionidbsndisablesrcmaccheck := &InstructionIdBsnDisableSrcMacCheck{InstructionIdBsn: parent}
+	return _instructionidbsndisablesrcmaccheck, nil
+}
+
+func NewInstructionIdBsnDisableSrcMacCheck() *InstructionIdBsnDisableSrcMacCheck {
+	obj := &InstructionIdBsnDisableSrcMacCheck{
+		InstructionIdBsn: NewInstructionIdBsn(0),
+	}
+	return obj
+}
+
+type InstructionIdBsnDisableVlanCounters struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnDisableVlanCounters interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnDisableVlanCounters) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnDisableVlanCounters(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnDisableVlanCounters, error) {
+	_instructionidbsndisablevlancounters := &InstructionIdBsnDisableVlanCounters{InstructionIdBsn: parent}
+	return _instructionidbsndisablevlancounters, nil
+}
+
+func NewInstructionIdBsnDisableVlanCounters() *InstructionIdBsnDisableVlanCounters {
+	obj := &InstructionIdBsnDisableVlanCounters{
+		InstructionIdBsn: NewInstructionIdBsn(9),
+	}
+	return obj
+}
+
+type InstructionIdBsnHashSelect struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnHashSelect interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnHashSelect) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnHashSelect(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnHashSelect, error) {
+	_instructionidbsnhashselect := &InstructionIdBsnHashSelect{InstructionIdBsn: parent}
+	return _instructionidbsnhashselect, nil
+}
+
+func NewInstructionIdBsnHashSelect() *InstructionIdBsnHashSelect {
+	obj := &InstructionIdBsnHashSelect{
+		InstructionIdBsn: NewInstructionIdBsn(15),
+	}
+	return obj
+}
+
+type InstructionIdBsnInternalPriority struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnInternalPriority interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnInternalPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnInternalPriority(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnInternalPriority, error) {
+	_instructionidbsninternalpriority := &InstructionIdBsnInternalPriority{InstructionIdBsn: parent}
+	return _instructionidbsninternalpriority, nil
+}
+
+func NewInstructionIdBsnInternalPriority() *InstructionIdBsnInternalPriority {
+	obj := &InstructionIdBsnInternalPriority{
+		InstructionIdBsn: NewInstructionIdBsn(12),
+	}
+	return obj
+}
+
+type InstructionIdBsnNdpOffload struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnNdpOffload interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnNdpOffload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnNdpOffload(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnNdpOffload, error) {
+	_instructionidbsnndpoffload := &InstructionIdBsnNdpOffload{InstructionIdBsn: parent}
+	return _instructionidbsnndpoffload, nil
+}
+
+func NewInstructionIdBsnNdpOffload() *InstructionIdBsnNdpOffload {
+	obj := &InstructionIdBsnNdpOffload{
+		InstructionIdBsn: NewInstructionIdBsn(14),
+	}
+	return obj
+}
+
+type InstructionIdBsnPacketOfDeath struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnPacketOfDeath interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnPacketOfDeath) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnPacketOfDeath(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnPacketOfDeath, error) {
+	_instructionidbsnpacketofdeath := &InstructionIdBsnPacketOfDeath{InstructionIdBsn: parent}
+	return _instructionidbsnpacketofdeath, nil
+}
+
+func NewInstructionIdBsnPacketOfDeath() *InstructionIdBsnPacketOfDeath {
+	obj := &InstructionIdBsnPacketOfDeath{
+		InstructionIdBsn: NewInstructionIdBsn(6),
+	}
+	return obj
+}
+
+type InstructionIdBsnPermit struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnPermit interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnPermit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnPermit(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnPermit, error) {
+	_instructionidbsnpermit := &InstructionIdBsnPermit{InstructionIdBsn: parent}
+	return _instructionidbsnpermit, nil
+}
+
+func NewInstructionIdBsnPermit() *InstructionIdBsnPermit {
+	obj := &InstructionIdBsnPermit{
+		InstructionIdBsn: NewInstructionIdBsn(4),
+	}
+	return obj
+}
+
+type InstructionIdBsnPrioritizePdus struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnPrioritizePdus interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnPrioritizePdus) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnPrioritizePdus(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnPrioritizePdus, error) {
+	_instructionidbsnprioritizepdus := &InstructionIdBsnPrioritizePdus{InstructionIdBsn: parent}
+	return _instructionidbsnprioritizepdus, nil
+}
+
+func NewInstructionIdBsnPrioritizePdus() *InstructionIdBsnPrioritizePdus {
+	obj := &InstructionIdBsnPrioritizePdus{
+		InstructionIdBsn: NewInstructionIdBsn(7),
+	}
+	return obj
+}
+
+type InstructionIdBsnRequireVlanXlate struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnRequireVlanXlate interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnRequireVlanXlate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnRequireVlanXlate(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnRequireVlanXlate, error) {
+	_instructionidbsnrequirevlanxlate := &InstructionIdBsnRequireVlanXlate{InstructionIdBsn: parent}
+	return _instructionidbsnrequirevlanxlate, nil
+}
+
+func NewInstructionIdBsnRequireVlanXlate() *InstructionIdBsnRequireVlanXlate {
+	obj := &InstructionIdBsnRequireVlanXlate{
+		InstructionIdBsn: NewInstructionIdBsn(8),
+	}
+	return obj
+}
+
+type InstructionIdBsnSpanDestination struct {
+	*InstructionIdBsn
+}
+
+type IInstructionIdBsnSpanDestination interface {
+	IInstructionIdBsn
+}
+
+func (self *InstructionIdBsnSpanDestination) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionIdBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdBsnSpanDestination(parent *InstructionIdBsn, decoder *goloxi.Decoder) (*InstructionIdBsnSpanDestination, error) {
+	_instructionidbsnspandestination := &InstructionIdBsnSpanDestination{InstructionIdBsn: parent}
+	return _instructionidbsnspandestination, nil
+}
+
+func NewInstructionIdBsnSpanDestination() *InstructionIdBsnSpanDestination {
+	obj := &InstructionIdBsnSpanDestination{
+		InstructionIdBsn: NewInstructionIdBsn(10),
+	}
+	return obj
+}
+
+type InstructionIdClearActions struct {
+	*InstructionId
+}
+
+type IInstructionIdClearActions interface {
+	IInstructionId
+}
+
+func (self *InstructionIdClearActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdClearActions(parent *InstructionId, decoder *goloxi.Decoder) (*InstructionIdClearActions, error) {
+	_instructionidclearactions := &InstructionIdClearActions{InstructionId: parent}
+	return _instructionidclearactions, nil
+}
+
+func NewInstructionIdClearActions() *InstructionIdClearActions {
+	obj := &InstructionIdClearActions{
+		InstructionId: NewInstructionId(5),
+	}
+	return obj
+}
+
+type InstructionIdGotoTable struct {
+	*InstructionId
+}
+
+type IInstructionIdGotoTable interface {
+	IInstructionId
+}
+
+func (self *InstructionIdGotoTable) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdGotoTable(parent *InstructionId, decoder *goloxi.Decoder) (*InstructionIdGotoTable, error) {
+	_instructionidgototable := &InstructionIdGotoTable{InstructionId: parent}
+	return _instructionidgototable, nil
+}
+
+func NewInstructionIdGotoTable() *InstructionIdGotoTable {
+	obj := &InstructionIdGotoTable{
+		InstructionId: NewInstructionId(1),
+	}
+	return obj
+}
+
+type InstructionIdMeter struct {
+	*InstructionId
+}
+
+type IInstructionIdMeter interface {
+	IInstructionId
+}
+
+func (self *InstructionIdMeter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdMeter(parent *InstructionId, decoder *goloxi.Decoder) (*InstructionIdMeter, error) {
+	_instructionidmeter := &InstructionIdMeter{InstructionId: parent}
+	return _instructionidmeter, nil
+}
+
+func NewInstructionIdMeter() *InstructionIdMeter {
+	obj := &InstructionIdMeter{
+		InstructionId: NewInstructionId(6),
+	}
+	return obj
+}
+
+type InstructionIdWriteActions struct {
+	*InstructionId
+}
+
+type IInstructionIdWriteActions interface {
+	IInstructionId
+}
+
+func (self *InstructionIdWriteActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdWriteActions(parent *InstructionId, decoder *goloxi.Decoder) (*InstructionIdWriteActions, error) {
+	_instructionidwriteactions := &InstructionIdWriteActions{InstructionId: parent}
+	return _instructionidwriteactions, nil
+}
+
+func NewInstructionIdWriteActions() *InstructionIdWriteActions {
+	obj := &InstructionIdWriteActions{
+		InstructionId: NewInstructionId(3),
+	}
+	return obj
+}
+
+type InstructionIdWriteMetadata struct {
+	*InstructionId
+}
+
+type IInstructionIdWriteMetadata interface {
+	IInstructionId
+}
+
+func (self *InstructionIdWriteMetadata) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionIdWriteMetadata(parent *InstructionId, decoder *goloxi.Decoder) (*InstructionIdWriteMetadata, error) {
+	_instructionidwritemetadata := &InstructionIdWriteMetadata{InstructionId: parent}
+	return _instructionidwritemetadata, nil
+}
+
+func NewInstructionIdWriteMetadata() *InstructionIdWriteMetadata {
+	obj := &InstructionIdWriteMetadata{
+		InstructionId: NewInstructionId(2),
+	}
+	return obj
+}
+
+type MatchV3 struct {
+	Type    uint16
+	Length  uint16
+	OxmList []goloxi.IOxm
+}
+
+type IMatchV3 interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLength() uint16
+	GetOxmList() []goloxi.IOxm
+}
+
+func (self *MatchV3) GetType() uint16 {
+	return self.Type
+}
+
+func (self *MatchV3) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *MatchV3) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *MatchV3) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *MatchV3) GetOxmList() []goloxi.IOxm {
+	return self.OxmList
+}
+
+func (self *MatchV3) SetOxmList(v []goloxi.IOxm) {
+	self.OxmList = v
+}
+
+func (self *MatchV3) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Length))
+	for _, obj := range self.OxmList {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+func (self *MatchV3) Decode(decoder *goloxi.Decoder) error {
+	if decoder.Length() < 4 {
+		return fmt.Errorf("MatchV3 packet too short: %d < 4", decoder.Length())
+	}
+
+	defer decoder.SkipAlign()
+
+	self.Type = uint16(decoder.ReadUint16())
+	self.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(((self.Length)+7)/8*8), 2+2)
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeOxm(decoder)
+		if err != nil {
+			return err
+		}
+		if item != nil {
+			self.OxmList = append(self.OxmList, item)
+		}
+	}
+
+	return nil
+}
+
+func NewMatchV3() *MatchV3 {
+	obj := &MatchV3{}
+	return obj
+}
+
+type MeterBand struct {
+	Type uint16
+	Len  uint16
+}
+
+type IMeterBand interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLen() uint16
+}
+
+func (self *MeterBand) GetType() uint16 {
+	return self.Type
+}
+
+func (self *MeterBand) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *MeterBand) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *MeterBand) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *MeterBand) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Len))
+
+	return nil
+}
+
+func DecodeMeterBand(decoder *goloxi.Decoder) (IMeterBand, error) {
+	_meterband := &MeterBand{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("MeterBand packet too short: %d < 4", decoder.Length())
+	}
+	_meterband.Type = uint16(decoder.ReadUint16())
+	_meterband.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_meterband.Len), 2+2)
+
+	switch _meterband.Type {
+	case 1:
+		return DecodeMeterBandDrop(_meterband, decoder)
+	case 2:
+		return DecodeMeterBandDscpRemark(_meterband, decoder)
+	case 65535:
+		return DecodeMeterBandExperimenter(_meterband, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'MeterBand'", _meterband.Type)
+	}
+}
+
+func NewMeterBand(_type uint16) *MeterBand {
+	obj := &MeterBand{}
+	obj.Type = _type
+	return obj
+}
+
+type MeterBandDrop struct {
+	*MeterBand
+	Rate      uint32
+	BurstSize uint32
+}
+
+type IMeterBandDrop interface {
+	IMeterBand
+	GetRate() uint32
+	GetBurstSize() uint32
+}
+
+func (self *MeterBandDrop) GetRate() uint32 {
+	return self.Rate
+}
+
+func (self *MeterBandDrop) SetRate(v uint32) {
+	self.Rate = v
+}
+
+func (self *MeterBandDrop) GetBurstSize() uint32 {
+	return self.BurstSize
+}
+
+func (self *MeterBandDrop) SetBurstSize(v uint32) {
+	self.BurstSize = v
+}
+
+func (self *MeterBandDrop) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.MeterBand.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Rate))
+	encoder.PutUint32(uint32(self.BurstSize))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterBandDrop(parent *MeterBand, decoder *goloxi.Decoder) (*MeterBandDrop, error) {
+	_meterbanddrop := &MeterBandDrop{MeterBand: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("MeterBandDrop packet too short: %d < 12", decoder.Length())
+	}
+	_meterbanddrop.Rate = uint32(decoder.ReadUint32())
+	_meterbanddrop.BurstSize = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _meterbanddrop, nil
+}
+
+func NewMeterBandDrop() *MeterBandDrop {
+	obj := &MeterBandDrop{
+		MeterBand: NewMeterBand(1),
+	}
+	return obj
+}
+
+type MeterBandDscpRemark struct {
+	*MeterBand
+	Rate      uint32
+	BurstSize uint32
+	PrecLevel uint8
+}
+
+type IMeterBandDscpRemark interface {
+	IMeterBand
+	GetRate() uint32
+	GetBurstSize() uint32
+	GetPrecLevel() uint8
+}
+
+func (self *MeterBandDscpRemark) GetRate() uint32 {
+	return self.Rate
+}
+
+func (self *MeterBandDscpRemark) SetRate(v uint32) {
+	self.Rate = v
+}
+
+func (self *MeterBandDscpRemark) GetBurstSize() uint32 {
+	return self.BurstSize
+}
+
+func (self *MeterBandDscpRemark) SetBurstSize(v uint32) {
+	self.BurstSize = v
+}
+
+func (self *MeterBandDscpRemark) GetPrecLevel() uint8 {
+	return self.PrecLevel
+}
+
+func (self *MeterBandDscpRemark) SetPrecLevel(v uint8) {
+	self.PrecLevel = v
+}
+
+func (self *MeterBandDscpRemark) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.MeterBand.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Rate))
+	encoder.PutUint32(uint32(self.BurstSize))
+	encoder.PutUint8(uint8(self.PrecLevel))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterBandDscpRemark(parent *MeterBand, decoder *goloxi.Decoder) (*MeterBandDscpRemark, error) {
+	_meterbanddscpremark := &MeterBandDscpRemark{MeterBand: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("MeterBandDscpRemark packet too short: %d < 12", decoder.Length())
+	}
+	_meterbanddscpremark.Rate = uint32(decoder.ReadUint32())
+	_meterbanddscpremark.BurstSize = uint32(decoder.ReadUint32())
+	_meterbanddscpremark.PrecLevel = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _meterbanddscpremark, nil
+}
+
+func NewMeterBandDscpRemark() *MeterBandDscpRemark {
+	obj := &MeterBandDscpRemark{
+		MeterBand: NewMeterBand(2),
+	}
+	return obj
+}
+
+type MeterBandExperimenter struct {
+	*MeterBand
+	Rate         uint32
+	BurstSize    uint32
+	Experimenter uint32
+}
+
+type IMeterBandExperimenter interface {
+	IMeterBand
+	GetRate() uint32
+	GetBurstSize() uint32
+	GetExperimenter() uint32
+}
+
+func (self *MeterBandExperimenter) GetRate() uint32 {
+	return self.Rate
+}
+
+func (self *MeterBandExperimenter) SetRate(v uint32) {
+	self.Rate = v
+}
+
+func (self *MeterBandExperimenter) GetBurstSize() uint32 {
+	return self.BurstSize
+}
+
+func (self *MeterBandExperimenter) SetBurstSize(v uint32) {
+	self.BurstSize = v
+}
+
+func (self *MeterBandExperimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *MeterBandExperimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *MeterBandExperimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.MeterBand.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Rate))
+	encoder.PutUint32(uint32(self.BurstSize))
+	encoder.PutUint32(uint32(self.Experimenter))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterBandExperimenter(parent *MeterBand, decoder *goloxi.Decoder) (*MeterBandExperimenter, error) {
+	_meterbandexperimenter := &MeterBandExperimenter{MeterBand: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("MeterBandExperimenter packet too short: %d < 12", decoder.Length())
+	}
+	_meterbandexperimenter.Rate = uint32(decoder.ReadUint32())
+	_meterbandexperimenter.BurstSize = uint32(decoder.ReadUint32())
+	_meterbandexperimenter.Experimenter = uint32(decoder.ReadUint32())
+	return _meterbandexperimenter, nil
+}
+
+func NewMeterBandExperimenter() *MeterBandExperimenter {
+	obj := &MeterBandExperimenter{
+		MeterBand: NewMeterBand(65535),
+	}
+	return obj
+}
+
+type MeterBandStats struct {
+	PacketBandCount uint64
+	ByteBandCount   uint64
+}
+
+type IMeterBandStats interface {
+	goloxi.Serializable
+	GetPacketBandCount() uint64
+	GetByteBandCount() uint64
+}
+
+func (self *MeterBandStats) GetPacketBandCount() uint64 {
+	return self.PacketBandCount
+}
+
+func (self *MeterBandStats) SetPacketBandCount(v uint64) {
+	self.PacketBandCount = v
+}
+
+func (self *MeterBandStats) GetByteBandCount() uint64 {
+	return self.ByteBandCount
+}
+
+func (self *MeterBandStats) SetByteBandCount(v uint64) {
+	self.ByteBandCount = v
+}
+
+func (self *MeterBandStats) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint64(uint64(self.PacketBandCount))
+	encoder.PutUint64(uint64(self.ByteBandCount))
+
+	return nil
+}
+
+func DecodeMeterBandStats(decoder *goloxi.Decoder) (*MeterBandStats, error) {
+	_meterbandstats := &MeterBandStats{}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("MeterBandStats packet too short: %d < 16", decoder.Length())
+	}
+	_meterbandstats.PacketBandCount = uint64(decoder.ReadUint64())
+	_meterbandstats.ByteBandCount = uint64(decoder.ReadUint64())
+	return _meterbandstats, nil
+}
+
+func NewMeterBandStats() *MeterBandStats {
+	obj := &MeterBandStats{}
+	return obj
+}
+
+type MeterConfig struct {
+	Length  uint16
+	Flags   MeterFlags
+	MeterId uint32
+	Entries []IMeterBand
+}
+
+type IMeterConfig interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetFlags() MeterFlags
+	GetMeterId() uint32
+	GetEntries() []IMeterBand
+}
+
+func (self *MeterConfig) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *MeterConfig) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *MeterConfig) GetFlags() MeterFlags {
+	return self.Flags
+}
+
+func (self *MeterConfig) SetFlags(v MeterFlags) {
+	self.Flags = v
+}
+
+func (self *MeterConfig) GetMeterId() uint32 {
+	return self.MeterId
+}
+
+func (self *MeterConfig) SetMeterId(v uint32) {
+	self.MeterId = v
+}
+
+func (self *MeterConfig) GetEntries() []IMeterBand {
+	return self.Entries
+}
+
+func (self *MeterConfig) SetEntries(v []IMeterBand) {
+	self.Entries = v
+}
+
+func (self *MeterConfig) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.PutUint32(uint32(self.MeterId))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterConfig(decoder *goloxi.Decoder) (*MeterConfig, error) {
+	_meterconfig := &MeterConfig{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("MeterConfig packet too short: %d < 8", decoder.Length())
+	}
+	_meterconfig.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_meterconfig.Length), 2+0)
+	_meterconfig.Flags = MeterFlags(decoder.ReadUint16())
+	_meterconfig.MeterId = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeMeterBand(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_meterconfig.Entries = append(_meterconfig.Entries, item)
+		}
+	}
+	return _meterconfig, nil
+}
+
+func NewMeterConfig() *MeterConfig {
+	obj := &MeterConfig{}
+	return obj
+}
+
+type MeterFeatures struct {
+	MaxMeter     uint32
+	BandTypes    uint32
+	Capabilities uint32
+	MaxBands     uint8
+	MaxColor     uint8
+}
+
+type IMeterFeatures interface {
+	goloxi.Serializable
+	GetMaxMeter() uint32
+	GetBandTypes() uint32
+	GetCapabilities() uint32
+	GetMaxBands() uint8
+	GetMaxColor() uint8
+}
+
+func (self *MeterFeatures) GetMaxMeter() uint32 {
+	return self.MaxMeter
+}
+
+func (self *MeterFeatures) SetMaxMeter(v uint32) {
+	self.MaxMeter = v
+}
+
+func (self *MeterFeatures) GetBandTypes() uint32 {
+	return self.BandTypes
+}
+
+func (self *MeterFeatures) SetBandTypes(v uint32) {
+	self.BandTypes = v
+}
+
+func (self *MeterFeatures) GetCapabilities() uint32 {
+	return self.Capabilities
+}
+
+func (self *MeterFeatures) SetCapabilities(v uint32) {
+	self.Capabilities = v
+}
+
+func (self *MeterFeatures) GetMaxBands() uint8 {
+	return self.MaxBands
+}
+
+func (self *MeterFeatures) SetMaxBands(v uint8) {
+	self.MaxBands = v
+}
+
+func (self *MeterFeatures) GetMaxColor() uint8 {
+	return self.MaxColor
+}
+
+func (self *MeterFeatures) SetMaxColor(v uint8) {
+	self.MaxColor = v
+}
+
+func (self *MeterFeatures) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint32(uint32(self.MaxMeter))
+	encoder.PutUint32(uint32(self.BandTypes))
+	encoder.PutUint32(uint32(self.Capabilities))
+	encoder.PutUint8(uint8(self.MaxBands))
+	encoder.PutUint8(uint8(self.MaxColor))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+
+	return nil
+}
+func (self *MeterFeatures) Decode(decoder *goloxi.Decoder) error {
+	if decoder.Length() < 16 {
+		return fmt.Errorf("MeterFeatures packet too short: %d < 16", decoder.Length())
+	}
+
+	self.MaxMeter = uint32(decoder.ReadUint32())
+	self.BandTypes = uint32(decoder.ReadUint32())
+	self.Capabilities = uint32(decoder.ReadUint32())
+	self.MaxBands = uint8(decoder.ReadByte())
+	self.MaxColor = uint8(decoder.ReadByte())
+	decoder.Skip(2)
+
+	return nil
+}
+
+func NewMeterFeatures() *MeterFeatures {
+	obj := &MeterFeatures{}
+	return obj
+}
+
+type MeterStats struct {
+	MeterId       uint32
+	Len           uint16
+	FlowCount     uint32
+	PacketInCount uint64
+	ByteInCount   uint64
+	DurationSec   uint32
+	DurationNsec  uint32
+	BandStats     []*MeterBandStats
+}
+
+type IMeterStats interface {
+	goloxi.Serializable
+	GetMeterId() uint32
+	GetLen() uint16
+	GetFlowCount() uint32
+	GetPacketInCount() uint64
+	GetByteInCount() uint64
+	GetDurationSec() uint32
+	GetDurationNsec() uint32
+	GetBandStats() []*MeterBandStats
+}
+
+func (self *MeterStats) GetMeterId() uint32 {
+	return self.MeterId
+}
+
+func (self *MeterStats) SetMeterId(v uint32) {
+	self.MeterId = v
+}
+
+func (self *MeterStats) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *MeterStats) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *MeterStats) GetFlowCount() uint32 {
+	return self.FlowCount
+}
+
+func (self *MeterStats) SetFlowCount(v uint32) {
+	self.FlowCount = v
+}
+
+func (self *MeterStats) GetPacketInCount() uint64 {
+	return self.PacketInCount
+}
+
+func (self *MeterStats) SetPacketInCount(v uint64) {
+	self.PacketInCount = v
+}
+
+func (self *MeterStats) GetByteInCount() uint64 {
+	return self.ByteInCount
+}
+
+func (self *MeterStats) SetByteInCount(v uint64) {
+	self.ByteInCount = v
+}
+
+func (self *MeterStats) GetDurationSec() uint32 {
+	return self.DurationSec
+}
+
+func (self *MeterStats) SetDurationSec(v uint32) {
+	self.DurationSec = v
+}
+
+func (self *MeterStats) GetDurationNsec() uint32 {
+	return self.DurationNsec
+}
+
+func (self *MeterStats) SetDurationNsec(v uint32) {
+	self.DurationNsec = v
+}
+
+func (self *MeterStats) GetBandStats() []*MeterBandStats {
+	return self.BandStats
+}
+
+func (self *MeterStats) SetBandStats(v []*MeterBandStats) {
+	self.BandStats = v
+}
+
+func (self *MeterStats) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint32(uint32(self.MeterId))
+	encoder.PutUint16(uint16(self.Len))
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+	encoder.PutUint32(uint32(self.FlowCount))
+	encoder.PutUint64(uint64(self.PacketInCount))
+	encoder.PutUint64(uint64(self.ByteInCount))
+	encoder.PutUint32(uint32(self.DurationSec))
+	encoder.PutUint32(uint32(self.DurationNsec))
+	for _, obj := range self.BandStats {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[4:6], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterStats(decoder *goloxi.Decoder) (*MeterStats, error) {
+	_meterstats := &MeterStats{}
+	if decoder.Length() < 40 {
+		return nil, fmt.Errorf("MeterStats packet too short: %d < 40", decoder.Length())
+	}
+	_meterstats.MeterId = uint32(decoder.ReadUint32())
+	_meterstats.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_meterstats.Len), 2+4)
+	decoder.Skip(6)
+	_meterstats.FlowCount = uint32(decoder.ReadUint32())
+	_meterstats.PacketInCount = uint64(decoder.ReadUint64())
+	_meterstats.ByteInCount = uint64(decoder.ReadUint64())
+	_meterstats.DurationSec = uint32(decoder.ReadUint32())
+	_meterstats.DurationNsec = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 16 {
+		item, err := DecodeMeterBandStats(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_meterstats.BandStats = append(_meterstats.BandStats, item)
+		}
+	}
+	return _meterstats, nil
+}
+
+func NewMeterStats() *MeterStats {
+	obj := &MeterStats{}
+	return obj
+}
+
+type NiciraMatch struct {
+	NxmEntries []goloxi.IOxm
+}
+
+type INiciraMatch interface {
+	goloxi.Serializable
+	GetNxmEntries() []goloxi.IOxm
+}
+
+func (self *NiciraMatch) GetNxmEntries() []goloxi.IOxm {
+	return self.NxmEntries
+}
+
+func (self *NiciraMatch) SetNxmEntries(v []goloxi.IOxm) {
+	self.NxmEntries = v
+}
+
+func (self *NiciraMatch) Serialize(encoder *goloxi.Encoder) error {
+
+	for _, obj := range self.NxmEntries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	return nil
+}
+func (self *NiciraMatch) Decode(decoder *goloxi.Decoder) error {
+
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeOxm(decoder)
+		if err != nil {
+			return err
+		}
+		if item != nil {
+			self.NxmEntries = append(self.NxmEntries, item)
+		}
+	}
+
+	return nil
+}
+
+func NewNiciraMatch() *NiciraMatch {
+	obj := &NiciraMatch{}
+	return obj
+}
+
+type NiciraFlowStats struct {
+	Length       uint16
+	TableId      uint8
+	DurationSec  uint32
+	DurationNsec uint32
+	Priority     uint16
+	IdleTimeout  uint16
+	HardTimeout  uint16
+	MatchLen     uint16
+	IdleAge      uint16
+	HardAge      uint16
+	Cookie       uint64
+	PacketCount  uint64
+	ByteCount    uint64
+	Match        NiciraMatch
+	Actions      []goloxi.IAction
+}
+
+type INiciraFlowStats interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetTableId() uint8
+	GetDurationSec() uint32
+	GetDurationNsec() uint32
+	GetPriority() uint16
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetMatchLen() uint16
+	GetIdleAge() uint16
+	GetHardAge() uint16
+	GetCookie() uint64
+	GetPacketCount() uint64
+	GetByteCount() uint64
+	GetMatch() NiciraMatch
+	GetActions() []goloxi.IAction
+}
+
+func (self *NiciraFlowStats) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *NiciraFlowStats) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *NiciraFlowStats) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *NiciraFlowStats) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *NiciraFlowStats) GetDurationSec() uint32 {
+	return self.DurationSec
+}
+
+func (self *NiciraFlowStats) SetDurationSec(v uint32) {
+	self.DurationSec = v
+}
+
+func (self *NiciraFlowStats) GetDurationNsec() uint32 {
+	return self.DurationNsec
+}
+
+func (self *NiciraFlowStats) SetDurationNsec(v uint32) {
+	self.DurationNsec = v
+}
+
+func (self *NiciraFlowStats) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *NiciraFlowStats) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *NiciraFlowStats) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *NiciraFlowStats) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *NiciraFlowStats) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *NiciraFlowStats) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *NiciraFlowStats) GetMatchLen() uint16 {
+	return self.MatchLen
+}
+
+func (self *NiciraFlowStats) SetMatchLen(v uint16) {
+	self.MatchLen = v
+}
+
+func (self *NiciraFlowStats) GetIdleAge() uint16 {
+	return self.IdleAge
+}
+
+func (self *NiciraFlowStats) SetIdleAge(v uint16) {
+	self.IdleAge = v
+}
+
+func (self *NiciraFlowStats) GetHardAge() uint16 {
+	return self.HardAge
+}
+
+func (self *NiciraFlowStats) SetHardAge(v uint16) {
+	self.HardAge = v
+}
+
+func (self *NiciraFlowStats) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *NiciraFlowStats) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *NiciraFlowStats) GetPacketCount() uint64 {
+	return self.PacketCount
+}
+
+func (self *NiciraFlowStats) SetPacketCount(v uint64) {
+	self.PacketCount = v
+}
+
+func (self *NiciraFlowStats) GetByteCount() uint64 {
+	return self.ByteCount
+}
+
+func (self *NiciraFlowStats) SetByteCount(v uint64) {
+	self.ByteCount = v
+}
+
+func (self *NiciraFlowStats) GetMatch() NiciraMatch {
+	return self.Match
+}
+
+func (self *NiciraFlowStats) SetMatch(v NiciraMatch) {
+	self.Match = v
+}
+
+func (self *NiciraFlowStats) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *NiciraFlowStats) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *NiciraFlowStats) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint32(uint32(self.DurationSec))
+	encoder.PutUint32(uint32(self.DurationNsec))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.MatchLen))
+	encoder.PutUint16(uint16(self.IdleAge))
+	encoder.PutUint16(uint16(self.HardAge))
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint64(uint64(self.PacketCount))
+	encoder.PutUint64(uint64(self.ByteCount))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowStats(decoder *goloxi.Decoder) (*NiciraFlowStats, error) {
+	_niciraflowstats := &NiciraFlowStats{}
+	if decoder.Length() < 48 {
+		return nil, fmt.Errorf("NiciraFlowStats packet too short: %d < 48", decoder.Length())
+	}
+	_niciraflowstats.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_niciraflowstats.Length), 2+0)
+	_niciraflowstats.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_niciraflowstats.DurationSec = uint32(decoder.ReadUint32())
+	_niciraflowstats.DurationNsec = uint32(decoder.ReadUint32())
+	_niciraflowstats.Priority = uint16(decoder.ReadUint16())
+	_niciraflowstats.IdleTimeout = uint16(decoder.ReadUint16())
+	_niciraflowstats.HardTimeout = uint16(decoder.ReadUint16())
+	_niciraflowstats.MatchLen = uint16(decoder.ReadUint16())
+	_niciraflowstats.IdleAge = uint16(decoder.ReadUint16())
+	_niciraflowstats.HardAge = uint16(decoder.ReadUint16())
+	_niciraflowstats.Cookie = uint64(decoder.ReadUint64())
+	_niciraflowstats.PacketCount = uint64(decoder.ReadUint64())
+	_niciraflowstats.ByteCount = uint64(decoder.ReadUint64())
+	if err := _niciraflowstats.Match.Decode(decoder.SliceDecoder(int(_niciraflowstats.MatchLen), 0)); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_niciraflowstats.Actions = append(_niciraflowstats.Actions, item)
+		}
+	}
+	return _niciraflowstats, nil
+}
+
+func NewNiciraFlowStats() *NiciraFlowStats {
+	obj := &NiciraFlowStats{}
+	return obj
+}
+
+type NiciraFlowUpdateEvent struct {
+	Length uint16
+	Event  uint16
+}
+
+type INiciraFlowUpdateEvent interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetEvent() uint16
+}
+
+func (self *NiciraFlowUpdateEvent) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *NiciraFlowUpdateEvent) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *NiciraFlowUpdateEvent) GetEvent() uint16 {
+	return self.Event
+}
+
+func (self *NiciraFlowUpdateEvent) SetEvent(v uint16) {
+	self.Event = v
+}
+
+func (self *NiciraFlowUpdateEvent) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint16(uint16(self.Event))
+
+	return nil
+}
+
+func DecodeNiciraFlowUpdateEvent(decoder *goloxi.Decoder) (INiciraFlowUpdateEvent, error) {
+	_niciraflowupdateevent := &NiciraFlowUpdateEvent{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NiciraFlowUpdateEvent packet too short: %d < 4", decoder.Length())
+	}
+	_niciraflowupdateevent.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_niciraflowupdateevent.Length), 2+0)
+	_niciraflowupdateevent.Event = uint16(decoder.ReadUint16())
+
+	switch _niciraflowupdateevent.Event {
+	case 0:
+		return DecodeNiciraFlowUpdateFullAdd(_niciraflowupdateevent, decoder)
+	case 1:
+		return DecodeNiciraFlowUpdateFullDeleted(_niciraflowupdateevent, decoder)
+	case 2:
+		return DecodeNiciraFlowUpdateFullModified(_niciraflowupdateevent, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'NiciraFlowUpdateEvent'", _niciraflowupdateevent.Event)
+	}
+}
+
+func NewNiciraFlowUpdateEvent(_event uint16) *NiciraFlowUpdateEvent {
+	obj := &NiciraFlowUpdateEvent{}
+	obj.Event = _event
+	return obj
+}
+
+type NiciraFlowUpdateFullAdd struct {
+	*NiciraFlowUpdateEvent
+	Reason      uint16
+	Priority    uint16
+	IdleTimeout uint16
+	HardTimeout uint16
+	MatchLen    uint16
+	TableId     uint8
+	Cookie      uint64
+	Match       NiciraMatch
+	Actions     []goloxi.IAction
+}
+
+type INiciraFlowUpdateFullAdd interface {
+	INiciraFlowUpdateEvent
+	GetReason() uint16
+	GetPriority() uint16
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetMatchLen() uint16
+	GetTableId() uint8
+	GetCookie() uint64
+	GetMatch() NiciraMatch
+	GetActions() []goloxi.IAction
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetReason() uint16 {
+	return self.Reason
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetReason(v uint16) {
+	self.Reason = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetMatchLen() uint16 {
+	return self.MatchLen
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetMatchLen(v uint16) {
+	self.MatchLen = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetMatch() NiciraMatch {
+	return self.Match
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetMatch(v NiciraMatch) {
+	self.Match = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *NiciraFlowUpdateFullAdd) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *NiciraFlowUpdateFullAdd) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.NiciraFlowUpdateEvent.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Reason))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.MatchLen))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint64(uint64(self.Cookie))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowUpdateFullAdd(parent *NiciraFlowUpdateEvent, decoder *goloxi.Decoder) (*NiciraFlowUpdateFullAdd, error) {
+	_niciraflowupdatefulladd := &NiciraFlowUpdateFullAdd{NiciraFlowUpdateEvent: parent}
+	if decoder.Length() < 20 {
+		return nil, fmt.Errorf("NiciraFlowUpdateFullAdd packet too short: %d < 20", decoder.Length())
+	}
+	_niciraflowupdatefulladd.Reason = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulladd.Priority = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulladd.IdleTimeout = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulladd.HardTimeout = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulladd.MatchLen = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulladd.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_niciraflowupdatefulladd.Cookie = uint64(decoder.ReadUint64())
+	if err := _niciraflowupdatefulladd.Match.Decode(decoder.SliceDecoder(int(_niciraflowupdatefulladd.MatchLen), 0)); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_niciraflowupdatefulladd.Actions = append(_niciraflowupdatefulladd.Actions, item)
+		}
+	}
+	return _niciraflowupdatefulladd, nil
+}
+
+func NewNiciraFlowUpdateFullAdd() *NiciraFlowUpdateFullAdd {
+	obj := &NiciraFlowUpdateFullAdd{
+		NiciraFlowUpdateEvent: NewNiciraFlowUpdateEvent(0),
+	}
+	return obj
+}
+
+type NiciraFlowUpdateFullDeleted struct {
+	*NiciraFlowUpdateEvent
+	Reason      uint16
+	Priority    uint16
+	IdleTimeout uint16
+	HardTimeout uint16
+	MatchLen    uint16
+	TableId     uint8
+	Cookie      uint64
+	Match       NiciraMatch
+	Actions     []goloxi.IAction
+}
+
+type INiciraFlowUpdateFullDeleted interface {
+	INiciraFlowUpdateEvent
+	GetReason() uint16
+	GetPriority() uint16
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetMatchLen() uint16
+	GetTableId() uint8
+	GetCookie() uint64
+	GetMatch() NiciraMatch
+	GetActions() []goloxi.IAction
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetReason() uint16 {
+	return self.Reason
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetReason(v uint16) {
+	self.Reason = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetMatchLen() uint16 {
+	return self.MatchLen
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetMatchLen(v uint16) {
+	self.MatchLen = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetMatch() NiciraMatch {
+	return self.Match
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetMatch(v NiciraMatch) {
+	self.Match = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *NiciraFlowUpdateFullDeleted) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *NiciraFlowUpdateFullDeleted) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.NiciraFlowUpdateEvent.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Reason))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.MatchLen))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint64(uint64(self.Cookie))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowUpdateFullDeleted(parent *NiciraFlowUpdateEvent, decoder *goloxi.Decoder) (*NiciraFlowUpdateFullDeleted, error) {
+	_niciraflowupdatefulldeleted := &NiciraFlowUpdateFullDeleted{NiciraFlowUpdateEvent: parent}
+	if decoder.Length() < 20 {
+		return nil, fmt.Errorf("NiciraFlowUpdateFullDeleted packet too short: %d < 20", decoder.Length())
+	}
+	_niciraflowupdatefulldeleted.Reason = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulldeleted.Priority = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulldeleted.IdleTimeout = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulldeleted.HardTimeout = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulldeleted.MatchLen = uint16(decoder.ReadUint16())
+	_niciraflowupdatefulldeleted.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_niciraflowupdatefulldeleted.Cookie = uint64(decoder.ReadUint64())
+	if err := _niciraflowupdatefulldeleted.Match.Decode(decoder.SliceDecoder(int(_niciraflowupdatefulldeleted.MatchLen), 0)); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_niciraflowupdatefulldeleted.Actions = append(_niciraflowupdatefulldeleted.Actions, item)
+		}
+	}
+	return _niciraflowupdatefulldeleted, nil
+}
+
+func NewNiciraFlowUpdateFullDeleted() *NiciraFlowUpdateFullDeleted {
+	obj := &NiciraFlowUpdateFullDeleted{
+		NiciraFlowUpdateEvent: NewNiciraFlowUpdateEvent(1),
+	}
+	return obj
+}
+
+type NiciraFlowUpdateFullModified struct {
+	*NiciraFlowUpdateEvent
+	Reason      uint16
+	Priority    uint16
+	IdleTimeout uint16
+	HardTimeout uint16
+	MatchLen    uint16
+	TableId     uint8
+	Cookie      uint64
+	Match       NiciraMatch
+	Actions     []goloxi.IAction
+}
+
+type INiciraFlowUpdateFullModified interface {
+	INiciraFlowUpdateEvent
+	GetReason() uint16
+	GetPriority() uint16
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetMatchLen() uint16
+	GetTableId() uint8
+	GetCookie() uint64
+	GetMatch() NiciraMatch
+	GetActions() []goloxi.IAction
+}
+
+func (self *NiciraFlowUpdateFullModified) GetReason() uint16 {
+	return self.Reason
+}
+
+func (self *NiciraFlowUpdateFullModified) SetReason(v uint16) {
+	self.Reason = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *NiciraFlowUpdateFullModified) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *NiciraFlowUpdateFullModified) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *NiciraFlowUpdateFullModified) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetMatchLen() uint16 {
+	return self.MatchLen
+}
+
+func (self *NiciraFlowUpdateFullModified) SetMatchLen(v uint16) {
+	self.MatchLen = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *NiciraFlowUpdateFullModified) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *NiciraFlowUpdateFullModified) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetMatch() NiciraMatch {
+	return self.Match
+}
+
+func (self *NiciraFlowUpdateFullModified) SetMatch(v NiciraMatch) {
+	self.Match = v
+}
+
+func (self *NiciraFlowUpdateFullModified) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *NiciraFlowUpdateFullModified) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *NiciraFlowUpdateFullModified) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.NiciraFlowUpdateEvent.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Reason))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.MatchLen))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint64(uint64(self.Cookie))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowUpdateFullModified(parent *NiciraFlowUpdateEvent, decoder *goloxi.Decoder) (*NiciraFlowUpdateFullModified, error) {
+	_niciraflowupdatefullmodified := &NiciraFlowUpdateFullModified{NiciraFlowUpdateEvent: parent}
+	if decoder.Length() < 20 {
+		return nil, fmt.Errorf("NiciraFlowUpdateFullModified packet too short: %d < 20", decoder.Length())
+	}
+	_niciraflowupdatefullmodified.Reason = uint16(decoder.ReadUint16())
+	_niciraflowupdatefullmodified.Priority = uint16(decoder.ReadUint16())
+	_niciraflowupdatefullmodified.IdleTimeout = uint16(decoder.ReadUint16())
+	_niciraflowupdatefullmodified.HardTimeout = uint16(decoder.ReadUint16())
+	_niciraflowupdatefullmodified.MatchLen = uint16(decoder.ReadUint16())
+	_niciraflowupdatefullmodified.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_niciraflowupdatefullmodified.Cookie = uint64(decoder.ReadUint64())
+	if err := _niciraflowupdatefullmodified.Match.Decode(decoder.SliceDecoder(int(_niciraflowupdatefullmodified.MatchLen), 0)); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_niciraflowupdatefullmodified.Actions = append(_niciraflowupdatefullmodified.Actions, item)
+		}
+	}
+	return _niciraflowupdatefullmodified, nil
+}
+
+func NewNiciraFlowUpdateFullModified() *NiciraFlowUpdateFullModified {
+	obj := &NiciraFlowUpdateFullModified{
+		NiciraFlowUpdateEvent: NewNiciraFlowUpdateEvent(2),
+	}
+	return obj
+}
+
+type OxmIdArpOp struct {
+	*OxmId
+}
+
+type IOxmIdArpOp interface {
+	IOxmId
+}
+
+func (self *OxmIdArpOp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpOp(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpOp, error) {
+	_oxmidarpop := &OxmIdArpOp{OxmId: parent}
+	return _oxmidarpop, nil
+}
+
+func NewOxmIdArpOp() *OxmIdArpOp {
+	obj := &OxmIdArpOp{
+		OxmId: NewOxmId(7682),
+	}
+	return obj
+}
+func (self *OxmIdArpOp) GetOXMName() string {
+	return "arp_op"
+}
+
+func (self *OxmIdArpOp) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpSha struct {
+	*OxmId
+}
+
+type IOxmIdArpSha interface {
+	IOxmId
+}
+
+func (self *OxmIdArpSha) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpSha(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpSha, error) {
+	_oxmidarpsha := &OxmIdArpSha{OxmId: parent}
+	return _oxmidarpsha, nil
+}
+
+func NewOxmIdArpSha() *OxmIdArpSha {
+	obj := &OxmIdArpSha{
+		OxmId: NewOxmId(74246),
+	}
+	return obj
+}
+func (self *OxmIdArpSha) GetOXMName() string {
+	return "arp_sha"
+}
+
+func (self *OxmIdArpSha) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpShaMasked struct {
+	*OxmId
+}
+
+type IOxmIdArpShaMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdArpShaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpShaMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpShaMasked, error) {
+	_oxmidarpshamasked := &OxmIdArpShaMasked{OxmId: parent}
+	return _oxmidarpshamasked, nil
+}
+
+func NewOxmIdArpShaMasked() *OxmIdArpShaMasked {
+	obj := &OxmIdArpShaMasked{
+		OxmId: NewOxmId(74507),
+	}
+	return obj
+}
+func (self *OxmIdArpShaMasked) GetOXMName() string {
+	return "arp_sha_masked"
+}
+
+func (self *OxmIdArpShaMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpSpa struct {
+	*OxmId
+}
+
+type IOxmIdArpSpa interface {
+	IOxmId
+}
+
+func (self *OxmIdArpSpa) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpSpa(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpSpa, error) {
+	_oxmidarpspa := &OxmIdArpSpa{OxmId: parent}
+	return _oxmidarpspa, nil
+}
+
+func NewOxmIdArpSpa() *OxmIdArpSpa {
+	obj := &OxmIdArpSpa{
+		OxmId: NewOxmId(8196),
+	}
+	return obj
+}
+func (self *OxmIdArpSpa) GetOXMName() string {
+	return "arp_spa"
+}
+
+func (self *OxmIdArpSpa) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpSpaMasked struct {
+	*OxmId
+}
+
+type IOxmIdArpSpaMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdArpSpaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpSpaMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpSpaMasked, error) {
+	_oxmidarpspamasked := &OxmIdArpSpaMasked{OxmId: parent}
+	return _oxmidarpspamasked, nil
+}
+
+func NewOxmIdArpSpaMasked() *OxmIdArpSpaMasked {
+	obj := &OxmIdArpSpaMasked{
+		OxmId: NewOxmId(8452),
+	}
+	return obj
+}
+func (self *OxmIdArpSpaMasked) GetOXMName() string {
+	return "arp_spa_masked"
+}
+
+func (self *OxmIdArpSpaMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpTha struct {
+	*OxmId
+}
+
+type IOxmIdArpTha interface {
+	IOxmId
+}
+
+func (self *OxmIdArpTha) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpTha(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpTha, error) {
+	_oxmidarptha := &OxmIdArpTha{OxmId: parent}
+	return _oxmidarptha, nil
+}
+
+func NewOxmIdArpTha() *OxmIdArpTha {
+	obj := &OxmIdArpTha{
+		OxmId: NewOxmId(74758),
+	}
+	return obj
+}
+func (self *OxmIdArpTha) GetOXMName() string {
+	return "arp_tha"
+}
+
+func (self *OxmIdArpTha) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpThaMasked struct {
+	*OxmId
+}
+
+type IOxmIdArpThaMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdArpThaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpThaMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpThaMasked, error) {
+	_oxmidarpthamasked := &OxmIdArpThaMasked{OxmId: parent}
+	return _oxmidarpthamasked, nil
+}
+
+func NewOxmIdArpThaMasked() *OxmIdArpThaMasked {
+	obj := &OxmIdArpThaMasked{
+		OxmId: NewOxmId(75019),
+	}
+	return obj
+}
+func (self *OxmIdArpThaMasked) GetOXMName() string {
+	return "arp_tha_masked"
+}
+
+func (self *OxmIdArpThaMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpTpa struct {
+	*OxmId
+}
+
+type IOxmIdArpTpa interface {
+	IOxmId
+}
+
+func (self *OxmIdArpTpa) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpTpa(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpTpa, error) {
+	_oxmidarptpa := &OxmIdArpTpa{OxmId: parent}
+	return _oxmidarptpa, nil
+}
+
+func NewOxmIdArpTpa() *OxmIdArpTpa {
+	obj := &OxmIdArpTpa{
+		OxmId: NewOxmId(8708),
+	}
+	return obj
+}
+func (self *OxmIdArpTpa) GetOXMName() string {
+	return "arp_tpa"
+}
+
+func (self *OxmIdArpTpa) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpTpaMasked struct {
+	*OxmId
+}
+
+type IOxmIdArpTpaMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdArpTpaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpTpaMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpTpaMasked, error) {
+	_oxmidarptpamasked := &OxmIdArpTpaMasked{OxmId: parent}
+	return _oxmidarptpamasked, nil
+}
+
+func NewOxmIdArpTpaMasked() *OxmIdArpTpaMasked {
+	obj := &OxmIdArpTpaMasked{
+		OxmId: NewOxmId(8968),
+	}
+	return obj
+}
+func (self *OxmIdArpTpaMasked) GetOXMName() string {
+	return "arp_tpa_masked"
+}
+
+func (self *OxmIdArpTpaMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConjId struct {
+	*OxmId
+}
+
+type IOxmIdConjId interface {
+	IOxmId
+}
+
+func (self *OxmIdConjId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConjId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConjId, error) {
+	_oxmidconjid := &OxmIdConjId{OxmId: parent}
+	return _oxmidconjid, nil
+}
+
+func NewOxmIdConjId() *OxmIdConjId {
+	obj := &OxmIdConjId{
+		OxmId: NewOxmId(84484),
+	}
+	return obj
+}
+func (self *OxmIdConjId) GetOXMName() string {
+	return "conj_id"
+}
+
+func (self *OxmIdConjId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtIpv6Dst struct {
+	*OxmId
+}
+
+type IOxmIdCtIpv6Dst interface {
+	IOxmId
+}
+
+func (self *OxmIdCtIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtIpv6Dst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtIpv6Dst, error) {
+	_oxmidctipv6dst := &OxmIdCtIpv6Dst{OxmId: parent}
+	return _oxmidctipv6dst, nil
+}
+
+func NewOxmIdCtIpv6Dst() *OxmIdCtIpv6Dst {
+	obj := &OxmIdCtIpv6Dst{
+		OxmId: NewOxmId(128528),
+	}
+	return obj
+}
+func (self *OxmIdCtIpv6Dst) GetOXMName() string {
+	return "ct_ipv6_dst"
+}
+
+func (self *OxmIdCtIpv6Dst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtIpv6DstMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtIpv6DstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtIpv6DstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtIpv6DstMasked, error) {
+	_oxmidctipv6dstmasked := &OxmIdCtIpv6DstMasked{OxmId: parent}
+	return _oxmidctipv6dstmasked, nil
+}
+
+func NewOxmIdCtIpv6DstMasked() *OxmIdCtIpv6DstMasked {
+	obj := &OxmIdCtIpv6DstMasked{
+		OxmId: NewOxmId(128800),
+	}
+	return obj
+}
+func (self *OxmIdCtIpv6DstMasked) GetOXMName() string {
+	return "ct_ipv6_dst_masked"
+}
+
+func (self *OxmIdCtIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtIpv6Src struct {
+	*OxmId
+}
+
+type IOxmIdCtIpv6Src interface {
+	IOxmId
+}
+
+func (self *OxmIdCtIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtIpv6Src(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtIpv6Src, error) {
+	_oxmidctipv6src := &OxmIdCtIpv6Src{OxmId: parent}
+	return _oxmidctipv6src, nil
+}
+
+func NewOxmIdCtIpv6Src() *OxmIdCtIpv6Src {
+	obj := &OxmIdCtIpv6Src{
+		OxmId: NewOxmId(128016),
+	}
+	return obj
+}
+func (self *OxmIdCtIpv6Src) GetOXMName() string {
+	return "ct_ipv6_src"
+}
+
+func (self *OxmIdCtIpv6Src) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtIpv6SrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtIpv6SrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtIpv6SrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtIpv6SrcMasked, error) {
+	_oxmidctipv6srcmasked := &OxmIdCtIpv6SrcMasked{OxmId: parent}
+	return _oxmidctipv6srcmasked, nil
+}
+
+func NewOxmIdCtIpv6SrcMasked() *OxmIdCtIpv6SrcMasked {
+	obj := &OxmIdCtIpv6SrcMasked{
+		OxmId: NewOxmId(128288),
+	}
+	return obj
+}
+func (self *OxmIdCtIpv6SrcMasked) GetOXMName() string {
+	return "ct_ipv6_src_masked"
+}
+
+func (self *OxmIdCtIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtLabel struct {
+	*OxmId
+}
+
+type IOxmIdCtLabel interface {
+	IOxmId
+}
+
+func (self *OxmIdCtLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtLabel(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtLabel, error) {
+	_oxmidctlabel := &OxmIdCtLabel{OxmId: parent}
+	return _oxmidctlabel, nil
+}
+
+func NewOxmIdCtLabel() *OxmIdCtLabel {
+	obj := &OxmIdCtLabel{
+		OxmId: NewOxmId(120848),
+	}
+	return obj
+}
+func (self *OxmIdCtLabel) GetOXMName() string {
+	return "ct_label"
+}
+
+func (self *OxmIdCtLabel) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtLabelMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtLabelMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtLabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtLabelMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtLabelMasked, error) {
+	_oxmidctlabelmasked := &OxmIdCtLabelMasked{OxmId: parent}
+	return _oxmidctlabelmasked, nil
+}
+
+func NewOxmIdCtLabelMasked() *OxmIdCtLabelMasked {
+	obj := &OxmIdCtLabelMasked{
+		OxmId: NewOxmId(121120),
+	}
+	return obj
+}
+func (self *OxmIdCtLabelMasked) GetOXMName() string {
+	return "ct_label_masked"
+}
+
+func (self *OxmIdCtLabelMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtMark struct {
+	*OxmId
+}
+
+type IOxmIdCtMark interface {
+	IOxmId
+}
+
+func (self *OxmIdCtMark) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtMark(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtMark, error) {
+	_oxmidctmark := &OxmIdCtMark{OxmId: parent}
+	return _oxmidctmark, nil
+}
+
+func NewOxmIdCtMark() *OxmIdCtMark {
+	obj := &OxmIdCtMark{
+		OxmId: NewOxmId(120324),
+	}
+	return obj
+}
+func (self *OxmIdCtMark) GetOXMName() string {
+	return "ct_mark"
+}
+
+func (self *OxmIdCtMark) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtMarkMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtMarkMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtMarkMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtMarkMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtMarkMasked, error) {
+	_oxmidctmarkmasked := &OxmIdCtMarkMasked{OxmId: parent}
+	return _oxmidctmarkmasked, nil
+}
+
+func NewOxmIdCtMarkMasked() *OxmIdCtMarkMasked {
+	obj := &OxmIdCtMarkMasked{
+		OxmId: NewOxmId(120584),
+	}
+	return obj
+}
+func (self *OxmIdCtMarkMasked) GetOXMName() string {
+	return "ct_mark_masked"
+}
+
+func (self *OxmIdCtMarkMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtNwDst struct {
+	*OxmId
+}
+
+type IOxmIdCtNwDst interface {
+	IOxmId
+}
+
+func (self *OxmIdCtNwDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtNwDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtNwDst, error) {
+	_oxmidctnwdst := &OxmIdCtNwDst{OxmId: parent}
+	return _oxmidctnwdst, nil
+}
+
+func NewOxmIdCtNwDst() *OxmIdCtNwDst {
+	obj := &OxmIdCtNwDst{
+		OxmId: NewOxmId(127492),
+	}
+	return obj
+}
+func (self *OxmIdCtNwDst) GetOXMName() string {
+	return "ct_nw_dst"
+}
+
+func (self *OxmIdCtNwDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtNwDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtNwDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtNwDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtNwDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtNwDstMasked, error) {
+	_oxmidctnwdstmasked := &OxmIdCtNwDstMasked{OxmId: parent}
+	return _oxmidctnwdstmasked, nil
+}
+
+func NewOxmIdCtNwDstMasked() *OxmIdCtNwDstMasked {
+	obj := &OxmIdCtNwDstMasked{
+		OxmId: NewOxmId(127752),
+	}
+	return obj
+}
+func (self *OxmIdCtNwDstMasked) GetOXMName() string {
+	return "ct_nw_dst_masked"
+}
+
+func (self *OxmIdCtNwDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtNwProto struct {
+	*OxmId
+}
+
+type IOxmIdCtNwProto interface {
+	IOxmId
+}
+
+func (self *OxmIdCtNwProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtNwProto(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtNwProto, error) {
+	_oxmidctnwproto := &OxmIdCtNwProto{OxmId: parent}
+	return _oxmidctnwproto, nil
+}
+
+func NewOxmIdCtNwProto() *OxmIdCtNwProto {
+	obj := &OxmIdCtNwProto{
+		OxmId: NewOxmId(126465),
+	}
+	return obj
+}
+func (self *OxmIdCtNwProto) GetOXMName() string {
+	return "ct_nw_proto"
+}
+
+func (self *OxmIdCtNwProto) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtNwSrc struct {
+	*OxmId
+}
+
+type IOxmIdCtNwSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdCtNwSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtNwSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtNwSrc, error) {
+	_oxmidctnwsrc := &OxmIdCtNwSrc{OxmId: parent}
+	return _oxmidctnwsrc, nil
+}
+
+func NewOxmIdCtNwSrc() *OxmIdCtNwSrc {
+	obj := &OxmIdCtNwSrc{
+		OxmId: NewOxmId(126980),
+	}
+	return obj
+}
+func (self *OxmIdCtNwSrc) GetOXMName() string {
+	return "ct_nw_src"
+}
+
+func (self *OxmIdCtNwSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtNwSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtNwSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtNwSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtNwSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtNwSrcMasked, error) {
+	_oxmidctnwsrcmasked := &OxmIdCtNwSrcMasked{OxmId: parent}
+	return _oxmidctnwsrcmasked, nil
+}
+
+func NewOxmIdCtNwSrcMasked() *OxmIdCtNwSrcMasked {
+	obj := &OxmIdCtNwSrcMasked{
+		OxmId: NewOxmId(127240),
+	}
+	return obj
+}
+func (self *OxmIdCtNwSrcMasked) GetOXMName() string {
+	return "ct_nw_src_masked"
+}
+
+func (self *OxmIdCtNwSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtState struct {
+	*OxmId
+}
+
+type IOxmIdCtState interface {
+	IOxmId
+}
+
+func (self *OxmIdCtState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtState(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtState, error) {
+	_oxmidctstate := &OxmIdCtState{OxmId: parent}
+	return _oxmidctstate, nil
+}
+
+func NewOxmIdCtState() *OxmIdCtState {
+	obj := &OxmIdCtState{
+		OxmId: NewOxmId(119300),
+	}
+	return obj
+}
+func (self *OxmIdCtState) GetOXMName() string {
+	return "ct_state"
+}
+
+func (self *OxmIdCtState) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtStateMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtStateMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtStateMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtStateMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtStateMasked, error) {
+	_oxmidctstatemasked := &OxmIdCtStateMasked{OxmId: parent}
+	return _oxmidctstatemasked, nil
+}
+
+func NewOxmIdCtStateMasked() *OxmIdCtStateMasked {
+	obj := &OxmIdCtStateMasked{
+		OxmId: NewOxmId(119560),
+	}
+	return obj
+}
+func (self *OxmIdCtStateMasked) GetOXMName() string {
+	return "ct_state_masked"
+}
+
+func (self *OxmIdCtStateMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtTpDst struct {
+	*OxmId
+}
+
+type IOxmIdCtTpDst interface {
+	IOxmId
+}
+
+func (self *OxmIdCtTpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtTpDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtTpDst, error) {
+	_oxmidcttpdst := &OxmIdCtTpDst{OxmId: parent}
+	return _oxmidcttpdst, nil
+}
+
+func NewOxmIdCtTpDst() *OxmIdCtTpDst {
+	obj := &OxmIdCtTpDst{
+		OxmId: NewOxmId(129538),
+	}
+	return obj
+}
+func (self *OxmIdCtTpDst) GetOXMName() string {
+	return "ct_tp_dst"
+}
+
+func (self *OxmIdCtTpDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtTpDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtTpDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtTpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtTpDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtTpDstMasked, error) {
+	_oxmidcttpdstmasked := &OxmIdCtTpDstMasked{OxmId: parent}
+	return _oxmidcttpdstmasked, nil
+}
+
+func NewOxmIdCtTpDstMasked() *OxmIdCtTpDstMasked {
+	obj := &OxmIdCtTpDstMasked{
+		OxmId: NewOxmId(129796),
+	}
+	return obj
+}
+func (self *OxmIdCtTpDstMasked) GetOXMName() string {
+	return "ct_tp_dst_masked"
+}
+
+func (self *OxmIdCtTpDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtTpSrc struct {
+	*OxmId
+}
+
+type IOxmIdCtTpSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdCtTpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtTpSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtTpSrc, error) {
+	_oxmidcttpsrc := &OxmIdCtTpSrc{OxmId: parent}
+	return _oxmidcttpsrc, nil
+}
+
+func NewOxmIdCtTpSrc() *OxmIdCtTpSrc {
+	obj := &OxmIdCtTpSrc{
+		OxmId: NewOxmId(129026),
+	}
+	return obj
+}
+func (self *OxmIdCtTpSrc) GetOXMName() string {
+	return "ct_tp_src"
+}
+
+func (self *OxmIdCtTpSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtTpSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdCtTpSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdCtTpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtTpSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtTpSrcMasked, error) {
+	_oxmidcttpsrcmasked := &OxmIdCtTpSrcMasked{OxmId: parent}
+	return _oxmidcttpsrcmasked, nil
+}
+
+func NewOxmIdCtTpSrcMasked() *OxmIdCtTpSrcMasked {
+	obj := &OxmIdCtTpSrcMasked{
+		OxmId: NewOxmId(129284),
+	}
+	return obj
+}
+func (self *OxmIdCtTpSrcMasked) GetOXMName() string {
+	return "ct_tp_src_masked"
+}
+
+func (self *OxmIdCtTpSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdCtZone struct {
+	*OxmId
+}
+
+type IOxmIdCtZone interface {
+	IOxmId
+}
+
+func (self *OxmIdCtZone) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdCtZone(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdCtZone, error) {
+	_oxmidctzone := &OxmIdCtZone{OxmId: parent}
+	return _oxmidctzone, nil
+}
+
+func NewOxmIdCtZone() *OxmIdCtZone {
+	obj := &OxmIdCtZone{
+		OxmId: NewOxmId(119810),
+	}
+	return obj
+}
+func (self *OxmIdCtZone) GetOXMName() string {
+	return "ct_zone"
+}
+
+func (self *OxmIdCtZone) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdDpHash struct {
+	*OxmId
+}
+
+type IOxmIdDpHash interface {
+	IOxmId
+}
+
+func (self *OxmIdDpHash) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdDpHash(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdDpHash, error) {
+	_oxmiddphash := &OxmIdDpHash{OxmId: parent}
+	return _oxmiddphash, nil
+}
+
+func NewOxmIdDpHash() *OxmIdDpHash {
+	obj := &OxmIdDpHash{
+		OxmId: NewOxmId(83460),
+	}
+	return obj
+}
+func (self *OxmIdDpHash) GetOXMName() string {
+	return "dp_hash"
+}
+
+func (self *OxmIdDpHash) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdDpHashMasked struct {
+	*OxmId
+}
+
+type IOxmIdDpHashMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdDpHashMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdDpHashMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdDpHashMasked, error) {
+	_oxmiddphashmasked := &OxmIdDpHashMasked{OxmId: parent}
+	return _oxmiddphashmasked, nil
+}
+
+func NewOxmIdDpHashMasked() *OxmIdDpHashMasked {
+	obj := &OxmIdDpHashMasked{
+		OxmId: NewOxmId(83720),
+	}
+	return obj
+}
+func (self *OxmIdDpHashMasked) GetOXMName() string {
+	return "dp_hash_masked"
+}
+
+func (self *OxmIdDpHashMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdEthDst struct {
+	*OxmId
+}
+
+type IOxmIdEthDst interface {
+	IOxmId
+}
+
+func (self *OxmIdEthDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdEthDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdEthDst, error) {
+	_oxmidethdst := &OxmIdEthDst{OxmId: parent}
+	return _oxmidethdst, nil
+}
+
+func NewOxmIdEthDst() *OxmIdEthDst {
+	obj := &OxmIdEthDst{
+		OxmId: NewOxmId(518),
+	}
+	return obj
+}
+func (self *OxmIdEthDst) GetOXMName() string {
+	return "eth_dst"
+}
+
+func (self *OxmIdEthDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdEthDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdEthDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdEthDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdEthDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdEthDstMasked, error) {
+	_oxmidethdstmasked := &OxmIdEthDstMasked{OxmId: parent}
+	return _oxmidethdstmasked, nil
+}
+
+func NewOxmIdEthDstMasked() *OxmIdEthDstMasked {
+	obj := &OxmIdEthDstMasked{
+		OxmId: NewOxmId(779),
+	}
+	return obj
+}
+func (self *OxmIdEthDstMasked) GetOXMName() string {
+	return "eth_dst_masked"
+}
+
+func (self *OxmIdEthDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdEthSrc struct {
+	*OxmId
+}
+
+type IOxmIdEthSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdEthSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdEthSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdEthSrc, error) {
+	_oxmidethsrc := &OxmIdEthSrc{OxmId: parent}
+	return _oxmidethsrc, nil
+}
+
+func NewOxmIdEthSrc() *OxmIdEthSrc {
+	obj := &OxmIdEthSrc{
+		OxmId: NewOxmId(1030),
+	}
+	return obj
+}
+func (self *OxmIdEthSrc) GetOXMName() string {
+	return "eth_src"
+}
+
+func (self *OxmIdEthSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdEthSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdEthSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdEthSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdEthSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdEthSrcMasked, error) {
+	_oxmidethsrcmasked := &OxmIdEthSrcMasked{OxmId: parent}
+	return _oxmidethsrcmasked, nil
+}
+
+func NewOxmIdEthSrcMasked() *OxmIdEthSrcMasked {
+	obj := &OxmIdEthSrcMasked{
+		OxmId: NewOxmId(1286),
+	}
+	return obj
+}
+func (self *OxmIdEthSrcMasked) GetOXMName() string {
+	return "eth_src_masked"
+}
+
+func (self *OxmIdEthSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdEthType struct {
+	*OxmId
+}
+
+type IOxmIdEthType interface {
+	IOxmId
+}
+
+func (self *OxmIdEthType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdEthType(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdEthType, error) {
+	_oxmidethtype := &OxmIdEthType{OxmId: parent}
+	return _oxmidethtype, nil
+}
+
+func NewOxmIdEthType() *OxmIdEthType {
+	obj := &OxmIdEthType{
+		OxmId: NewOxmId(1538),
+	}
+	return obj
+}
+func (self *OxmIdEthType) GetOXMName() string {
+	return "eth_type"
+}
+
+func (self *OxmIdEthType) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpCode struct {
+	*OxmId
+}
+
+type IOxmIdIcmpCode interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpCode) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpCode(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpCode, error) {
+	_oxmidicmpcode := &OxmIdIcmpCode{OxmId: parent}
+	return _oxmidicmpcode, nil
+}
+
+func NewOxmIdIcmpCode() *OxmIdIcmpCode {
+	obj := &OxmIdIcmpCode{
+		OxmId: NewOxmId(7169),
+	}
+	return obj
+}
+func (self *OxmIdIcmpCode) GetOXMName() string {
+	return "icmp_code"
+}
+
+func (self *OxmIdIcmpCode) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpType struct {
+	*OxmId
+}
+
+type IOxmIdIcmpType interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpType(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpType, error) {
+	_oxmidicmptype := &OxmIdIcmpType{OxmId: parent}
+	return _oxmidicmptype, nil
+}
+
+func NewOxmIdIcmpType() *OxmIdIcmpType {
+	obj := &OxmIdIcmpType{
+		OxmId: NewOxmId(6657),
+	}
+	return obj
+}
+func (self *OxmIdIcmpType) GetOXMName() string {
+	return "icmp_type"
+}
+
+func (self *OxmIdIcmpType) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv6Code struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv6Code interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv6Code) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv6Code(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv6Code, error) {
+	_oxmidicmpv6code := &OxmIdIcmpv6Code{OxmId: parent}
+	return _oxmidicmpv6code, nil
+}
+
+func NewOxmIdIcmpv6Code() *OxmIdIcmpv6Code {
+	obj := &OxmIdIcmpv6Code{
+		OxmId: NewOxmId(76801),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv6Code) GetOXMName() string {
+	return "icmpv6_code"
+}
+
+func (self *OxmIdIcmpv6Code) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv6Type struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv6Type interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv6Type) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv6Type(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv6Type, error) {
+	_oxmidicmpv6type := &OxmIdIcmpv6Type{OxmId: parent}
+	return _oxmidicmpv6type, nil
+}
+
+func NewOxmIdIcmpv6Type() *OxmIdIcmpv6Type {
+	obj := &OxmIdIcmpv6Type{
+		OxmId: NewOxmId(76289),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv6Type) GetOXMName() string {
+	return "icmpv6_type"
+}
+
+func (self *OxmIdIcmpv6Type) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdInPort struct {
+	*OxmId
+}
+
+type IOxmIdInPort interface {
+	IOxmId
+}
+
+func (self *OxmIdInPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdInPort(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdInPort, error) {
+	_oxmidinport := &OxmIdInPort{OxmId: parent}
+	return _oxmidinport, nil
+}
+
+func NewOxmIdInPort() *OxmIdInPort {
+	obj := &OxmIdInPort{
+		OxmId: NewOxmId(2),
+	}
+	return obj
+}
+func (self *OxmIdInPort) GetOXMName() string {
+	return "in_port"
+}
+
+func (self *OxmIdInPort) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpDst struct {
+	*OxmId
+}
+
+type IOxmIdIpDst interface {
+	IOxmId
+}
+
+func (self *OxmIdIpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpDst, error) {
+	_oxmidipdst := &OxmIdIpDst{OxmId: parent}
+	return _oxmidipdst, nil
+}
+
+func NewOxmIdIpDst() *OxmIdIpDst {
+	obj := &OxmIdIpDst{
+		OxmId: NewOxmId(4100),
+	}
+	return obj
+}
+func (self *OxmIdIpDst) GetOXMName() string {
+	return "ip_dst"
+}
+
+func (self *OxmIdIpDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpDstMasked, error) {
+	_oxmidipdstmasked := &OxmIdIpDstMasked{OxmId: parent}
+	return _oxmidipdstmasked, nil
+}
+
+func NewOxmIdIpDstMasked() *OxmIdIpDstMasked {
+	obj := &OxmIdIpDstMasked{
+		OxmId: NewOxmId(4360),
+	}
+	return obj
+}
+func (self *OxmIdIpDstMasked) GetOXMName() string {
+	return "ip_dst_masked"
+}
+
+func (self *OxmIdIpDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpFrag struct {
+	*OxmId
+}
+
+type IOxmIdIpFrag interface {
+	IOxmId
+}
+
+func (self *OxmIdIpFrag) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpFrag(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpFrag, error) {
+	_oxmidipfrag := &OxmIdIpFrag{OxmId: parent}
+	return _oxmidipfrag, nil
+}
+
+func NewOxmIdIpFrag() *OxmIdIpFrag {
+	obj := &OxmIdIpFrag{
+		OxmId: NewOxmId(78849),
+	}
+	return obj
+}
+func (self *OxmIdIpFrag) GetOXMName() string {
+	return "ip_frag"
+}
+
+func (self *OxmIdIpFrag) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpFragMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpFragMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpFragMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpFragMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpFragMasked, error) {
+	_oxmidipfragmasked := &OxmIdIpFragMasked{OxmId: parent}
+	return _oxmidipfragmasked, nil
+}
+
+func NewOxmIdIpFragMasked() *OxmIdIpFragMasked {
+	obj := &OxmIdIpFragMasked{
+		OxmId: NewOxmId(79106),
+	}
+	return obj
+}
+func (self *OxmIdIpFragMasked) GetOXMName() string {
+	return "ip_frag_masked"
+}
+
+func (self *OxmIdIpFragMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpSrc struct {
+	*OxmId
+}
+
+type IOxmIdIpSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdIpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpSrc, error) {
+	_oxmidipsrc := &OxmIdIpSrc{OxmId: parent}
+	return _oxmidipsrc, nil
+}
+
+func NewOxmIdIpSrc() *OxmIdIpSrc {
+	obj := &OxmIdIpSrc{
+		OxmId: NewOxmId(3588),
+	}
+	return obj
+}
+func (self *OxmIdIpSrc) GetOXMName() string {
+	return "ip_src"
+}
+
+func (self *OxmIdIpSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpSrcMasked, error) {
+	_oxmidipsrcmasked := &OxmIdIpSrcMasked{OxmId: parent}
+	return _oxmidipsrcmasked, nil
+}
+
+func NewOxmIdIpSrcMasked() *OxmIdIpSrcMasked {
+	obj := &OxmIdIpSrcMasked{
+		OxmId: NewOxmId(3848),
+	}
+	return obj
+}
+func (self *OxmIdIpSrcMasked) GetOXMName() string {
+	return "ip_src_masked"
+}
+
+func (self *OxmIdIpSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6Dst struct {
+	*OxmId
+}
+
+type IOxmIdIpv6Dst interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6Dst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6Dst, error) {
+	_oxmidipv6dst := &OxmIdIpv6Dst{OxmId: parent}
+	return _oxmidipv6dst, nil
+}
+
+func NewOxmIdIpv6Dst() *OxmIdIpv6Dst {
+	obj := &OxmIdIpv6Dst{
+		OxmId: NewOxmId(75792),
+	}
+	return obj
+}
+func (self *OxmIdIpv6Dst) GetOXMName() string {
+	return "ipv6_dst"
+}
+
+func (self *OxmIdIpv6Dst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6DstMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6DstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6DstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6DstMasked, error) {
+	_oxmidipv6dstmasked := &OxmIdIpv6DstMasked{OxmId: parent}
+	return _oxmidipv6dstmasked, nil
+}
+
+func NewOxmIdIpv6DstMasked() *OxmIdIpv6DstMasked {
+	obj := &OxmIdIpv6DstMasked{
+		OxmId: NewOxmId(76064),
+	}
+	return obj
+}
+func (self *OxmIdIpv6DstMasked) GetOXMName() string {
+	return "ipv6_dst_masked"
+}
+
+func (self *OxmIdIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6Label struct {
+	*OxmId
+}
+
+type IOxmIdIpv6Label interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6Label) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6Label(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6Label, error) {
+	_oxmidipv6label := &OxmIdIpv6Label{OxmId: parent}
+	return _oxmidipv6label, nil
+}
+
+func NewOxmIdIpv6Label() *OxmIdIpv6Label {
+	obj := &OxmIdIpv6Label{
+		OxmId: NewOxmId(79364),
+	}
+	return obj
+}
+func (self *OxmIdIpv6Label) GetOXMName() string {
+	return "ipv6_label"
+}
+
+func (self *OxmIdIpv6Label) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6LabelMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6LabelMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6LabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6LabelMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6LabelMasked, error) {
+	_oxmidipv6labelmasked := &OxmIdIpv6LabelMasked{OxmId: parent}
+	return _oxmidipv6labelmasked, nil
+}
+
+func NewOxmIdIpv6LabelMasked() *OxmIdIpv6LabelMasked {
+	obj := &OxmIdIpv6LabelMasked{
+		OxmId: NewOxmId(79624),
+	}
+	return obj
+}
+func (self *OxmIdIpv6LabelMasked) GetOXMName() string {
+	return "ipv6_label_masked"
+}
+
+func (self *OxmIdIpv6LabelMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6Src struct {
+	*OxmId
+}
+
+type IOxmIdIpv6Src interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6Src(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6Src, error) {
+	_oxmidipv6src := &OxmIdIpv6Src{OxmId: parent}
+	return _oxmidipv6src, nil
+}
+
+func NewOxmIdIpv6Src() *OxmIdIpv6Src {
+	obj := &OxmIdIpv6Src{
+		OxmId: NewOxmId(75280),
+	}
+	return obj
+}
+func (self *OxmIdIpv6Src) GetOXMName() string {
+	return "ipv6_src"
+}
+
+func (self *OxmIdIpv6Src) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6SrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6SrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6SrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6SrcMasked, error) {
+	_oxmidipv6srcmasked := &OxmIdIpv6SrcMasked{OxmId: parent}
+	return _oxmidipv6srcmasked, nil
+}
+
+func NewOxmIdIpv6SrcMasked() *OxmIdIpv6SrcMasked {
+	obj := &OxmIdIpv6SrcMasked{
+		OxmId: NewOxmId(75552),
+	}
+	return obj
+}
+func (self *OxmIdIpv6SrcMasked) GetOXMName() string {
+	return "ipv6_src_masked"
+}
+
+func (self *OxmIdIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMplsTtl struct {
+	*OxmId
+}
+
+type IOxmIdMplsTtl interface {
+	IOxmId
+}
+
+func (self *OxmIdMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMplsTtl(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMplsTtl, error) {
+	_oxmidmplsttl := &OxmIdMplsTtl{OxmId: parent}
+	return _oxmidmplsttl, nil
+}
+
+func NewOxmIdMplsTtl() *OxmIdMplsTtl {
+	obj := &OxmIdMplsTtl{
+		OxmId: NewOxmId(80897),
+	}
+	return obj
+}
+func (self *OxmIdMplsTtl) GetOXMName() string {
+	return "mpls_ttl"
+}
+
+func (self *OxmIdMplsTtl) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNdSll struct {
+	*OxmId
+}
+
+type IOxmIdNdSll interface {
+	IOxmId
+}
+
+func (self *OxmIdNdSll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNdSll(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNdSll, error) {
+	_oxmidndsll := &OxmIdNdSll{OxmId: parent}
+	return _oxmidndsll, nil
+}
+
+func NewOxmIdNdSll() *OxmIdNdSll {
+	obj := &OxmIdNdSll{
+		OxmId: NewOxmId(77830),
+	}
+	return obj
+}
+func (self *OxmIdNdSll) GetOXMName() string {
+	return "nd_sll"
+}
+
+func (self *OxmIdNdSll) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNdSllMasked struct {
+	*OxmId
+}
+
+type IOxmIdNdSllMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdNdSllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNdSllMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNdSllMasked, error) {
+	_oxmidndsllmasked := &OxmIdNdSllMasked{OxmId: parent}
+	return _oxmidndsllmasked, nil
+}
+
+func NewOxmIdNdSllMasked() *OxmIdNdSllMasked {
+	obj := &OxmIdNdSllMasked{
+		OxmId: NewOxmId(78091),
+	}
+	return obj
+}
+func (self *OxmIdNdSllMasked) GetOXMName() string {
+	return "nd_sll_masked"
+}
+
+func (self *OxmIdNdSllMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNdTarget struct {
+	*OxmId
+}
+
+type IOxmIdNdTarget interface {
+	IOxmId
+}
+
+func (self *OxmIdNdTarget) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNdTarget(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNdTarget, error) {
+	_oxmidndtarget := &OxmIdNdTarget{OxmId: parent}
+	return _oxmidndtarget, nil
+}
+
+func NewOxmIdNdTarget() *OxmIdNdTarget {
+	obj := &OxmIdNdTarget{
+		OxmId: NewOxmId(77328),
+	}
+	return obj
+}
+func (self *OxmIdNdTarget) GetOXMName() string {
+	return "nd_target"
+}
+
+func (self *OxmIdNdTarget) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNdTargetMasked struct {
+	*OxmId
+}
+
+type IOxmIdNdTargetMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdNdTargetMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNdTargetMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNdTargetMasked, error) {
+	_oxmidndtargetmasked := &OxmIdNdTargetMasked{OxmId: parent}
+	return _oxmidndtargetmasked, nil
+}
+
+func NewOxmIdNdTargetMasked() *OxmIdNdTargetMasked {
+	obj := &OxmIdNdTargetMasked{
+		OxmId: NewOxmId(77600),
+	}
+	return obj
+}
+func (self *OxmIdNdTargetMasked) GetOXMName() string {
+	return "nd_target_masked"
+}
+
+func (self *OxmIdNdTargetMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNdTll struct {
+	*OxmId
+}
+
+type IOxmIdNdTll interface {
+	IOxmId
+}
+
+func (self *OxmIdNdTll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNdTll(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNdTll, error) {
+	_oxmidndtll := &OxmIdNdTll{OxmId: parent}
+	return _oxmidndtll, nil
+}
+
+func NewOxmIdNdTll() *OxmIdNdTll {
+	obj := &OxmIdNdTll{
+		OxmId: NewOxmId(78342),
+	}
+	return obj
+}
+func (self *OxmIdNdTll) GetOXMName() string {
+	return "nd_tll"
+}
+
+func (self *OxmIdNdTll) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNdTllMasked struct {
+	*OxmId
+}
+
+type IOxmIdNdTllMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdNdTllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNdTllMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNdTllMasked, error) {
+	_oxmidndtllmasked := &OxmIdNdTllMasked{OxmId: parent}
+	return _oxmidndtllmasked, nil
+}
+
+func NewOxmIdNdTllMasked() *OxmIdNdTllMasked {
+	obj := &OxmIdNdTllMasked{
+		OxmId: NewOxmId(78603),
+	}
+	return obj
+}
+func (self *OxmIdNdTllMasked) GetOXMName() string {
+	return "nd_tll_masked"
+}
+
+func (self *OxmIdNdTllMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNwEcn struct {
+	*OxmId
+}
+
+type IOxmIdNwEcn interface {
+	IOxmId
+}
+
+func (self *OxmIdNwEcn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNwEcn(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNwEcn, error) {
+	_oxmidnwecn := &OxmIdNwEcn{OxmId: parent}
+	return _oxmidnwecn, nil
+}
+
+func NewOxmIdNwEcn() *OxmIdNwEcn {
+	obj := &OxmIdNwEcn{
+		OxmId: NewOxmId(79873),
+	}
+	return obj
+}
+func (self *OxmIdNwEcn) GetOXMName() string {
+	return "nw_ecn"
+}
+
+func (self *OxmIdNwEcn) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNwProto struct {
+	*OxmId
+}
+
+type IOxmIdNwProto interface {
+	IOxmId
+}
+
+func (self *OxmIdNwProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNwProto(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNwProto, error) {
+	_oxmidnwproto := &OxmIdNwProto{OxmId: parent}
+	return _oxmidnwproto, nil
+}
+
+func NewOxmIdNwProto() *OxmIdNwProto {
+	obj := &OxmIdNwProto{
+		OxmId: NewOxmId(3073),
+	}
+	return obj
+}
+func (self *OxmIdNwProto) GetOXMName() string {
+	return "nw_proto"
+}
+
+func (self *OxmIdNwProto) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNwTos struct {
+	*OxmId
+}
+
+type IOxmIdNwTos interface {
+	IOxmId
+}
+
+func (self *OxmIdNwTos) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNwTos(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNwTos, error) {
+	_oxmidnwtos := &OxmIdNwTos{OxmId: parent}
+	return _oxmidnwtos, nil
+}
+
+func NewOxmIdNwTos() *OxmIdNwTos {
+	obj := &OxmIdNwTos{
+		OxmId: NewOxmId(2561),
+	}
+	return obj
+}
+func (self *OxmIdNwTos) GetOXMName() string {
+	return "nw_tos"
+}
+
+func (self *OxmIdNwTos) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdNwTtl struct {
+	*OxmId
+}
+
+type IOxmIdNwTtl interface {
+	IOxmId
+}
+
+func (self *OxmIdNwTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdNwTtl(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdNwTtl, error) {
+	_oxmidnwttl := &OxmIdNwTtl{OxmId: parent}
+	return _oxmidnwttl, nil
+}
+
+func NewOxmIdNwTtl() *OxmIdNwTtl {
+	obj := &OxmIdNwTtl{
+		OxmId: NewOxmId(80385),
+	}
+	return obj
+}
+func (self *OxmIdNwTtl) GetOXMName() string {
+	return "nw_ttl"
+}
+
+func (self *OxmIdNwTtl) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdPktMark struct {
+	*OxmId
+}
+
+type IOxmIdPktMark interface {
+	IOxmId
+}
+
+func (self *OxmIdPktMark) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdPktMark(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdPktMark, error) {
+	_oxmidpktmark := &OxmIdPktMark{OxmId: parent}
+	return _oxmidpktmark, nil
+}
+
+func NewOxmIdPktMark() *OxmIdPktMark {
+	obj := &OxmIdPktMark{
+		OxmId: NewOxmId(82436),
+	}
+	return obj
+}
+func (self *OxmIdPktMark) GetOXMName() string {
+	return "pkt_mark"
+}
+
+func (self *OxmIdPktMark) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdPktMarkMasked struct {
+	*OxmId
+}
+
+type IOxmIdPktMarkMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdPktMarkMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdPktMarkMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdPktMarkMasked, error) {
+	_oxmidpktmarkmasked := &OxmIdPktMarkMasked{OxmId: parent}
+	return _oxmidpktmarkmasked, nil
+}
+
+func NewOxmIdPktMarkMasked() *OxmIdPktMarkMasked {
+	obj := &OxmIdPktMarkMasked{
+		OxmId: NewOxmId(82696),
+	}
+	return obj
+}
+func (self *OxmIdPktMarkMasked) GetOXMName() string {
+	return "pkt_mark_masked"
+}
+
+func (self *OxmIdPktMarkMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdRecircId struct {
+	*OxmId
+}
+
+type IOxmIdRecircId interface {
+	IOxmId
+}
+
+func (self *OxmIdRecircId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdRecircId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdRecircId, error) {
+	_oxmidrecircid := &OxmIdRecircId{OxmId: parent}
+	return _oxmidrecircid, nil
+}
+
+func NewOxmIdRecircId() *OxmIdRecircId {
+	obj := &OxmIdRecircId{
+		OxmId: NewOxmId(83972),
+	}
+	return obj
+}
+func (self *OxmIdRecircId) GetOXMName() string {
+	return "recirc_id"
+}
+
+func (self *OxmIdRecircId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg0 struct {
+	*OxmId
+}
+
+type IOxmIdReg0 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg0(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg0, error) {
+	_oxmidreg0 := &OxmIdReg0{OxmId: parent}
+	return _oxmidreg0, nil
+}
+
+func NewOxmIdReg0() *OxmIdReg0 {
+	obj := &OxmIdReg0{
+		OxmId: NewOxmId(65540),
+	}
+	return obj
+}
+func (self *OxmIdReg0) GetOXMName() string {
+	return "reg0"
+}
+
+func (self *OxmIdReg0) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg0Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg0Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg0Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg0Masked, error) {
+	_oxmidreg0masked := &OxmIdReg0Masked{OxmId: parent}
+	return _oxmidreg0masked, nil
+}
+
+func NewOxmIdReg0Masked() *OxmIdReg0Masked {
+	obj := &OxmIdReg0Masked{
+		OxmId: NewOxmId(65800),
+	}
+	return obj
+}
+func (self *OxmIdReg0Masked) GetOXMName() string {
+	return "reg0_masked"
+}
+
+func (self *OxmIdReg0Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg1 struct {
+	*OxmId
+}
+
+type IOxmIdReg1 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg1(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg1, error) {
+	_oxmidreg1 := &OxmIdReg1{OxmId: parent}
+	return _oxmidreg1, nil
+}
+
+func NewOxmIdReg1() *OxmIdReg1 {
+	obj := &OxmIdReg1{
+		OxmId: NewOxmId(66052),
+	}
+	return obj
+}
+func (self *OxmIdReg1) GetOXMName() string {
+	return "reg1"
+}
+
+func (self *OxmIdReg1) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg10 struct {
+	*OxmId
+}
+
+type IOxmIdReg10 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg10) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg10(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg10, error) {
+	_oxmidreg10 := &OxmIdReg10{OxmId: parent}
+	return _oxmidreg10, nil
+}
+
+func NewOxmIdReg10() *OxmIdReg10 {
+	obj := &OxmIdReg10{
+		OxmId: NewOxmId(70660),
+	}
+	return obj
+}
+func (self *OxmIdReg10) GetOXMName() string {
+	return "reg10"
+}
+
+func (self *OxmIdReg10) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg10Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg10Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg10Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg10Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg10Masked, error) {
+	_oxmidreg10masked := &OxmIdReg10Masked{OxmId: parent}
+	return _oxmidreg10masked, nil
+}
+
+func NewOxmIdReg10Masked() *OxmIdReg10Masked {
+	obj := &OxmIdReg10Masked{
+		OxmId: NewOxmId(70920),
+	}
+	return obj
+}
+func (self *OxmIdReg10Masked) GetOXMName() string {
+	return "reg10_masked"
+}
+
+func (self *OxmIdReg10Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg11 struct {
+	*OxmId
+}
+
+type IOxmIdReg11 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg11) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg11(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg11, error) {
+	_oxmidreg11 := &OxmIdReg11{OxmId: parent}
+	return _oxmidreg11, nil
+}
+
+func NewOxmIdReg11() *OxmIdReg11 {
+	obj := &OxmIdReg11{
+		OxmId: NewOxmId(71172),
+	}
+	return obj
+}
+func (self *OxmIdReg11) GetOXMName() string {
+	return "reg11"
+}
+
+func (self *OxmIdReg11) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg11Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg11Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg11Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg11Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg11Masked, error) {
+	_oxmidreg11masked := &OxmIdReg11Masked{OxmId: parent}
+	return _oxmidreg11masked, nil
+}
+
+func NewOxmIdReg11Masked() *OxmIdReg11Masked {
+	obj := &OxmIdReg11Masked{
+		OxmId: NewOxmId(71432),
+	}
+	return obj
+}
+func (self *OxmIdReg11Masked) GetOXMName() string {
+	return "reg11_masked"
+}
+
+func (self *OxmIdReg11Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg12 struct {
+	*OxmId
+}
+
+type IOxmIdReg12 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg12) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg12(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg12, error) {
+	_oxmidreg12 := &OxmIdReg12{OxmId: parent}
+	return _oxmidreg12, nil
+}
+
+func NewOxmIdReg12() *OxmIdReg12 {
+	obj := &OxmIdReg12{
+		OxmId: NewOxmId(71684),
+	}
+	return obj
+}
+func (self *OxmIdReg12) GetOXMName() string {
+	return "reg12"
+}
+
+func (self *OxmIdReg12) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg12Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg12Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg12Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg12Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg12Masked, error) {
+	_oxmidreg12masked := &OxmIdReg12Masked{OxmId: parent}
+	return _oxmidreg12masked, nil
+}
+
+func NewOxmIdReg12Masked() *OxmIdReg12Masked {
+	obj := &OxmIdReg12Masked{
+		OxmId: NewOxmId(71944),
+	}
+	return obj
+}
+func (self *OxmIdReg12Masked) GetOXMName() string {
+	return "reg12_masked"
+}
+
+func (self *OxmIdReg12Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg13 struct {
+	*OxmId
+}
+
+type IOxmIdReg13 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg13) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg13(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg13, error) {
+	_oxmidreg13 := &OxmIdReg13{OxmId: parent}
+	return _oxmidreg13, nil
+}
+
+func NewOxmIdReg13() *OxmIdReg13 {
+	obj := &OxmIdReg13{
+		OxmId: NewOxmId(72196),
+	}
+	return obj
+}
+func (self *OxmIdReg13) GetOXMName() string {
+	return "reg13"
+}
+
+func (self *OxmIdReg13) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg13Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg13Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg13Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg13Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg13Masked, error) {
+	_oxmidreg13masked := &OxmIdReg13Masked{OxmId: parent}
+	return _oxmidreg13masked, nil
+}
+
+func NewOxmIdReg13Masked() *OxmIdReg13Masked {
+	obj := &OxmIdReg13Masked{
+		OxmId: NewOxmId(72456),
+	}
+	return obj
+}
+func (self *OxmIdReg13Masked) GetOXMName() string {
+	return "reg13_masked"
+}
+
+func (self *OxmIdReg13Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg14 struct {
+	*OxmId
+}
+
+type IOxmIdReg14 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg14) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg14(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg14, error) {
+	_oxmidreg14 := &OxmIdReg14{OxmId: parent}
+	return _oxmidreg14, nil
+}
+
+func NewOxmIdReg14() *OxmIdReg14 {
+	obj := &OxmIdReg14{
+		OxmId: NewOxmId(72708),
+	}
+	return obj
+}
+func (self *OxmIdReg14) GetOXMName() string {
+	return "reg14"
+}
+
+func (self *OxmIdReg14) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg14Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg14Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg14Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg14Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg14Masked, error) {
+	_oxmidreg14masked := &OxmIdReg14Masked{OxmId: parent}
+	return _oxmidreg14masked, nil
+}
+
+func NewOxmIdReg14Masked() *OxmIdReg14Masked {
+	obj := &OxmIdReg14Masked{
+		OxmId: NewOxmId(72968),
+	}
+	return obj
+}
+func (self *OxmIdReg14Masked) GetOXMName() string {
+	return "reg14_masked"
+}
+
+func (self *OxmIdReg14Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg15 struct {
+	*OxmId
+}
+
+type IOxmIdReg15 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg15) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg15(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg15, error) {
+	_oxmidreg15 := &OxmIdReg15{OxmId: parent}
+	return _oxmidreg15, nil
+}
+
+func NewOxmIdReg15() *OxmIdReg15 {
+	obj := &OxmIdReg15{
+		OxmId: NewOxmId(73220),
+	}
+	return obj
+}
+func (self *OxmIdReg15) GetOXMName() string {
+	return "reg15"
+}
+
+func (self *OxmIdReg15) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg15Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg15Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg15Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg15Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg15Masked, error) {
+	_oxmidreg15masked := &OxmIdReg15Masked{OxmId: parent}
+	return _oxmidreg15masked, nil
+}
+
+func NewOxmIdReg15Masked() *OxmIdReg15Masked {
+	obj := &OxmIdReg15Masked{
+		OxmId: NewOxmId(73480),
+	}
+	return obj
+}
+func (self *OxmIdReg15Masked) GetOXMName() string {
+	return "reg15_masked"
+}
+
+func (self *OxmIdReg15Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg1Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg1Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg1Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg1Masked, error) {
+	_oxmidreg1masked := &OxmIdReg1Masked{OxmId: parent}
+	return _oxmidreg1masked, nil
+}
+
+func NewOxmIdReg1Masked() *OxmIdReg1Masked {
+	obj := &OxmIdReg1Masked{
+		OxmId: NewOxmId(66312),
+	}
+	return obj
+}
+func (self *OxmIdReg1Masked) GetOXMName() string {
+	return "reg1_masked"
+}
+
+func (self *OxmIdReg1Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg2 struct {
+	*OxmId
+}
+
+type IOxmIdReg2 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg2(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg2, error) {
+	_oxmidreg2 := &OxmIdReg2{OxmId: parent}
+	return _oxmidreg2, nil
+}
+
+func NewOxmIdReg2() *OxmIdReg2 {
+	obj := &OxmIdReg2{
+		OxmId: NewOxmId(66564),
+	}
+	return obj
+}
+func (self *OxmIdReg2) GetOXMName() string {
+	return "reg2"
+}
+
+func (self *OxmIdReg2) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg2Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg2Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg2Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg2Masked, error) {
+	_oxmidreg2masked := &OxmIdReg2Masked{OxmId: parent}
+	return _oxmidreg2masked, nil
+}
+
+func NewOxmIdReg2Masked() *OxmIdReg2Masked {
+	obj := &OxmIdReg2Masked{
+		OxmId: NewOxmId(66824),
+	}
+	return obj
+}
+func (self *OxmIdReg2Masked) GetOXMName() string {
+	return "reg2_masked"
+}
+
+func (self *OxmIdReg2Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg3 struct {
+	*OxmId
+}
+
+type IOxmIdReg3 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg3(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg3, error) {
+	_oxmidreg3 := &OxmIdReg3{OxmId: parent}
+	return _oxmidreg3, nil
+}
+
+func NewOxmIdReg3() *OxmIdReg3 {
+	obj := &OxmIdReg3{
+		OxmId: NewOxmId(67076),
+	}
+	return obj
+}
+func (self *OxmIdReg3) GetOXMName() string {
+	return "reg3"
+}
+
+func (self *OxmIdReg3) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg3Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg3Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg3Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg3Masked, error) {
+	_oxmidreg3masked := &OxmIdReg3Masked{OxmId: parent}
+	return _oxmidreg3masked, nil
+}
+
+func NewOxmIdReg3Masked() *OxmIdReg3Masked {
+	obj := &OxmIdReg3Masked{
+		OxmId: NewOxmId(67336),
+	}
+	return obj
+}
+func (self *OxmIdReg3Masked) GetOXMName() string {
+	return "reg3_masked"
+}
+
+func (self *OxmIdReg3Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg4 struct {
+	*OxmId
+}
+
+type IOxmIdReg4 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg4(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg4, error) {
+	_oxmidreg4 := &OxmIdReg4{OxmId: parent}
+	return _oxmidreg4, nil
+}
+
+func NewOxmIdReg4() *OxmIdReg4 {
+	obj := &OxmIdReg4{
+		OxmId: NewOxmId(67588),
+	}
+	return obj
+}
+func (self *OxmIdReg4) GetOXMName() string {
+	return "reg4"
+}
+
+func (self *OxmIdReg4) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg4Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg4Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg4Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg4Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg4Masked, error) {
+	_oxmidreg4masked := &OxmIdReg4Masked{OxmId: parent}
+	return _oxmidreg4masked, nil
+}
+
+func NewOxmIdReg4Masked() *OxmIdReg4Masked {
+	obj := &OxmIdReg4Masked{
+		OxmId: NewOxmId(67848),
+	}
+	return obj
+}
+func (self *OxmIdReg4Masked) GetOXMName() string {
+	return "reg4_masked"
+}
+
+func (self *OxmIdReg4Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg5 struct {
+	*OxmId
+}
+
+type IOxmIdReg5 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg5) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg5(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg5, error) {
+	_oxmidreg5 := &OxmIdReg5{OxmId: parent}
+	return _oxmidreg5, nil
+}
+
+func NewOxmIdReg5() *OxmIdReg5 {
+	obj := &OxmIdReg5{
+		OxmId: NewOxmId(68100),
+	}
+	return obj
+}
+func (self *OxmIdReg5) GetOXMName() string {
+	return "reg5"
+}
+
+func (self *OxmIdReg5) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg5Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg5Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg5Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg5Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg5Masked, error) {
+	_oxmidreg5masked := &OxmIdReg5Masked{OxmId: parent}
+	return _oxmidreg5masked, nil
+}
+
+func NewOxmIdReg5Masked() *OxmIdReg5Masked {
+	obj := &OxmIdReg5Masked{
+		OxmId: NewOxmId(68360),
+	}
+	return obj
+}
+func (self *OxmIdReg5Masked) GetOXMName() string {
+	return "reg5_masked"
+}
+
+func (self *OxmIdReg5Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg6 struct {
+	*OxmId
+}
+
+type IOxmIdReg6 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg6) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg6(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg6, error) {
+	_oxmidreg6 := &OxmIdReg6{OxmId: parent}
+	return _oxmidreg6, nil
+}
+
+func NewOxmIdReg6() *OxmIdReg6 {
+	obj := &OxmIdReg6{
+		OxmId: NewOxmId(68612),
+	}
+	return obj
+}
+func (self *OxmIdReg6) GetOXMName() string {
+	return "reg6"
+}
+
+func (self *OxmIdReg6) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg6Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg6Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg6Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg6Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg6Masked, error) {
+	_oxmidreg6masked := &OxmIdReg6Masked{OxmId: parent}
+	return _oxmidreg6masked, nil
+}
+
+func NewOxmIdReg6Masked() *OxmIdReg6Masked {
+	obj := &OxmIdReg6Masked{
+		OxmId: NewOxmId(68872),
+	}
+	return obj
+}
+func (self *OxmIdReg6Masked) GetOXMName() string {
+	return "reg6_masked"
+}
+
+func (self *OxmIdReg6Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg7 struct {
+	*OxmId
+}
+
+type IOxmIdReg7 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg7) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg7(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg7, error) {
+	_oxmidreg7 := &OxmIdReg7{OxmId: parent}
+	return _oxmidreg7, nil
+}
+
+func NewOxmIdReg7() *OxmIdReg7 {
+	obj := &OxmIdReg7{
+		OxmId: NewOxmId(69124),
+	}
+	return obj
+}
+func (self *OxmIdReg7) GetOXMName() string {
+	return "reg7"
+}
+
+func (self *OxmIdReg7) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg7Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg7Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg7Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg7Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg7Masked, error) {
+	_oxmidreg7masked := &OxmIdReg7Masked{OxmId: parent}
+	return _oxmidreg7masked, nil
+}
+
+func NewOxmIdReg7Masked() *OxmIdReg7Masked {
+	obj := &OxmIdReg7Masked{
+		OxmId: NewOxmId(69384),
+	}
+	return obj
+}
+func (self *OxmIdReg7Masked) GetOXMName() string {
+	return "reg7_masked"
+}
+
+func (self *OxmIdReg7Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg8 struct {
+	*OxmId
+}
+
+type IOxmIdReg8 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg8) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg8(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg8, error) {
+	_oxmidreg8 := &OxmIdReg8{OxmId: parent}
+	return _oxmidreg8, nil
+}
+
+func NewOxmIdReg8() *OxmIdReg8 {
+	obj := &OxmIdReg8{
+		OxmId: NewOxmId(69636),
+	}
+	return obj
+}
+func (self *OxmIdReg8) GetOXMName() string {
+	return "reg8"
+}
+
+func (self *OxmIdReg8) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg8Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg8Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg8Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg8Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg8Masked, error) {
+	_oxmidreg8masked := &OxmIdReg8Masked{OxmId: parent}
+	return _oxmidreg8masked, nil
+}
+
+func NewOxmIdReg8Masked() *OxmIdReg8Masked {
+	obj := &OxmIdReg8Masked{
+		OxmId: NewOxmId(69896),
+	}
+	return obj
+}
+func (self *OxmIdReg8Masked) GetOXMName() string {
+	return "reg8_masked"
+}
+
+func (self *OxmIdReg8Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg9 struct {
+	*OxmId
+}
+
+type IOxmIdReg9 interface {
+	IOxmId
+}
+
+func (self *OxmIdReg9) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg9(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg9, error) {
+	_oxmidreg9 := &OxmIdReg9{OxmId: parent}
+	return _oxmidreg9, nil
+}
+
+func NewOxmIdReg9() *OxmIdReg9 {
+	obj := &OxmIdReg9{
+		OxmId: NewOxmId(70148),
+	}
+	return obj
+}
+func (self *OxmIdReg9) GetOXMName() string {
+	return "reg9"
+}
+
+func (self *OxmIdReg9) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdReg9Masked struct {
+	*OxmId
+}
+
+type IOxmIdReg9Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdReg9Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdReg9Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdReg9Masked, error) {
+	_oxmidreg9masked := &OxmIdReg9Masked{OxmId: parent}
+	return _oxmidreg9masked, nil
+}
+
+func NewOxmIdReg9Masked() *OxmIdReg9Masked {
+	obj := &OxmIdReg9Masked{
+		OxmId: NewOxmId(70408),
+	}
+	return obj
+}
+func (self *OxmIdReg9Masked) GetOXMName() string {
+	return "reg9_masked"
+}
+
+func (self *OxmIdReg9Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTcpDst struct {
+	*OxmId
+}
+
+type IOxmIdTcpDst interface {
+	IOxmId
+}
+
+func (self *OxmIdTcpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTcpDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTcpDst, error) {
+	_oxmidtcpdst := &OxmIdTcpDst{OxmId: parent}
+	return _oxmidtcpdst, nil
+}
+
+func NewOxmIdTcpDst() *OxmIdTcpDst {
+	obj := &OxmIdTcpDst{
+		OxmId: NewOxmId(5122),
+	}
+	return obj
+}
+func (self *OxmIdTcpDst) GetOXMName() string {
+	return "tcp_dst"
+}
+
+func (self *OxmIdTcpDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTcpDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdTcpDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTcpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTcpDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTcpDstMasked, error) {
+	_oxmidtcpdstmasked := &OxmIdTcpDstMasked{OxmId: parent}
+	return _oxmidtcpdstmasked, nil
+}
+
+func NewOxmIdTcpDstMasked() *OxmIdTcpDstMasked {
+	obj := &OxmIdTcpDstMasked{
+		OxmId: NewOxmId(5378),
+	}
+	return obj
+}
+func (self *OxmIdTcpDstMasked) GetOXMName() string {
+	return "tcp_dst_masked"
+}
+
+func (self *OxmIdTcpDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTcpFlags struct {
+	*OxmId
+}
+
+type IOxmIdTcpFlags interface {
+	IOxmId
+}
+
+func (self *OxmIdTcpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTcpFlags(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTcpFlags, error) {
+	_oxmidtcpflags := &OxmIdTcpFlags{OxmId: parent}
+	return _oxmidtcpflags, nil
+}
+
+func NewOxmIdTcpFlags() *OxmIdTcpFlags {
+	obj := &OxmIdTcpFlags{
+		OxmId: NewOxmId(82946),
+	}
+	return obj
+}
+func (self *OxmIdTcpFlags) GetOXMName() string {
+	return "tcp_flags"
+}
+
+func (self *OxmIdTcpFlags) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTcpFlagsMasked struct {
+	*OxmId
+}
+
+type IOxmIdTcpFlagsMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTcpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTcpFlagsMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTcpFlagsMasked, error) {
+	_oxmidtcpflagsmasked := &OxmIdTcpFlagsMasked{OxmId: parent}
+	return _oxmidtcpflagsmasked, nil
+}
+
+func NewOxmIdTcpFlagsMasked() *OxmIdTcpFlagsMasked {
+	obj := &OxmIdTcpFlagsMasked{
+		OxmId: NewOxmId(83204),
+	}
+	return obj
+}
+func (self *OxmIdTcpFlagsMasked) GetOXMName() string {
+	return "tcp_flags_masked"
+}
+
+func (self *OxmIdTcpFlagsMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTcpSrc struct {
+	*OxmId
+}
+
+type IOxmIdTcpSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdTcpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTcpSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTcpSrc, error) {
+	_oxmidtcpsrc := &OxmIdTcpSrc{OxmId: parent}
+	return _oxmidtcpsrc, nil
+}
+
+func NewOxmIdTcpSrc() *OxmIdTcpSrc {
+	obj := &OxmIdTcpSrc{
+		OxmId: NewOxmId(4610),
+	}
+	return obj
+}
+func (self *OxmIdTcpSrc) GetOXMName() string {
+	return "tcp_src"
+}
+
+func (self *OxmIdTcpSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTcpSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdTcpSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTcpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTcpSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTcpSrcMasked, error) {
+	_oxmidtcpsrcmasked := &OxmIdTcpSrcMasked{OxmId: parent}
+	return _oxmidtcpsrcmasked, nil
+}
+
+func NewOxmIdTcpSrcMasked() *OxmIdTcpSrcMasked {
+	obj := &OxmIdTcpSrcMasked{
+		OxmId: NewOxmId(4868),
+	}
+	return obj
+}
+func (self *OxmIdTcpSrcMasked) GetOXMName() string {
+	return "tcp_src_masked"
+}
+
+func (self *OxmIdTcpSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunDst struct {
+	*OxmId
+}
+
+type IOxmIdTunDst interface {
+	IOxmId
+}
+
+func (self *OxmIdTunDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunDst, error) {
+	_oxmidtundst := &OxmIdTunDst{OxmId: parent}
+	return _oxmidtundst, nil
+}
+
+func NewOxmIdTunDst() *OxmIdTunDst {
+	obj := &OxmIdTunDst{
+		OxmId: NewOxmId(81924),
+	}
+	return obj
+}
+func (self *OxmIdTunDst) GetOXMName() string {
+	return "tun_dst"
+}
+
+func (self *OxmIdTunDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunDstMasked, error) {
+	_oxmidtundstmasked := &OxmIdTunDstMasked{OxmId: parent}
+	return _oxmidtundstmasked, nil
+}
+
+func NewOxmIdTunDstMasked() *OxmIdTunDstMasked {
+	obj := &OxmIdTunDstMasked{
+		OxmId: NewOxmId(82184),
+	}
+	return obj
+}
+func (self *OxmIdTunDstMasked) GetOXMName() string {
+	return "tun_dst_masked"
+}
+
+func (self *OxmIdTunDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunFlags struct {
+	*OxmId
+}
+
+type IOxmIdTunFlags interface {
+	IOxmId
+}
+
+func (self *OxmIdTunFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunFlags(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunFlags, error) {
+	_oxmidtunflags := &OxmIdTunFlags{OxmId: parent}
+	return _oxmidtunflags, nil
+}
+
+func NewOxmIdTunFlags() *OxmIdTunFlags {
+	obj := &OxmIdTunFlags{
+		OxmId: NewOxmId(118786),
+	}
+	return obj
+}
+func (self *OxmIdTunFlags) GetOXMName() string {
+	return "tun_flags"
+}
+
+func (self *OxmIdTunFlags) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunFlagsMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunFlagsMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunFlagsMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunFlagsMasked, error) {
+	_oxmidtunflagsmasked := &OxmIdTunFlagsMasked{OxmId: parent}
+	return _oxmidtunflagsmasked, nil
+}
+
+func NewOxmIdTunFlagsMasked() *OxmIdTunFlagsMasked {
+	obj := &OxmIdTunFlagsMasked{
+		OxmId: NewOxmId(119044),
+	}
+	return obj
+}
+func (self *OxmIdTunFlagsMasked) GetOXMName() string {
+	return "tun_flags_masked"
+}
+
+func (self *OxmIdTunFlagsMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunGbpFlags struct {
+	*OxmId
+}
+
+type IOxmIdTunGbpFlags interface {
+	IOxmId
+}
+
+func (self *OxmIdTunGbpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunGbpFlags(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunGbpFlags, error) {
+	_oxmidtungbpflags := &OxmIdTunGbpFlags{OxmId: parent}
+	return _oxmidtungbpflags, nil
+}
+
+func NewOxmIdTunGbpFlags() *OxmIdTunGbpFlags {
+	obj := &OxmIdTunGbpFlags{
+		OxmId: NewOxmId(85505),
+	}
+	return obj
+}
+func (self *OxmIdTunGbpFlags) GetOXMName() string {
+	return "tun_gbp_flags"
+}
+
+func (self *OxmIdTunGbpFlags) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunGbpFlagsMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunGbpFlagsMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunGbpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunGbpFlagsMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunGbpFlagsMasked, error) {
+	_oxmidtungbpflagsmasked := &OxmIdTunGbpFlagsMasked{OxmId: parent}
+	return _oxmidtungbpflagsmasked, nil
+}
+
+func NewOxmIdTunGbpFlagsMasked() *OxmIdTunGbpFlagsMasked {
+	obj := &OxmIdTunGbpFlagsMasked{
+		OxmId: NewOxmId(85762),
+	}
+	return obj
+}
+func (self *OxmIdTunGbpFlagsMasked) GetOXMName() string {
+	return "tun_gbp_flags_masked"
+}
+
+func (self *OxmIdTunGbpFlagsMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunGbpId struct {
+	*OxmId
+}
+
+type IOxmIdTunGbpId interface {
+	IOxmId
+}
+
+func (self *OxmIdTunGbpId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunGbpId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunGbpId, error) {
+	_oxmidtungbpid := &OxmIdTunGbpId{OxmId: parent}
+	return _oxmidtungbpid, nil
+}
+
+func NewOxmIdTunGbpId() *OxmIdTunGbpId {
+	obj := &OxmIdTunGbpId{
+		OxmId: NewOxmId(84994),
+	}
+	return obj
+}
+func (self *OxmIdTunGbpId) GetOXMName() string {
+	return "tun_gbp_id"
+}
+
+func (self *OxmIdTunGbpId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunGbpIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunGbpIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunGbpIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunGbpIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunGbpIdMasked, error) {
+	_oxmidtungbpidmasked := &OxmIdTunGbpIdMasked{OxmId: parent}
+	return _oxmidtungbpidmasked, nil
+}
+
+func NewOxmIdTunGbpIdMasked() *OxmIdTunGbpIdMasked {
+	obj := &OxmIdTunGbpIdMasked{
+		OxmId: NewOxmId(85252),
+	}
+	return obj
+}
+func (self *OxmIdTunGbpIdMasked) GetOXMName() string {
+	return "tun_gbp_id_masked"
+}
+
+func (self *OxmIdTunGbpIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunId struct {
+	*OxmId
+}
+
+type IOxmIdTunId interface {
+	IOxmId
+}
+
+func (self *OxmIdTunId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunId, error) {
+	_oxmidtunid := &OxmIdTunId{OxmId: parent}
+	return _oxmidtunid, nil
+}
+
+func NewOxmIdTunId() *OxmIdTunId {
+	obj := &OxmIdTunId{
+		OxmId: NewOxmId(73736),
+	}
+	return obj
+}
+func (self *OxmIdTunId) GetOXMName() string {
+	return "tun_id"
+}
+
+func (self *OxmIdTunId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunIdMasked, error) {
+	_oxmidtunidmasked := &OxmIdTunIdMasked{OxmId: parent}
+	return _oxmidtunidmasked, nil
+}
+
+func NewOxmIdTunIdMasked() *OxmIdTunIdMasked {
+	obj := &OxmIdTunIdMasked{
+		OxmId: NewOxmId(74000),
+	}
+	return obj
+}
+func (self *OxmIdTunIdMasked) GetOXMName() string {
+	return "tun_id_masked"
+}
+
+func (self *OxmIdTunIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunIpv6Dst struct {
+	*OxmId
+}
+
+type IOxmIdTunIpv6Dst interface {
+	IOxmId
+}
+
+func (self *OxmIdTunIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunIpv6Dst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunIpv6Dst, error) {
+	_oxmidtunipv6dst := &OxmIdTunIpv6Dst{OxmId: parent}
+	return _oxmidtunipv6dst, nil
+}
+
+func NewOxmIdTunIpv6Dst() *OxmIdTunIpv6Dst {
+	obj := &OxmIdTunIpv6Dst{
+		OxmId: NewOxmId(121872),
+	}
+	return obj
+}
+func (self *OxmIdTunIpv6Dst) GetOXMName() string {
+	return "tun_ipv6_dst"
+}
+
+func (self *OxmIdTunIpv6Dst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunIpv6DstMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunIpv6DstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunIpv6DstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunIpv6DstMasked, error) {
+	_oxmidtunipv6dstmasked := &OxmIdTunIpv6DstMasked{OxmId: parent}
+	return _oxmidtunipv6dstmasked, nil
+}
+
+func NewOxmIdTunIpv6DstMasked() *OxmIdTunIpv6DstMasked {
+	obj := &OxmIdTunIpv6DstMasked{
+		OxmId: NewOxmId(122144),
+	}
+	return obj
+}
+func (self *OxmIdTunIpv6DstMasked) GetOXMName() string {
+	return "tun_ipv6_dst_masked"
+}
+
+func (self *OxmIdTunIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunIpv6Src struct {
+	*OxmId
+}
+
+type IOxmIdTunIpv6Src interface {
+	IOxmId
+}
+
+func (self *OxmIdTunIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunIpv6Src(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunIpv6Src, error) {
+	_oxmidtunipv6src := &OxmIdTunIpv6Src{OxmId: parent}
+	return _oxmidtunipv6src, nil
+}
+
+func NewOxmIdTunIpv6Src() *OxmIdTunIpv6Src {
+	obj := &OxmIdTunIpv6Src{
+		OxmId: NewOxmId(121360),
+	}
+	return obj
+}
+func (self *OxmIdTunIpv6Src) GetOXMName() string {
+	return "tun_ipv6_src"
+}
+
+func (self *OxmIdTunIpv6Src) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunIpv6SrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunIpv6SrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunIpv6SrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunIpv6SrcMasked, error) {
+	_oxmidtunipv6srcmasked := &OxmIdTunIpv6SrcMasked{OxmId: parent}
+	return _oxmidtunipv6srcmasked, nil
+}
+
+func NewOxmIdTunIpv6SrcMasked() *OxmIdTunIpv6SrcMasked {
+	obj := &OxmIdTunIpv6SrcMasked{
+		OxmId: NewOxmId(121632),
+	}
+	return obj
+}
+func (self *OxmIdTunIpv6SrcMasked) GetOXMName() string {
+	return "tun_ipv6_src_masked"
+}
+
+func (self *OxmIdTunIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata0 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata0 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata0(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata0, error) {
+	_oxmidtunmetadata0 := &OxmIdTunMetadata0{OxmId: parent}
+	return _oxmidtunmetadata0, nil
+}
+
+func NewOxmIdTunMetadata0() *OxmIdTunMetadata0 {
+	obj := &OxmIdTunMetadata0{
+		OxmId: NewOxmId(86140),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata0) GetOXMName() string {
+	return "tun_metadata0"
+}
+
+func (self *OxmIdTunMetadata0) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata0Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata0Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata0Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata0Masked, error) {
+	_oxmidtunmetadata0masked := &OxmIdTunMetadata0Masked{OxmId: parent}
+	return _oxmidtunmetadata0masked, nil
+}
+
+func NewOxmIdTunMetadata0Masked() *OxmIdTunMetadata0Masked {
+	obj := &OxmIdTunMetadata0Masked{
+		OxmId: NewOxmId(86520),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata0Masked) GetOXMName() string {
+	return "tun_metadata0_masked"
+}
+
+func (self *OxmIdTunMetadata0Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata1 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata1 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata1(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata1, error) {
+	_oxmidtunmetadata1 := &OxmIdTunMetadata1{OxmId: parent}
+	return _oxmidtunmetadata1, nil
+}
+
+func NewOxmIdTunMetadata1() *OxmIdTunMetadata1 {
+	obj := &OxmIdTunMetadata1{
+		OxmId: NewOxmId(86652),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata1) GetOXMName() string {
+	return "tun_metadata1"
+}
+
+func (self *OxmIdTunMetadata1) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata10 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata10 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata10) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata10(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata10, error) {
+	_oxmidtunmetadata10 := &OxmIdTunMetadata10{OxmId: parent}
+	return _oxmidtunmetadata10, nil
+}
+
+func NewOxmIdTunMetadata10() *OxmIdTunMetadata10 {
+	obj := &OxmIdTunMetadata10{
+		OxmId: NewOxmId(91260),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata10) GetOXMName() string {
+	return "tun_metadata10"
+}
+
+func (self *OxmIdTunMetadata10) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata10Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata10Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata10Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata10Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata10Masked, error) {
+	_oxmidtunmetadata10masked := &OxmIdTunMetadata10Masked{OxmId: parent}
+	return _oxmidtunmetadata10masked, nil
+}
+
+func NewOxmIdTunMetadata10Masked() *OxmIdTunMetadata10Masked {
+	obj := &OxmIdTunMetadata10Masked{
+		OxmId: NewOxmId(91640),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata10Masked) GetOXMName() string {
+	return "tun_metadata10_masked"
+}
+
+func (self *OxmIdTunMetadata10Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata11 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata11 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata11) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata11(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata11, error) {
+	_oxmidtunmetadata11 := &OxmIdTunMetadata11{OxmId: parent}
+	return _oxmidtunmetadata11, nil
+}
+
+func NewOxmIdTunMetadata11() *OxmIdTunMetadata11 {
+	obj := &OxmIdTunMetadata11{
+		OxmId: NewOxmId(91772),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata11) GetOXMName() string {
+	return "tun_metadata11"
+}
+
+func (self *OxmIdTunMetadata11) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata11Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata11Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata11Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata11Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata11Masked, error) {
+	_oxmidtunmetadata11masked := &OxmIdTunMetadata11Masked{OxmId: parent}
+	return _oxmidtunmetadata11masked, nil
+}
+
+func NewOxmIdTunMetadata11Masked() *OxmIdTunMetadata11Masked {
+	obj := &OxmIdTunMetadata11Masked{
+		OxmId: NewOxmId(92152),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata11Masked) GetOXMName() string {
+	return "tun_metadata11_masked"
+}
+
+func (self *OxmIdTunMetadata11Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata12 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata12 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata12) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata12(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata12, error) {
+	_oxmidtunmetadata12 := &OxmIdTunMetadata12{OxmId: parent}
+	return _oxmidtunmetadata12, nil
+}
+
+func NewOxmIdTunMetadata12() *OxmIdTunMetadata12 {
+	obj := &OxmIdTunMetadata12{
+		OxmId: NewOxmId(92284),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata12) GetOXMName() string {
+	return "tun_metadata12"
+}
+
+func (self *OxmIdTunMetadata12) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata12Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata12Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata12Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata12Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata12Masked, error) {
+	_oxmidtunmetadata12masked := &OxmIdTunMetadata12Masked{OxmId: parent}
+	return _oxmidtunmetadata12masked, nil
+}
+
+func NewOxmIdTunMetadata12Masked() *OxmIdTunMetadata12Masked {
+	obj := &OxmIdTunMetadata12Masked{
+		OxmId: NewOxmId(92664),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata12Masked) GetOXMName() string {
+	return "tun_metadata12_masked"
+}
+
+func (self *OxmIdTunMetadata12Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata13 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata13 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata13) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata13(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata13, error) {
+	_oxmidtunmetadata13 := &OxmIdTunMetadata13{OxmId: parent}
+	return _oxmidtunmetadata13, nil
+}
+
+func NewOxmIdTunMetadata13() *OxmIdTunMetadata13 {
+	obj := &OxmIdTunMetadata13{
+		OxmId: NewOxmId(92796),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata13) GetOXMName() string {
+	return "tun_metadata13"
+}
+
+func (self *OxmIdTunMetadata13) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata13Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata13Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata13Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata13Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata13Masked, error) {
+	_oxmidtunmetadata13masked := &OxmIdTunMetadata13Masked{OxmId: parent}
+	return _oxmidtunmetadata13masked, nil
+}
+
+func NewOxmIdTunMetadata13Masked() *OxmIdTunMetadata13Masked {
+	obj := &OxmIdTunMetadata13Masked{
+		OxmId: NewOxmId(93176),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata13Masked) GetOXMName() string {
+	return "tun_metadata13_masked"
+}
+
+func (self *OxmIdTunMetadata13Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata14 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata14 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata14) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata14(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata14, error) {
+	_oxmidtunmetadata14 := &OxmIdTunMetadata14{OxmId: parent}
+	return _oxmidtunmetadata14, nil
+}
+
+func NewOxmIdTunMetadata14() *OxmIdTunMetadata14 {
+	obj := &OxmIdTunMetadata14{
+		OxmId: NewOxmId(93308),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata14) GetOXMName() string {
+	return "tun_metadata14"
+}
+
+func (self *OxmIdTunMetadata14) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata14Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata14Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata14Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata14Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata14Masked, error) {
+	_oxmidtunmetadata14masked := &OxmIdTunMetadata14Masked{OxmId: parent}
+	return _oxmidtunmetadata14masked, nil
+}
+
+func NewOxmIdTunMetadata14Masked() *OxmIdTunMetadata14Masked {
+	obj := &OxmIdTunMetadata14Masked{
+		OxmId: NewOxmId(93688),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata14Masked) GetOXMName() string {
+	return "tun_metadata14_masked"
+}
+
+func (self *OxmIdTunMetadata14Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata15 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata15 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata15) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata15(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata15, error) {
+	_oxmidtunmetadata15 := &OxmIdTunMetadata15{OxmId: parent}
+	return _oxmidtunmetadata15, nil
+}
+
+func NewOxmIdTunMetadata15() *OxmIdTunMetadata15 {
+	obj := &OxmIdTunMetadata15{
+		OxmId: NewOxmId(93820),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata15) GetOXMName() string {
+	return "tun_metadata15"
+}
+
+func (self *OxmIdTunMetadata15) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata15Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata15Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata15Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata15Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata15Masked, error) {
+	_oxmidtunmetadata15masked := &OxmIdTunMetadata15Masked{OxmId: parent}
+	return _oxmidtunmetadata15masked, nil
+}
+
+func NewOxmIdTunMetadata15Masked() *OxmIdTunMetadata15Masked {
+	obj := &OxmIdTunMetadata15Masked{
+		OxmId: NewOxmId(94200),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata15Masked) GetOXMName() string {
+	return "tun_metadata15_masked"
+}
+
+func (self *OxmIdTunMetadata15Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata16 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata16 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata16) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata16(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata16, error) {
+	_oxmidtunmetadata16 := &OxmIdTunMetadata16{OxmId: parent}
+	return _oxmidtunmetadata16, nil
+}
+
+func NewOxmIdTunMetadata16() *OxmIdTunMetadata16 {
+	obj := &OxmIdTunMetadata16{
+		OxmId: NewOxmId(94332),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata16) GetOXMName() string {
+	return "tun_metadata16"
+}
+
+func (self *OxmIdTunMetadata16) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata16Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata16Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata16Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata16Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata16Masked, error) {
+	_oxmidtunmetadata16masked := &OxmIdTunMetadata16Masked{OxmId: parent}
+	return _oxmidtunmetadata16masked, nil
+}
+
+func NewOxmIdTunMetadata16Masked() *OxmIdTunMetadata16Masked {
+	obj := &OxmIdTunMetadata16Masked{
+		OxmId: NewOxmId(94712),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata16Masked) GetOXMName() string {
+	return "tun_metadata16_masked"
+}
+
+func (self *OxmIdTunMetadata16Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata17 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata17 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata17) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata17(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata17, error) {
+	_oxmidtunmetadata17 := &OxmIdTunMetadata17{OxmId: parent}
+	return _oxmidtunmetadata17, nil
+}
+
+func NewOxmIdTunMetadata17() *OxmIdTunMetadata17 {
+	obj := &OxmIdTunMetadata17{
+		OxmId: NewOxmId(94844),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata17) GetOXMName() string {
+	return "tun_metadata17"
+}
+
+func (self *OxmIdTunMetadata17) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata17Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata17Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata17Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata17Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata17Masked, error) {
+	_oxmidtunmetadata17masked := &OxmIdTunMetadata17Masked{OxmId: parent}
+	return _oxmidtunmetadata17masked, nil
+}
+
+func NewOxmIdTunMetadata17Masked() *OxmIdTunMetadata17Masked {
+	obj := &OxmIdTunMetadata17Masked{
+		OxmId: NewOxmId(95224),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata17Masked) GetOXMName() string {
+	return "tun_metadata17_masked"
+}
+
+func (self *OxmIdTunMetadata17Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata18 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata18 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata18) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata18(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata18, error) {
+	_oxmidtunmetadata18 := &OxmIdTunMetadata18{OxmId: parent}
+	return _oxmidtunmetadata18, nil
+}
+
+func NewOxmIdTunMetadata18() *OxmIdTunMetadata18 {
+	obj := &OxmIdTunMetadata18{
+		OxmId: NewOxmId(95356),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata18) GetOXMName() string {
+	return "tun_metadata18"
+}
+
+func (self *OxmIdTunMetadata18) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata18Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata18Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata18Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata18Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata18Masked, error) {
+	_oxmidtunmetadata18masked := &OxmIdTunMetadata18Masked{OxmId: parent}
+	return _oxmidtunmetadata18masked, nil
+}
+
+func NewOxmIdTunMetadata18Masked() *OxmIdTunMetadata18Masked {
+	obj := &OxmIdTunMetadata18Masked{
+		OxmId: NewOxmId(95736),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata18Masked) GetOXMName() string {
+	return "tun_metadata18_masked"
+}
+
+func (self *OxmIdTunMetadata18Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata19 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata19 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata19) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata19(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata19, error) {
+	_oxmidtunmetadata19 := &OxmIdTunMetadata19{OxmId: parent}
+	return _oxmidtunmetadata19, nil
+}
+
+func NewOxmIdTunMetadata19() *OxmIdTunMetadata19 {
+	obj := &OxmIdTunMetadata19{
+		OxmId: NewOxmId(95868),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata19) GetOXMName() string {
+	return "tun_metadata19"
+}
+
+func (self *OxmIdTunMetadata19) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata19Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata19Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata19Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata19Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata19Masked, error) {
+	_oxmidtunmetadata19masked := &OxmIdTunMetadata19Masked{OxmId: parent}
+	return _oxmidtunmetadata19masked, nil
+}
+
+func NewOxmIdTunMetadata19Masked() *OxmIdTunMetadata19Masked {
+	obj := &OxmIdTunMetadata19Masked{
+		OxmId: NewOxmId(96248),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata19Masked) GetOXMName() string {
+	return "tun_metadata19_masked"
+}
+
+func (self *OxmIdTunMetadata19Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata1Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata1Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata1Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata1Masked, error) {
+	_oxmidtunmetadata1masked := &OxmIdTunMetadata1Masked{OxmId: parent}
+	return _oxmidtunmetadata1masked, nil
+}
+
+func NewOxmIdTunMetadata1Masked() *OxmIdTunMetadata1Masked {
+	obj := &OxmIdTunMetadata1Masked{
+		OxmId: NewOxmId(87032),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata1Masked) GetOXMName() string {
+	return "tun_metadata1_masked"
+}
+
+func (self *OxmIdTunMetadata1Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata2 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata2 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata2(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata2, error) {
+	_oxmidtunmetadata2 := &OxmIdTunMetadata2{OxmId: parent}
+	return _oxmidtunmetadata2, nil
+}
+
+func NewOxmIdTunMetadata2() *OxmIdTunMetadata2 {
+	obj := &OxmIdTunMetadata2{
+		OxmId: NewOxmId(87164),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata2) GetOXMName() string {
+	return "tun_metadata2"
+}
+
+func (self *OxmIdTunMetadata2) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata20 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata20 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata20) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata20(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata20, error) {
+	_oxmidtunmetadata20 := &OxmIdTunMetadata20{OxmId: parent}
+	return _oxmidtunmetadata20, nil
+}
+
+func NewOxmIdTunMetadata20() *OxmIdTunMetadata20 {
+	obj := &OxmIdTunMetadata20{
+		OxmId: NewOxmId(96380),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata20) GetOXMName() string {
+	return "tun_metadata20"
+}
+
+func (self *OxmIdTunMetadata20) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata20Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata20Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata20Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata20Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata20Masked, error) {
+	_oxmidtunmetadata20masked := &OxmIdTunMetadata20Masked{OxmId: parent}
+	return _oxmidtunmetadata20masked, nil
+}
+
+func NewOxmIdTunMetadata20Masked() *OxmIdTunMetadata20Masked {
+	obj := &OxmIdTunMetadata20Masked{
+		OxmId: NewOxmId(96760),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata20Masked) GetOXMName() string {
+	return "tun_metadata20_masked"
+}
+
+func (self *OxmIdTunMetadata20Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata21 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata21 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata21) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata21(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata21, error) {
+	_oxmidtunmetadata21 := &OxmIdTunMetadata21{OxmId: parent}
+	return _oxmidtunmetadata21, nil
+}
+
+func NewOxmIdTunMetadata21() *OxmIdTunMetadata21 {
+	obj := &OxmIdTunMetadata21{
+		OxmId: NewOxmId(96892),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata21) GetOXMName() string {
+	return "tun_metadata21"
+}
+
+func (self *OxmIdTunMetadata21) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata21Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata21Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata21Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata21Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata21Masked, error) {
+	_oxmidtunmetadata21masked := &OxmIdTunMetadata21Masked{OxmId: parent}
+	return _oxmidtunmetadata21masked, nil
+}
+
+func NewOxmIdTunMetadata21Masked() *OxmIdTunMetadata21Masked {
+	obj := &OxmIdTunMetadata21Masked{
+		OxmId: NewOxmId(97272),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata21Masked) GetOXMName() string {
+	return "tun_metadata21_masked"
+}
+
+func (self *OxmIdTunMetadata21Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata22 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata22 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata22) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata22(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata22, error) {
+	_oxmidtunmetadata22 := &OxmIdTunMetadata22{OxmId: parent}
+	return _oxmidtunmetadata22, nil
+}
+
+func NewOxmIdTunMetadata22() *OxmIdTunMetadata22 {
+	obj := &OxmIdTunMetadata22{
+		OxmId: NewOxmId(97404),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata22) GetOXMName() string {
+	return "tun_metadata22"
+}
+
+func (self *OxmIdTunMetadata22) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata22Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata22Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata22Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata22Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata22Masked, error) {
+	_oxmidtunmetadata22masked := &OxmIdTunMetadata22Masked{OxmId: parent}
+	return _oxmidtunmetadata22masked, nil
+}
+
+func NewOxmIdTunMetadata22Masked() *OxmIdTunMetadata22Masked {
+	obj := &OxmIdTunMetadata22Masked{
+		OxmId: NewOxmId(97784),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata22Masked) GetOXMName() string {
+	return "tun_metadata22_masked"
+}
+
+func (self *OxmIdTunMetadata22Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata23 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata23 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata23) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata23(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata23, error) {
+	_oxmidtunmetadata23 := &OxmIdTunMetadata23{OxmId: parent}
+	return _oxmidtunmetadata23, nil
+}
+
+func NewOxmIdTunMetadata23() *OxmIdTunMetadata23 {
+	obj := &OxmIdTunMetadata23{
+		OxmId: NewOxmId(97916),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata23) GetOXMName() string {
+	return "tun_metadata23"
+}
+
+func (self *OxmIdTunMetadata23) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata23Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata23Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata23Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata23Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata23Masked, error) {
+	_oxmidtunmetadata23masked := &OxmIdTunMetadata23Masked{OxmId: parent}
+	return _oxmidtunmetadata23masked, nil
+}
+
+func NewOxmIdTunMetadata23Masked() *OxmIdTunMetadata23Masked {
+	obj := &OxmIdTunMetadata23Masked{
+		OxmId: NewOxmId(98296),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata23Masked) GetOXMName() string {
+	return "tun_metadata23_masked"
+}
+
+func (self *OxmIdTunMetadata23Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata24 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata24 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata24) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata24(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata24, error) {
+	_oxmidtunmetadata24 := &OxmIdTunMetadata24{OxmId: parent}
+	return _oxmidtunmetadata24, nil
+}
+
+func NewOxmIdTunMetadata24() *OxmIdTunMetadata24 {
+	obj := &OxmIdTunMetadata24{
+		OxmId: NewOxmId(98428),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata24) GetOXMName() string {
+	return "tun_metadata24"
+}
+
+func (self *OxmIdTunMetadata24) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata24Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata24Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata24Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata24Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata24Masked, error) {
+	_oxmidtunmetadata24masked := &OxmIdTunMetadata24Masked{OxmId: parent}
+	return _oxmidtunmetadata24masked, nil
+}
+
+func NewOxmIdTunMetadata24Masked() *OxmIdTunMetadata24Masked {
+	obj := &OxmIdTunMetadata24Masked{
+		OxmId: NewOxmId(98808),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata24Masked) GetOXMName() string {
+	return "tun_metadata24_masked"
+}
+
+func (self *OxmIdTunMetadata24Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata25 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata25 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata25) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata25(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata25, error) {
+	_oxmidtunmetadata25 := &OxmIdTunMetadata25{OxmId: parent}
+	return _oxmidtunmetadata25, nil
+}
+
+func NewOxmIdTunMetadata25() *OxmIdTunMetadata25 {
+	obj := &OxmIdTunMetadata25{
+		OxmId: NewOxmId(98940),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata25) GetOXMName() string {
+	return "tun_metadata25"
+}
+
+func (self *OxmIdTunMetadata25) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata25Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata25Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata25Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata25Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata25Masked, error) {
+	_oxmidtunmetadata25masked := &OxmIdTunMetadata25Masked{OxmId: parent}
+	return _oxmidtunmetadata25masked, nil
+}
+
+func NewOxmIdTunMetadata25Masked() *OxmIdTunMetadata25Masked {
+	obj := &OxmIdTunMetadata25Masked{
+		OxmId: NewOxmId(99320),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata25Masked) GetOXMName() string {
+	return "tun_metadata25_masked"
+}
+
+func (self *OxmIdTunMetadata25Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata26 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata26 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata26) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata26(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata26, error) {
+	_oxmidtunmetadata26 := &OxmIdTunMetadata26{OxmId: parent}
+	return _oxmidtunmetadata26, nil
+}
+
+func NewOxmIdTunMetadata26() *OxmIdTunMetadata26 {
+	obj := &OxmIdTunMetadata26{
+		OxmId: NewOxmId(99452),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata26) GetOXMName() string {
+	return "tun_metadata26"
+}
+
+func (self *OxmIdTunMetadata26) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata26Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata26Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata26Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata26Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata26Masked, error) {
+	_oxmidtunmetadata26masked := &OxmIdTunMetadata26Masked{OxmId: parent}
+	return _oxmidtunmetadata26masked, nil
+}
+
+func NewOxmIdTunMetadata26Masked() *OxmIdTunMetadata26Masked {
+	obj := &OxmIdTunMetadata26Masked{
+		OxmId: NewOxmId(99832),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata26Masked) GetOXMName() string {
+	return "tun_metadata26_masked"
+}
+
+func (self *OxmIdTunMetadata26Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata27 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata27 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata27) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata27(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata27, error) {
+	_oxmidtunmetadata27 := &OxmIdTunMetadata27{OxmId: parent}
+	return _oxmidtunmetadata27, nil
+}
+
+func NewOxmIdTunMetadata27() *OxmIdTunMetadata27 {
+	obj := &OxmIdTunMetadata27{
+		OxmId: NewOxmId(99964),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata27) GetOXMName() string {
+	return "tun_metadata27"
+}
+
+func (self *OxmIdTunMetadata27) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata27Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata27Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata27Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata27Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata27Masked, error) {
+	_oxmidtunmetadata27masked := &OxmIdTunMetadata27Masked{OxmId: parent}
+	return _oxmidtunmetadata27masked, nil
+}
+
+func NewOxmIdTunMetadata27Masked() *OxmIdTunMetadata27Masked {
+	obj := &OxmIdTunMetadata27Masked{
+		OxmId: NewOxmId(100344),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata27Masked) GetOXMName() string {
+	return "tun_metadata27_masked"
+}
+
+func (self *OxmIdTunMetadata27Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata28 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata28 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata28) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata28(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata28, error) {
+	_oxmidtunmetadata28 := &OxmIdTunMetadata28{OxmId: parent}
+	return _oxmidtunmetadata28, nil
+}
+
+func NewOxmIdTunMetadata28() *OxmIdTunMetadata28 {
+	obj := &OxmIdTunMetadata28{
+		OxmId: NewOxmId(100476),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata28) GetOXMName() string {
+	return "tun_metadata28"
+}
+
+func (self *OxmIdTunMetadata28) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata28Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata28Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata28Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata28Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata28Masked, error) {
+	_oxmidtunmetadata28masked := &OxmIdTunMetadata28Masked{OxmId: parent}
+	return _oxmidtunmetadata28masked, nil
+}
+
+func NewOxmIdTunMetadata28Masked() *OxmIdTunMetadata28Masked {
+	obj := &OxmIdTunMetadata28Masked{
+		OxmId: NewOxmId(100856),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata28Masked) GetOXMName() string {
+	return "tun_metadata28_masked"
+}
+
+func (self *OxmIdTunMetadata28Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata29 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata29 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata29) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata29(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata29, error) {
+	_oxmidtunmetadata29 := &OxmIdTunMetadata29{OxmId: parent}
+	return _oxmidtunmetadata29, nil
+}
+
+func NewOxmIdTunMetadata29() *OxmIdTunMetadata29 {
+	obj := &OxmIdTunMetadata29{
+		OxmId: NewOxmId(100988),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata29) GetOXMName() string {
+	return "tun_metadata29"
+}
+
+func (self *OxmIdTunMetadata29) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata29Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata29Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata29Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata29Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata29Masked, error) {
+	_oxmidtunmetadata29masked := &OxmIdTunMetadata29Masked{OxmId: parent}
+	return _oxmidtunmetadata29masked, nil
+}
+
+func NewOxmIdTunMetadata29Masked() *OxmIdTunMetadata29Masked {
+	obj := &OxmIdTunMetadata29Masked{
+		OxmId: NewOxmId(101368),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata29Masked) GetOXMName() string {
+	return "tun_metadata29_masked"
+}
+
+func (self *OxmIdTunMetadata29Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata2Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata2Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata2Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata2Masked, error) {
+	_oxmidtunmetadata2masked := &OxmIdTunMetadata2Masked{OxmId: parent}
+	return _oxmidtunmetadata2masked, nil
+}
+
+func NewOxmIdTunMetadata2Masked() *OxmIdTunMetadata2Masked {
+	obj := &OxmIdTunMetadata2Masked{
+		OxmId: NewOxmId(87544),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata2Masked) GetOXMName() string {
+	return "tun_metadata2_masked"
+}
+
+func (self *OxmIdTunMetadata2Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata3 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata3 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata3(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata3, error) {
+	_oxmidtunmetadata3 := &OxmIdTunMetadata3{OxmId: parent}
+	return _oxmidtunmetadata3, nil
+}
+
+func NewOxmIdTunMetadata3() *OxmIdTunMetadata3 {
+	obj := &OxmIdTunMetadata3{
+		OxmId: NewOxmId(87676),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata3) GetOXMName() string {
+	return "tun_metadata3"
+}
+
+func (self *OxmIdTunMetadata3) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata30 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata30 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata30) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata30(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata30, error) {
+	_oxmidtunmetadata30 := &OxmIdTunMetadata30{OxmId: parent}
+	return _oxmidtunmetadata30, nil
+}
+
+func NewOxmIdTunMetadata30() *OxmIdTunMetadata30 {
+	obj := &OxmIdTunMetadata30{
+		OxmId: NewOxmId(101500),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata30) GetOXMName() string {
+	return "tun_metadata30"
+}
+
+func (self *OxmIdTunMetadata30) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata30Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata30Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata30Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata30Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata30Masked, error) {
+	_oxmidtunmetadata30masked := &OxmIdTunMetadata30Masked{OxmId: parent}
+	return _oxmidtunmetadata30masked, nil
+}
+
+func NewOxmIdTunMetadata30Masked() *OxmIdTunMetadata30Masked {
+	obj := &OxmIdTunMetadata30Masked{
+		OxmId: NewOxmId(101880),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata30Masked) GetOXMName() string {
+	return "tun_metadata30_masked"
+}
+
+func (self *OxmIdTunMetadata30Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata31 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata31 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata31) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata31(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata31, error) {
+	_oxmidtunmetadata31 := &OxmIdTunMetadata31{OxmId: parent}
+	return _oxmidtunmetadata31, nil
+}
+
+func NewOxmIdTunMetadata31() *OxmIdTunMetadata31 {
+	obj := &OxmIdTunMetadata31{
+		OxmId: NewOxmId(102012),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata31) GetOXMName() string {
+	return "tun_metadata31"
+}
+
+func (self *OxmIdTunMetadata31) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata31Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata31Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata31Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata31Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata31Masked, error) {
+	_oxmidtunmetadata31masked := &OxmIdTunMetadata31Masked{OxmId: parent}
+	return _oxmidtunmetadata31masked, nil
+}
+
+func NewOxmIdTunMetadata31Masked() *OxmIdTunMetadata31Masked {
+	obj := &OxmIdTunMetadata31Masked{
+		OxmId: NewOxmId(102392),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata31Masked) GetOXMName() string {
+	return "tun_metadata31_masked"
+}
+
+func (self *OxmIdTunMetadata31Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata32 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata32 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata32) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata32(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata32, error) {
+	_oxmidtunmetadata32 := &OxmIdTunMetadata32{OxmId: parent}
+	return _oxmidtunmetadata32, nil
+}
+
+func NewOxmIdTunMetadata32() *OxmIdTunMetadata32 {
+	obj := &OxmIdTunMetadata32{
+		OxmId: NewOxmId(102524),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata32) GetOXMName() string {
+	return "tun_metadata32"
+}
+
+func (self *OxmIdTunMetadata32) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata32Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata32Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata32Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata32Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata32Masked, error) {
+	_oxmidtunmetadata32masked := &OxmIdTunMetadata32Masked{OxmId: parent}
+	return _oxmidtunmetadata32masked, nil
+}
+
+func NewOxmIdTunMetadata32Masked() *OxmIdTunMetadata32Masked {
+	obj := &OxmIdTunMetadata32Masked{
+		OxmId: NewOxmId(102904),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata32Masked) GetOXMName() string {
+	return "tun_metadata32_masked"
+}
+
+func (self *OxmIdTunMetadata32Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata33 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata33 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata33) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata33(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata33, error) {
+	_oxmidtunmetadata33 := &OxmIdTunMetadata33{OxmId: parent}
+	return _oxmidtunmetadata33, nil
+}
+
+func NewOxmIdTunMetadata33() *OxmIdTunMetadata33 {
+	obj := &OxmIdTunMetadata33{
+		OxmId: NewOxmId(103036),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata33) GetOXMName() string {
+	return "tun_metadata33"
+}
+
+func (self *OxmIdTunMetadata33) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata33Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata33Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata33Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata33Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata33Masked, error) {
+	_oxmidtunmetadata33masked := &OxmIdTunMetadata33Masked{OxmId: parent}
+	return _oxmidtunmetadata33masked, nil
+}
+
+func NewOxmIdTunMetadata33Masked() *OxmIdTunMetadata33Masked {
+	obj := &OxmIdTunMetadata33Masked{
+		OxmId: NewOxmId(103416),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata33Masked) GetOXMName() string {
+	return "tun_metadata33_masked"
+}
+
+func (self *OxmIdTunMetadata33Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata34 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata34 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata34) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata34(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata34, error) {
+	_oxmidtunmetadata34 := &OxmIdTunMetadata34{OxmId: parent}
+	return _oxmidtunmetadata34, nil
+}
+
+func NewOxmIdTunMetadata34() *OxmIdTunMetadata34 {
+	obj := &OxmIdTunMetadata34{
+		OxmId: NewOxmId(103548),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata34) GetOXMName() string {
+	return "tun_metadata34"
+}
+
+func (self *OxmIdTunMetadata34) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata34Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata34Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata34Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata34Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata34Masked, error) {
+	_oxmidtunmetadata34masked := &OxmIdTunMetadata34Masked{OxmId: parent}
+	return _oxmidtunmetadata34masked, nil
+}
+
+func NewOxmIdTunMetadata34Masked() *OxmIdTunMetadata34Masked {
+	obj := &OxmIdTunMetadata34Masked{
+		OxmId: NewOxmId(103928),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata34Masked) GetOXMName() string {
+	return "tun_metadata34_masked"
+}
+
+func (self *OxmIdTunMetadata34Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata35 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata35 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata35) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata35(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata35, error) {
+	_oxmidtunmetadata35 := &OxmIdTunMetadata35{OxmId: parent}
+	return _oxmidtunmetadata35, nil
+}
+
+func NewOxmIdTunMetadata35() *OxmIdTunMetadata35 {
+	obj := &OxmIdTunMetadata35{
+		OxmId: NewOxmId(104060),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata35) GetOXMName() string {
+	return "tun_metadata35"
+}
+
+func (self *OxmIdTunMetadata35) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata35Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata35Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata35Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata35Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata35Masked, error) {
+	_oxmidtunmetadata35masked := &OxmIdTunMetadata35Masked{OxmId: parent}
+	return _oxmidtunmetadata35masked, nil
+}
+
+func NewOxmIdTunMetadata35Masked() *OxmIdTunMetadata35Masked {
+	obj := &OxmIdTunMetadata35Masked{
+		OxmId: NewOxmId(104440),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata35Masked) GetOXMName() string {
+	return "tun_metadata35_masked"
+}
+
+func (self *OxmIdTunMetadata35Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata36 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata36 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata36) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata36(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata36, error) {
+	_oxmidtunmetadata36 := &OxmIdTunMetadata36{OxmId: parent}
+	return _oxmidtunmetadata36, nil
+}
+
+func NewOxmIdTunMetadata36() *OxmIdTunMetadata36 {
+	obj := &OxmIdTunMetadata36{
+		OxmId: NewOxmId(104572),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata36) GetOXMName() string {
+	return "tun_metadata36"
+}
+
+func (self *OxmIdTunMetadata36) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata36Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata36Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata36Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata36Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata36Masked, error) {
+	_oxmidtunmetadata36masked := &OxmIdTunMetadata36Masked{OxmId: parent}
+	return _oxmidtunmetadata36masked, nil
+}
+
+func NewOxmIdTunMetadata36Masked() *OxmIdTunMetadata36Masked {
+	obj := &OxmIdTunMetadata36Masked{
+		OxmId: NewOxmId(104952),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata36Masked) GetOXMName() string {
+	return "tun_metadata36_masked"
+}
+
+func (self *OxmIdTunMetadata36Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata37 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata37 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata37) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata37(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata37, error) {
+	_oxmidtunmetadata37 := &OxmIdTunMetadata37{OxmId: parent}
+	return _oxmidtunmetadata37, nil
+}
+
+func NewOxmIdTunMetadata37() *OxmIdTunMetadata37 {
+	obj := &OxmIdTunMetadata37{
+		OxmId: NewOxmId(105084),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata37) GetOXMName() string {
+	return "tun_metadata37"
+}
+
+func (self *OxmIdTunMetadata37) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata37Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata37Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata37Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata37Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata37Masked, error) {
+	_oxmidtunmetadata37masked := &OxmIdTunMetadata37Masked{OxmId: parent}
+	return _oxmidtunmetadata37masked, nil
+}
+
+func NewOxmIdTunMetadata37Masked() *OxmIdTunMetadata37Masked {
+	obj := &OxmIdTunMetadata37Masked{
+		OxmId: NewOxmId(105464),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata37Masked) GetOXMName() string {
+	return "tun_metadata37_masked"
+}
+
+func (self *OxmIdTunMetadata37Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata38 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata38 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata38) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata38(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata38, error) {
+	_oxmidtunmetadata38 := &OxmIdTunMetadata38{OxmId: parent}
+	return _oxmidtunmetadata38, nil
+}
+
+func NewOxmIdTunMetadata38() *OxmIdTunMetadata38 {
+	obj := &OxmIdTunMetadata38{
+		OxmId: NewOxmId(105596),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata38) GetOXMName() string {
+	return "tun_metadata38"
+}
+
+func (self *OxmIdTunMetadata38) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata38Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata38Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata38Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata38Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata38Masked, error) {
+	_oxmidtunmetadata38masked := &OxmIdTunMetadata38Masked{OxmId: parent}
+	return _oxmidtunmetadata38masked, nil
+}
+
+func NewOxmIdTunMetadata38Masked() *OxmIdTunMetadata38Masked {
+	obj := &OxmIdTunMetadata38Masked{
+		OxmId: NewOxmId(105976),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata38Masked) GetOXMName() string {
+	return "tun_metadata38_masked"
+}
+
+func (self *OxmIdTunMetadata38Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata39 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata39 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata39) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata39(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata39, error) {
+	_oxmidtunmetadata39 := &OxmIdTunMetadata39{OxmId: parent}
+	return _oxmidtunmetadata39, nil
+}
+
+func NewOxmIdTunMetadata39() *OxmIdTunMetadata39 {
+	obj := &OxmIdTunMetadata39{
+		OxmId: NewOxmId(106108),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata39) GetOXMName() string {
+	return "tun_metadata39"
+}
+
+func (self *OxmIdTunMetadata39) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata39Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata39Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata39Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata39Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata39Masked, error) {
+	_oxmidtunmetadata39masked := &OxmIdTunMetadata39Masked{OxmId: parent}
+	return _oxmidtunmetadata39masked, nil
+}
+
+func NewOxmIdTunMetadata39Masked() *OxmIdTunMetadata39Masked {
+	obj := &OxmIdTunMetadata39Masked{
+		OxmId: NewOxmId(106488),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata39Masked) GetOXMName() string {
+	return "tun_metadata39_masked"
+}
+
+func (self *OxmIdTunMetadata39Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata3Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata3Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata3Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata3Masked, error) {
+	_oxmidtunmetadata3masked := &OxmIdTunMetadata3Masked{OxmId: parent}
+	return _oxmidtunmetadata3masked, nil
+}
+
+func NewOxmIdTunMetadata3Masked() *OxmIdTunMetadata3Masked {
+	obj := &OxmIdTunMetadata3Masked{
+		OxmId: NewOxmId(88056),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata3Masked) GetOXMName() string {
+	return "tun_metadata3_masked"
+}
+
+func (self *OxmIdTunMetadata3Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata4 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata4 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata4(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata4, error) {
+	_oxmidtunmetadata4 := &OxmIdTunMetadata4{OxmId: parent}
+	return _oxmidtunmetadata4, nil
+}
+
+func NewOxmIdTunMetadata4() *OxmIdTunMetadata4 {
+	obj := &OxmIdTunMetadata4{
+		OxmId: NewOxmId(88188),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata4) GetOXMName() string {
+	return "tun_metadata4"
+}
+
+func (self *OxmIdTunMetadata4) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata40 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata40 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata40) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata40(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata40, error) {
+	_oxmidtunmetadata40 := &OxmIdTunMetadata40{OxmId: parent}
+	return _oxmidtunmetadata40, nil
+}
+
+func NewOxmIdTunMetadata40() *OxmIdTunMetadata40 {
+	obj := &OxmIdTunMetadata40{
+		OxmId: NewOxmId(106620),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata40) GetOXMName() string {
+	return "tun_metadata40"
+}
+
+func (self *OxmIdTunMetadata40) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata40Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata40Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata40Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata40Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata40Masked, error) {
+	_oxmidtunmetadata40masked := &OxmIdTunMetadata40Masked{OxmId: parent}
+	return _oxmidtunmetadata40masked, nil
+}
+
+func NewOxmIdTunMetadata40Masked() *OxmIdTunMetadata40Masked {
+	obj := &OxmIdTunMetadata40Masked{
+		OxmId: NewOxmId(107000),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata40Masked) GetOXMName() string {
+	return "tun_metadata40_masked"
+}
+
+func (self *OxmIdTunMetadata40Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata41 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata41 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata41) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata41(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata41, error) {
+	_oxmidtunmetadata41 := &OxmIdTunMetadata41{OxmId: parent}
+	return _oxmidtunmetadata41, nil
+}
+
+func NewOxmIdTunMetadata41() *OxmIdTunMetadata41 {
+	obj := &OxmIdTunMetadata41{
+		OxmId: NewOxmId(107132),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata41) GetOXMName() string {
+	return "tun_metadata41"
+}
+
+func (self *OxmIdTunMetadata41) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata41Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata41Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata41Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata41Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata41Masked, error) {
+	_oxmidtunmetadata41masked := &OxmIdTunMetadata41Masked{OxmId: parent}
+	return _oxmidtunmetadata41masked, nil
+}
+
+func NewOxmIdTunMetadata41Masked() *OxmIdTunMetadata41Masked {
+	obj := &OxmIdTunMetadata41Masked{
+		OxmId: NewOxmId(107512),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata41Masked) GetOXMName() string {
+	return "tun_metadata41_masked"
+}
+
+func (self *OxmIdTunMetadata41Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata42 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata42 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata42) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata42(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata42, error) {
+	_oxmidtunmetadata42 := &OxmIdTunMetadata42{OxmId: parent}
+	return _oxmidtunmetadata42, nil
+}
+
+func NewOxmIdTunMetadata42() *OxmIdTunMetadata42 {
+	obj := &OxmIdTunMetadata42{
+		OxmId: NewOxmId(107644),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata42) GetOXMName() string {
+	return "tun_metadata42"
+}
+
+func (self *OxmIdTunMetadata42) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata42Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata42Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata42Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata42Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata42Masked, error) {
+	_oxmidtunmetadata42masked := &OxmIdTunMetadata42Masked{OxmId: parent}
+	return _oxmidtunmetadata42masked, nil
+}
+
+func NewOxmIdTunMetadata42Masked() *OxmIdTunMetadata42Masked {
+	obj := &OxmIdTunMetadata42Masked{
+		OxmId: NewOxmId(108024),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata42Masked) GetOXMName() string {
+	return "tun_metadata42_masked"
+}
+
+func (self *OxmIdTunMetadata42Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata43 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata43 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata43) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata43(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata43, error) {
+	_oxmidtunmetadata43 := &OxmIdTunMetadata43{OxmId: parent}
+	return _oxmidtunmetadata43, nil
+}
+
+func NewOxmIdTunMetadata43() *OxmIdTunMetadata43 {
+	obj := &OxmIdTunMetadata43{
+		OxmId: NewOxmId(108156),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata43) GetOXMName() string {
+	return "tun_metadata43"
+}
+
+func (self *OxmIdTunMetadata43) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata43Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata43Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata43Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata43Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata43Masked, error) {
+	_oxmidtunmetadata43masked := &OxmIdTunMetadata43Masked{OxmId: parent}
+	return _oxmidtunmetadata43masked, nil
+}
+
+func NewOxmIdTunMetadata43Masked() *OxmIdTunMetadata43Masked {
+	obj := &OxmIdTunMetadata43Masked{
+		OxmId: NewOxmId(108536),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata43Masked) GetOXMName() string {
+	return "tun_metadata43_masked"
+}
+
+func (self *OxmIdTunMetadata43Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata44 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata44 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata44) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata44(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata44, error) {
+	_oxmidtunmetadata44 := &OxmIdTunMetadata44{OxmId: parent}
+	return _oxmidtunmetadata44, nil
+}
+
+func NewOxmIdTunMetadata44() *OxmIdTunMetadata44 {
+	obj := &OxmIdTunMetadata44{
+		OxmId: NewOxmId(108668),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata44) GetOXMName() string {
+	return "tun_metadata44"
+}
+
+func (self *OxmIdTunMetadata44) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata44Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata44Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata44Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata44Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata44Masked, error) {
+	_oxmidtunmetadata44masked := &OxmIdTunMetadata44Masked{OxmId: parent}
+	return _oxmidtunmetadata44masked, nil
+}
+
+func NewOxmIdTunMetadata44Masked() *OxmIdTunMetadata44Masked {
+	obj := &OxmIdTunMetadata44Masked{
+		OxmId: NewOxmId(109048),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata44Masked) GetOXMName() string {
+	return "tun_metadata44_masked"
+}
+
+func (self *OxmIdTunMetadata44Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata45 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata45 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata45) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata45(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata45, error) {
+	_oxmidtunmetadata45 := &OxmIdTunMetadata45{OxmId: parent}
+	return _oxmidtunmetadata45, nil
+}
+
+func NewOxmIdTunMetadata45() *OxmIdTunMetadata45 {
+	obj := &OxmIdTunMetadata45{
+		OxmId: NewOxmId(109180),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata45) GetOXMName() string {
+	return "tun_metadata45"
+}
+
+func (self *OxmIdTunMetadata45) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata45Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata45Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata45Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata45Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata45Masked, error) {
+	_oxmidtunmetadata45masked := &OxmIdTunMetadata45Masked{OxmId: parent}
+	return _oxmidtunmetadata45masked, nil
+}
+
+func NewOxmIdTunMetadata45Masked() *OxmIdTunMetadata45Masked {
+	obj := &OxmIdTunMetadata45Masked{
+		OxmId: NewOxmId(109560),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata45Masked) GetOXMName() string {
+	return "tun_metadata45_masked"
+}
+
+func (self *OxmIdTunMetadata45Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata46 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata46 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata46) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata46(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata46, error) {
+	_oxmidtunmetadata46 := &OxmIdTunMetadata46{OxmId: parent}
+	return _oxmidtunmetadata46, nil
+}
+
+func NewOxmIdTunMetadata46() *OxmIdTunMetadata46 {
+	obj := &OxmIdTunMetadata46{
+		OxmId: NewOxmId(109692),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata46) GetOXMName() string {
+	return "tun_metadata46"
+}
+
+func (self *OxmIdTunMetadata46) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata46Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata46Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata46Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata46Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata46Masked, error) {
+	_oxmidtunmetadata46masked := &OxmIdTunMetadata46Masked{OxmId: parent}
+	return _oxmidtunmetadata46masked, nil
+}
+
+func NewOxmIdTunMetadata46Masked() *OxmIdTunMetadata46Masked {
+	obj := &OxmIdTunMetadata46Masked{
+		OxmId: NewOxmId(110072),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata46Masked) GetOXMName() string {
+	return "tun_metadata46_masked"
+}
+
+func (self *OxmIdTunMetadata46Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata47 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata47 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata47) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata47(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata47, error) {
+	_oxmidtunmetadata47 := &OxmIdTunMetadata47{OxmId: parent}
+	return _oxmidtunmetadata47, nil
+}
+
+func NewOxmIdTunMetadata47() *OxmIdTunMetadata47 {
+	obj := &OxmIdTunMetadata47{
+		OxmId: NewOxmId(110204),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata47) GetOXMName() string {
+	return "tun_metadata47"
+}
+
+func (self *OxmIdTunMetadata47) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata47Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata47Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata47Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata47Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata47Masked, error) {
+	_oxmidtunmetadata47masked := &OxmIdTunMetadata47Masked{OxmId: parent}
+	return _oxmidtunmetadata47masked, nil
+}
+
+func NewOxmIdTunMetadata47Masked() *OxmIdTunMetadata47Masked {
+	obj := &OxmIdTunMetadata47Masked{
+		OxmId: NewOxmId(110584),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata47Masked) GetOXMName() string {
+	return "tun_metadata47_masked"
+}
+
+func (self *OxmIdTunMetadata47Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata48 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata48 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata48) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata48(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata48, error) {
+	_oxmidtunmetadata48 := &OxmIdTunMetadata48{OxmId: parent}
+	return _oxmidtunmetadata48, nil
+}
+
+func NewOxmIdTunMetadata48() *OxmIdTunMetadata48 {
+	obj := &OxmIdTunMetadata48{
+		OxmId: NewOxmId(110716),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata48) GetOXMName() string {
+	return "tun_metadata48"
+}
+
+func (self *OxmIdTunMetadata48) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata48Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata48Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata48Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata48Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata48Masked, error) {
+	_oxmidtunmetadata48masked := &OxmIdTunMetadata48Masked{OxmId: parent}
+	return _oxmidtunmetadata48masked, nil
+}
+
+func NewOxmIdTunMetadata48Masked() *OxmIdTunMetadata48Masked {
+	obj := &OxmIdTunMetadata48Masked{
+		OxmId: NewOxmId(111096),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata48Masked) GetOXMName() string {
+	return "tun_metadata48_masked"
+}
+
+func (self *OxmIdTunMetadata48Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata49 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata49 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata49) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata49(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata49, error) {
+	_oxmidtunmetadata49 := &OxmIdTunMetadata49{OxmId: parent}
+	return _oxmidtunmetadata49, nil
+}
+
+func NewOxmIdTunMetadata49() *OxmIdTunMetadata49 {
+	obj := &OxmIdTunMetadata49{
+		OxmId: NewOxmId(111228),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata49) GetOXMName() string {
+	return "tun_metadata49"
+}
+
+func (self *OxmIdTunMetadata49) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata49Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata49Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata49Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata49Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata49Masked, error) {
+	_oxmidtunmetadata49masked := &OxmIdTunMetadata49Masked{OxmId: parent}
+	return _oxmidtunmetadata49masked, nil
+}
+
+func NewOxmIdTunMetadata49Masked() *OxmIdTunMetadata49Masked {
+	obj := &OxmIdTunMetadata49Masked{
+		OxmId: NewOxmId(111608),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata49Masked) GetOXMName() string {
+	return "tun_metadata49_masked"
+}
+
+func (self *OxmIdTunMetadata49Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata4Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata4Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata4Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata4Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata4Masked, error) {
+	_oxmidtunmetadata4masked := &OxmIdTunMetadata4Masked{OxmId: parent}
+	return _oxmidtunmetadata4masked, nil
+}
+
+func NewOxmIdTunMetadata4Masked() *OxmIdTunMetadata4Masked {
+	obj := &OxmIdTunMetadata4Masked{
+		OxmId: NewOxmId(88568),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata4Masked) GetOXMName() string {
+	return "tun_metadata4_masked"
+}
+
+func (self *OxmIdTunMetadata4Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata5 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata5 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata5) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata5(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata5, error) {
+	_oxmidtunmetadata5 := &OxmIdTunMetadata5{OxmId: parent}
+	return _oxmidtunmetadata5, nil
+}
+
+func NewOxmIdTunMetadata5() *OxmIdTunMetadata5 {
+	obj := &OxmIdTunMetadata5{
+		OxmId: NewOxmId(88700),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata5) GetOXMName() string {
+	return "tun_metadata5"
+}
+
+func (self *OxmIdTunMetadata5) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata50 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata50 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata50) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata50(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata50, error) {
+	_oxmidtunmetadata50 := &OxmIdTunMetadata50{OxmId: parent}
+	return _oxmidtunmetadata50, nil
+}
+
+func NewOxmIdTunMetadata50() *OxmIdTunMetadata50 {
+	obj := &OxmIdTunMetadata50{
+		OxmId: NewOxmId(111740),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata50) GetOXMName() string {
+	return "tun_metadata50"
+}
+
+func (self *OxmIdTunMetadata50) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata50Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata50Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata50Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata50Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata50Masked, error) {
+	_oxmidtunmetadata50masked := &OxmIdTunMetadata50Masked{OxmId: parent}
+	return _oxmidtunmetadata50masked, nil
+}
+
+func NewOxmIdTunMetadata50Masked() *OxmIdTunMetadata50Masked {
+	obj := &OxmIdTunMetadata50Masked{
+		OxmId: NewOxmId(112120),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata50Masked) GetOXMName() string {
+	return "tun_metadata50_masked"
+}
+
+func (self *OxmIdTunMetadata50Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata51 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata51 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata51) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata51(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata51, error) {
+	_oxmidtunmetadata51 := &OxmIdTunMetadata51{OxmId: parent}
+	return _oxmidtunmetadata51, nil
+}
+
+func NewOxmIdTunMetadata51() *OxmIdTunMetadata51 {
+	obj := &OxmIdTunMetadata51{
+		OxmId: NewOxmId(112252),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata51) GetOXMName() string {
+	return "tun_metadata51"
+}
+
+func (self *OxmIdTunMetadata51) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata51Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata51Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata51Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata51Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata51Masked, error) {
+	_oxmidtunmetadata51masked := &OxmIdTunMetadata51Masked{OxmId: parent}
+	return _oxmidtunmetadata51masked, nil
+}
+
+func NewOxmIdTunMetadata51Masked() *OxmIdTunMetadata51Masked {
+	obj := &OxmIdTunMetadata51Masked{
+		OxmId: NewOxmId(112632),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata51Masked) GetOXMName() string {
+	return "tun_metadata51_masked"
+}
+
+func (self *OxmIdTunMetadata51Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata52 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata52 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata52) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata52(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata52, error) {
+	_oxmidtunmetadata52 := &OxmIdTunMetadata52{OxmId: parent}
+	return _oxmidtunmetadata52, nil
+}
+
+func NewOxmIdTunMetadata52() *OxmIdTunMetadata52 {
+	obj := &OxmIdTunMetadata52{
+		OxmId: NewOxmId(112764),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata52) GetOXMName() string {
+	return "tun_metadata52"
+}
+
+func (self *OxmIdTunMetadata52) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata52Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata52Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata52Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata52Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata52Masked, error) {
+	_oxmidtunmetadata52masked := &OxmIdTunMetadata52Masked{OxmId: parent}
+	return _oxmidtunmetadata52masked, nil
+}
+
+func NewOxmIdTunMetadata52Masked() *OxmIdTunMetadata52Masked {
+	obj := &OxmIdTunMetadata52Masked{
+		OxmId: NewOxmId(113144),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata52Masked) GetOXMName() string {
+	return "tun_metadata52_masked"
+}
+
+func (self *OxmIdTunMetadata52Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata53 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata53 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata53) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata53(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata53, error) {
+	_oxmidtunmetadata53 := &OxmIdTunMetadata53{OxmId: parent}
+	return _oxmidtunmetadata53, nil
+}
+
+func NewOxmIdTunMetadata53() *OxmIdTunMetadata53 {
+	obj := &OxmIdTunMetadata53{
+		OxmId: NewOxmId(113276),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata53) GetOXMName() string {
+	return "tun_metadata53"
+}
+
+func (self *OxmIdTunMetadata53) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata53Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata53Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata53Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata53Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata53Masked, error) {
+	_oxmidtunmetadata53masked := &OxmIdTunMetadata53Masked{OxmId: parent}
+	return _oxmidtunmetadata53masked, nil
+}
+
+func NewOxmIdTunMetadata53Masked() *OxmIdTunMetadata53Masked {
+	obj := &OxmIdTunMetadata53Masked{
+		OxmId: NewOxmId(113656),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata53Masked) GetOXMName() string {
+	return "tun_metadata53_masked"
+}
+
+func (self *OxmIdTunMetadata53Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata54 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata54 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata54) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata54(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata54, error) {
+	_oxmidtunmetadata54 := &OxmIdTunMetadata54{OxmId: parent}
+	return _oxmidtunmetadata54, nil
+}
+
+func NewOxmIdTunMetadata54() *OxmIdTunMetadata54 {
+	obj := &OxmIdTunMetadata54{
+		OxmId: NewOxmId(113788),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata54) GetOXMName() string {
+	return "tun_metadata54"
+}
+
+func (self *OxmIdTunMetadata54) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata54Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata54Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata54Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata54Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata54Masked, error) {
+	_oxmidtunmetadata54masked := &OxmIdTunMetadata54Masked{OxmId: parent}
+	return _oxmidtunmetadata54masked, nil
+}
+
+func NewOxmIdTunMetadata54Masked() *OxmIdTunMetadata54Masked {
+	obj := &OxmIdTunMetadata54Masked{
+		OxmId: NewOxmId(114168),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata54Masked) GetOXMName() string {
+	return "tun_metadata54_masked"
+}
+
+func (self *OxmIdTunMetadata54Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata55 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata55 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata55) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata55(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata55, error) {
+	_oxmidtunmetadata55 := &OxmIdTunMetadata55{OxmId: parent}
+	return _oxmidtunmetadata55, nil
+}
+
+func NewOxmIdTunMetadata55() *OxmIdTunMetadata55 {
+	obj := &OxmIdTunMetadata55{
+		OxmId: NewOxmId(114300),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata55) GetOXMName() string {
+	return "tun_metadata55"
+}
+
+func (self *OxmIdTunMetadata55) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata55Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata55Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata55Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata55Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata55Masked, error) {
+	_oxmidtunmetadata55masked := &OxmIdTunMetadata55Masked{OxmId: parent}
+	return _oxmidtunmetadata55masked, nil
+}
+
+func NewOxmIdTunMetadata55Masked() *OxmIdTunMetadata55Masked {
+	obj := &OxmIdTunMetadata55Masked{
+		OxmId: NewOxmId(114680),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata55Masked) GetOXMName() string {
+	return "tun_metadata55_masked"
+}
+
+func (self *OxmIdTunMetadata55Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata56 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata56 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata56) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata56(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata56, error) {
+	_oxmidtunmetadata56 := &OxmIdTunMetadata56{OxmId: parent}
+	return _oxmidtunmetadata56, nil
+}
+
+func NewOxmIdTunMetadata56() *OxmIdTunMetadata56 {
+	obj := &OxmIdTunMetadata56{
+		OxmId: NewOxmId(114812),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata56) GetOXMName() string {
+	return "tun_metadata56"
+}
+
+func (self *OxmIdTunMetadata56) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata56Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata56Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata56Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata56Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata56Masked, error) {
+	_oxmidtunmetadata56masked := &OxmIdTunMetadata56Masked{OxmId: parent}
+	return _oxmidtunmetadata56masked, nil
+}
+
+func NewOxmIdTunMetadata56Masked() *OxmIdTunMetadata56Masked {
+	obj := &OxmIdTunMetadata56Masked{
+		OxmId: NewOxmId(115192),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata56Masked) GetOXMName() string {
+	return "tun_metadata56_masked"
+}
+
+func (self *OxmIdTunMetadata56Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata57 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata57 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata57) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata57(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata57, error) {
+	_oxmidtunmetadata57 := &OxmIdTunMetadata57{OxmId: parent}
+	return _oxmidtunmetadata57, nil
+}
+
+func NewOxmIdTunMetadata57() *OxmIdTunMetadata57 {
+	obj := &OxmIdTunMetadata57{
+		OxmId: NewOxmId(115324),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata57) GetOXMName() string {
+	return "tun_metadata57"
+}
+
+func (self *OxmIdTunMetadata57) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata57Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata57Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata57Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata57Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata57Masked, error) {
+	_oxmidtunmetadata57masked := &OxmIdTunMetadata57Masked{OxmId: parent}
+	return _oxmidtunmetadata57masked, nil
+}
+
+func NewOxmIdTunMetadata57Masked() *OxmIdTunMetadata57Masked {
+	obj := &OxmIdTunMetadata57Masked{
+		OxmId: NewOxmId(115704),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata57Masked) GetOXMName() string {
+	return "tun_metadata57_masked"
+}
+
+func (self *OxmIdTunMetadata57Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata58 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata58 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata58) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata58(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata58, error) {
+	_oxmidtunmetadata58 := &OxmIdTunMetadata58{OxmId: parent}
+	return _oxmidtunmetadata58, nil
+}
+
+func NewOxmIdTunMetadata58() *OxmIdTunMetadata58 {
+	obj := &OxmIdTunMetadata58{
+		OxmId: NewOxmId(115836),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata58) GetOXMName() string {
+	return "tun_metadata58"
+}
+
+func (self *OxmIdTunMetadata58) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata58Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata58Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata58Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata58Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata58Masked, error) {
+	_oxmidtunmetadata58masked := &OxmIdTunMetadata58Masked{OxmId: parent}
+	return _oxmidtunmetadata58masked, nil
+}
+
+func NewOxmIdTunMetadata58Masked() *OxmIdTunMetadata58Masked {
+	obj := &OxmIdTunMetadata58Masked{
+		OxmId: NewOxmId(116216),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata58Masked) GetOXMName() string {
+	return "tun_metadata58_masked"
+}
+
+func (self *OxmIdTunMetadata58Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata59 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata59 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata59) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata59(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata59, error) {
+	_oxmidtunmetadata59 := &OxmIdTunMetadata59{OxmId: parent}
+	return _oxmidtunmetadata59, nil
+}
+
+func NewOxmIdTunMetadata59() *OxmIdTunMetadata59 {
+	obj := &OxmIdTunMetadata59{
+		OxmId: NewOxmId(116348),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata59) GetOXMName() string {
+	return "tun_metadata59"
+}
+
+func (self *OxmIdTunMetadata59) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata59Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata59Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata59Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata59Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata59Masked, error) {
+	_oxmidtunmetadata59masked := &OxmIdTunMetadata59Masked{OxmId: parent}
+	return _oxmidtunmetadata59masked, nil
+}
+
+func NewOxmIdTunMetadata59Masked() *OxmIdTunMetadata59Masked {
+	obj := &OxmIdTunMetadata59Masked{
+		OxmId: NewOxmId(116728),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata59Masked) GetOXMName() string {
+	return "tun_metadata59_masked"
+}
+
+func (self *OxmIdTunMetadata59Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata5Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata5Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata5Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata5Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata5Masked, error) {
+	_oxmidtunmetadata5masked := &OxmIdTunMetadata5Masked{OxmId: parent}
+	return _oxmidtunmetadata5masked, nil
+}
+
+func NewOxmIdTunMetadata5Masked() *OxmIdTunMetadata5Masked {
+	obj := &OxmIdTunMetadata5Masked{
+		OxmId: NewOxmId(89080),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata5Masked) GetOXMName() string {
+	return "tun_metadata5_masked"
+}
+
+func (self *OxmIdTunMetadata5Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata6 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata6 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata6) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata6(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata6, error) {
+	_oxmidtunmetadata6 := &OxmIdTunMetadata6{OxmId: parent}
+	return _oxmidtunmetadata6, nil
+}
+
+func NewOxmIdTunMetadata6() *OxmIdTunMetadata6 {
+	obj := &OxmIdTunMetadata6{
+		OxmId: NewOxmId(89212),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata6) GetOXMName() string {
+	return "tun_metadata6"
+}
+
+func (self *OxmIdTunMetadata6) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata60 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata60 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata60) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata60(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata60, error) {
+	_oxmidtunmetadata60 := &OxmIdTunMetadata60{OxmId: parent}
+	return _oxmidtunmetadata60, nil
+}
+
+func NewOxmIdTunMetadata60() *OxmIdTunMetadata60 {
+	obj := &OxmIdTunMetadata60{
+		OxmId: NewOxmId(116860),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata60) GetOXMName() string {
+	return "tun_metadata60"
+}
+
+func (self *OxmIdTunMetadata60) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata60Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata60Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata60Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata60Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata60Masked, error) {
+	_oxmidtunmetadata60masked := &OxmIdTunMetadata60Masked{OxmId: parent}
+	return _oxmidtunmetadata60masked, nil
+}
+
+func NewOxmIdTunMetadata60Masked() *OxmIdTunMetadata60Masked {
+	obj := &OxmIdTunMetadata60Masked{
+		OxmId: NewOxmId(117240),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata60Masked) GetOXMName() string {
+	return "tun_metadata60_masked"
+}
+
+func (self *OxmIdTunMetadata60Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata61 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata61 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata61) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata61(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata61, error) {
+	_oxmidtunmetadata61 := &OxmIdTunMetadata61{OxmId: parent}
+	return _oxmidtunmetadata61, nil
+}
+
+func NewOxmIdTunMetadata61() *OxmIdTunMetadata61 {
+	obj := &OxmIdTunMetadata61{
+		OxmId: NewOxmId(117372),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata61) GetOXMName() string {
+	return "tun_metadata61"
+}
+
+func (self *OxmIdTunMetadata61) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata61Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata61Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata61Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata61Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata61Masked, error) {
+	_oxmidtunmetadata61masked := &OxmIdTunMetadata61Masked{OxmId: parent}
+	return _oxmidtunmetadata61masked, nil
+}
+
+func NewOxmIdTunMetadata61Masked() *OxmIdTunMetadata61Masked {
+	obj := &OxmIdTunMetadata61Masked{
+		OxmId: NewOxmId(117752),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata61Masked) GetOXMName() string {
+	return "tun_metadata61_masked"
+}
+
+func (self *OxmIdTunMetadata61Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata62 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata62 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata62) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata62(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata62, error) {
+	_oxmidtunmetadata62 := &OxmIdTunMetadata62{OxmId: parent}
+	return _oxmidtunmetadata62, nil
+}
+
+func NewOxmIdTunMetadata62() *OxmIdTunMetadata62 {
+	obj := &OxmIdTunMetadata62{
+		OxmId: NewOxmId(117884),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata62) GetOXMName() string {
+	return "tun_metadata62"
+}
+
+func (self *OxmIdTunMetadata62) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata62Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata62Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata62Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata62Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata62Masked, error) {
+	_oxmidtunmetadata62masked := &OxmIdTunMetadata62Masked{OxmId: parent}
+	return _oxmidtunmetadata62masked, nil
+}
+
+func NewOxmIdTunMetadata62Masked() *OxmIdTunMetadata62Masked {
+	obj := &OxmIdTunMetadata62Masked{
+		OxmId: NewOxmId(118264),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata62Masked) GetOXMName() string {
+	return "tun_metadata62_masked"
+}
+
+func (self *OxmIdTunMetadata62Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata63 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata63 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata63) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata63(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata63, error) {
+	_oxmidtunmetadata63 := &OxmIdTunMetadata63{OxmId: parent}
+	return _oxmidtunmetadata63, nil
+}
+
+func NewOxmIdTunMetadata63() *OxmIdTunMetadata63 {
+	obj := &OxmIdTunMetadata63{
+		OxmId: NewOxmId(118396),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata63) GetOXMName() string {
+	return "tun_metadata63"
+}
+
+func (self *OxmIdTunMetadata63) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata63Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata63Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata63Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata63Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata63Masked, error) {
+	_oxmidtunmetadata63masked := &OxmIdTunMetadata63Masked{OxmId: parent}
+	return _oxmidtunmetadata63masked, nil
+}
+
+func NewOxmIdTunMetadata63Masked() *OxmIdTunMetadata63Masked {
+	obj := &OxmIdTunMetadata63Masked{
+		OxmId: NewOxmId(118776),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata63Masked) GetOXMName() string {
+	return "tun_metadata63_masked"
+}
+
+func (self *OxmIdTunMetadata63Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata6Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata6Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata6Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata6Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata6Masked, error) {
+	_oxmidtunmetadata6masked := &OxmIdTunMetadata6Masked{OxmId: parent}
+	return _oxmidtunmetadata6masked, nil
+}
+
+func NewOxmIdTunMetadata6Masked() *OxmIdTunMetadata6Masked {
+	obj := &OxmIdTunMetadata6Masked{
+		OxmId: NewOxmId(89592),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata6Masked) GetOXMName() string {
+	return "tun_metadata6_masked"
+}
+
+func (self *OxmIdTunMetadata6Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata7 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata7 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata7) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata7(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata7, error) {
+	_oxmidtunmetadata7 := &OxmIdTunMetadata7{OxmId: parent}
+	return _oxmidtunmetadata7, nil
+}
+
+func NewOxmIdTunMetadata7() *OxmIdTunMetadata7 {
+	obj := &OxmIdTunMetadata7{
+		OxmId: NewOxmId(89724),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata7) GetOXMName() string {
+	return "tun_metadata7"
+}
+
+func (self *OxmIdTunMetadata7) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata7Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata7Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata7Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata7Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata7Masked, error) {
+	_oxmidtunmetadata7masked := &OxmIdTunMetadata7Masked{OxmId: parent}
+	return _oxmidtunmetadata7masked, nil
+}
+
+func NewOxmIdTunMetadata7Masked() *OxmIdTunMetadata7Masked {
+	obj := &OxmIdTunMetadata7Masked{
+		OxmId: NewOxmId(90104),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata7Masked) GetOXMName() string {
+	return "tun_metadata7_masked"
+}
+
+func (self *OxmIdTunMetadata7Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata8 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata8 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata8) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata8(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata8, error) {
+	_oxmidtunmetadata8 := &OxmIdTunMetadata8{OxmId: parent}
+	return _oxmidtunmetadata8, nil
+}
+
+func NewOxmIdTunMetadata8() *OxmIdTunMetadata8 {
+	obj := &OxmIdTunMetadata8{
+		OxmId: NewOxmId(90236),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata8) GetOXMName() string {
+	return "tun_metadata8"
+}
+
+func (self *OxmIdTunMetadata8) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata8Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata8Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata8Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata8Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata8Masked, error) {
+	_oxmidtunmetadata8masked := &OxmIdTunMetadata8Masked{OxmId: parent}
+	return _oxmidtunmetadata8masked, nil
+}
+
+func NewOxmIdTunMetadata8Masked() *OxmIdTunMetadata8Masked {
+	obj := &OxmIdTunMetadata8Masked{
+		OxmId: NewOxmId(90616),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata8Masked) GetOXMName() string {
+	return "tun_metadata8_masked"
+}
+
+func (self *OxmIdTunMetadata8Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata9 struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata9 interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata9) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata9(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata9, error) {
+	_oxmidtunmetadata9 := &OxmIdTunMetadata9{OxmId: parent}
+	return _oxmidtunmetadata9, nil
+}
+
+func NewOxmIdTunMetadata9() *OxmIdTunMetadata9 {
+	obj := &OxmIdTunMetadata9{
+		OxmId: NewOxmId(90748),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata9) GetOXMName() string {
+	return "tun_metadata9"
+}
+
+func (self *OxmIdTunMetadata9) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunMetadata9Masked struct {
+	*OxmId
+}
+
+type IOxmIdTunMetadata9Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunMetadata9Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunMetadata9Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunMetadata9Masked, error) {
+	_oxmidtunmetadata9masked := &OxmIdTunMetadata9Masked{OxmId: parent}
+	return _oxmidtunmetadata9masked, nil
+}
+
+func NewOxmIdTunMetadata9Masked() *OxmIdTunMetadata9Masked {
+	obj := &OxmIdTunMetadata9Masked{
+		OxmId: NewOxmId(91128),
+	}
+	return obj
+}
+func (self *OxmIdTunMetadata9Masked) GetOXMName() string {
+	return "tun_metadata9_masked"
+}
+
+func (self *OxmIdTunMetadata9Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunSrc struct {
+	*OxmId
+}
+
+type IOxmIdTunSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdTunSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunSrc, error) {
+	_oxmidtunsrc := &OxmIdTunSrc{OxmId: parent}
+	return _oxmidtunsrc, nil
+}
+
+func NewOxmIdTunSrc() *OxmIdTunSrc {
+	obj := &OxmIdTunSrc{
+		OxmId: NewOxmId(81412),
+	}
+	return obj
+}
+func (self *OxmIdTunSrc) GetOXMName() string {
+	return "tun_src"
+}
+
+func (self *OxmIdTunSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunSrcMasked, error) {
+	_oxmidtunsrcmasked := &OxmIdTunSrcMasked{OxmId: parent}
+	return _oxmidtunsrcmasked, nil
+}
+
+func NewOxmIdTunSrcMasked() *OxmIdTunSrcMasked {
+	obj := &OxmIdTunSrcMasked{
+		OxmId: NewOxmId(81672),
+	}
+	return obj
+}
+func (self *OxmIdTunSrcMasked) GetOXMName() string {
+	return "tun_src_masked"
+}
+
+func (self *OxmIdTunSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdUdpDst struct {
+	*OxmId
+}
+
+type IOxmIdUdpDst interface {
+	IOxmId
+}
+
+func (self *OxmIdUdpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdUdpDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdUdpDst, error) {
+	_oxmidudpdst := &OxmIdUdpDst{OxmId: parent}
+	return _oxmidudpdst, nil
+}
+
+func NewOxmIdUdpDst() *OxmIdUdpDst {
+	obj := &OxmIdUdpDst{
+		OxmId: NewOxmId(6146),
+	}
+	return obj
+}
+func (self *OxmIdUdpDst) GetOXMName() string {
+	return "udp_dst"
+}
+
+func (self *OxmIdUdpDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdUdpDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdUdpDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdUdpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdUdpDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdUdpDstMasked, error) {
+	_oxmidudpdstmasked := &OxmIdUdpDstMasked{OxmId: parent}
+	return _oxmidudpdstmasked, nil
+}
+
+func NewOxmIdUdpDstMasked() *OxmIdUdpDstMasked {
+	obj := &OxmIdUdpDstMasked{
+		OxmId: NewOxmId(6404),
+	}
+	return obj
+}
+func (self *OxmIdUdpDstMasked) GetOXMName() string {
+	return "udp_dst_masked"
+}
+
+func (self *OxmIdUdpDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdUdpSrc struct {
+	*OxmId
+}
+
+type IOxmIdUdpSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdUdpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdUdpSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdUdpSrc, error) {
+	_oxmidudpsrc := &OxmIdUdpSrc{OxmId: parent}
+	return _oxmidudpsrc, nil
+}
+
+func NewOxmIdUdpSrc() *OxmIdUdpSrc {
+	obj := &OxmIdUdpSrc{
+		OxmId: NewOxmId(5634),
+	}
+	return obj
+}
+func (self *OxmIdUdpSrc) GetOXMName() string {
+	return "udp_src"
+}
+
+func (self *OxmIdUdpSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdUdpSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdUdpSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdUdpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdUdpSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdUdpSrcMasked, error) {
+	_oxmidudpsrcmasked := &OxmIdUdpSrcMasked{OxmId: parent}
+	return _oxmidudpsrcmasked, nil
+}
+
+func NewOxmIdUdpSrcMasked() *OxmIdUdpSrcMasked {
+	obj := &OxmIdUdpSrcMasked{
+		OxmId: NewOxmId(5892),
+	}
+	return obj
+}
+func (self *OxmIdUdpSrcMasked) GetOXMName() string {
+	return "udp_src_masked"
+}
+
+func (self *OxmIdUdpSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdVlanTci struct {
+	*OxmId
+}
+
+type IOxmIdVlanTci interface {
+	IOxmId
+}
+
+func (self *OxmIdVlanTci) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdVlanTci(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdVlanTci, error) {
+	_oxmidvlantci := &OxmIdVlanTci{OxmId: parent}
+	return _oxmidvlantci, nil
+}
+
+func NewOxmIdVlanTci() *OxmIdVlanTci {
+	obj := &OxmIdVlanTci{
+		OxmId: NewOxmId(2050),
+	}
+	return obj
+}
+func (self *OxmIdVlanTci) GetOXMName() string {
+	return "vlan_tci"
+}
+
+func (self *OxmIdVlanTci) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdVlanTciMasked struct {
+	*OxmId
+}
+
+type IOxmIdVlanTciMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdVlanTciMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdVlanTciMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdVlanTciMasked, error) {
+	_oxmidvlantcimasked := &OxmIdVlanTciMasked{OxmId: parent}
+	return _oxmidvlantcimasked, nil
+}
+
+func NewOxmIdVlanTciMasked() *OxmIdVlanTciMasked {
+	obj := &OxmIdVlanTciMasked{
+		OxmId: NewOxmId(2308),
+	}
+	return obj
+}
+func (self *OxmIdVlanTciMasked) GetOXMName() string {
+	return "vlan_tci_masked"
+}
+
+func (self *OxmIdVlanTciMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg0 struct {
+	*OxmId
+}
+
+type IOxmIdXxreg0 interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg0(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg0, error) {
+	_oxmidxxreg0 := &OxmIdXxreg0{OxmId: parent}
+	return _oxmidxxreg0, nil
+}
+
+func NewOxmIdXxreg0() *OxmIdXxreg0 {
+	obj := &OxmIdXxreg0{
+		OxmId: NewOxmId(122384),
+	}
+	return obj
+}
+func (self *OxmIdXxreg0) GetOXMName() string {
+	return "xxreg0"
+}
+
+func (self *OxmIdXxreg0) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg0Masked struct {
+	*OxmId
+}
+
+type IOxmIdXxreg0Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg0Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg0Masked, error) {
+	_oxmidxxreg0masked := &OxmIdXxreg0Masked{OxmId: parent}
+	return _oxmidxxreg0masked, nil
+}
+
+func NewOxmIdXxreg0Masked() *OxmIdXxreg0Masked {
+	obj := &OxmIdXxreg0Masked{
+		OxmId: NewOxmId(122656),
+	}
+	return obj
+}
+func (self *OxmIdXxreg0Masked) GetOXMName() string {
+	return "xxreg0_masked"
+}
+
+func (self *OxmIdXxreg0Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg1 struct {
+	*OxmId
+}
+
+type IOxmIdXxreg1 interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg1(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg1, error) {
+	_oxmidxxreg1 := &OxmIdXxreg1{OxmId: parent}
+	return _oxmidxxreg1, nil
+}
+
+func NewOxmIdXxreg1() *OxmIdXxreg1 {
+	obj := &OxmIdXxreg1{
+		OxmId: NewOxmId(122896),
+	}
+	return obj
+}
+func (self *OxmIdXxreg1) GetOXMName() string {
+	return "xxreg1"
+}
+
+func (self *OxmIdXxreg1) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg1Masked struct {
+	*OxmId
+}
+
+type IOxmIdXxreg1Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg1Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg1Masked, error) {
+	_oxmidxxreg1masked := &OxmIdXxreg1Masked{OxmId: parent}
+	return _oxmidxxreg1masked, nil
+}
+
+func NewOxmIdXxreg1Masked() *OxmIdXxreg1Masked {
+	obj := &OxmIdXxreg1Masked{
+		OxmId: NewOxmId(123168),
+	}
+	return obj
+}
+func (self *OxmIdXxreg1Masked) GetOXMName() string {
+	return "xxreg1_masked"
+}
+
+func (self *OxmIdXxreg1Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg2 struct {
+	*OxmId
+}
+
+type IOxmIdXxreg2 interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg2(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg2, error) {
+	_oxmidxxreg2 := &OxmIdXxreg2{OxmId: parent}
+	return _oxmidxxreg2, nil
+}
+
+func NewOxmIdXxreg2() *OxmIdXxreg2 {
+	obj := &OxmIdXxreg2{
+		OxmId: NewOxmId(123408),
+	}
+	return obj
+}
+func (self *OxmIdXxreg2) GetOXMName() string {
+	return "xxreg2"
+}
+
+func (self *OxmIdXxreg2) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg2Masked struct {
+	*OxmId
+}
+
+type IOxmIdXxreg2Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg2Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg2Masked, error) {
+	_oxmidxxreg2masked := &OxmIdXxreg2Masked{OxmId: parent}
+	return _oxmidxxreg2masked, nil
+}
+
+func NewOxmIdXxreg2Masked() *OxmIdXxreg2Masked {
+	obj := &OxmIdXxreg2Masked{
+		OxmId: NewOxmId(123680),
+	}
+	return obj
+}
+func (self *OxmIdXxreg2Masked) GetOXMName() string {
+	return "xxreg2_masked"
+}
+
+func (self *OxmIdXxreg2Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg3 struct {
+	*OxmId
+}
+
+type IOxmIdXxreg3 interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg3(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg3, error) {
+	_oxmidxxreg3 := &OxmIdXxreg3{OxmId: parent}
+	return _oxmidxxreg3, nil
+}
+
+func NewOxmIdXxreg3() *OxmIdXxreg3 {
+	obj := &OxmIdXxreg3{
+		OxmId: NewOxmId(123920),
+	}
+	return obj
+}
+func (self *OxmIdXxreg3) GetOXMName() string {
+	return "xxreg3"
+}
+
+func (self *OxmIdXxreg3) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdXxreg3Masked struct {
+	*OxmId
+}
+
+type IOxmIdXxreg3Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdXxreg3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdXxreg3Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdXxreg3Masked, error) {
+	_oxmidxxreg3masked := &OxmIdXxreg3Masked{OxmId: parent}
+	return _oxmidxxreg3masked, nil
+}
+
+func NewOxmIdXxreg3Masked() *OxmIdXxreg3Masked {
+	obj := &OxmIdXxreg3Masked{
+		OxmId: NewOxmId(124192),
+	}
+	return obj
+}
+func (self *OxmIdXxreg3Masked) GetOXMName() string {
+	return "xxreg3_masked"
+}
+
+func (self *OxmIdXxreg3Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdArpOpMasked struct {
+	*OxmId
+}
+
+type IOxmIdArpOpMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdArpOpMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdArpOpMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdArpOpMasked, error) {
+	_oxmidarpopmasked := &OxmIdArpOpMasked{OxmId: parent}
+	return _oxmidarpopmasked, nil
+}
+
+func NewOxmIdArpOpMasked() *OxmIdArpOpMasked {
+	obj := &OxmIdArpOpMasked{
+		OxmId: NewOxmId(2147494660),
+	}
+	return obj
+}
+func (self *OxmIdArpOpMasked) GetOXMName() string {
+	return "arp_op_masked"
+}
+
+func (self *OxmIdArpOpMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnEgrPortGroupId struct {
+	*OxmId
+}
+
+type IOxmIdBsnEgrPortGroupId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnEgrPortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnEgrPortGroupId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnEgrPortGroupId, error) {
+	_oxmidbsnegrportgroupid := &OxmIdBsnEgrPortGroupId{OxmId: parent}
+	return _oxmidbsnegrportgroupid, nil
+}
+
+func NewOxmIdBsnEgrPortGroupId() *OxmIdBsnEgrPortGroupId {
+	obj := &OxmIdBsnEgrPortGroupId{
+		OxmId: NewOxmId(200196),
+	}
+	return obj
+}
+func (self *OxmIdBsnEgrPortGroupId) GetOXMName() string {
+	return "bsn_egr_port_group_id"
+}
+
+func (self *OxmIdBsnEgrPortGroupId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnEgrPortGroupIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnEgrPortGroupIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnEgrPortGroupIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnEgrPortGroupIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnEgrPortGroupIdMasked, error) {
+	_oxmidbsnegrportgroupidmasked := &OxmIdBsnEgrPortGroupIdMasked{OxmId: parent}
+	return _oxmidbsnegrportgroupidmasked, nil
+}
+
+func NewOxmIdBsnEgrPortGroupIdMasked() *OxmIdBsnEgrPortGroupIdMasked {
+	obj := &OxmIdBsnEgrPortGroupIdMasked{
+		OxmId: NewOxmId(200456),
+	}
+	return obj
+}
+func (self *OxmIdBsnEgrPortGroupIdMasked) GetOXMName() string {
+	return "bsn_egr_port_group_id_masked"
+}
+
+func (self *OxmIdBsnEgrPortGroupIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnGlobalVrfAllowed struct {
+	*OxmId
+}
+
+type IOxmIdBsnGlobalVrfAllowed interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnGlobalVrfAllowed) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnGlobalVrfAllowed(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnGlobalVrfAllowed, error) {
+	_oxmidbsnglobalvrfallowed := &OxmIdBsnGlobalVrfAllowed{OxmId: parent}
+	return _oxmidbsnglobalvrfallowed, nil
+}
+
+func NewOxmIdBsnGlobalVrfAllowed() *OxmIdBsnGlobalVrfAllowed {
+	obj := &OxmIdBsnGlobalVrfAllowed{
+		OxmId: NewOxmId(198145),
+	}
+	return obj
+}
+func (self *OxmIdBsnGlobalVrfAllowed) GetOXMName() string {
+	return "bsn_global_vrf_allowed"
+}
+
+func (self *OxmIdBsnGlobalVrfAllowed) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnGlobalVrfAllowedMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnGlobalVrfAllowedMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnGlobalVrfAllowedMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnGlobalVrfAllowedMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnGlobalVrfAllowedMasked, error) {
+	_oxmidbsnglobalvrfallowedmasked := &OxmIdBsnGlobalVrfAllowedMasked{OxmId: parent}
+	return _oxmidbsnglobalvrfallowedmasked, nil
+}
+
+func NewOxmIdBsnGlobalVrfAllowedMasked() *OxmIdBsnGlobalVrfAllowedMasked {
+	obj := &OxmIdBsnGlobalVrfAllowedMasked{
+		OxmId: NewOxmId(198402),
+	}
+	return obj
+}
+func (self *OxmIdBsnGlobalVrfAllowedMasked) GetOXMName() string {
+	return "bsn_global_vrf_allowed_masked"
+}
+
+func (self *OxmIdBsnGlobalVrfAllowedMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInPorts128 struct {
+	*OxmId
+}
+
+type IOxmIdBsnInPorts128 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInPorts128) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInPorts128(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInPorts128, error) {
+	_oxmidbsninports128 := &OxmIdBsnInPorts128{OxmId: parent}
+	return _oxmidbsninports128, nil
+}
+
+func NewOxmIdBsnInPorts128() *OxmIdBsnInPorts128 {
+	obj := &OxmIdBsnInPorts128{
+		OxmId: NewOxmId(196624),
+	}
+	return obj
+}
+func (self *OxmIdBsnInPorts128) GetOXMName() string {
+	return "bsn_in_ports_128"
+}
+
+func (self *OxmIdBsnInPorts128) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInPorts128Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnInPorts128Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInPorts128Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInPorts128Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInPorts128Masked, error) {
+	_oxmidbsninports128masked := &OxmIdBsnInPorts128Masked{OxmId: parent}
+	return _oxmidbsninports128masked, nil
+}
+
+func NewOxmIdBsnInPorts128Masked() *OxmIdBsnInPorts128Masked {
+	obj := &OxmIdBsnInPorts128Masked{
+		OxmId: NewOxmId(196896),
+	}
+	return obj
+}
+func (self *OxmIdBsnInPorts128Masked) GetOXMName() string {
+	return "bsn_in_ports_128_masked"
+}
+
+func (self *OxmIdBsnInPorts128Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInPorts512 struct {
+	*OxmId
+}
+
+type IOxmIdBsnInPorts512 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInPorts512) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInPorts512(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInPorts512, error) {
+	_oxmidbsninports512 := &OxmIdBsnInPorts512{OxmId: parent}
+	return _oxmidbsninports512, nil
+}
+
+func NewOxmIdBsnInPorts512() *OxmIdBsnInPorts512 {
+	obj := &OxmIdBsnInPorts512{
+		OxmId: NewOxmId(206400),
+	}
+	return obj
+}
+func (self *OxmIdBsnInPorts512) GetOXMName() string {
+	return "bsn_in_ports_512"
+}
+
+func (self *OxmIdBsnInPorts512) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInPorts512Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnInPorts512Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInPorts512Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInPorts512Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInPorts512Masked, error) {
+	_oxmidbsninports512masked := &OxmIdBsnInPorts512Masked{OxmId: parent}
+	return _oxmidbsninports512masked, nil
+}
+
+func NewOxmIdBsnInPorts512Masked() *OxmIdBsnInPorts512Masked {
+	obj := &OxmIdBsnInPorts512Masked{
+		OxmId: NewOxmId(206720),
+	}
+	return obj
+}
+func (self *OxmIdBsnInPorts512Masked) GetOXMName() string {
+	return "bsn_in_ports_512_masked"
+}
+
+func (self *OxmIdBsnInPorts512Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnIngressPortGroupId struct {
+	*OxmId
+}
+
+type IOxmIdBsnIngressPortGroupId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnIngressPortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnIngressPortGroupId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnIngressPortGroupId, error) {
+	_oxmidbsningressportgroupid := &OxmIdBsnIngressPortGroupId{OxmId: parent}
+	return _oxmidbsningressportgroupid, nil
+}
+
+func NewOxmIdBsnIngressPortGroupId() *OxmIdBsnIngressPortGroupId {
+	obj := &OxmIdBsnIngressPortGroupId{
+		OxmId: NewOxmId(206852),
+	}
+	return obj
+}
+func (self *OxmIdBsnIngressPortGroupId) GetOXMName() string {
+	return "bsn_ingress_port_group_id"
+}
+
+func (self *OxmIdBsnIngressPortGroupId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnIngressPortGroupIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnIngressPortGroupIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnIngressPortGroupIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnIngressPortGroupIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnIngressPortGroupIdMasked, error) {
+	_oxmidbsningressportgroupidmasked := &OxmIdBsnIngressPortGroupIdMasked{OxmId: parent}
+	return _oxmidbsningressportgroupidmasked, nil
+}
+
+func NewOxmIdBsnIngressPortGroupIdMasked() *OxmIdBsnIngressPortGroupIdMasked {
+	obj := &OxmIdBsnIngressPortGroupIdMasked{
+		OxmId: NewOxmId(207112),
+	}
+	return obj
+}
+func (self *OxmIdBsnIngressPortGroupIdMasked) GetOXMName() string {
+	return "bsn_ingress_port_group_id_masked"
+}
+
+func (self *OxmIdBsnIngressPortGroupIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInnerEthDst struct {
+	*OxmId
+}
+
+type IOxmIdBsnInnerEthDst interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInnerEthDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInnerEthDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInnerEthDst, error) {
+	_oxmidbsninnerethdst := &OxmIdBsnInnerEthDst{OxmId: parent}
+	return _oxmidbsninnerethdst, nil
+}
+
+func NewOxmIdBsnInnerEthDst() *OxmIdBsnInnerEthDst {
+	obj := &OxmIdBsnInnerEthDst{
+		OxmId: NewOxmId(207878),
+	}
+	return obj
+}
+func (self *OxmIdBsnInnerEthDst) GetOXMName() string {
+	return "bsn_inner_eth_dst"
+}
+
+func (self *OxmIdBsnInnerEthDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInnerEthDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnInnerEthDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInnerEthDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInnerEthDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInnerEthDstMasked, error) {
+	_oxmidbsninnerethdstmasked := &OxmIdBsnInnerEthDstMasked{OxmId: parent}
+	return _oxmidbsninnerethdstmasked, nil
+}
+
+func NewOxmIdBsnInnerEthDstMasked() *OxmIdBsnInnerEthDstMasked {
+	obj := &OxmIdBsnInnerEthDstMasked{
+		OxmId: NewOxmId(208140),
+	}
+	return obj
+}
+func (self *OxmIdBsnInnerEthDstMasked) GetOXMName() string {
+	return "bsn_inner_eth_dst_masked"
+}
+
+func (self *OxmIdBsnInnerEthDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInnerEthSrc struct {
+	*OxmId
+}
+
+type IOxmIdBsnInnerEthSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInnerEthSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInnerEthSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInnerEthSrc, error) {
+	_oxmidbsninnerethsrc := &OxmIdBsnInnerEthSrc{OxmId: parent}
+	return _oxmidbsninnerethsrc, nil
+}
+
+func NewOxmIdBsnInnerEthSrc() *OxmIdBsnInnerEthSrc {
+	obj := &OxmIdBsnInnerEthSrc{
+		OxmId: NewOxmId(208390),
+	}
+	return obj
+}
+func (self *OxmIdBsnInnerEthSrc) GetOXMName() string {
+	return "bsn_inner_eth_src"
+}
+
+func (self *OxmIdBsnInnerEthSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInnerEthSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnInnerEthSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInnerEthSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInnerEthSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInnerEthSrcMasked, error) {
+	_oxmidbsninnerethsrcmasked := &OxmIdBsnInnerEthSrcMasked{OxmId: parent}
+	return _oxmidbsninnerethsrcmasked, nil
+}
+
+func NewOxmIdBsnInnerEthSrcMasked() *OxmIdBsnInnerEthSrcMasked {
+	obj := &OxmIdBsnInnerEthSrcMasked{
+		OxmId: NewOxmId(208652),
+	}
+	return obj
+}
+func (self *OxmIdBsnInnerEthSrcMasked) GetOXMName() string {
+	return "bsn_inner_eth_src_masked"
+}
+
+func (self *OxmIdBsnInnerEthSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInnerVlanVid struct {
+	*OxmId
+}
+
+type IOxmIdBsnInnerVlanVid interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInnerVlanVid) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInnerVlanVid(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInnerVlanVid, error) {
+	_oxmidbsninnervlanvid := &OxmIdBsnInnerVlanVid{OxmId: parent}
+	return _oxmidbsninnervlanvid, nil
+}
+
+func NewOxmIdBsnInnerVlanVid() *OxmIdBsnInnerVlanVid {
+	obj := &OxmIdBsnInnerVlanVid{
+		OxmId: NewOxmId(208898),
+	}
+	return obj
+}
+func (self *OxmIdBsnInnerVlanVid) GetOXMName() string {
+	return "bsn_inner_vlan_vid"
+}
+
+func (self *OxmIdBsnInnerVlanVid) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnInnerVlanVidMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnInnerVlanVidMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnInnerVlanVidMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnInnerVlanVidMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnInnerVlanVidMasked, error) {
+	_oxmidbsninnervlanvidmasked := &OxmIdBsnInnerVlanVidMasked{OxmId: parent}
+	return _oxmidbsninnervlanvidmasked, nil
+}
+
+func NewOxmIdBsnInnerVlanVidMasked() *OxmIdBsnInnerVlanVidMasked {
+	obj := &OxmIdBsnInnerVlanVidMasked{
+		OxmId: NewOxmId(209156),
+	}
+	return obj
+}
+func (self *OxmIdBsnInnerVlanVidMasked) GetOXMName() string {
+	return "bsn_inner_vlan_vid_masked"
+}
+
+func (self *OxmIdBsnInnerVlanVidMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnIpFragmentation struct {
+	*OxmId
+}
+
+type IOxmIdBsnIpFragmentation interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnIpFragmentation) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnIpFragmentation(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnIpFragmentation, error) {
+	_oxmidbsnipfragmentation := &OxmIdBsnIpFragmentation{OxmId: parent}
+	return _oxmidbsnipfragmentation, nil
+}
+
+func NewOxmIdBsnIpFragmentation() *OxmIdBsnIpFragmentation {
+	obj := &OxmIdBsnIpFragmentation{
+		OxmId: NewOxmId(209921),
+	}
+	return obj
+}
+func (self *OxmIdBsnIpFragmentation) GetOXMName() string {
+	return "bsn_ip_fragmentation"
+}
+
+func (self *OxmIdBsnIpFragmentation) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnIpFragmentationMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnIpFragmentationMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnIpFragmentationMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnIpFragmentationMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnIpFragmentationMasked, error) {
+	_oxmidbsnipfragmentationmasked := &OxmIdBsnIpFragmentationMasked{OxmId: parent}
+	return _oxmidbsnipfragmentationmasked, nil
+}
+
+func NewOxmIdBsnIpFragmentationMasked() *OxmIdBsnIpFragmentationMasked {
+	obj := &OxmIdBsnIpFragmentationMasked{
+		OxmId: NewOxmId(210178),
+	}
+	return obj
+}
+func (self *OxmIdBsnIpFragmentationMasked) GetOXMName() string {
+	return "bsn_ip_fragmentation_masked"
+}
+
+func (self *OxmIdBsnIpFragmentationMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL2CacheHit struct {
+	*OxmId
+}
+
+type IOxmIdBsnL2CacheHit interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL2CacheHit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL2CacheHit(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL2CacheHit, error) {
+	_oxmidbsnl2cachehit := &OxmIdBsnL2CacheHit{OxmId: parent}
+	return _oxmidbsnl2cachehit, nil
+}
+
+func NewOxmIdBsnL2CacheHit() *OxmIdBsnL2CacheHit {
+	obj := &OxmIdBsnL2CacheHit{
+		OxmId: NewOxmId(205825),
+	}
+	return obj
+}
+func (self *OxmIdBsnL2CacheHit) GetOXMName() string {
+	return "bsn_l2_cache_hit"
+}
+
+func (self *OxmIdBsnL2CacheHit) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL2CacheHitMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnL2CacheHitMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL2CacheHitMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL2CacheHitMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL2CacheHitMasked, error) {
+	_oxmidbsnl2cachehitmasked := &OxmIdBsnL2CacheHitMasked{OxmId: parent}
+	return _oxmidbsnl2cachehitmasked, nil
+}
+
+func NewOxmIdBsnL2CacheHitMasked() *OxmIdBsnL2CacheHitMasked {
+	obj := &OxmIdBsnL2CacheHitMasked{
+		OxmId: NewOxmId(206082),
+	}
+	return obj
+}
+func (self *OxmIdBsnL2CacheHitMasked) GetOXMName() string {
+	return "bsn_l2_cache_hit_masked"
+}
+
+func (self *OxmIdBsnL2CacheHitMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL3DstClassId struct {
+	*OxmId
+}
+
+type IOxmIdBsnL3DstClassId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL3DstClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL3DstClassId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL3DstClassId, error) {
+	_oxmidbsnl3dstclassid := &OxmIdBsnL3DstClassId{OxmId: parent}
+	return _oxmidbsnl3dstclassid, nil
+}
+
+func NewOxmIdBsnL3DstClassId() *OxmIdBsnL3DstClassId {
+	obj := &OxmIdBsnL3DstClassId{
+		OxmId: NewOxmId(199684),
+	}
+	return obj
+}
+func (self *OxmIdBsnL3DstClassId) GetOXMName() string {
+	return "bsn_l3_dst_class_id"
+}
+
+func (self *OxmIdBsnL3DstClassId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL3DstClassIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnL3DstClassIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL3DstClassIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL3DstClassIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL3DstClassIdMasked, error) {
+	_oxmidbsnl3dstclassidmasked := &OxmIdBsnL3DstClassIdMasked{OxmId: parent}
+	return _oxmidbsnl3dstclassidmasked, nil
+}
+
+func NewOxmIdBsnL3DstClassIdMasked() *OxmIdBsnL3DstClassIdMasked {
+	obj := &OxmIdBsnL3DstClassIdMasked{
+		OxmId: NewOxmId(199944),
+	}
+	return obj
+}
+func (self *OxmIdBsnL3DstClassIdMasked) GetOXMName() string {
+	return "bsn_l3_dst_class_id_masked"
+}
+
+func (self *OxmIdBsnL3DstClassIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL3InterfaceClassId struct {
+	*OxmId
+}
+
+type IOxmIdBsnL3InterfaceClassId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL3InterfaceClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL3InterfaceClassId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL3InterfaceClassId, error) {
+	_oxmidbsnl3interfaceclassid := &OxmIdBsnL3InterfaceClassId{OxmId: parent}
+	return _oxmidbsnl3interfaceclassid, nil
+}
+
+func NewOxmIdBsnL3InterfaceClassId() *OxmIdBsnL3InterfaceClassId {
+	obj := &OxmIdBsnL3InterfaceClassId{
+		OxmId: NewOxmId(198660),
+	}
+	return obj
+}
+func (self *OxmIdBsnL3InterfaceClassId) GetOXMName() string {
+	return "bsn_l3_interface_class_id"
+}
+
+func (self *OxmIdBsnL3InterfaceClassId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL3InterfaceClassIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnL3InterfaceClassIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL3InterfaceClassIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL3InterfaceClassIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL3InterfaceClassIdMasked, error) {
+	_oxmidbsnl3interfaceclassidmasked := &OxmIdBsnL3InterfaceClassIdMasked{OxmId: parent}
+	return _oxmidbsnl3interfaceclassidmasked, nil
+}
+
+func NewOxmIdBsnL3InterfaceClassIdMasked() *OxmIdBsnL3InterfaceClassIdMasked {
+	obj := &OxmIdBsnL3InterfaceClassIdMasked{
+		OxmId: NewOxmId(198920),
+	}
+	return obj
+}
+func (self *OxmIdBsnL3InterfaceClassIdMasked) GetOXMName() string {
+	return "bsn_l3_interface_class_id_masked"
+}
+
+func (self *OxmIdBsnL3InterfaceClassIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL3SrcClassId struct {
+	*OxmId
+}
+
+type IOxmIdBsnL3SrcClassId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL3SrcClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL3SrcClassId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL3SrcClassId, error) {
+	_oxmidbsnl3srcclassid := &OxmIdBsnL3SrcClassId{OxmId: parent}
+	return _oxmidbsnl3srcclassid, nil
+}
+
+func NewOxmIdBsnL3SrcClassId() *OxmIdBsnL3SrcClassId {
+	obj := &OxmIdBsnL3SrcClassId{
+		OxmId: NewOxmId(199172),
+	}
+	return obj
+}
+func (self *OxmIdBsnL3SrcClassId) GetOXMName() string {
+	return "bsn_l3_src_class_id"
+}
+
+func (self *OxmIdBsnL3SrcClassId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnL3SrcClassIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnL3SrcClassIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnL3SrcClassIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnL3SrcClassIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnL3SrcClassIdMasked, error) {
+	_oxmidbsnl3srcclassidmasked := &OxmIdBsnL3SrcClassIdMasked{OxmId: parent}
+	return _oxmidbsnl3srcclassidmasked, nil
+}
+
+func NewOxmIdBsnL3SrcClassIdMasked() *OxmIdBsnL3SrcClassIdMasked {
+	obj := &OxmIdBsnL3SrcClassIdMasked{
+		OxmId: NewOxmId(199432),
+	}
+	return obj
+}
+func (self *OxmIdBsnL3SrcClassIdMasked) GetOXMName() string {
+	return "bsn_l3_src_class_id_masked"
+}
+
+func (self *OxmIdBsnL3SrcClassIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnLagId struct {
+	*OxmId
+}
+
+type IOxmIdBsnLagId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnLagId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnLagId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnLagId, error) {
+	_oxmidbsnlagid := &OxmIdBsnLagId{OxmId: parent}
+	return _oxmidbsnlagid, nil
+}
+
+func NewOxmIdBsnLagId() *OxmIdBsnLagId {
+	obj := &OxmIdBsnLagId{
+		OxmId: NewOxmId(197124),
+	}
+	return obj
+}
+func (self *OxmIdBsnLagId) GetOXMName() string {
+	return "bsn_lag_id"
+}
+
+func (self *OxmIdBsnLagId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnLagIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnLagIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnLagIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnLagIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnLagIdMasked, error) {
+	_oxmidbsnlagidmasked := &OxmIdBsnLagIdMasked{OxmId: parent}
+	return _oxmidbsnlagidmasked, nil
+}
+
+func NewOxmIdBsnLagIdMasked() *OxmIdBsnLagIdMasked {
+	obj := &OxmIdBsnLagIdMasked{
+		OxmId: NewOxmId(197384),
+	}
+	return obj
+}
+func (self *OxmIdBsnLagIdMasked) GetOXMName() string {
+	return "bsn_lag_id_masked"
+}
+
+func (self *OxmIdBsnLagIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnTcpFlags struct {
+	*OxmId
+}
+
+type IOxmIdBsnTcpFlags interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnTcpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnTcpFlags(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnTcpFlags, error) {
+	_oxmidbsntcpflags := &OxmIdBsnTcpFlags{OxmId: parent}
+	return _oxmidbsntcpflags, nil
+}
+
+func NewOxmIdBsnTcpFlags() *OxmIdBsnTcpFlags {
+	obj := &OxmIdBsnTcpFlags{
+		OxmId: NewOxmId(204802),
+	}
+	return obj
+}
+func (self *OxmIdBsnTcpFlags) GetOXMName() string {
+	return "bsn_tcp_flags"
+}
+
+func (self *OxmIdBsnTcpFlags) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnTcpFlagsMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnTcpFlagsMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnTcpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnTcpFlagsMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnTcpFlagsMasked, error) {
+	_oxmidbsntcpflagsmasked := &OxmIdBsnTcpFlagsMasked{OxmId: parent}
+	return _oxmidbsntcpflagsmasked, nil
+}
+
+func NewOxmIdBsnTcpFlagsMasked() *OxmIdBsnTcpFlagsMasked {
+	obj := &OxmIdBsnTcpFlagsMasked{
+		OxmId: NewOxmId(205060),
+	}
+	return obj
+}
+func (self *OxmIdBsnTcpFlagsMasked) GetOXMName() string {
+	return "bsn_tcp_flags_masked"
+}
+
+func (self *OxmIdBsnTcpFlagsMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf0 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf0 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf0(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf0, error) {
+	_oxmidbsnudf0 := &OxmIdBsnUdf0{OxmId: parent}
+	return _oxmidbsnudf0, nil
+}
+
+func NewOxmIdBsnUdf0() *OxmIdBsnUdf0 {
+	obj := &OxmIdBsnUdf0{
+		OxmId: NewOxmId(200708),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf0) GetOXMName() string {
+	return "bsn_udf0"
+}
+
+func (self *OxmIdBsnUdf0) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf0Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf0Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf0Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf0Masked, error) {
+	_oxmidbsnudf0masked := &OxmIdBsnUdf0Masked{OxmId: parent}
+	return _oxmidbsnudf0masked, nil
+}
+
+func NewOxmIdBsnUdf0Masked() *OxmIdBsnUdf0Masked {
+	obj := &OxmIdBsnUdf0Masked{
+		OxmId: NewOxmId(200968),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf0Masked) GetOXMName() string {
+	return "bsn_udf0_masked"
+}
+
+func (self *OxmIdBsnUdf0Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf1 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf1 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf1(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf1, error) {
+	_oxmidbsnudf1 := &OxmIdBsnUdf1{OxmId: parent}
+	return _oxmidbsnudf1, nil
+}
+
+func NewOxmIdBsnUdf1() *OxmIdBsnUdf1 {
+	obj := &OxmIdBsnUdf1{
+		OxmId: NewOxmId(201220),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf1) GetOXMName() string {
+	return "bsn_udf1"
+}
+
+func (self *OxmIdBsnUdf1) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf1Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf1Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf1Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf1Masked, error) {
+	_oxmidbsnudf1masked := &OxmIdBsnUdf1Masked{OxmId: parent}
+	return _oxmidbsnudf1masked, nil
+}
+
+func NewOxmIdBsnUdf1Masked() *OxmIdBsnUdf1Masked {
+	obj := &OxmIdBsnUdf1Masked{
+		OxmId: NewOxmId(201480),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf1Masked) GetOXMName() string {
+	return "bsn_udf1_masked"
+}
+
+func (self *OxmIdBsnUdf1Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf2 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf2 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf2(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf2, error) {
+	_oxmidbsnudf2 := &OxmIdBsnUdf2{OxmId: parent}
+	return _oxmidbsnudf2, nil
+}
+
+func NewOxmIdBsnUdf2() *OxmIdBsnUdf2 {
+	obj := &OxmIdBsnUdf2{
+		OxmId: NewOxmId(201732),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf2) GetOXMName() string {
+	return "bsn_udf2"
+}
+
+func (self *OxmIdBsnUdf2) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf2Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf2Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf2Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf2Masked, error) {
+	_oxmidbsnudf2masked := &OxmIdBsnUdf2Masked{OxmId: parent}
+	return _oxmidbsnudf2masked, nil
+}
+
+func NewOxmIdBsnUdf2Masked() *OxmIdBsnUdf2Masked {
+	obj := &OxmIdBsnUdf2Masked{
+		OxmId: NewOxmId(201992),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf2Masked) GetOXMName() string {
+	return "bsn_udf2_masked"
+}
+
+func (self *OxmIdBsnUdf2Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf3 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf3 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf3(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf3, error) {
+	_oxmidbsnudf3 := &OxmIdBsnUdf3{OxmId: parent}
+	return _oxmidbsnudf3, nil
+}
+
+func NewOxmIdBsnUdf3() *OxmIdBsnUdf3 {
+	obj := &OxmIdBsnUdf3{
+		OxmId: NewOxmId(202244),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf3) GetOXMName() string {
+	return "bsn_udf3"
+}
+
+func (self *OxmIdBsnUdf3) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf3Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf3Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf3Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf3Masked, error) {
+	_oxmidbsnudf3masked := &OxmIdBsnUdf3Masked{OxmId: parent}
+	return _oxmidbsnudf3masked, nil
+}
+
+func NewOxmIdBsnUdf3Masked() *OxmIdBsnUdf3Masked {
+	obj := &OxmIdBsnUdf3Masked{
+		OxmId: NewOxmId(202504),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf3Masked) GetOXMName() string {
+	return "bsn_udf3_masked"
+}
+
+func (self *OxmIdBsnUdf3Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf4 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf4 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf4(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf4, error) {
+	_oxmidbsnudf4 := &OxmIdBsnUdf4{OxmId: parent}
+	return _oxmidbsnudf4, nil
+}
+
+func NewOxmIdBsnUdf4() *OxmIdBsnUdf4 {
+	obj := &OxmIdBsnUdf4{
+		OxmId: NewOxmId(202756),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf4) GetOXMName() string {
+	return "bsn_udf4"
+}
+
+func (self *OxmIdBsnUdf4) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf4Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf4Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf4Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf4Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf4Masked, error) {
+	_oxmidbsnudf4masked := &OxmIdBsnUdf4Masked{OxmId: parent}
+	return _oxmidbsnudf4masked, nil
+}
+
+func NewOxmIdBsnUdf4Masked() *OxmIdBsnUdf4Masked {
+	obj := &OxmIdBsnUdf4Masked{
+		OxmId: NewOxmId(203016),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf4Masked) GetOXMName() string {
+	return "bsn_udf4_masked"
+}
+
+func (self *OxmIdBsnUdf4Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf5 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf5 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf5) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf5(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf5, error) {
+	_oxmidbsnudf5 := &OxmIdBsnUdf5{OxmId: parent}
+	return _oxmidbsnudf5, nil
+}
+
+func NewOxmIdBsnUdf5() *OxmIdBsnUdf5 {
+	obj := &OxmIdBsnUdf5{
+		OxmId: NewOxmId(203268),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf5) GetOXMName() string {
+	return "bsn_udf5"
+}
+
+func (self *OxmIdBsnUdf5) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf5Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf5Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf5Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf5Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf5Masked, error) {
+	_oxmidbsnudf5masked := &OxmIdBsnUdf5Masked{OxmId: parent}
+	return _oxmidbsnudf5masked, nil
+}
+
+func NewOxmIdBsnUdf5Masked() *OxmIdBsnUdf5Masked {
+	obj := &OxmIdBsnUdf5Masked{
+		OxmId: NewOxmId(203528),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf5Masked) GetOXMName() string {
+	return "bsn_udf5_masked"
+}
+
+func (self *OxmIdBsnUdf5Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf6 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf6 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf6) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf6(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf6, error) {
+	_oxmidbsnudf6 := &OxmIdBsnUdf6{OxmId: parent}
+	return _oxmidbsnudf6, nil
+}
+
+func NewOxmIdBsnUdf6() *OxmIdBsnUdf6 {
+	obj := &OxmIdBsnUdf6{
+		OxmId: NewOxmId(203780),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf6) GetOXMName() string {
+	return "bsn_udf6"
+}
+
+func (self *OxmIdBsnUdf6) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf6Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf6Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf6Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf6Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf6Masked, error) {
+	_oxmidbsnudf6masked := &OxmIdBsnUdf6Masked{OxmId: parent}
+	return _oxmidbsnudf6masked, nil
+}
+
+func NewOxmIdBsnUdf6Masked() *OxmIdBsnUdf6Masked {
+	obj := &OxmIdBsnUdf6Masked{
+		OxmId: NewOxmId(204040),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf6Masked) GetOXMName() string {
+	return "bsn_udf6_masked"
+}
+
+func (self *OxmIdBsnUdf6Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf7 struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf7 interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf7) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf7(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf7, error) {
+	_oxmidbsnudf7 := &OxmIdBsnUdf7{OxmId: parent}
+	return _oxmidbsnudf7, nil
+}
+
+func NewOxmIdBsnUdf7() *OxmIdBsnUdf7 {
+	obj := &OxmIdBsnUdf7{
+		OxmId: NewOxmId(204292),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf7) GetOXMName() string {
+	return "bsn_udf7"
+}
+
+func (self *OxmIdBsnUdf7) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnUdf7Masked struct {
+	*OxmId
+}
+
+type IOxmIdBsnUdf7Masked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnUdf7Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnUdf7Masked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnUdf7Masked, error) {
+	_oxmidbsnudf7masked := &OxmIdBsnUdf7Masked{OxmId: parent}
+	return _oxmidbsnudf7masked, nil
+}
+
+func NewOxmIdBsnUdf7Masked() *OxmIdBsnUdf7Masked {
+	obj := &OxmIdBsnUdf7Masked{
+		OxmId: NewOxmId(204552),
+	}
+	return obj
+}
+func (self *OxmIdBsnUdf7Masked) GetOXMName() string {
+	return "bsn_udf7_masked"
+}
+
+func (self *OxmIdBsnUdf7Masked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVfi struct {
+	*OxmId
+}
+
+type IOxmIdBsnVfi interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVfi) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVfi(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVfi, error) {
+	_oxmidbsnvfi := &OxmIdBsnVfi{OxmId: parent}
+	return _oxmidbsnvfi, nil
+}
+
+func NewOxmIdBsnVfi() *OxmIdBsnVfi {
+	obj := &OxmIdBsnVfi{
+		OxmId: NewOxmId(209410),
+	}
+	return obj
+}
+func (self *OxmIdBsnVfi) GetOXMName() string {
+	return "bsn_vfi"
+}
+
+func (self *OxmIdBsnVfi) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVfiMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnVfiMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVfiMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVfiMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVfiMasked, error) {
+	_oxmidbsnvfimasked := &OxmIdBsnVfiMasked{OxmId: parent}
+	return _oxmidbsnvfimasked, nil
+}
+
+func NewOxmIdBsnVfiMasked() *OxmIdBsnVfiMasked {
+	obj := &OxmIdBsnVfiMasked{
+		OxmId: NewOxmId(209668),
+	}
+	return obj
+}
+func (self *OxmIdBsnVfiMasked) GetOXMName() string {
+	return "bsn_vfi_masked"
+}
+
+func (self *OxmIdBsnVfiMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVlanXlatePortGroupId struct {
+	*OxmId
+}
+
+type IOxmIdBsnVlanXlatePortGroupId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVlanXlatePortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVlanXlatePortGroupId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVlanXlatePortGroupId, error) {
+	_oxmidbsnvlanxlateportgroupid := &OxmIdBsnVlanXlatePortGroupId{OxmId: parent}
+	return _oxmidbsnvlanxlateportgroupid, nil
+}
+
+func NewOxmIdBsnVlanXlatePortGroupId() *OxmIdBsnVlanXlatePortGroupId {
+	obj := &OxmIdBsnVlanXlatePortGroupId{
+		OxmId: NewOxmId(205316),
+	}
+	return obj
+}
+func (self *OxmIdBsnVlanXlatePortGroupId) GetOXMName() string {
+	return "bsn_vlan_xlate_port_group_id"
+}
+
+func (self *OxmIdBsnVlanXlatePortGroupId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVlanXlatePortGroupIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnVlanXlatePortGroupIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVlanXlatePortGroupIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVlanXlatePortGroupIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVlanXlatePortGroupIdMasked, error) {
+	_oxmidbsnvlanxlateportgroupidmasked := &OxmIdBsnVlanXlatePortGroupIdMasked{OxmId: parent}
+	return _oxmidbsnvlanxlateportgroupidmasked, nil
+}
+
+func NewOxmIdBsnVlanXlatePortGroupIdMasked() *OxmIdBsnVlanXlatePortGroupIdMasked {
+	obj := &OxmIdBsnVlanXlatePortGroupIdMasked{
+		OxmId: NewOxmId(205576),
+	}
+	return obj
+}
+func (self *OxmIdBsnVlanXlatePortGroupIdMasked) GetOXMName() string {
+	return "bsn_vlan_xlate_port_group_id_masked"
+}
+
+func (self *OxmIdBsnVlanXlatePortGroupIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVrf struct {
+	*OxmId
+}
+
+type IOxmIdBsnVrf interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVrf) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVrf(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVrf, error) {
+	_oxmidbsnvrf := &OxmIdBsnVrf{OxmId: parent}
+	return _oxmidbsnvrf, nil
+}
+
+func NewOxmIdBsnVrf() *OxmIdBsnVrf {
+	obj := &OxmIdBsnVrf{
+		OxmId: NewOxmId(197636),
+	}
+	return obj
+}
+func (self *OxmIdBsnVrf) GetOXMName() string {
+	return "bsn_vrf"
+}
+
+func (self *OxmIdBsnVrf) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVrfMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnVrfMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVrfMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVrfMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVrfMasked, error) {
+	_oxmidbsnvrfmasked := &OxmIdBsnVrfMasked{OxmId: parent}
+	return _oxmidbsnvrfmasked, nil
+}
+
+func NewOxmIdBsnVrfMasked() *OxmIdBsnVrfMasked {
+	obj := &OxmIdBsnVrfMasked{
+		OxmId: NewOxmId(197896),
+	}
+	return obj
+}
+func (self *OxmIdBsnVrfMasked) GetOXMName() string {
+	return "bsn_vrf_masked"
+}
+
+func (self *OxmIdBsnVrfMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVxlanNetworkId struct {
+	*OxmId
+}
+
+type IOxmIdBsnVxlanNetworkId interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVxlanNetworkId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVxlanNetworkId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVxlanNetworkId, error) {
+	_oxmidbsnvxlannetworkid := &OxmIdBsnVxlanNetworkId{OxmId: parent}
+	return _oxmidbsnvxlannetworkid, nil
+}
+
+func NewOxmIdBsnVxlanNetworkId() *OxmIdBsnVxlanNetworkId {
+	obj := &OxmIdBsnVxlanNetworkId{
+		OxmId: NewOxmId(207364),
+	}
+	return obj
+}
+func (self *OxmIdBsnVxlanNetworkId) GetOXMName() string {
+	return "bsn_vxlan_network_id"
+}
+
+func (self *OxmIdBsnVxlanNetworkId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdBsnVxlanNetworkIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdBsnVxlanNetworkIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdBsnVxlanNetworkIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdBsnVxlanNetworkIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdBsnVxlanNetworkIdMasked, error) {
+	_oxmidbsnvxlannetworkidmasked := &OxmIdBsnVxlanNetworkIdMasked{OxmId: parent}
+	return _oxmidbsnvxlannetworkidmasked, nil
+}
+
+func NewOxmIdBsnVxlanNetworkIdMasked() *OxmIdBsnVxlanNetworkIdMasked {
+	obj := &OxmIdBsnVxlanNetworkIdMasked{
+		OxmId: NewOxmId(207624),
+	}
+	return obj
+}
+func (self *OxmIdBsnVxlanNetworkIdMasked) GetOXMName() string {
+	return "bsn_vxlan_network_id_masked"
+}
+
+func (self *OxmIdBsnVxlanNetworkIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingIpv6Dst struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingIpv6Dst interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingIpv6Dst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingIpv6Dst, error) {
+	_oxmidconntrackingipv6dst := &OxmIdConnTrackingIpv6Dst{OxmId: parent}
+	return _oxmidconntrackingipv6dst, nil
+}
+
+func NewOxmIdConnTrackingIpv6Dst() *OxmIdConnTrackingIpv6Dst {
+	obj := &OxmIdConnTrackingIpv6Dst{
+		OxmId: NewOxmId(128528),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingIpv6Dst) GetOXMName() string {
+	return "conn_tracking_ipv6_dst"
+}
+
+func (self *OxmIdConnTrackingIpv6Dst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingIpv6DstMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingIpv6DstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingIpv6DstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingIpv6DstMasked, error) {
+	_oxmidconntrackingipv6dstmasked := &OxmIdConnTrackingIpv6DstMasked{OxmId: parent}
+	return _oxmidconntrackingipv6dstmasked, nil
+}
+
+func NewOxmIdConnTrackingIpv6DstMasked() *OxmIdConnTrackingIpv6DstMasked {
+	obj := &OxmIdConnTrackingIpv6DstMasked{
+		OxmId: NewOxmId(128800),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingIpv6DstMasked) GetOXMName() string {
+	return "conn_tracking_ipv6_dst_masked"
+}
+
+func (self *OxmIdConnTrackingIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingIpv6Src struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingIpv6Src interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingIpv6Src(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingIpv6Src, error) {
+	_oxmidconntrackingipv6src := &OxmIdConnTrackingIpv6Src{OxmId: parent}
+	return _oxmidconntrackingipv6src, nil
+}
+
+func NewOxmIdConnTrackingIpv6Src() *OxmIdConnTrackingIpv6Src {
+	obj := &OxmIdConnTrackingIpv6Src{
+		OxmId: NewOxmId(128016),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingIpv6Src) GetOXMName() string {
+	return "conn_tracking_ipv6_src"
+}
+
+func (self *OxmIdConnTrackingIpv6Src) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingIpv6SrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingIpv6SrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingIpv6SrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingIpv6SrcMasked, error) {
+	_oxmidconntrackingipv6srcmasked := &OxmIdConnTrackingIpv6SrcMasked{OxmId: parent}
+	return _oxmidconntrackingipv6srcmasked, nil
+}
+
+func NewOxmIdConnTrackingIpv6SrcMasked() *OxmIdConnTrackingIpv6SrcMasked {
+	obj := &OxmIdConnTrackingIpv6SrcMasked{
+		OxmId: NewOxmId(128288),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingIpv6SrcMasked) GetOXMName() string {
+	return "conn_tracking_ipv6_src_masked"
+}
+
+func (self *OxmIdConnTrackingIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingLabel struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingLabel interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingLabel(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingLabel, error) {
+	_oxmidconntrackinglabel := &OxmIdConnTrackingLabel{OxmId: parent}
+	return _oxmidconntrackinglabel, nil
+}
+
+func NewOxmIdConnTrackingLabel() *OxmIdConnTrackingLabel {
+	obj := &OxmIdConnTrackingLabel{
+		OxmId: NewOxmId(120848),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingLabel) GetOXMName() string {
+	return "conn_tracking_label"
+}
+
+func (self *OxmIdConnTrackingLabel) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingLabelMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingLabelMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingLabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingLabelMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingLabelMasked, error) {
+	_oxmidconntrackinglabelmasked := &OxmIdConnTrackingLabelMasked{OxmId: parent}
+	return _oxmidconntrackinglabelmasked, nil
+}
+
+func NewOxmIdConnTrackingLabelMasked() *OxmIdConnTrackingLabelMasked {
+	obj := &OxmIdConnTrackingLabelMasked{
+		OxmId: NewOxmId(121120),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingLabelMasked) GetOXMName() string {
+	return "conn_tracking_label_masked"
+}
+
+func (self *OxmIdConnTrackingLabelMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingMark struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingMark interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingMark) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingMark(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingMark, error) {
+	_oxmidconntrackingmark := &OxmIdConnTrackingMark{OxmId: parent}
+	return _oxmidconntrackingmark, nil
+}
+
+func NewOxmIdConnTrackingMark() *OxmIdConnTrackingMark {
+	obj := &OxmIdConnTrackingMark{
+		OxmId: NewOxmId(120324),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingMark) GetOXMName() string {
+	return "conn_tracking_mark"
+}
+
+func (self *OxmIdConnTrackingMark) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingMarkMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingMarkMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingMarkMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingMarkMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingMarkMasked, error) {
+	_oxmidconntrackingmarkmasked := &OxmIdConnTrackingMarkMasked{OxmId: parent}
+	return _oxmidconntrackingmarkmasked, nil
+}
+
+func NewOxmIdConnTrackingMarkMasked() *OxmIdConnTrackingMarkMasked {
+	obj := &OxmIdConnTrackingMarkMasked{
+		OxmId: NewOxmId(120584),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingMarkMasked) GetOXMName() string {
+	return "conn_tracking_mark_masked"
+}
+
+func (self *OxmIdConnTrackingMarkMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingNwDst struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingNwDst interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingNwDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingNwDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingNwDst, error) {
+	_oxmidconntrackingnwdst := &OxmIdConnTrackingNwDst{OxmId: parent}
+	return _oxmidconntrackingnwdst, nil
+}
+
+func NewOxmIdConnTrackingNwDst() *OxmIdConnTrackingNwDst {
+	obj := &OxmIdConnTrackingNwDst{
+		OxmId: NewOxmId(127492),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingNwDst) GetOXMName() string {
+	return "conn_tracking_nw_dst"
+}
+
+func (self *OxmIdConnTrackingNwDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingNwDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingNwDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingNwDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingNwDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingNwDstMasked, error) {
+	_oxmidconntrackingnwdstmasked := &OxmIdConnTrackingNwDstMasked{OxmId: parent}
+	return _oxmidconntrackingnwdstmasked, nil
+}
+
+func NewOxmIdConnTrackingNwDstMasked() *OxmIdConnTrackingNwDstMasked {
+	obj := &OxmIdConnTrackingNwDstMasked{
+		OxmId: NewOxmId(127752),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingNwDstMasked) GetOXMName() string {
+	return "conn_tracking_nw_dst_masked"
+}
+
+func (self *OxmIdConnTrackingNwDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingNwProto struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingNwProto interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingNwProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingNwProto(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingNwProto, error) {
+	_oxmidconntrackingnwproto := &OxmIdConnTrackingNwProto{OxmId: parent}
+	return _oxmidconntrackingnwproto, nil
+}
+
+func NewOxmIdConnTrackingNwProto() *OxmIdConnTrackingNwProto {
+	obj := &OxmIdConnTrackingNwProto{
+		OxmId: NewOxmId(126465),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingNwProto) GetOXMName() string {
+	return "conn_tracking_nw_proto"
+}
+
+func (self *OxmIdConnTrackingNwProto) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingNwProtoMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingNwProtoMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingNwProtoMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingNwProtoMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingNwProtoMasked, error) {
+	_oxmidconntrackingnwprotomasked := &OxmIdConnTrackingNwProtoMasked{OxmId: parent}
+	return _oxmidconntrackingnwprotomasked, nil
+}
+
+func NewOxmIdConnTrackingNwProtoMasked() *OxmIdConnTrackingNwProtoMasked {
+	obj := &OxmIdConnTrackingNwProtoMasked{
+		OxmId: NewOxmId(126722),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingNwProtoMasked) GetOXMName() string {
+	return "conn_tracking_nw_proto_masked"
+}
+
+func (self *OxmIdConnTrackingNwProtoMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingNwSrc struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingNwSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingNwSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingNwSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingNwSrc, error) {
+	_oxmidconntrackingnwsrc := &OxmIdConnTrackingNwSrc{OxmId: parent}
+	return _oxmidconntrackingnwsrc, nil
+}
+
+func NewOxmIdConnTrackingNwSrc() *OxmIdConnTrackingNwSrc {
+	obj := &OxmIdConnTrackingNwSrc{
+		OxmId: NewOxmId(126980),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingNwSrc) GetOXMName() string {
+	return "conn_tracking_nw_src"
+}
+
+func (self *OxmIdConnTrackingNwSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingNwSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingNwSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingNwSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingNwSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingNwSrcMasked, error) {
+	_oxmidconntrackingnwsrcmasked := &OxmIdConnTrackingNwSrcMasked{OxmId: parent}
+	return _oxmidconntrackingnwsrcmasked, nil
+}
+
+func NewOxmIdConnTrackingNwSrcMasked() *OxmIdConnTrackingNwSrcMasked {
+	obj := &OxmIdConnTrackingNwSrcMasked{
+		OxmId: NewOxmId(127240),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingNwSrcMasked) GetOXMName() string {
+	return "conn_tracking_nw_src_masked"
+}
+
+func (self *OxmIdConnTrackingNwSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingState struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingState interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingState(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingState, error) {
+	_oxmidconntrackingstate := &OxmIdConnTrackingState{OxmId: parent}
+	return _oxmidconntrackingstate, nil
+}
+
+func NewOxmIdConnTrackingState() *OxmIdConnTrackingState {
+	obj := &OxmIdConnTrackingState{
+		OxmId: NewOxmId(119300),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingState) GetOXMName() string {
+	return "conn_tracking_state"
+}
+
+func (self *OxmIdConnTrackingState) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingStateMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingStateMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingStateMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingStateMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingStateMasked, error) {
+	_oxmidconntrackingstatemasked := &OxmIdConnTrackingStateMasked{OxmId: parent}
+	return _oxmidconntrackingstatemasked, nil
+}
+
+func NewOxmIdConnTrackingStateMasked() *OxmIdConnTrackingStateMasked {
+	obj := &OxmIdConnTrackingStateMasked{
+		OxmId: NewOxmId(119560),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingStateMasked) GetOXMName() string {
+	return "conn_tracking_state_masked"
+}
+
+func (self *OxmIdConnTrackingStateMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingTpDst struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingTpDst interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingTpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingTpDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingTpDst, error) {
+	_oxmidconntrackingtpdst := &OxmIdConnTrackingTpDst{OxmId: parent}
+	return _oxmidconntrackingtpdst, nil
+}
+
+func NewOxmIdConnTrackingTpDst() *OxmIdConnTrackingTpDst {
+	obj := &OxmIdConnTrackingTpDst{
+		OxmId: NewOxmId(129538),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingTpDst) GetOXMName() string {
+	return "conn_tracking_tp_dst"
+}
+
+func (self *OxmIdConnTrackingTpDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingTpDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingTpDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingTpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingTpDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingTpDstMasked, error) {
+	_oxmidconntrackingtpdstmasked := &OxmIdConnTrackingTpDstMasked{OxmId: parent}
+	return _oxmidconntrackingtpdstmasked, nil
+}
+
+func NewOxmIdConnTrackingTpDstMasked() *OxmIdConnTrackingTpDstMasked {
+	obj := &OxmIdConnTrackingTpDstMasked{
+		OxmId: NewOxmId(129796),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingTpDstMasked) GetOXMName() string {
+	return "conn_tracking_tp_dst_masked"
+}
+
+func (self *OxmIdConnTrackingTpDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingTpSrc struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingTpSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingTpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingTpSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingTpSrc, error) {
+	_oxmidconntrackingtpsrc := &OxmIdConnTrackingTpSrc{OxmId: parent}
+	return _oxmidconntrackingtpsrc, nil
+}
+
+func NewOxmIdConnTrackingTpSrc() *OxmIdConnTrackingTpSrc {
+	obj := &OxmIdConnTrackingTpSrc{
+		OxmId: NewOxmId(129026),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingTpSrc) GetOXMName() string {
+	return "conn_tracking_tp_src"
+}
+
+func (self *OxmIdConnTrackingTpSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingTpSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingTpSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingTpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingTpSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingTpSrcMasked, error) {
+	_oxmidconntrackingtpsrcmasked := &OxmIdConnTrackingTpSrcMasked{OxmId: parent}
+	return _oxmidconntrackingtpsrcmasked, nil
+}
+
+func NewOxmIdConnTrackingTpSrcMasked() *OxmIdConnTrackingTpSrcMasked {
+	obj := &OxmIdConnTrackingTpSrcMasked{
+		OxmId: NewOxmId(129284),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingTpSrcMasked) GetOXMName() string {
+	return "conn_tracking_tp_src_masked"
+}
+
+func (self *OxmIdConnTrackingTpSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingZone struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingZone interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingZone) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingZone(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingZone, error) {
+	_oxmidconntrackingzone := &OxmIdConnTrackingZone{OxmId: parent}
+	return _oxmidconntrackingzone, nil
+}
+
+func NewOxmIdConnTrackingZone() *OxmIdConnTrackingZone {
+	obj := &OxmIdConnTrackingZone{
+		OxmId: NewOxmId(119810),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingZone) GetOXMName() string {
+	return "conn_tracking_zone"
+}
+
+func (self *OxmIdConnTrackingZone) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdConnTrackingZoneMasked struct {
+	*OxmId
+}
+
+type IOxmIdConnTrackingZoneMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdConnTrackingZoneMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdConnTrackingZoneMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdConnTrackingZoneMasked, error) {
+	_oxmidconntrackingzonemasked := &OxmIdConnTrackingZoneMasked{OxmId: parent}
+	return _oxmidconntrackingzonemasked, nil
+}
+
+func NewOxmIdConnTrackingZoneMasked() *OxmIdConnTrackingZoneMasked {
+	obj := &OxmIdConnTrackingZoneMasked{
+		OxmId: NewOxmId(120068),
+	}
+	return obj
+}
+func (self *OxmIdConnTrackingZoneMasked) GetOXMName() string {
+	return "conn_tracking_zone_masked"
+}
+
+func (self *OxmIdConnTrackingZoneMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdEthTypeMasked struct {
+	*OxmId
+}
+
+type IOxmIdEthTypeMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdEthTypeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdEthTypeMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdEthTypeMasked, error) {
+	_oxmidethtypemasked := &OxmIdEthTypeMasked{OxmId: parent}
+	return _oxmidethtypemasked, nil
+}
+
+func NewOxmIdEthTypeMasked() *OxmIdEthTypeMasked {
+	obj := &OxmIdEthTypeMasked{
+		OxmId: NewOxmId(2147486468),
+	}
+	return obj
+}
+func (self *OxmIdEthTypeMasked) GetOXMName() string {
+	return "eth_type_masked"
+}
+
+func (self *OxmIdEthTypeMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv4Code struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv4Code interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv4Code) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv4Code(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv4Code, error) {
+	_oxmidicmpv4code := &OxmIdIcmpv4Code{OxmId: parent}
+	return _oxmidicmpv4code, nil
+}
+
+func NewOxmIdIcmpv4Code() *OxmIdIcmpv4Code {
+	obj := &OxmIdIcmpv4Code{
+		OxmId: NewOxmId(2147493889),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv4Code) GetOXMName() string {
+	return "icmpv4_code"
+}
+
+func (self *OxmIdIcmpv4Code) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv4CodeMasked struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv4CodeMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv4CodeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv4CodeMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv4CodeMasked, error) {
+	_oxmidicmpv4codemasked := &OxmIdIcmpv4CodeMasked{OxmId: parent}
+	return _oxmidicmpv4codemasked, nil
+}
+
+func NewOxmIdIcmpv4CodeMasked() *OxmIdIcmpv4CodeMasked {
+	obj := &OxmIdIcmpv4CodeMasked{
+		OxmId: NewOxmId(2147494146),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv4CodeMasked) GetOXMName() string {
+	return "icmpv4_code_masked"
+}
+
+func (self *OxmIdIcmpv4CodeMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv4Type struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv4Type interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv4Type) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv4Type(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv4Type, error) {
+	_oxmidicmpv4type := &OxmIdIcmpv4Type{OxmId: parent}
+	return _oxmidicmpv4type, nil
+}
+
+func NewOxmIdIcmpv4Type() *OxmIdIcmpv4Type {
+	obj := &OxmIdIcmpv4Type{
+		OxmId: NewOxmId(2147493377),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv4Type) GetOXMName() string {
+	return "icmpv4_type"
+}
+
+func (self *OxmIdIcmpv4Type) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv4TypeMasked struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv4TypeMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv4TypeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv4TypeMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv4TypeMasked, error) {
+	_oxmidicmpv4typemasked := &OxmIdIcmpv4TypeMasked{OxmId: parent}
+	return _oxmidicmpv4typemasked, nil
+}
+
+func NewOxmIdIcmpv4TypeMasked() *OxmIdIcmpv4TypeMasked {
+	obj := &OxmIdIcmpv4TypeMasked{
+		OxmId: NewOxmId(2147493634),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv4TypeMasked) GetOXMName() string {
+	return "icmpv4_type_masked"
+}
+
+func (self *OxmIdIcmpv4TypeMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv6CodeMasked struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv6CodeMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv6CodeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv6CodeMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv6CodeMasked, error) {
+	_oxmidicmpv6codemasked := &OxmIdIcmpv6CodeMasked{OxmId: parent}
+	return _oxmidicmpv6codemasked, nil
+}
+
+func NewOxmIdIcmpv6CodeMasked() *OxmIdIcmpv6CodeMasked {
+	obj := &OxmIdIcmpv6CodeMasked{
+		OxmId: NewOxmId(2147499266),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv6CodeMasked) GetOXMName() string {
+	return "icmpv6_code_masked"
+}
+
+func (self *OxmIdIcmpv6CodeMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIcmpv6TypeMasked struct {
+	*OxmId
+}
+
+type IOxmIdIcmpv6TypeMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIcmpv6TypeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIcmpv6TypeMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIcmpv6TypeMasked, error) {
+	_oxmidicmpv6typemasked := &OxmIdIcmpv6TypeMasked{OxmId: parent}
+	return _oxmidicmpv6typemasked, nil
+}
+
+func NewOxmIdIcmpv6TypeMasked() *OxmIdIcmpv6TypeMasked {
+	obj := &OxmIdIcmpv6TypeMasked{
+		OxmId: NewOxmId(2147498754),
+	}
+	return obj
+}
+func (self *OxmIdIcmpv6TypeMasked) GetOXMName() string {
+	return "icmpv6_type_masked"
+}
+
+func (self *OxmIdIcmpv6TypeMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdInPhyPort struct {
+	*OxmId
+}
+
+type IOxmIdInPhyPort interface {
+	IOxmId
+}
+
+func (self *OxmIdInPhyPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdInPhyPort(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdInPhyPort, error) {
+	_oxmidinphyport := &OxmIdInPhyPort{OxmId: parent}
+	return _oxmidinphyport, nil
+}
+
+func NewOxmIdInPhyPort() *OxmIdInPhyPort {
+	obj := &OxmIdInPhyPort{
+		OxmId: NewOxmId(2147484164),
+	}
+	return obj
+}
+func (self *OxmIdInPhyPort) GetOXMName() string {
+	return "in_phy_port"
+}
+
+func (self *OxmIdInPhyPort) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdInPhyPortMasked struct {
+	*OxmId
+}
+
+type IOxmIdInPhyPortMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdInPhyPortMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdInPhyPortMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdInPhyPortMasked, error) {
+	_oxmidinphyportmasked := &OxmIdInPhyPortMasked{OxmId: parent}
+	return _oxmidinphyportmasked, nil
+}
+
+func NewOxmIdInPhyPortMasked() *OxmIdInPhyPortMasked {
+	obj := &OxmIdInPhyPortMasked{
+		OxmId: NewOxmId(2147484424),
+	}
+	return obj
+}
+func (self *OxmIdInPhyPortMasked) GetOXMName() string {
+	return "in_phy_port_masked"
+}
+
+func (self *OxmIdInPhyPortMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdInPortMasked struct {
+	*OxmId
+}
+
+type IOxmIdInPortMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdInPortMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdInPortMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdInPortMasked, error) {
+	_oxmidinportmasked := &OxmIdInPortMasked{OxmId: parent}
+	return _oxmidinportmasked, nil
+}
+
+func NewOxmIdInPortMasked() *OxmIdInPortMasked {
+	obj := &OxmIdInPortMasked{
+		OxmId: NewOxmId(2147483912),
+	}
+	return obj
+}
+func (self *OxmIdInPortMasked) GetOXMName() string {
+	return "in_port_masked"
+}
+
+func (self *OxmIdInPortMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpDscp struct {
+	*OxmId
+}
+
+type IOxmIdIpDscp interface {
+	IOxmId
+}
+
+func (self *OxmIdIpDscp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpDscp(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpDscp, error) {
+	_oxmidipdscp := &OxmIdIpDscp{OxmId: parent}
+	return _oxmidipdscp, nil
+}
+
+func NewOxmIdIpDscp() *OxmIdIpDscp {
+	obj := &OxmIdIpDscp{
+		OxmId: NewOxmId(2147487745),
+	}
+	return obj
+}
+func (self *OxmIdIpDscp) GetOXMName() string {
+	return "ip_dscp"
+}
+
+func (self *OxmIdIpDscp) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpDscpMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpDscpMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpDscpMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpDscpMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpDscpMasked, error) {
+	_oxmidipdscpmasked := &OxmIdIpDscpMasked{OxmId: parent}
+	return _oxmidipdscpmasked, nil
+}
+
+func NewOxmIdIpDscpMasked() *OxmIdIpDscpMasked {
+	obj := &OxmIdIpDscpMasked{
+		OxmId: NewOxmId(2147488002),
+	}
+	return obj
+}
+func (self *OxmIdIpDscpMasked) GetOXMName() string {
+	return "ip_dscp_masked"
+}
+
+func (self *OxmIdIpDscpMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpEcn struct {
+	*OxmId
+}
+
+type IOxmIdIpEcn interface {
+	IOxmId
+}
+
+func (self *OxmIdIpEcn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpEcn(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpEcn, error) {
+	_oxmidipecn := &OxmIdIpEcn{OxmId: parent}
+	return _oxmidipecn, nil
+}
+
+func NewOxmIdIpEcn() *OxmIdIpEcn {
+	obj := &OxmIdIpEcn{
+		OxmId: NewOxmId(2147488257),
+	}
+	return obj
+}
+func (self *OxmIdIpEcn) GetOXMName() string {
+	return "ip_ecn"
+}
+
+func (self *OxmIdIpEcn) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpEcnMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpEcnMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpEcnMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpEcnMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpEcnMasked, error) {
+	_oxmidipecnmasked := &OxmIdIpEcnMasked{OxmId: parent}
+	return _oxmidipecnmasked, nil
+}
+
+func NewOxmIdIpEcnMasked() *OxmIdIpEcnMasked {
+	obj := &OxmIdIpEcnMasked{
+		OxmId: NewOxmId(2147488514),
+	}
+	return obj
+}
+func (self *OxmIdIpEcnMasked) GetOXMName() string {
+	return "ip_ecn_masked"
+}
+
+func (self *OxmIdIpEcnMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpProto struct {
+	*OxmId
+}
+
+type IOxmIdIpProto interface {
+	IOxmId
+}
+
+func (self *OxmIdIpProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpProto(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpProto, error) {
+	_oxmidipproto := &OxmIdIpProto{OxmId: parent}
+	return _oxmidipproto, nil
+}
+
+func NewOxmIdIpProto() *OxmIdIpProto {
+	obj := &OxmIdIpProto{
+		OxmId: NewOxmId(2147488769),
+	}
+	return obj
+}
+func (self *OxmIdIpProto) GetOXMName() string {
+	return "ip_proto"
+}
+
+func (self *OxmIdIpProto) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpProtoMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpProtoMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpProtoMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpProtoMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpProtoMasked, error) {
+	_oxmidipprotomasked := &OxmIdIpProtoMasked{OxmId: parent}
+	return _oxmidipprotomasked, nil
+}
+
+func NewOxmIdIpProtoMasked() *OxmIdIpProtoMasked {
+	obj := &OxmIdIpProtoMasked{
+		OxmId: NewOxmId(2147489026),
+	}
+	return obj
+}
+func (self *OxmIdIpProtoMasked) GetOXMName() string {
+	return "ip_proto_masked"
+}
+
+func (self *OxmIdIpProtoMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv4Dst struct {
+	*OxmId
+}
+
+type IOxmIdIpv4Dst interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv4Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv4Dst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv4Dst, error) {
+	_oxmidipv4dst := &OxmIdIpv4Dst{OxmId: parent}
+	return _oxmidipv4dst, nil
+}
+
+func NewOxmIdIpv4Dst() *OxmIdIpv4Dst {
+	obj := &OxmIdIpv4Dst{
+		OxmId: NewOxmId(2147489796),
+	}
+	return obj
+}
+func (self *OxmIdIpv4Dst) GetOXMName() string {
+	return "ipv4_dst"
+}
+
+func (self *OxmIdIpv4Dst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv4DstMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv4DstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv4DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv4DstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv4DstMasked, error) {
+	_oxmidipv4dstmasked := &OxmIdIpv4DstMasked{OxmId: parent}
+	return _oxmidipv4dstmasked, nil
+}
+
+func NewOxmIdIpv4DstMasked() *OxmIdIpv4DstMasked {
+	obj := &OxmIdIpv4DstMasked{
+		OxmId: NewOxmId(2147490056),
+	}
+	return obj
+}
+func (self *OxmIdIpv4DstMasked) GetOXMName() string {
+	return "ipv4_dst_masked"
+}
+
+func (self *OxmIdIpv4DstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv4Src struct {
+	*OxmId
+}
+
+type IOxmIdIpv4Src interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv4Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv4Src(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv4Src, error) {
+	_oxmidipv4src := &OxmIdIpv4Src{OxmId: parent}
+	return _oxmidipv4src, nil
+}
+
+func NewOxmIdIpv4Src() *OxmIdIpv4Src {
+	obj := &OxmIdIpv4Src{
+		OxmId: NewOxmId(2147489284),
+	}
+	return obj
+}
+func (self *OxmIdIpv4Src) GetOXMName() string {
+	return "ipv4_src"
+}
+
+func (self *OxmIdIpv4Src) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv4SrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv4SrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv4SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv4SrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv4SrcMasked, error) {
+	_oxmidipv4srcmasked := &OxmIdIpv4SrcMasked{OxmId: parent}
+	return _oxmidipv4srcmasked, nil
+}
+
+func NewOxmIdIpv4SrcMasked() *OxmIdIpv4SrcMasked {
+	obj := &OxmIdIpv4SrcMasked{
+		OxmId: NewOxmId(2147489544),
+	}
+	return obj
+}
+func (self *OxmIdIpv4SrcMasked) GetOXMName() string {
+	return "ipv4_src_masked"
+}
+
+func (self *OxmIdIpv4SrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6Exthdr struct {
+	*OxmId
+}
+
+type IOxmIdIpv6Exthdr interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6Exthdr) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6Exthdr(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6Exthdr, error) {
+	_oxmidipv6exthdr := &OxmIdIpv6Exthdr{OxmId: parent}
+	return _oxmidipv6exthdr, nil
+}
+
+func NewOxmIdIpv6Exthdr() *OxmIdIpv6Exthdr {
+	obj := &OxmIdIpv6Exthdr{
+		OxmId: NewOxmId(2147503618),
+	}
+	return obj
+}
+func (self *OxmIdIpv6Exthdr) GetOXMName() string {
+	return "ipv6_exthdr"
+}
+
+func (self *OxmIdIpv6Exthdr) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6ExthdrMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6ExthdrMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6ExthdrMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6ExthdrMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6ExthdrMasked, error) {
+	_oxmidipv6exthdrmasked := &OxmIdIpv6ExthdrMasked{OxmId: parent}
+	return _oxmidipv6exthdrmasked, nil
+}
+
+func NewOxmIdIpv6ExthdrMasked() *OxmIdIpv6ExthdrMasked {
+	obj := &OxmIdIpv6ExthdrMasked{
+		OxmId: NewOxmId(2147503876),
+	}
+	return obj
+}
+func (self *OxmIdIpv6ExthdrMasked) GetOXMName() string {
+	return "ipv6_exthdr_masked"
+}
+
+func (self *OxmIdIpv6ExthdrMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6Flabel struct {
+	*OxmId
+}
+
+type IOxmIdIpv6Flabel interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6Flabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6Flabel(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6Flabel, error) {
+	_oxmidipv6flabel := &OxmIdIpv6Flabel{OxmId: parent}
+	return _oxmidipv6flabel, nil
+}
+
+func NewOxmIdIpv6Flabel() *OxmIdIpv6Flabel {
+	obj := &OxmIdIpv6Flabel{
+		OxmId: NewOxmId(2147497988),
+	}
+	return obj
+}
+func (self *OxmIdIpv6Flabel) GetOXMName() string {
+	return "ipv6_flabel"
+}
+
+func (self *OxmIdIpv6Flabel) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6FlabelMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6FlabelMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6FlabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6FlabelMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6FlabelMasked, error) {
+	_oxmidipv6flabelmasked := &OxmIdIpv6FlabelMasked{OxmId: parent}
+	return _oxmidipv6flabelmasked, nil
+}
+
+func NewOxmIdIpv6FlabelMasked() *OxmIdIpv6FlabelMasked {
+	obj := &OxmIdIpv6FlabelMasked{
+		OxmId: NewOxmId(2147498248),
+	}
+	return obj
+}
+func (self *OxmIdIpv6FlabelMasked) GetOXMName() string {
+	return "ipv6_flabel_masked"
+}
+
+func (self *OxmIdIpv6FlabelMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6NdSll struct {
+	*OxmId
+}
+
+type IOxmIdIpv6NdSll interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6NdSll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6NdSll(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6NdSll, error) {
+	_oxmidipv6ndsll := &OxmIdIpv6NdSll{OxmId: parent}
+	return _oxmidipv6ndsll, nil
+}
+
+func NewOxmIdIpv6NdSll() *OxmIdIpv6NdSll {
+	obj := &OxmIdIpv6NdSll{
+		OxmId: NewOxmId(2147500038),
+	}
+	return obj
+}
+func (self *OxmIdIpv6NdSll) GetOXMName() string {
+	return "ipv6_nd_sll"
+}
+
+func (self *OxmIdIpv6NdSll) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6NdSllMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6NdSllMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6NdSllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6NdSllMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6NdSllMasked, error) {
+	_oxmidipv6ndsllmasked := &OxmIdIpv6NdSllMasked{OxmId: parent}
+	return _oxmidipv6ndsllmasked, nil
+}
+
+func NewOxmIdIpv6NdSllMasked() *OxmIdIpv6NdSllMasked {
+	obj := &OxmIdIpv6NdSllMasked{
+		OxmId: NewOxmId(2147500300),
+	}
+	return obj
+}
+func (self *OxmIdIpv6NdSllMasked) GetOXMName() string {
+	return "ipv6_nd_sll_masked"
+}
+
+func (self *OxmIdIpv6NdSllMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6NdTarget struct {
+	*OxmId
+}
+
+type IOxmIdIpv6NdTarget interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6NdTarget) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6NdTarget(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6NdTarget, error) {
+	_oxmidipv6ndtarget := &OxmIdIpv6NdTarget{OxmId: parent}
+	return _oxmidipv6ndtarget, nil
+}
+
+func NewOxmIdIpv6NdTarget() *OxmIdIpv6NdTarget {
+	obj := &OxmIdIpv6NdTarget{
+		OxmId: NewOxmId(2147499536),
+	}
+	return obj
+}
+func (self *OxmIdIpv6NdTarget) GetOXMName() string {
+	return "ipv6_nd_target"
+}
+
+func (self *OxmIdIpv6NdTarget) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6NdTargetMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6NdTargetMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6NdTargetMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6NdTargetMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6NdTargetMasked, error) {
+	_oxmidipv6ndtargetmasked := &OxmIdIpv6NdTargetMasked{OxmId: parent}
+	return _oxmidipv6ndtargetmasked, nil
+}
+
+func NewOxmIdIpv6NdTargetMasked() *OxmIdIpv6NdTargetMasked {
+	obj := &OxmIdIpv6NdTargetMasked{
+		OxmId: NewOxmId(2147499808),
+	}
+	return obj
+}
+func (self *OxmIdIpv6NdTargetMasked) GetOXMName() string {
+	return "ipv6_nd_target_masked"
+}
+
+func (self *OxmIdIpv6NdTargetMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6NdTll struct {
+	*OxmId
+}
+
+type IOxmIdIpv6NdTll interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6NdTll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6NdTll(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6NdTll, error) {
+	_oxmidipv6ndtll := &OxmIdIpv6NdTll{OxmId: parent}
+	return _oxmidipv6ndtll, nil
+}
+
+func NewOxmIdIpv6NdTll() *OxmIdIpv6NdTll {
+	obj := &OxmIdIpv6NdTll{
+		OxmId: NewOxmId(2147500550),
+	}
+	return obj
+}
+func (self *OxmIdIpv6NdTll) GetOXMName() string {
+	return "ipv6_nd_tll"
+}
+
+func (self *OxmIdIpv6NdTll) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdIpv6NdTllMasked struct {
+	*OxmId
+}
+
+type IOxmIdIpv6NdTllMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdIpv6NdTllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdIpv6NdTllMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdIpv6NdTllMasked, error) {
+	_oxmidipv6ndtllmasked := &OxmIdIpv6NdTllMasked{OxmId: parent}
+	return _oxmidipv6ndtllmasked, nil
+}
+
+func NewOxmIdIpv6NdTllMasked() *OxmIdIpv6NdTllMasked {
+	obj := &OxmIdIpv6NdTllMasked{
+		OxmId: NewOxmId(2147500812),
+	}
+	return obj
+}
+func (self *OxmIdIpv6NdTllMasked) GetOXMName() string {
+	return "ipv6_nd_tll_masked"
+}
+
+func (self *OxmIdIpv6NdTllMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMetadata struct {
+	*OxmId
+}
+
+type IOxmIdMetadata interface {
+	IOxmId
+}
+
+func (self *OxmIdMetadata) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMetadata(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMetadata, error) {
+	_oxmidmetadata := &OxmIdMetadata{OxmId: parent}
+	return _oxmidmetadata, nil
+}
+
+func NewOxmIdMetadata() *OxmIdMetadata {
+	obj := &OxmIdMetadata{
+		OxmId: NewOxmId(2147484680),
+	}
+	return obj
+}
+func (self *OxmIdMetadata) GetOXMName() string {
+	return "metadata"
+}
+
+func (self *OxmIdMetadata) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMetadataMasked struct {
+	*OxmId
+}
+
+type IOxmIdMetadataMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdMetadataMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMetadataMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMetadataMasked, error) {
+	_oxmidmetadatamasked := &OxmIdMetadataMasked{OxmId: parent}
+	return _oxmidmetadatamasked, nil
+}
+
+func NewOxmIdMetadataMasked() *OxmIdMetadataMasked {
+	obj := &OxmIdMetadataMasked{
+		OxmId: NewOxmId(2147484944),
+	}
+	return obj
+}
+func (self *OxmIdMetadataMasked) GetOXMName() string {
+	return "metadata_masked"
+}
+
+func (self *OxmIdMetadataMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMplsBos struct {
+	*OxmId
+}
+
+type IOxmIdMplsBos interface {
+	IOxmId
+}
+
+func (self *OxmIdMplsBos) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMplsBos(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMplsBos, error) {
+	_oxmidmplsbos := &OxmIdMplsBos{OxmId: parent}
+	return _oxmidmplsbos, nil
+}
+
+func NewOxmIdMplsBos() *OxmIdMplsBos {
+	obj := &OxmIdMplsBos{
+		OxmId: NewOxmId(2147502081),
+	}
+	return obj
+}
+func (self *OxmIdMplsBos) GetOXMName() string {
+	return "mpls_bos"
+}
+
+func (self *OxmIdMplsBos) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMplsBosMasked struct {
+	*OxmId
+}
+
+type IOxmIdMplsBosMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdMplsBosMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMplsBosMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMplsBosMasked, error) {
+	_oxmidmplsbosmasked := &OxmIdMplsBosMasked{OxmId: parent}
+	return _oxmidmplsbosmasked, nil
+}
+
+func NewOxmIdMplsBosMasked() *OxmIdMplsBosMasked {
+	obj := &OxmIdMplsBosMasked{
+		OxmId: NewOxmId(2147502338),
+	}
+	return obj
+}
+func (self *OxmIdMplsBosMasked) GetOXMName() string {
+	return "mpls_bos_masked"
+}
+
+func (self *OxmIdMplsBosMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMplsLabel struct {
+	*OxmId
+}
+
+type IOxmIdMplsLabel interface {
+	IOxmId
+}
+
+func (self *OxmIdMplsLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMplsLabel(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMplsLabel, error) {
+	_oxmidmplslabel := &OxmIdMplsLabel{OxmId: parent}
+	return _oxmidmplslabel, nil
+}
+
+func NewOxmIdMplsLabel() *OxmIdMplsLabel {
+	obj := &OxmIdMplsLabel{
+		OxmId: NewOxmId(2147501060),
+	}
+	return obj
+}
+func (self *OxmIdMplsLabel) GetOXMName() string {
+	return "mpls_label"
+}
+
+func (self *OxmIdMplsLabel) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMplsLabelMasked struct {
+	*OxmId
+}
+
+type IOxmIdMplsLabelMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdMplsLabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMplsLabelMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMplsLabelMasked, error) {
+	_oxmidmplslabelmasked := &OxmIdMplsLabelMasked{OxmId: parent}
+	return _oxmidmplslabelmasked, nil
+}
+
+func NewOxmIdMplsLabelMasked() *OxmIdMplsLabelMasked {
+	obj := &OxmIdMplsLabelMasked{
+		OxmId: NewOxmId(2147501320),
+	}
+	return obj
+}
+func (self *OxmIdMplsLabelMasked) GetOXMName() string {
+	return "mpls_label_masked"
+}
+
+func (self *OxmIdMplsLabelMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMplsTc struct {
+	*OxmId
+}
+
+type IOxmIdMplsTc interface {
+	IOxmId
+}
+
+func (self *OxmIdMplsTc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMplsTc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMplsTc, error) {
+	_oxmidmplstc := &OxmIdMplsTc{OxmId: parent}
+	return _oxmidmplstc, nil
+}
+
+func NewOxmIdMplsTc() *OxmIdMplsTc {
+	obj := &OxmIdMplsTc{
+		OxmId: NewOxmId(2147501569),
+	}
+	return obj
+}
+func (self *OxmIdMplsTc) GetOXMName() string {
+	return "mpls_tc"
+}
+
+func (self *OxmIdMplsTc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdMplsTcMasked struct {
+	*OxmId
+}
+
+type IOxmIdMplsTcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdMplsTcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdMplsTcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdMplsTcMasked, error) {
+	_oxmidmplstcmasked := &OxmIdMplsTcMasked{OxmId: parent}
+	return _oxmidmplstcmasked, nil
+}
+
+func NewOxmIdMplsTcMasked() *OxmIdMplsTcMasked {
+	obj := &OxmIdMplsTcMasked{
+		OxmId: NewOxmId(2147501826),
+	}
+	return obj
+}
+func (self *OxmIdMplsTcMasked) GetOXMName() string {
+	return "mpls_tc_masked"
+}
+
+func (self *OxmIdMplsTcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdOvsTcpFlags struct {
+	*OxmId
+	ExperimenterId uint32
+}
+
+type IOxmIdOvsTcpFlags interface {
+	IOxmId
+	GetExperimenterId() uint32
+}
+
+func (self *OxmIdOvsTcpFlags) GetExperimenterId() uint32 {
+	return self.ExperimenterId
+}
+
+func (self *OxmIdOvsTcpFlags) SetExperimenterId(v uint32) {
+	self.ExperimenterId = v
+}
+
+func (self *OxmIdOvsTcpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.ExperimenterId))
+
+	return nil
+}
+
+func DecodeOxmIdOvsTcpFlags(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdOvsTcpFlags, error) {
+	_oxmidovstcpflags := &OxmIdOvsTcpFlags{OxmId: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmIdOvsTcpFlags packet too short: %d < 4", decoder.Length())
+	}
+	_oxmidovstcpflags.ExperimenterId = uint32(decoder.ReadUint32())
+	return _oxmidovstcpflags, nil
+}
+
+func NewOxmIdOvsTcpFlags() *OxmIdOvsTcpFlags {
+	obj := &OxmIdOvsTcpFlags{
+		OxmId: NewOxmId(4294923270),
+	}
+	return obj
+}
+func (self *OxmIdOvsTcpFlags) GetOXMName() string {
+	return "ovs_tcp_flags"
+}
+
+func (self *OxmIdOvsTcpFlags) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdOvsTcpFlagsMasked struct {
+	*OxmId
+	ExperimenterId uint32
+}
+
+type IOxmIdOvsTcpFlagsMasked interface {
+	IOxmId
+	GetExperimenterId() uint32
+}
+
+func (self *OxmIdOvsTcpFlagsMasked) GetExperimenterId() uint32 {
+	return self.ExperimenterId
+}
+
+func (self *OxmIdOvsTcpFlagsMasked) SetExperimenterId(v uint32) {
+	self.ExperimenterId = v
+}
+
+func (self *OxmIdOvsTcpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.ExperimenterId))
+
+	return nil
+}
+
+func DecodeOxmIdOvsTcpFlagsMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdOvsTcpFlagsMasked, error) {
+	_oxmidovstcpflagsmasked := &OxmIdOvsTcpFlagsMasked{OxmId: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmIdOvsTcpFlagsMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmidovstcpflagsmasked.ExperimenterId = uint32(decoder.ReadUint32())
+	return _oxmidovstcpflagsmasked, nil
+}
+
+func NewOxmIdOvsTcpFlagsMasked() *OxmIdOvsTcpFlagsMasked {
+	obj := &OxmIdOvsTcpFlagsMasked{
+		OxmId: NewOxmId(4294923528),
+	}
+	return obj
+}
+func (self *OxmIdOvsTcpFlagsMasked) GetOXMName() string {
+	return "ovs_tcp_flags_masked"
+}
+
+func (self *OxmIdOvsTcpFlagsMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdSctpDst struct {
+	*OxmId
+}
+
+type IOxmIdSctpDst interface {
+	IOxmId
+}
+
+func (self *OxmIdSctpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdSctpDst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdSctpDst, error) {
+	_oxmidsctpdst := &OxmIdSctpDst{OxmId: parent}
+	return _oxmidsctpdst, nil
+}
+
+func NewOxmIdSctpDst() *OxmIdSctpDst {
+	obj := &OxmIdSctpDst{
+		OxmId: NewOxmId(2147492866),
+	}
+	return obj
+}
+func (self *OxmIdSctpDst) GetOXMName() string {
+	return "sctp_dst"
+}
+
+func (self *OxmIdSctpDst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdSctpDstMasked struct {
+	*OxmId
+}
+
+type IOxmIdSctpDstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdSctpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdSctpDstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdSctpDstMasked, error) {
+	_oxmidsctpdstmasked := &OxmIdSctpDstMasked{OxmId: parent}
+	return _oxmidsctpdstmasked, nil
+}
+
+func NewOxmIdSctpDstMasked() *OxmIdSctpDstMasked {
+	obj := &OxmIdSctpDstMasked{
+		OxmId: NewOxmId(2147493124),
+	}
+	return obj
+}
+func (self *OxmIdSctpDstMasked) GetOXMName() string {
+	return "sctp_dst_masked"
+}
+
+func (self *OxmIdSctpDstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdSctpSrc struct {
+	*OxmId
+}
+
+type IOxmIdSctpSrc interface {
+	IOxmId
+}
+
+func (self *OxmIdSctpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdSctpSrc(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdSctpSrc, error) {
+	_oxmidsctpsrc := &OxmIdSctpSrc{OxmId: parent}
+	return _oxmidsctpsrc, nil
+}
+
+func NewOxmIdSctpSrc() *OxmIdSctpSrc {
+	obj := &OxmIdSctpSrc{
+		OxmId: NewOxmId(2147492354),
+	}
+	return obj
+}
+func (self *OxmIdSctpSrc) GetOXMName() string {
+	return "sctp_src"
+}
+
+func (self *OxmIdSctpSrc) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdSctpSrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdSctpSrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdSctpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdSctpSrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdSctpSrcMasked, error) {
+	_oxmidsctpsrcmasked := &OxmIdSctpSrcMasked{OxmId: parent}
+	return _oxmidsctpsrcmasked, nil
+}
+
+func NewOxmIdSctpSrcMasked() *OxmIdSctpSrcMasked {
+	obj := &OxmIdSctpSrcMasked{
+		OxmId: NewOxmId(2147492612),
+	}
+	return obj
+}
+func (self *OxmIdSctpSrcMasked) GetOXMName() string {
+	return "sctp_src_masked"
+}
+
+func (self *OxmIdSctpSrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunnelId struct {
+	*OxmId
+}
+
+type IOxmIdTunnelId interface {
+	IOxmId
+}
+
+func (self *OxmIdTunnelId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunnelId(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunnelId, error) {
+	_oxmidtunnelid := &OxmIdTunnelId{OxmId: parent}
+	return _oxmidtunnelid, nil
+}
+
+func NewOxmIdTunnelId() *OxmIdTunnelId {
+	obj := &OxmIdTunnelId{
+		OxmId: NewOxmId(2147503112),
+	}
+	return obj
+}
+func (self *OxmIdTunnelId) GetOXMName() string {
+	return "tunnel_id"
+}
+
+func (self *OxmIdTunnelId) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunnelIdMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunnelIdMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunnelIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunnelIdMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunnelIdMasked, error) {
+	_oxmidtunnelidmasked := &OxmIdTunnelIdMasked{OxmId: parent}
+	return _oxmidtunnelidmasked, nil
+}
+
+func NewOxmIdTunnelIdMasked() *OxmIdTunnelIdMasked {
+	obj := &OxmIdTunnelIdMasked{
+		OxmId: NewOxmId(2147503376),
+	}
+	return obj
+}
+func (self *OxmIdTunnelIdMasked) GetOXMName() string {
+	return "tunnel_id_masked"
+}
+
+func (self *OxmIdTunnelIdMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunnelIpv4Dst struct {
+	*OxmId
+}
+
+type IOxmIdTunnelIpv4Dst interface {
+	IOxmId
+}
+
+func (self *OxmIdTunnelIpv4Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunnelIpv4Dst(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunnelIpv4Dst, error) {
+	_oxmidtunnelipv4dst := &OxmIdTunnelIpv4Dst{OxmId: parent}
+	return _oxmidtunnelipv4dst, nil
+}
+
+func NewOxmIdTunnelIpv4Dst() *OxmIdTunnelIpv4Dst {
+	obj := &OxmIdTunnelIpv4Dst{
+		OxmId: NewOxmId(81924),
+	}
+	return obj
+}
+func (self *OxmIdTunnelIpv4Dst) GetOXMName() string {
+	return "tunnel_ipv4_dst"
+}
+
+func (self *OxmIdTunnelIpv4Dst) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunnelIpv4DstMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunnelIpv4DstMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunnelIpv4DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunnelIpv4DstMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunnelIpv4DstMasked, error) {
+	_oxmidtunnelipv4dstmasked := &OxmIdTunnelIpv4DstMasked{OxmId: parent}
+	return _oxmidtunnelipv4dstmasked, nil
+}
+
+func NewOxmIdTunnelIpv4DstMasked() *OxmIdTunnelIpv4DstMasked {
+	obj := &OxmIdTunnelIpv4DstMasked{
+		OxmId: NewOxmId(82184),
+	}
+	return obj
+}
+func (self *OxmIdTunnelIpv4DstMasked) GetOXMName() string {
+	return "tunnel_ipv4_dst_masked"
+}
+
+func (self *OxmIdTunnelIpv4DstMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunnelIpv4Src struct {
+	*OxmId
+}
+
+type IOxmIdTunnelIpv4Src interface {
+	IOxmId
+}
+
+func (self *OxmIdTunnelIpv4Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunnelIpv4Src(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunnelIpv4Src, error) {
+	_oxmidtunnelipv4src := &OxmIdTunnelIpv4Src{OxmId: parent}
+	return _oxmidtunnelipv4src, nil
+}
+
+func NewOxmIdTunnelIpv4Src() *OxmIdTunnelIpv4Src {
+	obj := &OxmIdTunnelIpv4Src{
+		OxmId: NewOxmId(81412),
+	}
+	return obj
+}
+func (self *OxmIdTunnelIpv4Src) GetOXMName() string {
+	return "tunnel_ipv4_src"
+}
+
+func (self *OxmIdTunnelIpv4Src) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdTunnelIpv4SrcMasked struct {
+	*OxmId
+}
+
+type IOxmIdTunnelIpv4SrcMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdTunnelIpv4SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdTunnelIpv4SrcMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdTunnelIpv4SrcMasked, error) {
+	_oxmidtunnelipv4srcmasked := &OxmIdTunnelIpv4SrcMasked{OxmId: parent}
+	return _oxmidtunnelipv4srcmasked, nil
+}
+
+func NewOxmIdTunnelIpv4SrcMasked() *OxmIdTunnelIpv4SrcMasked {
+	obj := &OxmIdTunnelIpv4SrcMasked{
+		OxmId: NewOxmId(81672),
+	}
+	return obj
+}
+func (self *OxmIdTunnelIpv4SrcMasked) GetOXMName() string {
+	return "tunnel_ipv4_src_masked"
+}
+
+func (self *OxmIdTunnelIpv4SrcMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdVlanPcp struct {
+	*OxmId
+}
+
+type IOxmIdVlanPcp interface {
+	IOxmId
+}
+
+func (self *OxmIdVlanPcp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdVlanPcp(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdVlanPcp, error) {
+	_oxmidvlanpcp := &OxmIdVlanPcp{OxmId: parent}
+	return _oxmidvlanpcp, nil
+}
+
+func NewOxmIdVlanPcp() *OxmIdVlanPcp {
+	obj := &OxmIdVlanPcp{
+		OxmId: NewOxmId(2147487233),
+	}
+	return obj
+}
+func (self *OxmIdVlanPcp) GetOXMName() string {
+	return "vlan_pcp"
+}
+
+func (self *OxmIdVlanPcp) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdVlanPcpMasked struct {
+	*OxmId
+}
+
+type IOxmIdVlanPcpMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdVlanPcpMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdVlanPcpMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdVlanPcpMasked, error) {
+	_oxmidvlanpcpmasked := &OxmIdVlanPcpMasked{OxmId: parent}
+	return _oxmidvlanpcpmasked, nil
+}
+
+func NewOxmIdVlanPcpMasked() *OxmIdVlanPcpMasked {
+	obj := &OxmIdVlanPcpMasked{
+		OxmId: NewOxmId(2147487490),
+	}
+	return obj
+}
+func (self *OxmIdVlanPcpMasked) GetOXMName() string {
+	return "vlan_pcp_masked"
+}
+
+func (self *OxmIdVlanPcpMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdVlanVid struct {
+	*OxmId
+}
+
+type IOxmIdVlanVid interface {
+	IOxmId
+}
+
+func (self *OxmIdVlanVid) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdVlanVid(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdVlanVid, error) {
+	_oxmidvlanvid := &OxmIdVlanVid{OxmId: parent}
+	return _oxmidvlanvid, nil
+}
+
+func NewOxmIdVlanVid() *OxmIdVlanVid {
+	obj := &OxmIdVlanVid{
+		OxmId: NewOxmId(2147486722),
+	}
+	return obj
+}
+func (self *OxmIdVlanVid) GetOXMName() string {
+	return "vlan_vid"
+}
+
+func (self *OxmIdVlanVid) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type OxmIdVlanVidMasked struct {
+	*OxmId
+}
+
+type IOxmIdVlanVidMasked interface {
+	IOxmId
+}
+
+func (self *OxmIdVlanVidMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.OxmId.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeOxmIdVlanVidMasked(parent *OxmId, decoder *goloxi.Decoder) (*OxmIdVlanVidMasked, error) {
+	_oxmidvlanvidmasked := &OxmIdVlanVidMasked{OxmId: parent}
+	return _oxmidvlanvidmasked, nil
+}
+
+func NewOxmIdVlanVidMasked() *OxmIdVlanVidMasked {
+	obj := &OxmIdVlanVidMasked{
+		OxmId: NewOxmId(2147486980),
+	}
+	return obj
+}
+func (self *OxmIdVlanVidMasked) GetOXMName() string {
+	return "vlan_vid_masked"
+}
+
+func (self *OxmIdVlanVidMasked) MarshalJSON() ([]byte, error) {
+	if self.TypeLen == 0 {
+		return []byte("\"\""), nil
+	} else {
+		return []byte("\"" + self.GetOXMName() + "\""), nil
+	}
+}
+
+type PacketQueue struct {
+	QueueId    uint32
+	Port       Port
+	Len        uint16
+	Properties []IQueueProp
+}
+
+type IPacketQueue interface {
+	goloxi.Serializable
+	GetQueueId() uint32
+	GetPort() Port
+	GetLen() uint16
+	GetProperties() []IQueueProp
+}
+
+func (self *PacketQueue) GetQueueId() uint32 {
+	return self.QueueId
+}
+
+func (self *PacketQueue) SetQueueId(v uint32) {
+	self.QueueId = v
+}
+
+func (self *PacketQueue) GetPort() Port {
+	return self.Port
+}
+
+func (self *PacketQueue) SetPort(v Port) {
+	self.Port = v
+}
+
+func (self *PacketQueue) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *PacketQueue) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *PacketQueue) GetProperties() []IQueueProp {
+	return self.Properties
+}
+
+func (self *PacketQueue) SetProperties(v []IQueueProp) {
+	self.Properties = v
+}
+
+func (self *PacketQueue) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint32(uint32(self.QueueId))
+	self.Port.Serialize(encoder)
+	encoder.PutUint16(uint16(self.Len))
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+	for _, obj := range self.Properties {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[8:10], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePacketQueue(decoder *goloxi.Decoder) (*PacketQueue, error) {
+	_packetqueue := &PacketQueue{}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("PacketQueue packet too short: %d < 16", decoder.Length())
+	}
+	_packetqueue.QueueId = uint32(decoder.ReadUint32())
+	_packetqueue.Port.Decode(decoder)
+	_packetqueue.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_packetqueue.Len), 2+8)
+	decoder.Skip(6)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeQueueProp(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_packetqueue.Properties = append(_packetqueue.Properties, item)
+		}
+	}
+	return _packetqueue, nil
+}
+
+func NewPacketQueue() *PacketQueue {
+	obj := &PacketQueue{}
+	return obj
+}
+
+type PortDesc struct {
+	PortNo     Port
+	HwAddr     net.HardwareAddr
+	Name       string
+	Config     PortConfig
+	State      PortState
+	Curr       PortFeatures
+	Advertised PortFeatures
+	Supported  PortFeatures
+	Peer       PortFeatures
+	CurrSpeed  uint32
+	MaxSpeed   uint32
+}
+
+type IPortDesc interface {
+	goloxi.Serializable
+	GetPortNo() Port
+	GetHwAddr() net.HardwareAddr
+	GetName() string
+	GetConfig() PortConfig
+	GetState() PortState
+	GetCurr() PortFeatures
+	GetAdvertised() PortFeatures
+	GetSupported() PortFeatures
+	GetPeer() PortFeatures
+	GetCurrSpeed() uint32
+	GetMaxSpeed() uint32
+}
+
+func (self *PortDesc) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *PortDesc) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *PortDesc) GetHwAddr() net.HardwareAddr {
+	return self.HwAddr
+}
+
+func (self *PortDesc) SetHwAddr(v net.HardwareAddr) {
+	self.HwAddr = v
+}
+
+func (self *PortDesc) GetName() string {
+	return self.Name
+}
+
+func (self *PortDesc) SetName(v string) {
+	self.Name = v
+}
+
+func (self *PortDesc) GetConfig() PortConfig {
+	return self.Config
+}
+
+func (self *PortDesc) SetConfig(v PortConfig) {
+	self.Config = v
+}
+
+func (self *PortDesc) GetState() PortState {
+	return self.State
+}
+
+func (self *PortDesc) SetState(v PortState) {
+	self.State = v
+}
+
+func (self *PortDesc) GetCurr() PortFeatures {
+	return self.Curr
+}
+
+func (self *PortDesc) SetCurr(v PortFeatures) {
+	self.Curr = v
+}
+
+func (self *PortDesc) GetAdvertised() PortFeatures {
+	return self.Advertised
+}
+
+func (self *PortDesc) SetAdvertised(v PortFeatures) {
+	self.Advertised = v
+}
+
+func (self *PortDesc) GetSupported() PortFeatures {
+	return self.Supported
+}
+
+func (self *PortDesc) SetSupported(v PortFeatures) {
+	self.Supported = v
+}
+
+func (self *PortDesc) GetPeer() PortFeatures {
+	return self.Peer
+}
+
+func (self *PortDesc) SetPeer(v PortFeatures) {
+	self.Peer = v
+}
+
+func (self *PortDesc) GetCurrSpeed() uint32 {
+	return self.CurrSpeed
+}
+
+func (self *PortDesc) SetCurrSpeed(v uint32) {
+	self.CurrSpeed = v
+}
+
+func (self *PortDesc) GetMaxSpeed() uint32 {
+	return self.MaxSpeed
+}
+
+func (self *PortDesc) SetMaxSpeed(v uint32) {
+	self.MaxSpeed = v
+}
+
+func (self *PortDesc) Serialize(encoder *goloxi.Encoder) error {
+
+	self.PortNo.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.Write(self.HwAddr)
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.Write([]byte(self.Name))
+	encoder.PutUint32(uint32(self.Config))
+	encoder.PutUint32(uint32(self.State))
+	encoder.PutUint32(uint32(self.Curr))
+	encoder.PutUint32(uint32(self.Advertised))
+	encoder.PutUint32(uint32(self.Supported))
+	encoder.PutUint32(uint32(self.Peer))
+	encoder.PutUint32(uint32(self.CurrSpeed))
+	encoder.PutUint32(uint32(self.MaxSpeed))
+
+	return nil
+}
+func (self *PortDesc) Decode(decoder *goloxi.Decoder) error {
+	if decoder.Length() < 64 {
+		return fmt.Errorf("PortDesc packet too short: %d < 64", decoder.Length())
+	}
+
+	self.PortNo.Decode(decoder)
+	decoder.Skip(4)
+	self.HwAddr = net.HardwareAddr(decoder.Read(6))
+	decoder.Skip(2)
+	self.Name = string(bytes.Trim(decoder.Read(16), "\x00"))
+	self.Config = PortConfig(decoder.ReadUint32())
+	self.State = PortState(decoder.ReadUint32())
+	self.Curr = PortFeatures(decoder.ReadUint32())
+	self.Advertised = PortFeatures(decoder.ReadUint32())
+	self.Supported = PortFeatures(decoder.ReadUint32())
+	self.Peer = PortFeatures(decoder.ReadUint32())
+	self.CurrSpeed = uint32(decoder.ReadUint32())
+	self.MaxSpeed = uint32(decoder.ReadUint32())
+
+	return nil
+}
+
+func NewPortDesc() *PortDesc {
+	obj := &PortDesc{}
+	return obj
+}
+
+type PortStatsEntry struct {
+	PortNo       Port
+	RxPackets    uint64
+	TxPackets    uint64
+	RxBytes      uint64
+	TxBytes      uint64
+	RxDropped    uint64
+	TxDropped    uint64
+	RxErrors     uint64
+	TxErrors     uint64
+	RxFrameErr   uint64
+	RxOverErr    uint64
+	RxCrcErr     uint64
+	Collisions   uint64
+	DurationSec  uint32
+	DurationNsec uint32
+}
+
+type IPortStatsEntry interface {
+	goloxi.Serializable
+	GetPortNo() Port
+	GetRxPackets() uint64
+	GetTxPackets() uint64
+	GetRxBytes() uint64
+	GetTxBytes() uint64
+	GetRxDropped() uint64
+	GetTxDropped() uint64
+	GetRxErrors() uint64
+	GetTxErrors() uint64
+	GetRxFrameErr() uint64
+	GetRxOverErr() uint64
+	GetRxCrcErr() uint64
+	GetCollisions() uint64
+	GetDurationSec() uint32
+	GetDurationNsec() uint32
+}
+
+func (self *PortStatsEntry) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *PortStatsEntry) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *PortStatsEntry) GetRxPackets() uint64 {
+	return self.RxPackets
+}
+
+func (self *PortStatsEntry) SetRxPackets(v uint64) {
+	self.RxPackets = v
+}
+
+func (self *PortStatsEntry) GetTxPackets() uint64 {
+	return self.TxPackets
+}
+
+func (self *PortStatsEntry) SetTxPackets(v uint64) {
+	self.TxPackets = v
+}
+
+func (self *PortStatsEntry) GetRxBytes() uint64 {
+	return self.RxBytes
+}
+
+func (self *PortStatsEntry) SetRxBytes(v uint64) {
+	self.RxBytes = v
+}
+
+func (self *PortStatsEntry) GetTxBytes() uint64 {
+	return self.TxBytes
+}
+
+func (self *PortStatsEntry) SetTxBytes(v uint64) {
+	self.TxBytes = v
+}
+
+func (self *PortStatsEntry) GetRxDropped() uint64 {
+	return self.RxDropped
+}
+
+func (self *PortStatsEntry) SetRxDropped(v uint64) {
+	self.RxDropped = v
+}
+
+func (self *PortStatsEntry) GetTxDropped() uint64 {
+	return self.TxDropped
+}
+
+func (self *PortStatsEntry) SetTxDropped(v uint64) {
+	self.TxDropped = v
+}
+
+func (self *PortStatsEntry) GetRxErrors() uint64 {
+	return self.RxErrors
+}
+
+func (self *PortStatsEntry) SetRxErrors(v uint64) {
+	self.RxErrors = v
+}
+
+func (self *PortStatsEntry) GetTxErrors() uint64 {
+	return self.TxErrors
+}
+
+func (self *PortStatsEntry) SetTxErrors(v uint64) {
+	self.TxErrors = v
+}
+
+func (self *PortStatsEntry) GetRxFrameErr() uint64 {
+	return self.RxFrameErr
+}
+
+func (self *PortStatsEntry) SetRxFrameErr(v uint64) {
+	self.RxFrameErr = v
+}
+
+func (self *PortStatsEntry) GetRxOverErr() uint64 {
+	return self.RxOverErr
+}
+
+func (self *PortStatsEntry) SetRxOverErr(v uint64) {
+	self.RxOverErr = v
+}
+
+func (self *PortStatsEntry) GetRxCrcErr() uint64 {
+	return self.RxCrcErr
+}
+
+func (self *PortStatsEntry) SetRxCrcErr(v uint64) {
+	self.RxCrcErr = v
+}
+
+func (self *PortStatsEntry) GetCollisions() uint64 {
+	return self.Collisions
+}
+
+func (self *PortStatsEntry) SetCollisions(v uint64) {
+	self.Collisions = v
+}
+
+func (self *PortStatsEntry) GetDurationSec() uint32 {
+	return self.DurationSec
+}
+
+func (self *PortStatsEntry) SetDurationSec(v uint32) {
+	self.DurationSec = v
+}
+
+func (self *PortStatsEntry) GetDurationNsec() uint32 {
+	return self.DurationNsec
+}
+
+func (self *PortStatsEntry) SetDurationNsec(v uint32) {
+	self.DurationNsec = v
+}
+
+func (self *PortStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	self.PortNo.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.RxPackets))
+	encoder.PutUint64(uint64(self.TxPackets))
+	encoder.PutUint64(uint64(self.RxBytes))
+	encoder.PutUint64(uint64(self.TxBytes))
+	encoder.PutUint64(uint64(self.RxDropped))
+	encoder.PutUint64(uint64(self.TxDropped))
+	encoder.PutUint64(uint64(self.RxErrors))
+	encoder.PutUint64(uint64(self.TxErrors))
+	encoder.PutUint64(uint64(self.RxFrameErr))
+	encoder.PutUint64(uint64(self.RxOverErr))
+	encoder.PutUint64(uint64(self.RxCrcErr))
+	encoder.PutUint64(uint64(self.Collisions))
+	encoder.PutUint32(uint32(self.DurationSec))
+	encoder.PutUint32(uint32(self.DurationNsec))
+
+	return nil
+}
+
+func DecodePortStatsEntry(decoder *goloxi.Decoder) (*PortStatsEntry, error) {
+	_portstatsentry := &PortStatsEntry{}
+	if decoder.Length() < 112 {
+		return nil, fmt.Errorf("PortStatsEntry packet too short: %d < 112", decoder.Length())
+	}
+	_portstatsentry.PortNo.Decode(decoder)
+	decoder.Skip(4)
+	_portstatsentry.RxPackets = uint64(decoder.ReadUint64())
+	_portstatsentry.TxPackets = uint64(decoder.ReadUint64())
+	_portstatsentry.RxBytes = uint64(decoder.ReadUint64())
+	_portstatsentry.TxBytes = uint64(decoder.ReadUint64())
+	_portstatsentry.RxDropped = uint64(decoder.ReadUint64())
+	_portstatsentry.TxDropped = uint64(decoder.ReadUint64())
+	_portstatsentry.RxErrors = uint64(decoder.ReadUint64())
+	_portstatsentry.TxErrors = uint64(decoder.ReadUint64())
+	_portstatsentry.RxFrameErr = uint64(decoder.ReadUint64())
+	_portstatsentry.RxOverErr = uint64(decoder.ReadUint64())
+	_portstatsentry.RxCrcErr = uint64(decoder.ReadUint64())
+	_portstatsentry.Collisions = uint64(decoder.ReadUint64())
+	_portstatsentry.DurationSec = uint32(decoder.ReadUint32())
+	_portstatsentry.DurationNsec = uint32(decoder.ReadUint32())
+	return _portstatsentry, nil
+}
+
+func NewPortStatsEntry() *PortStatsEntry {
+	obj := &PortStatsEntry{}
+	return obj
+}
+
+type QueueProp struct {
+	Type uint16
+	Len  uint16
+}
+
+type IQueueProp interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLen() uint16
+}
+
+func (self *QueueProp) GetType() uint16 {
+	return self.Type
+}
+
+func (self *QueueProp) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *QueueProp) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *QueueProp) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *QueueProp) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Len))
+
+	return nil
+}
+
+func DecodeQueueProp(decoder *goloxi.Decoder) (IQueueProp, error) {
+	_queueprop := &QueueProp{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("QueueProp packet too short: %d < 4", decoder.Length())
+	}
+	_queueprop.Type = uint16(decoder.ReadUint16())
+	_queueprop.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_queueprop.Len), 2+2)
+
+	switch _queueprop.Type {
+	case 1:
+		return DecodeQueuePropMinRate(_queueprop, decoder)
+	case 2:
+		return DecodeQueuePropMaxRate(_queueprop, decoder)
+	case 65535:
+		return DecodeQueuePropExperimenter(_queueprop, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'QueueProp'", _queueprop.Type)
+	}
+}
+
+func NewQueueProp(_type uint16) *QueueProp {
+	obj := &QueueProp{}
+	obj.Type = _type
+	return obj
+}
+
+type QueuePropExperimenter struct {
+	*QueueProp
+	Experimenter uint32
+}
+
+type IQueuePropExperimenter interface {
+	IQueueProp
+	GetExperimenter() uint32
+}
+
+func (self *QueuePropExperimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *QueuePropExperimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *QueuePropExperimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.QueueProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.Experimenter))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	return nil
+}
+
+func DecodeQueuePropExperimenter(parent *QueueProp, decoder *goloxi.Decoder) (IQueuePropExperimenter, error) {
+	_queuepropexperimenter := &QueuePropExperimenter{QueueProp: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("QueuePropExperimenter packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	_queuepropexperimenter.Experimenter = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _queuepropexperimenter, nil
+}
+
+func NewQueuePropExperimenter(_experimenter uint32) *QueuePropExperimenter {
+	obj := &QueuePropExperimenter{
+		QueueProp: NewQueueProp(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type QueuePropMaxRate struct {
+	*QueueProp
+	Rate uint16
+}
+
+type IQueuePropMaxRate interface {
+	IQueueProp
+	GetRate() uint16
+}
+
+func (self *QueuePropMaxRate) GetRate() uint16 {
+	return self.Rate
+}
+
+func (self *QueuePropMaxRate) SetRate(v uint16) {
+	self.Rate = v
+}
+
+func (self *QueuePropMaxRate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.QueueProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint16(uint16(self.Rate))
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeQueuePropMaxRate(parent *QueueProp, decoder *goloxi.Decoder) (*QueuePropMaxRate, error) {
+	_queuepropmaxrate := &QueuePropMaxRate{QueueProp: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("QueuePropMaxRate packet too short: %d < 12", decoder.Length())
+	}
+	decoder.Skip(4)
+	_queuepropmaxrate.Rate = uint16(decoder.ReadUint16())
+	decoder.Skip(6)
+	return _queuepropmaxrate, nil
+}
+
+func NewQueuePropMaxRate() *QueuePropMaxRate {
+	obj := &QueuePropMaxRate{
+		QueueProp: NewQueueProp(2),
+	}
+	return obj
+}
+
+type QueuePropMinRate struct {
+	*QueueProp
+	Rate uint16
+}
+
+type IQueuePropMinRate interface {
+	IQueueProp
+	GetRate() uint16
+}
+
+func (self *QueuePropMinRate) GetRate() uint16 {
+	return self.Rate
+}
+
+func (self *QueuePropMinRate) SetRate(v uint16) {
+	self.Rate = v
+}
+
+func (self *QueuePropMinRate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.QueueProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint16(uint16(self.Rate))
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeQueuePropMinRate(parent *QueueProp, decoder *goloxi.Decoder) (*QueuePropMinRate, error) {
+	_queuepropminrate := &QueuePropMinRate{QueueProp: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("QueuePropMinRate packet too short: %d < 12", decoder.Length())
+	}
+	decoder.Skip(4)
+	_queuepropminrate.Rate = uint16(decoder.ReadUint16())
+	decoder.Skip(6)
+	return _queuepropminrate, nil
+}
+
+func NewQueuePropMinRate() *QueuePropMinRate {
+	obj := &QueuePropMinRate{
+		QueueProp: NewQueueProp(1),
+	}
+	return obj
+}
+
+type QueueStatsEntry struct {
+	PortNo       Port
+	QueueId      uint32
+	TxBytes      uint64
+	TxPackets    uint64
+	TxErrors     uint64
+	DurationSec  uint32
+	DurationNsec uint32
+}
+
+type IQueueStatsEntry interface {
+	goloxi.Serializable
+	GetPortNo() Port
+	GetQueueId() uint32
+	GetTxBytes() uint64
+	GetTxPackets() uint64
+	GetTxErrors() uint64
+	GetDurationSec() uint32
+	GetDurationNsec() uint32
+}
+
+func (self *QueueStatsEntry) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *QueueStatsEntry) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *QueueStatsEntry) GetQueueId() uint32 {
+	return self.QueueId
+}
+
+func (self *QueueStatsEntry) SetQueueId(v uint32) {
+	self.QueueId = v
+}
+
+func (self *QueueStatsEntry) GetTxBytes() uint64 {
+	return self.TxBytes
+}
+
+func (self *QueueStatsEntry) SetTxBytes(v uint64) {
+	self.TxBytes = v
+}
+
+func (self *QueueStatsEntry) GetTxPackets() uint64 {
+	return self.TxPackets
+}
+
+func (self *QueueStatsEntry) SetTxPackets(v uint64) {
+	self.TxPackets = v
+}
+
+func (self *QueueStatsEntry) GetTxErrors() uint64 {
+	return self.TxErrors
+}
+
+func (self *QueueStatsEntry) SetTxErrors(v uint64) {
+	self.TxErrors = v
+}
+
+func (self *QueueStatsEntry) GetDurationSec() uint32 {
+	return self.DurationSec
+}
+
+func (self *QueueStatsEntry) SetDurationSec(v uint32) {
+	self.DurationSec = v
+}
+
+func (self *QueueStatsEntry) GetDurationNsec() uint32 {
+	return self.DurationNsec
+}
+
+func (self *QueueStatsEntry) SetDurationNsec(v uint32) {
+	self.DurationNsec = v
+}
+
+func (self *QueueStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint32(uint32(self.QueueId))
+	encoder.PutUint64(uint64(self.TxBytes))
+	encoder.PutUint64(uint64(self.TxPackets))
+	encoder.PutUint64(uint64(self.TxErrors))
+	encoder.PutUint32(uint32(self.DurationSec))
+	encoder.PutUint32(uint32(self.DurationNsec))
+
+	return nil
+}
+
+func DecodeQueueStatsEntry(decoder *goloxi.Decoder) (*QueueStatsEntry, error) {
+	_queuestatsentry := &QueueStatsEntry{}
+	if decoder.Length() < 40 {
+		return nil, fmt.Errorf("QueueStatsEntry packet too short: %d < 40", decoder.Length())
+	}
+	_queuestatsentry.PortNo.Decode(decoder)
+	_queuestatsentry.QueueId = uint32(decoder.ReadUint32())
+	_queuestatsentry.TxBytes = uint64(decoder.ReadUint64())
+	_queuestatsentry.TxPackets = uint64(decoder.ReadUint64())
+	_queuestatsentry.TxErrors = uint64(decoder.ReadUint64())
+	_queuestatsentry.DurationSec = uint32(decoder.ReadUint32())
+	_queuestatsentry.DurationNsec = uint32(decoder.ReadUint32())
+	return _queuestatsentry, nil
+}
+
+func NewQueueStatsEntry() *QueueStatsEntry {
+	obj := &QueueStatsEntry{}
+	return obj
+}
+
+type TableFeatureProp struct {
+	Type   uint16
+	Length uint16
+}
+
+type ITableFeatureProp interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLength() uint16
+}
+
+func (self *TableFeatureProp) GetType() uint16 {
+	return self.Type
+}
+
+func (self *TableFeatureProp) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *TableFeatureProp) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *TableFeatureProp) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *TableFeatureProp) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Length))
+
+	return nil
+}
+
+func DecodeTableFeatureProp(decoder *goloxi.Decoder) (ITableFeatureProp, error) {
+	_tablefeatureprop := &TableFeatureProp{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("TableFeatureProp packet too short: %d < 4", decoder.Length())
+	}
+	_tablefeatureprop.Type = uint16(decoder.ReadUint16())
+	_tablefeatureprop.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_tablefeatureprop.Length), 2+2)
+
+	switch _tablefeatureprop.Type {
+	case 0:
+		return DecodeTableFeaturePropInstructions(_tablefeatureprop, decoder)
+	case 1:
+		return DecodeTableFeaturePropInstructionsMiss(_tablefeatureprop, decoder)
+	case 2:
+		return DecodeTableFeaturePropNextTables(_tablefeatureprop, decoder)
+	case 3:
+		return DecodeTableFeaturePropNextTablesMiss(_tablefeatureprop, decoder)
+	case 4:
+		return DecodeTableFeaturePropWriteActions(_tablefeatureprop, decoder)
+	case 5:
+		return DecodeTableFeaturePropWriteActionsMiss(_tablefeatureprop, decoder)
+	case 6:
+		return DecodeTableFeaturePropApplyActions(_tablefeatureprop, decoder)
+	case 7:
+		return DecodeTableFeaturePropApplyActionsMiss(_tablefeatureprop, decoder)
+	case 8:
+		return DecodeTableFeaturePropMatch(_tablefeatureprop, decoder)
+	case 10:
+		return DecodeTableFeaturePropWildcards(_tablefeatureprop, decoder)
+	case 12:
+		return DecodeTableFeaturePropWriteSetfield(_tablefeatureprop, decoder)
+	case 13:
+		return DecodeTableFeaturePropWriteSetfieldMiss(_tablefeatureprop, decoder)
+	case 14:
+		return DecodeTableFeaturePropApplySetfield(_tablefeatureprop, decoder)
+	case 15:
+		return DecodeTableFeaturePropApplySetfieldMiss(_tablefeatureprop, decoder)
+	case 65534:
+		return DecodeTableFeaturePropExperimenter(_tablefeatureprop, decoder)
+	case 65535:
+		return DecodeTableFeaturePropExperimenterMiss(_tablefeatureprop, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'TableFeatureProp'", _tablefeatureprop.Type)
+	}
+}
+
+func NewTableFeatureProp(_type uint16) *TableFeatureProp {
+	obj := &TableFeatureProp{}
+	obj.Type = _type
+	return obj
+}
+
+type TableFeaturePropApplyActions struct {
+	*TableFeatureProp
+	ActionIds []IActionId
+}
+
+type ITableFeaturePropApplyActions interface {
+	ITableFeatureProp
+	GetActionIds() []IActionId
+}
+
+func (self *TableFeaturePropApplyActions) GetActionIds() []IActionId {
+	return self.ActionIds
+}
+
+func (self *TableFeaturePropApplyActions) SetActionIds(v []IActionId) {
+	self.ActionIds = v
+}
+
+func (self *TableFeaturePropApplyActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.ActionIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropApplyActions(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropApplyActions, error) {
+	_tablefeaturepropapplyactions := &TableFeaturePropApplyActions{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeActionId(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropapplyactions.ActionIds = append(_tablefeaturepropapplyactions.ActionIds, item)
+		}
+	}
+	return _tablefeaturepropapplyactions, nil
+}
+
+func NewTableFeaturePropApplyActions() *TableFeaturePropApplyActions {
+	obj := &TableFeaturePropApplyActions{
+		TableFeatureProp: NewTableFeatureProp(6),
+	}
+	return obj
+}
+
+type TableFeaturePropApplyActionsMiss struct {
+	*TableFeatureProp
+	ActionIds []IActionId
+}
+
+type ITableFeaturePropApplyActionsMiss interface {
+	ITableFeatureProp
+	GetActionIds() []IActionId
+}
+
+func (self *TableFeaturePropApplyActionsMiss) GetActionIds() []IActionId {
+	return self.ActionIds
+}
+
+func (self *TableFeaturePropApplyActionsMiss) SetActionIds(v []IActionId) {
+	self.ActionIds = v
+}
+
+func (self *TableFeaturePropApplyActionsMiss) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.ActionIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropApplyActionsMiss(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropApplyActionsMiss, error) {
+	_tablefeaturepropapplyactionsmiss := &TableFeaturePropApplyActionsMiss{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeActionId(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropapplyactionsmiss.ActionIds = append(_tablefeaturepropapplyactionsmiss.ActionIds, item)
+		}
+	}
+	return _tablefeaturepropapplyactionsmiss, nil
+}
+
+func NewTableFeaturePropApplyActionsMiss() *TableFeaturePropApplyActionsMiss {
+	obj := &TableFeaturePropApplyActionsMiss{
+		TableFeatureProp: NewTableFeatureProp(7),
+	}
+	return obj
+}
+
+type TableFeaturePropApplySetfield struct {
+	*TableFeatureProp
+	OxmIds []*Uint32
+}
+
+type ITableFeaturePropApplySetfield interface {
+	ITableFeatureProp
+	GetOxmIds() []*Uint32
+}
+
+func (self *TableFeaturePropApplySetfield) GetOxmIds() []*Uint32 {
+	return self.OxmIds
+}
+
+func (self *TableFeaturePropApplySetfield) SetOxmIds(v []*Uint32) {
+	self.OxmIds = v
+}
+
+func (self *TableFeaturePropApplySetfield) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.OxmIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropApplySetfield(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropApplySetfield, error) {
+	_tablefeaturepropapplysetfield := &TableFeaturePropApplySetfield{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeUint32(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropapplysetfield.OxmIds = append(_tablefeaturepropapplysetfield.OxmIds, item)
+		}
+	}
+	return _tablefeaturepropapplysetfield, nil
+}
+
+func NewTableFeaturePropApplySetfield() *TableFeaturePropApplySetfield {
+	obj := &TableFeaturePropApplySetfield{
+		TableFeatureProp: NewTableFeatureProp(14),
+	}
+	return obj
+}
+
+type TableFeaturePropApplySetfieldMiss struct {
+	*TableFeatureProp
+	OxmIds []*Uint32
+}
+
+type ITableFeaturePropApplySetfieldMiss interface {
+	ITableFeatureProp
+	GetOxmIds() []*Uint32
+}
+
+func (self *TableFeaturePropApplySetfieldMiss) GetOxmIds() []*Uint32 {
+	return self.OxmIds
+}
+
+func (self *TableFeaturePropApplySetfieldMiss) SetOxmIds(v []*Uint32) {
+	self.OxmIds = v
+}
+
+func (self *TableFeaturePropApplySetfieldMiss) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.OxmIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropApplySetfieldMiss(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropApplySetfieldMiss, error) {
+	_tablefeaturepropapplysetfieldmiss := &TableFeaturePropApplySetfieldMiss{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeUint32(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropapplysetfieldmiss.OxmIds = append(_tablefeaturepropapplysetfieldmiss.OxmIds, item)
+		}
+	}
+	return _tablefeaturepropapplysetfieldmiss, nil
+}
+
+func NewTableFeaturePropApplySetfieldMiss() *TableFeaturePropApplySetfieldMiss {
+	obj := &TableFeaturePropApplySetfieldMiss{
+		TableFeatureProp: NewTableFeatureProp(15),
+	}
+	return obj
+}
+
+type TableFeaturePropExperimenter struct {
+	*TableFeatureProp
+	Experimenter uint32
+	Subtype      uint32
+}
+
+type ITableFeaturePropExperimenter interface {
+	ITableFeatureProp
+	GetExperimenter() uint32
+	GetSubtype() uint32
+}
+
+func (self *TableFeaturePropExperimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *TableFeaturePropExperimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *TableFeaturePropExperimenter) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *TableFeaturePropExperimenter) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *TableFeaturePropExperimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Experimenter))
+	encoder.PutUint32(uint32(self.Subtype))
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeTableFeaturePropExperimenter(parent *TableFeatureProp, decoder *goloxi.Decoder) (ITableFeaturePropExperimenter, error) {
+	_tablefeaturepropexperimenter := &TableFeaturePropExperimenter{TableFeatureProp: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("TableFeaturePropExperimenter packet too short: %d < 8", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_tablefeaturepropexperimenter.Experimenter = uint32(decoder.ReadUint32())
+	_tablefeaturepropexperimenter.Subtype = uint32(decoder.ReadUint32())
+	return _tablefeaturepropexperimenter, nil
+}
+
+func NewTableFeaturePropExperimenter(_experimenter uint32) *TableFeaturePropExperimenter {
+	obj := &TableFeaturePropExperimenter{
+		TableFeatureProp: NewTableFeatureProp(65534),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type TableFeaturePropExperimenterMiss struct {
+	*TableFeatureProp
+	Experimenter uint32
+	Subtype      uint32
+}
+
+type ITableFeaturePropExperimenterMiss interface {
+	ITableFeatureProp
+	GetExperimenter() uint32
+	GetSubtype() uint32
+}
+
+func (self *TableFeaturePropExperimenterMiss) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *TableFeaturePropExperimenterMiss) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *TableFeaturePropExperimenterMiss) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *TableFeaturePropExperimenterMiss) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *TableFeaturePropExperimenterMiss) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Experimenter))
+	encoder.PutUint32(uint32(self.Subtype))
+
+	encoder.SkipAlign()
+
+	return nil
+}
+
+func DecodeTableFeaturePropExperimenterMiss(parent *TableFeatureProp, decoder *goloxi.Decoder) (ITableFeaturePropExperimenterMiss, error) {
+	_tablefeaturepropexperimentermiss := &TableFeaturePropExperimenterMiss{TableFeatureProp: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("TableFeaturePropExperimenterMiss packet too short: %d < 8", decoder.Length())
+	}
+	defer decoder.SkipAlign()
+
+	_tablefeaturepropexperimentermiss.Experimenter = uint32(decoder.ReadUint32())
+	_tablefeaturepropexperimentermiss.Subtype = uint32(decoder.ReadUint32())
+	return _tablefeaturepropexperimentermiss, nil
+}
+
+func NewTableFeaturePropExperimenterMiss(_experimenter uint32) *TableFeaturePropExperimenterMiss {
+	obj := &TableFeaturePropExperimenterMiss{
+		TableFeatureProp: NewTableFeatureProp(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type TableFeaturePropInstructions struct {
+	*TableFeatureProp
+	InstructionIds []IInstructionId
+}
+
+type ITableFeaturePropInstructions interface {
+	ITableFeatureProp
+	GetInstructionIds() []IInstructionId
+}
+
+func (self *TableFeaturePropInstructions) GetInstructionIds() []IInstructionId {
+	return self.InstructionIds
+}
+
+func (self *TableFeaturePropInstructions) SetInstructionIds(v []IInstructionId) {
+	self.InstructionIds = v
+}
+
+func (self *TableFeaturePropInstructions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.InstructionIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropInstructions(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropInstructions, error) {
+	_tablefeaturepropinstructions := &TableFeaturePropInstructions{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeInstructionId(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropinstructions.InstructionIds = append(_tablefeaturepropinstructions.InstructionIds, item)
+		}
+	}
+	return _tablefeaturepropinstructions, nil
+}
+
+func NewTableFeaturePropInstructions() *TableFeaturePropInstructions {
+	obj := &TableFeaturePropInstructions{
+		TableFeatureProp: NewTableFeatureProp(0),
+	}
+	return obj
+}
+
+type TableFeaturePropInstructionsMiss struct {
+	*TableFeatureProp
+	InstructionIds []IInstructionId
+}
+
+type ITableFeaturePropInstructionsMiss interface {
+	ITableFeatureProp
+	GetInstructionIds() []IInstructionId
+}
+
+func (self *TableFeaturePropInstructionsMiss) GetInstructionIds() []IInstructionId {
+	return self.InstructionIds
+}
+
+func (self *TableFeaturePropInstructionsMiss) SetInstructionIds(v []IInstructionId) {
+	self.InstructionIds = v
+}
+
+func (self *TableFeaturePropInstructionsMiss) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.InstructionIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropInstructionsMiss(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropInstructionsMiss, error) {
+	_tablefeaturepropinstructionsmiss := &TableFeaturePropInstructionsMiss{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeInstructionId(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropinstructionsmiss.InstructionIds = append(_tablefeaturepropinstructionsmiss.InstructionIds, item)
+		}
+	}
+	return _tablefeaturepropinstructionsmiss, nil
+}
+
+func NewTableFeaturePropInstructionsMiss() *TableFeaturePropInstructionsMiss {
+	obj := &TableFeaturePropInstructionsMiss{
+		TableFeatureProp: NewTableFeatureProp(1),
+	}
+	return obj
+}
+
+type TableFeaturePropMatch struct {
+	*TableFeatureProp
+	OxmIds []*Uint32
+}
+
+type ITableFeaturePropMatch interface {
+	ITableFeatureProp
+	GetOxmIds() []*Uint32
+}
+
+func (self *TableFeaturePropMatch) GetOxmIds() []*Uint32 {
+	return self.OxmIds
+}
+
+func (self *TableFeaturePropMatch) SetOxmIds(v []*Uint32) {
+	self.OxmIds = v
+}
+
+func (self *TableFeaturePropMatch) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.OxmIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropMatch(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropMatch, error) {
+	_tablefeaturepropmatch := &TableFeaturePropMatch{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeUint32(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropmatch.OxmIds = append(_tablefeaturepropmatch.OxmIds, item)
+		}
+	}
+	return _tablefeaturepropmatch, nil
+}
+
+func NewTableFeaturePropMatch() *TableFeaturePropMatch {
+	obj := &TableFeaturePropMatch{
+		TableFeatureProp: NewTableFeatureProp(8),
+	}
+	return obj
+}
+
+type TableFeaturePropNextTables struct {
+	*TableFeatureProp
+	NextTableIds []*Uint8
+}
+
+type ITableFeaturePropNextTables interface {
+	ITableFeatureProp
+	GetNextTableIds() []*Uint8
+}
+
+func (self *TableFeaturePropNextTables) GetNextTableIds() []*Uint8 {
+	return self.NextTableIds
+}
+
+func (self *TableFeaturePropNextTables) SetNextTableIds(v []*Uint8) {
+	self.NextTableIds = v
+}
+
+func (self *TableFeaturePropNextTables) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.NextTableIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropNextTables(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropNextTables, error) {
+	_tablefeaturepropnexttables := &TableFeaturePropNextTables{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 1 {
+		item, err := DecodeUint8(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropnexttables.NextTableIds = append(_tablefeaturepropnexttables.NextTableIds, item)
+		}
+	}
+	return _tablefeaturepropnexttables, nil
+}
+
+func NewTableFeaturePropNextTables() *TableFeaturePropNextTables {
+	obj := &TableFeaturePropNextTables{
+		TableFeatureProp: NewTableFeatureProp(2),
+	}
+	return obj
+}
+
+type TableFeaturePropNextTablesMiss struct {
+	*TableFeatureProp
+	NextTableIds []*Uint8
+}
+
+type ITableFeaturePropNextTablesMiss interface {
+	ITableFeatureProp
+	GetNextTableIds() []*Uint8
+}
+
+func (self *TableFeaturePropNextTablesMiss) GetNextTableIds() []*Uint8 {
+	return self.NextTableIds
+}
+
+func (self *TableFeaturePropNextTablesMiss) SetNextTableIds(v []*Uint8) {
+	self.NextTableIds = v
+}
+
+func (self *TableFeaturePropNextTablesMiss) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.NextTableIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropNextTablesMiss(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropNextTablesMiss, error) {
+	_tablefeaturepropnexttablesmiss := &TableFeaturePropNextTablesMiss{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 1 {
+		item, err := DecodeUint8(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropnexttablesmiss.NextTableIds = append(_tablefeaturepropnexttablesmiss.NextTableIds, item)
+		}
+	}
+	return _tablefeaturepropnexttablesmiss, nil
+}
+
+func NewTableFeaturePropNextTablesMiss() *TableFeaturePropNextTablesMiss {
+	obj := &TableFeaturePropNextTablesMiss{
+		TableFeatureProp: NewTableFeatureProp(3),
+	}
+	return obj
+}
+
+type TableFeaturePropWildcards struct {
+	*TableFeatureProp
+	OxmIds []*Uint32
+}
+
+type ITableFeaturePropWildcards interface {
+	ITableFeatureProp
+	GetOxmIds() []*Uint32
+}
+
+func (self *TableFeaturePropWildcards) GetOxmIds() []*Uint32 {
+	return self.OxmIds
+}
+
+func (self *TableFeaturePropWildcards) SetOxmIds(v []*Uint32) {
+	self.OxmIds = v
+}
+
+func (self *TableFeaturePropWildcards) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.OxmIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropWildcards(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropWildcards, error) {
+	_tablefeaturepropwildcards := &TableFeaturePropWildcards{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeUint32(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropwildcards.OxmIds = append(_tablefeaturepropwildcards.OxmIds, item)
+		}
+	}
+	return _tablefeaturepropwildcards, nil
+}
+
+func NewTableFeaturePropWildcards() *TableFeaturePropWildcards {
+	obj := &TableFeaturePropWildcards{
+		TableFeatureProp: NewTableFeatureProp(10),
+	}
+	return obj
+}
+
+type TableFeaturePropWriteActions struct {
+	*TableFeatureProp
+	ActionIds []IActionId
+}
+
+type ITableFeaturePropWriteActions interface {
+	ITableFeatureProp
+	GetActionIds() []IActionId
+}
+
+func (self *TableFeaturePropWriteActions) GetActionIds() []IActionId {
+	return self.ActionIds
+}
+
+func (self *TableFeaturePropWriteActions) SetActionIds(v []IActionId) {
+	self.ActionIds = v
+}
+
+func (self *TableFeaturePropWriteActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.ActionIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropWriteActions(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropWriteActions, error) {
+	_tablefeaturepropwriteactions := &TableFeaturePropWriteActions{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeActionId(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropwriteactions.ActionIds = append(_tablefeaturepropwriteactions.ActionIds, item)
+		}
+	}
+	return _tablefeaturepropwriteactions, nil
+}
+
+func NewTableFeaturePropWriteActions() *TableFeaturePropWriteActions {
+	obj := &TableFeaturePropWriteActions{
+		TableFeatureProp: NewTableFeatureProp(4),
+	}
+	return obj
+}
+
+type TableFeaturePropWriteActionsMiss struct {
+	*TableFeatureProp
+	ActionIds []IActionId
+}
+
+type ITableFeaturePropWriteActionsMiss interface {
+	ITableFeatureProp
+	GetActionIds() []IActionId
+}
+
+func (self *TableFeaturePropWriteActionsMiss) GetActionIds() []IActionId {
+	return self.ActionIds
+}
+
+func (self *TableFeaturePropWriteActionsMiss) SetActionIds(v []IActionId) {
+	self.ActionIds = v
+}
+
+func (self *TableFeaturePropWriteActionsMiss) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.ActionIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropWriteActionsMiss(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropWriteActionsMiss, error) {
+	_tablefeaturepropwriteactionsmiss := &TableFeaturePropWriteActionsMiss{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeActionId(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropwriteactionsmiss.ActionIds = append(_tablefeaturepropwriteactionsmiss.ActionIds, item)
+		}
+	}
+	return _tablefeaturepropwriteactionsmiss, nil
+}
+
+func NewTableFeaturePropWriteActionsMiss() *TableFeaturePropWriteActionsMiss {
+	obj := &TableFeaturePropWriteActionsMiss{
+		TableFeatureProp: NewTableFeatureProp(5),
+	}
+	return obj
+}
+
+type TableFeaturePropWriteSetfield struct {
+	*TableFeatureProp
+	OxmIds []*Uint32
+}
+
+type ITableFeaturePropWriteSetfield interface {
+	ITableFeatureProp
+	GetOxmIds() []*Uint32
+}
+
+func (self *TableFeaturePropWriteSetfield) GetOxmIds() []*Uint32 {
+	return self.OxmIds
+}
+
+func (self *TableFeaturePropWriteSetfield) SetOxmIds(v []*Uint32) {
+	self.OxmIds = v
+}
+
+func (self *TableFeaturePropWriteSetfield) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.OxmIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropWriteSetfield(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropWriteSetfield, error) {
+	_tablefeaturepropwritesetfield := &TableFeaturePropWriteSetfield{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeUint32(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropwritesetfield.OxmIds = append(_tablefeaturepropwritesetfield.OxmIds, item)
+		}
+	}
+	return _tablefeaturepropwritesetfield, nil
+}
+
+func NewTableFeaturePropWriteSetfield() *TableFeaturePropWriteSetfield {
+	obj := &TableFeaturePropWriteSetfield{
+		TableFeatureProp: NewTableFeatureProp(12),
+	}
+	return obj
+}
+
+type TableFeaturePropWriteSetfieldMiss struct {
+	*TableFeatureProp
+	OxmIds []*Uint32
+}
+
+type ITableFeaturePropWriteSetfieldMiss interface {
+	ITableFeatureProp
+	GetOxmIds() []*Uint32
+}
+
+func (self *TableFeaturePropWriteSetfieldMiss) GetOxmIds() []*Uint32 {
+	return self.OxmIds
+}
+
+func (self *TableFeaturePropWriteSetfieldMiss) SetOxmIds(v []*Uint32) {
+	self.OxmIds = v
+}
+
+func (self *TableFeaturePropWriteSetfieldMiss) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.TableFeatureProp.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.OxmIds {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	encoder.SkipAlign()
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturePropWriteSetfieldMiss(parent *TableFeatureProp, decoder *goloxi.Decoder) (*TableFeaturePropWriteSetfieldMiss, error) {
+	_tablefeaturepropwritesetfieldmiss := &TableFeaturePropWriteSetfieldMiss{TableFeatureProp: parent}
+	defer decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeUint32(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturepropwritesetfieldmiss.OxmIds = append(_tablefeaturepropwritesetfieldmiss.OxmIds, item)
+		}
+	}
+	return _tablefeaturepropwritesetfieldmiss, nil
+}
+
+func NewTableFeaturePropWriteSetfieldMiss() *TableFeaturePropWriteSetfieldMiss {
+	obj := &TableFeaturePropWriteSetfieldMiss{
+		TableFeatureProp: NewTableFeatureProp(13),
+	}
+	return obj
+}
+
+type TableFeatures struct {
+	Length        uint16
+	TableId       uint8
+	Name          string
+	MetadataMatch uint64
+	MetadataWrite uint64
+	Config        uint32
+	MaxEntries    uint32
+	Properties    []ITableFeatureProp
+}
+
+type ITableFeatures interface {
+	goloxi.Serializable
+	GetLength() uint16
+	GetTableId() uint8
+	GetName() string
+	GetMetadataMatch() uint64
+	GetMetadataWrite() uint64
+	GetConfig() uint32
+	GetMaxEntries() uint32
+	GetProperties() []ITableFeatureProp
+}
+
+func (self *TableFeatures) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *TableFeatures) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *TableFeatures) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *TableFeatures) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *TableFeatures) GetName() string {
+	return self.Name
+}
+
+func (self *TableFeatures) SetName(v string) {
+	self.Name = v
+}
+
+func (self *TableFeatures) GetMetadataMatch() uint64 {
+	return self.MetadataMatch
+}
+
+func (self *TableFeatures) SetMetadataMatch(v uint64) {
+	self.MetadataMatch = v
+}
+
+func (self *TableFeatures) GetMetadataWrite() uint64 {
+	return self.MetadataWrite
+}
+
+func (self *TableFeatures) SetMetadataWrite(v uint64) {
+	self.MetadataWrite = v
+}
+
+func (self *TableFeatures) GetConfig() uint32 {
+	return self.Config
+}
+
+func (self *TableFeatures) SetConfig(v uint32) {
+	self.Config = v
+}
+
+func (self *TableFeatures) GetMaxEntries() uint32 {
+	return self.MaxEntries
+}
+
+func (self *TableFeatures) SetMaxEntries(v uint32) {
+	self.MaxEntries = v
+}
+
+func (self *TableFeatures) GetProperties() []ITableFeatureProp {
+	return self.Properties
+}
+
+func (self *TableFeatures) SetProperties(v []ITableFeatureProp) {
+	self.Properties = v
+}
+
+func (self *TableFeatures) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 5))
+	encoder.Write([]byte(self.Name))
+	encoder.PutUint64(uint64(self.MetadataMatch))
+	encoder.PutUint64(uint64(self.MetadataWrite))
+	encoder.PutUint32(uint32(self.Config))
+	encoder.PutUint32(uint32(self.MaxEntries))
+	for _, obj := range self.Properties {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[0:2], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeatures(decoder *goloxi.Decoder) (*TableFeatures, error) {
+	_tablefeatures := &TableFeatures{}
+	if decoder.Length() < 64 {
+		return nil, fmt.Errorf("TableFeatures packet too short: %d < 64", decoder.Length())
+	}
+	_tablefeatures.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_tablefeatures.Length), 2+0)
+	_tablefeatures.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(5)
+	_tablefeatures.Name = string(bytes.Trim(decoder.Read(32), "\x00"))
+	_tablefeatures.MetadataMatch = uint64(decoder.ReadUint64())
+	_tablefeatures.MetadataWrite = uint64(decoder.ReadUint64())
+	_tablefeatures.Config = uint32(decoder.ReadUint32())
+	_tablefeatures.MaxEntries = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeTableFeatureProp(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeatures.Properties = append(_tablefeatures.Properties, item)
+		}
+	}
+	return _tablefeatures, nil
+}
+
+func NewTableFeatures() *TableFeatures {
+	obj := &TableFeatures{}
+	return obj
+}
+
+type TableStatsEntry struct {
+	TableId      uint8
+	ActiveCount  uint32
+	LookupCount  uint64
+	MatchedCount uint64
+}
+
+type ITableStatsEntry interface {
+	goloxi.Serializable
+	GetTableId() uint8
+	GetActiveCount() uint32
+	GetLookupCount() uint64
+	GetMatchedCount() uint64
+}
+
+func (self *TableStatsEntry) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *TableStatsEntry) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *TableStatsEntry) GetActiveCount() uint32 {
+	return self.ActiveCount
+}
+
+func (self *TableStatsEntry) SetActiveCount(v uint32) {
+	self.ActiveCount = v
+}
+
+func (self *TableStatsEntry) GetLookupCount() uint64 {
+	return self.LookupCount
+}
+
+func (self *TableStatsEntry) SetLookupCount(v uint64) {
+	self.LookupCount = v
+}
+
+func (self *TableStatsEntry) GetMatchedCount() uint64 {
+	return self.MatchedCount
+}
+
+func (self *TableStatsEntry) SetMatchedCount(v uint64) {
+	self.MatchedCount = v
+}
+
+func (self *TableStatsEntry) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	encoder.PutUint32(uint32(self.ActiveCount))
+	encoder.PutUint64(uint64(self.LookupCount))
+	encoder.PutUint64(uint64(self.MatchedCount))
+
+	return nil
+}
+
+func DecodeTableStatsEntry(decoder *goloxi.Decoder) (*TableStatsEntry, error) {
+	_tablestatsentry := &TableStatsEntry{}
+	if decoder.Length() < 24 {
+		return nil, fmt.Errorf("TableStatsEntry packet too short: %d < 24", decoder.Length())
+	}
+	_tablestatsentry.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_tablestatsentry.ActiveCount = uint32(decoder.ReadUint32())
+	_tablestatsentry.LookupCount = uint64(decoder.ReadUint64())
+	_tablestatsentry.MatchedCount = uint64(decoder.ReadUint64())
+	return _tablestatsentry, nil
+}
+
+func NewTableStatsEntry() *TableStatsEntry {
+	obj := &TableStatsEntry{}
+	return obj
+}
+
+type Uint32 struct {
+	Value uint32
+}
+
+type IUint32 interface {
+	goloxi.Serializable
+	GetValue() uint32
+}
+
+func (self *Uint32) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *Uint32) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *Uint32) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeUint32(decoder *goloxi.Decoder) (*Uint32, error) {
+	_uint32 := &Uint32{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("Uint32 packet too short: %d < 4", decoder.Length())
+	}
+	_uint32.Value = uint32(decoder.ReadUint32())
+	return _uint32, nil
+}
+
+func NewUint32() *Uint32 {
+	obj := &Uint32{}
+	return obj
+}
+
+type Uint64 struct {
+	Value uint64
+}
+
+type IUint64 interface {
+	goloxi.Serializable
+	GetValue() uint64
+}
+
+func (self *Uint64) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *Uint64) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *Uint64) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint64(uint64(self.Value))
+
+	return nil
+}
+
+func DecodeUint64(decoder *goloxi.Decoder) (*Uint64, error) {
+	_uint64 := &Uint64{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("Uint64 packet too short: %d < 8", decoder.Length())
+	}
+	_uint64.Value = uint64(decoder.ReadUint64())
+	return _uint64, nil
+}
+
+func NewUint64() *Uint64 {
+	obj := &Uint64{}
+	return obj
+}
+
+type Uint8 struct {
+	Value uint8
+}
+
+type IUint8 interface {
+	goloxi.Serializable
+	GetValue() uint8
+}
+
+func (self *Uint8) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *Uint8) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *Uint8) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeUint8(decoder *goloxi.Decoder) (*Uint8, error) {
+	_uint8 := &Uint8{}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("Uint8 packet too short: %d < 1", decoder.Length())
+	}
+	_uint8.Value = uint8(decoder.ReadByte())
+	return _uint8, nil
+}
+
+func NewUint8() *Uint8 {
+	obj := &Uint8{}
+	return obj
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/const.go b/vendor/github.com/skydive-project/goloxi/of13/const.go
new file mode 100644
index 0000000..f1e830e
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/const.go
@@ -0,0 +1,3016 @@
+/*
+ * Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+ * Copyright (c) 2011, 2012 Open Networking Foundation
+ * Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler.
+ * Copyright 2018, Red Hat, Inc.
+ */
+// Automatically generated by LOXI from template const.go
+// Do not modify
+
+package of13
+
+import (
+	"fmt"
+	"strings"
+)
+
+const (
+	// Identifiers from group macro_definitions
+	MaxTableNameLen    = 32         // OFP_MAX_TABLE_NAME_LEN
+	MaxPortNameLen     = 16         // OFP_MAX_PORT_NAME_LEN
+	TCPPort            = 6653       // OFP_TCP_PORT
+	SSLPort            = 6653       // OFP_SSL_PORT
+	EthAlen            = 6          // OFP_ETH_ALEN
+	DefaultMissSendLen = 128        // OFP_DEFAULT_MISS_SEND_LEN
+	VLANNone           = 0          // OFP_VLAN_NONE
+	FlowPermanent      = 0          // OFP_FLOW_PERMANENT
+	DefaultPriority    = 32768      // OFP_DEFAULT_PRIORITY
+	NoBuffer           = 4294967295 // OFP_NO_BUFFER
+	DescStrLen         = 256        // DESC_STR_LEN
+	SerialNumLen       = 32         // SERIAL_NUM_LEN
+	OFPQAll            = 4294967295 // OFPQ_ALL
+	OFPQMaxRateUncfg   = 65535      // OFPQ_MAX_RATE_UNCFG
+	OFPQMinRateUncfg   = 65535      // OFPQ_MIN_RATE_UNCFG
+)
+
+const (
+	// Identifiers from group nx_action_controller2_prop_type
+	Nxac2PtMaxLen       = 0 // NXAC2PT_MAX_LEN
+	Nxac2PtControllerID = 1 // NXAC2PT_CONTROLLER_ID
+	Nxac2PtReason       = 2 // NXAC2PT_REASON
+	Nxac2PtUserdata     = 3 // NXAC2PT_USERDATA
+	Nxac2PtPause        = 4 // NXAC2PT_PAUSE
+	Nxac2PtMeterID      = 5 // NXAC2PT_METER_ID
+)
+
+type NxActionController2PropType uint16
+
+func (self NxActionController2PropType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group nx_bd_algorithms
+	NxBdAlgActiveBackup = 0 // NX_BD_ALG_ACTIVE_BACKUP
+	NxBdAlgHrw          = 1 // NX_BD_ALG_HRW
+)
+
+type NxBdAlgorithms uint16
+
+func (self NxBdAlgorithms) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self NxBdAlgorithms) String() string {
+	switch self {
+	case NxBdAlgActiveBackup:
+		return "active_backup"
+	case NxBdAlgHrw:
+		return "hrw"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group nx_conntrack_flags
+	NxCtFCommit = 1 // NX_CT_F_COMMIT
+	NxCtFForce  = 2 // NX_CT_F_FORCE
+)
+
+type NxConntrackFlags uint16
+
+func (self NxConntrackFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&NxCtFCommit == NxCtFCommit {
+		flags = append(flags, "\"Commit\": true")
+	}
+	if self&NxCtFForce == NxCtFForce {
+		flags = append(flags, "\"Force\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group nx_flow_monitor_flags
+	NxfmfInitial = 1  // NXFMF_INITIAL
+	NxfmfAdd     = 2  // NXFMF_ADD
+	NxfmfDelete  = 4  // NXFMF_DELETE
+	NxfmfModify  = 8  // NXFMF_MODIFY
+	NxfmfActions = 16 // NXFMF_ACTIONS
+	NxfmfOwn     = 32 // NXFMF_OWN
+)
+
+type NxFlowMonitorFlags uint16
+
+func (self NxFlowMonitorFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&NxfmfInitial == NxfmfInitial {
+		flags = append(flags, "\"Initial\": true")
+	}
+	if self&NxfmfAdd == NxfmfAdd {
+		flags = append(flags, "\"Add\": true")
+	}
+	if self&NxfmfDelete == NxfmfDelete {
+		flags = append(flags, "\"Delete\": true")
+	}
+	if self&NxfmfModify == NxfmfModify {
+		flags = append(flags, "\"Modify\": true")
+	}
+	if self&NxfmfActions == NxfmfActions {
+		flags = append(flags, "\"Actions\": true")
+	}
+	if self&NxfmfOwn == NxfmfOwn {
+		flags = append(flags, "\"Own\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group nx_hash_fields
+	NxHashFieldsEthSrc           = 0 // NX_HASH_FIELDS_ETH_SRC
+	NxHashFieldsSymmetricL4      = 1 // NX_HASH_FIELDS_SYMMETRIC_L4
+	NxHashFieldsSymmetricL3L4    = 2 // NX_HASH_FIELDS_SYMMETRIC_L3L4
+	NxHashFieldsSymmetricL3L4Udp = 3 // NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP
+	NxHashFieldsNwSrc            = 4 // NX_HASH_FIELDS_NW_SRC
+	NxHashFieldsNwDst            = 5 // NX_HASH_FIELDS_NW_DST
+	NxHashFieldsSymmetricL3      = 6 // NX_HASH_FIELDS_SYMMETRIC_L3
+)
+
+type NxHashFields uint16
+
+func (self NxHashFields) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self NxHashFields) String() string {
+	switch self {
+	case NxHashFieldsEthSrc:
+		return "eth_src"
+	case NxHashFieldsSymmetricL4:
+		return "symmetric_l4"
+	case NxHashFieldsSymmetricL3L4:
+		return "symmetric_l3l4"
+	case NxHashFieldsSymmetricL3L4Udp:
+		return "symmetric_l3l4_udp"
+	case NxHashFieldsNwSrc:
+		return "nw_src"
+	case NxHashFieldsNwDst:
+		return "nw_dst"
+	case NxHashFieldsSymmetricL3:
+		return "symmetric_l3"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group nx_mp_algorithm
+	NxMpAlgModuloN       = 0 // NX_MP_ALG_MODULO_N
+	NxMpAlgHashThreshold = 1 // NX_MP_ALG_HASH_THRESHOLD
+	NxMpAlgHrw           = 2 // NX_MP_ALG_HRW
+	NxMpAlgIterHash      = 3 // NX_MP_ALG_ITER_HASH
+)
+
+type NxMpAlgorithm uint16
+
+func (self NxMpAlgorithm) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self NxMpAlgorithm) String() string {
+	switch self {
+	case NxMpAlgModuloN:
+		return "modulo_n"
+	case NxMpAlgHashThreshold:
+		return "hash_threshold"
+	case NxMpAlgHrw:
+		return "hrw"
+	case NxMpAlgIterHash:
+		return "iter_hash"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group of_action_nx_bundle_slave_type
+	NxmOfInPort                  = 2     // NXM_OF_IN_PORT
+	NxmOfJustThereToDefinePrefix = 10000 // NXM_OF_JUST_THERE_TO_DEFINE_PREFIX
+)
+
+type ActionNxBundleSlaveType uint32
+
+func (self ActionNxBundleSlaveType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self ActionNxBundleSlaveType) String() string {
+	switch self {
+	case NxmOfInPort:
+		return "in_port"
+	case NxmOfJustThereToDefinePrefix:
+		return "just_there_to_define_prefix"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group of_bsn_gentable_error_code
+	OFBSNGentableErrorUnknown   = 0 // OF_BSN_GENTABLE_ERROR_UNKNOWN
+	OFBSNGentableErrorParam     = 1 // OF_BSN_GENTABLE_ERROR_PARAM
+	OFBSNGentableErrorTableFull = 2 // OF_BSN_GENTABLE_ERROR_TABLE_FULL
+)
+
+type BsnGentableErrorCode uint16
+
+func (self BsnGentableErrorCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_bsn_hash_gtp_port_match
+	OFBSNHashGtpPortMatchSrc       = 1 // OF_BSN_HASH_GTP_PORT_MATCH_SRC
+	OFBSNHashGtpPortMatchDst       = 2 // OF_BSN_HASH_GTP_PORT_MATCH_DST
+	OFBSNHashGtpPortMatchSrcOrDst  = 3 // OF_BSN_HASH_GTP_PORT_MATCH_SRC_OR_DST
+	OFBSNHashGtpPortMatchSrcAndDst = 4 // OF_BSN_HASH_GTP_PORT_MATCH_SRC_AND_DST
+)
+
+type BsnHashGtpPortMatch uint8
+
+func (self BsnHashGtpPortMatch) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_bsn_hash_packet_field
+	BSNHashFieldDstMAC           = 2      // OFP_BSN_HASH_FIELD_DST_MAC
+	BSNHashFieldSrcMAC           = 4      // OFP_BSN_HASH_FIELD_SRC_MAC
+	BSNHashFieldEthType          = 8      // OFP_BSN_HASH_FIELD_ETH_TYPE
+	BSNHashFieldVLANID           = 16     // OFP_BSN_HASH_FIELD_VLAN_ID
+	BSNHashFieldInnerL2          = 32     // OFP_BSN_HASH_FIELD_INNER_L2
+	BSNHashFieldInnerL3          = 64     // OFP_BSN_HASH_FIELD_INNER_L3
+	BSNHashFieldSrcIp            = 128    // OFP_BSN_HASH_FIELD_SRC_IP
+	BSNHashFieldDstIp            = 256    // OFP_BSN_HASH_FIELD_DST_IP
+	BSNHashFieldIpProto          = 512    // OFP_BSN_HASH_FIELD_IP_PROTO
+	BSNHashFieldSrcL4Port        = 1024   // OFP_BSN_HASH_FIELD_SRC_L4_PORT
+	BSNHashFieldDstL4Port        = 2048   // OFP_BSN_HASH_FIELD_DST_L4_PORT
+	BSNHashFieldMplsLabel1       = 4096   // OFP_BSN_HASH_FIELD_MPLS_LABEL1
+	BSNHashFieldMplsLabel2       = 8192   // OFP_BSN_HASH_FIELD_MPLS_LABEL2
+	BSNHashFieldMplsLabel3       = 16384  // OFP_BSN_HASH_FIELD_MPLS_LABEL3
+	BSNHashFieldMplsLabelHiBits  = 32768  // OFP_BSN_HASH_FIELD_MPLS_LABEL_HI_BITS
+	BSNHashFieldMplsPayloadSrcIp = 65536  // OFP_BSN_HASH_FIELD_MPLS_PAYLOAD_SRC_IP
+	BSNHashFieldMplsPayloadDstIp = 131072 // OFP_BSN_HASH_FIELD_MPLS_PAYLOAD_DST_IP
+	BSNHashFieldSymmetric        = 262144 // OFP_BSN_HASH_FIELD_SYMMETRIC
+)
+
+type BsnHashPacketField uint64
+
+func (self BsnHashPacketField) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNHashFieldDstMAC == BSNHashFieldDstMAC {
+		flags = append(flags, "\"DstMAC\": true")
+	}
+	if self&BSNHashFieldSrcMAC == BSNHashFieldSrcMAC {
+		flags = append(flags, "\"SrcMAC\": true")
+	}
+	if self&BSNHashFieldEthType == BSNHashFieldEthType {
+		flags = append(flags, "\"EthType\": true")
+	}
+	if self&BSNHashFieldVLANID == BSNHashFieldVLANID {
+		flags = append(flags, "\"VlanID\": true")
+	}
+	if self&BSNHashFieldInnerL2 == BSNHashFieldInnerL2 {
+		flags = append(flags, "\"InnerL2\": true")
+	}
+	if self&BSNHashFieldInnerL3 == BSNHashFieldInnerL3 {
+		flags = append(flags, "\"InnerL3\": true")
+	}
+	if self&BSNHashFieldSrcIp == BSNHashFieldSrcIp {
+		flags = append(flags, "\"SrcIp\": true")
+	}
+	if self&BSNHashFieldDstIp == BSNHashFieldDstIp {
+		flags = append(flags, "\"DstIp\": true")
+	}
+	if self&BSNHashFieldIpProto == BSNHashFieldIpProto {
+		flags = append(flags, "\"IpProto\": true")
+	}
+	if self&BSNHashFieldSrcL4Port == BSNHashFieldSrcL4Port {
+		flags = append(flags, "\"SrcL4Port\": true")
+	}
+	if self&BSNHashFieldDstL4Port == BSNHashFieldDstL4Port {
+		flags = append(flags, "\"DstL4Port\": true")
+	}
+	if self&BSNHashFieldMplsLabel1 == BSNHashFieldMplsLabel1 {
+		flags = append(flags, "\"MplsLabel1\": true")
+	}
+	if self&BSNHashFieldMplsLabel2 == BSNHashFieldMplsLabel2 {
+		flags = append(flags, "\"MplsLabel2\": true")
+	}
+	if self&BSNHashFieldMplsLabel3 == BSNHashFieldMplsLabel3 {
+		flags = append(flags, "\"MplsLabel3\": true")
+	}
+	if self&BSNHashFieldMplsLabelHiBits == BSNHashFieldMplsLabelHiBits {
+		flags = append(flags, "\"MplsLabelHiBits\": true")
+	}
+	if self&BSNHashFieldMplsPayloadSrcIp == BSNHashFieldMplsPayloadSrcIp {
+		flags = append(flags, "\"MplsPayloadSrcIp\": true")
+	}
+	if self&BSNHashFieldMplsPayloadDstIp == BSNHashFieldMplsPayloadDstIp {
+		flags = append(flags, "\"MplsPayloadDstIp\": true")
+	}
+	if self&BSNHashFieldSymmetric == BSNHashFieldSymmetric {
+		flags = append(flags, "\"Symmetric\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group of_bsn_hash_packet_type
+	OFBSNHashPacketL2        = 0 // OF_BSN_HASH_PACKET_L2
+	OFBSNHashPacketL2Gre     = 1 // OF_BSN_HASH_PACKET_L2GRE
+	OFBSNHashPacketIpv4      = 3 // OF_BSN_HASH_PACKET_IPV4
+	OFBSNHashPacketIpv6      = 4 // OF_BSN_HASH_PACKET_IPV6
+	OFBSNHashPacketMpls      = 5 // OF_BSN_HASH_PACKET_MPLS
+	OFBSNHashPacketSymmetric = 6 // OF_BSN_HASH_PACKET_SYMMETRIC
+)
+
+type BsnHashPacketType uint8
+
+func (self BsnHashPacketType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_bsn_hash_type
+	BSNHashTypeL2       = 0 // OFP_BSN_HASH_TYPE_L2
+	BSNHashTypeL3       = 1 // OFP_BSN_HASH_TYPE_L3
+	BSNHashTypeEnhanced = 2 // OFP_BSN_HASH_TYPE_ENHANCED
+)
+
+type BsnHashType uint8
+
+func (self BsnHashType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_bsn_lacp_convergence_status
+	LacpSuccess   = 0 // LACP_SUCCESS
+	LacpTimedout  = 1 // LACP_TIMEDOUT
+	LacpOutOfSync = 2 // LACP_OUT_OF_SYNC
+)
+
+type BsnLacpConvergenceStatus uint8
+
+func (self BsnLacpConvergenceStatus) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_bsn_pdu_slot_num
+	BsnPduSlotNumAny = 255 // BSN_PDU_SLOT_NUM_ANY
+)
+
+type BsnPduSlotNum uint8
+
+func (self BsnPduSlotNum) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_bsn_vlan_counter
+	BSNVLANCounterRxBytes   = 0 // OFP_BSN_VLAN_COUNTER_RX_BYTES
+	BSNVLANCounterRxPackets = 1 // OFP_BSN_VLAN_COUNTER_RX_PACKETS
+	BSNVLANCounterTxBytes   = 2 // OFP_BSN_VLAN_COUNTER_TX_BYTES
+	BSNVLANCounterTxPackets = 3 // OFP_BSN_VLAN_COUNTER_TX_PACKETS
+)
+
+type BsnVlanCounter uint8
+
+func (self BsnVlanCounter) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_bsn_vrf_counter
+	BSNVrfCounterBytes   = 0 // OFP_BSN_VRF_COUNTER_BYTES
+	BSNVrfCounterPackets = 1 // OFP_BSN_VRF_COUNTER_PACKETS
+)
+
+type BsnVrfCounter uint8
+
+func (self BsnVrfCounter) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group of_nx_nat_range
+	NxNatRangeIpv4Min  = 1  // NX_NAT_RANGE_IPV4_MIN
+	NxNatRangeIpv4Max  = 2  // NX_NAT_RANGE_IPV4_MAX
+	NxNatRangeIpv6Min  = 4  // NX_NAT_RANGE_IPV6_MIN
+	NxNatRangeIpv6Max  = 8  // NX_NAT_RANGE_IPV6_MAX
+	NxNatRangeProtoMin = 16 // NX_NAT_RANGE_PROTO_MIN
+	NxNatRangeProtoMax = 32 // NX_NAT_RANGE_PROTO_MAX
+)
+
+type NxNatRange uint16
+
+func (self NxNatRange) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&NxNatRangeIpv4Min == NxNatRangeIpv4Min {
+		flags = append(flags, "\"Ipv4Min\": true")
+	}
+	if self&NxNatRangeIpv4Max == NxNatRangeIpv4Max {
+		flags = append(flags, "\"Ipv4Max\": true")
+	}
+	if self&NxNatRangeIpv6Min == NxNatRangeIpv6Min {
+		flags = append(flags, "\"Ipv6Min\": true")
+	}
+	if self&NxNatRangeIpv6Max == NxNatRangeIpv6Max {
+		flags = append(flags, "\"Ipv6Max\": true")
+	}
+	if self&NxNatRangeProtoMin == NxNatRangeProtoMin {
+		flags = append(flags, "\"ProtoMin\": true")
+	}
+	if self&NxNatRangeProtoMax == NxNatRangeProtoMax {
+		flags = append(flags, "\"ProtoMax\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_action_type
+	OFPATOutput       = 0     // OFPAT_OUTPUT
+	OFPATCopyTtlOut   = 11    // OFPAT_COPY_TTL_OUT
+	OFPATCopyTtlIn    = 12    // OFPAT_COPY_TTL_IN
+	OFPATSetMplsTtl   = 15    // OFPAT_SET_MPLS_TTL
+	OFPATDecMplsTtl   = 16    // OFPAT_DEC_MPLS_TTL
+	OFPATPushVLAN     = 17    // OFPAT_PUSH_VLAN
+	OFPATPopVLAN      = 18    // OFPAT_POP_VLAN
+	OFPATPushMpls     = 19    // OFPAT_PUSH_MPLS
+	OFPATPopMpls      = 20    // OFPAT_POP_MPLS
+	OFPATSetQueue     = 21    // OFPAT_SET_QUEUE
+	OFPATGroup        = 22    // OFPAT_GROUP
+	OFPATSetNwTtl     = 23    // OFPAT_SET_NW_TTL
+	OFPATDecNwTtl     = 24    // OFPAT_DEC_NW_TTL
+	OFPATSetField     = 25    // OFPAT_SET_FIELD
+	OFPATPushPbb      = 26    // OFPAT_PUSH_PBB
+	OFPATPopPbb       = 27    // OFPAT_POP_PBB
+	OFPATExperimenter = 65535 // OFPAT_EXPERIMENTER
+)
+
+type ActionType uint16
+
+func (self ActionType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bad_action_code
+	OFPBACBadType             = 0  // OFPBAC_BAD_TYPE
+	OFPBACBadLen              = 1  // OFPBAC_BAD_LEN
+	OFPBACBadExperimenter     = 2  // OFPBAC_BAD_EXPERIMENTER
+	OFPBACBadExperimenterType = 3  // OFPBAC_BAD_EXPERIMENTER_TYPE
+	OFPBACBadOutPort          = 4  // OFPBAC_BAD_OUT_PORT
+	OFPBACBadArgument         = 5  // OFPBAC_BAD_ARGUMENT
+	OFPBACEperm               = 6  // OFPBAC_EPERM
+	OFPBACTooMany             = 7  // OFPBAC_TOO_MANY
+	OFPBACBadQueue            = 8  // OFPBAC_BAD_QUEUE
+	OFPBACBadOutGroup         = 9  // OFPBAC_BAD_OUT_GROUP
+	OFPBACMatchInconsistent   = 10 // OFPBAC_MATCH_INCONSISTENT
+	OFPBACUnsupportedOrder    = 11 // OFPBAC_UNSUPPORTED_ORDER
+	OFPBACBadTag              = 12 // OFPBAC_BAD_TAG
+	OFPBACBadSetType          = 13 // OFPBAC_BAD_SET_TYPE
+	OFPBACBadSetLen           = 14 // OFPBAC_BAD_SET_LEN
+	OFPBACBadSetArgument      = 15 // OFPBAC_BAD_SET_ARGUMENT
+)
+
+type BadActionCode uint16
+
+func (self BadActionCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bad_instruction_code
+	OFPBICUnknownInst         = 0 // OFPBIC_UNKNOWN_INST
+	OFPBICUnsupInst           = 1 // OFPBIC_UNSUP_INST
+	OFPBICBadTableID          = 2 // OFPBIC_BAD_TABLE_ID
+	OFPBICUnsupMetadata       = 3 // OFPBIC_UNSUP_METADATA
+	OFPBICUnsupMetadataMask   = 4 // OFPBIC_UNSUP_METADATA_MASK
+	OFPBICBadExperimenter     = 5 // OFPBIC_BAD_EXPERIMENTER
+	OFPBICBadExperimenterType = 6 // OFPBIC_BAD_EXPERIMENTER_TYPE
+	OFPBICBadLen              = 7 // OFPBIC_BAD_LEN
+	OFPBICEperm               = 8 // OFPBIC_EPERM
+)
+
+type BadInstructionCode uint16
+
+func (self BadInstructionCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bad_match_code
+	OFPBMCBadType       = 0  // OFPBMC_BAD_TYPE
+	OFPBMCBadLen        = 1  // OFPBMC_BAD_LEN
+	OFPBMCBadTag        = 2  // OFPBMC_BAD_TAG
+	OFPBMCBadDlAddrMask = 3  // OFPBMC_BAD_DL_ADDR_MASK
+	OFPBMCBadNwAddrMask = 4  // OFPBMC_BAD_NW_ADDR_MASK
+	OFPBMCBadWildcards  = 5  // OFPBMC_BAD_WILDCARDS
+	OFPBMCBadField      = 6  // OFPBMC_BAD_FIELD
+	OFPBMCBadValue      = 7  // OFPBMC_BAD_VALUE
+	OFPBMCBadMask       = 8  // OFPBMC_BAD_MASK
+	OFPBMCBadPrereq     = 9  // OFPBMC_BAD_PREREQ
+	OFPBMCDupField      = 10 // OFPBMC_DUP_FIELD
+	OFPBMCEperm         = 11 // OFPBMC_EPERM
+)
+
+type BadMatchCode uint16
+
+func (self BadMatchCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bad_request_code
+	OFPBRCBadVersion              = 0  // OFPBRC_BAD_VERSION
+	OFPBRCBadType                 = 1  // OFPBRC_BAD_TYPE
+	OFPBRCBadStat                 = 2  // OFPBRC_BAD_STAT
+	OFPBRCBadExperimenter         = 3  // OFPBRC_BAD_EXPERIMENTER
+	OFPBRCBadExperimenterType     = 4  // OFPBRC_BAD_EXPERIMENTER_TYPE
+	OFPBRCEperm                   = 5  // OFPBRC_EPERM
+	OFPBRCBadLen                  = 6  // OFPBRC_BAD_LEN
+	OFPBRCBufferEmpty             = 7  // OFPBRC_BUFFER_EMPTY
+	OFPBRCBufferUnknown           = 8  // OFPBRC_BUFFER_UNKNOWN
+	OFPBRCBadTableID              = 9  // OFPBRC_BAD_TABLE_ID
+	OFPBRCIsSlave                 = 10 // OFPBRC_IS_SLAVE
+	OFPBRCBadPort                 = 11 // OFPBRC_BAD_PORT
+	OFPBRCBadPacket               = 12 // OFPBRC_BAD_PACKET
+	OFPBRCMultipartBufferOverflow = 13 // OFPBRC_MULTIPART_BUFFER_OVERFLOW
+)
+
+type BadRequestCode uint16
+
+func (self BadRequestCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_anchor
+	BSNAnchorPacketStart    = 0 // OFP_BSN_ANCHOR_PACKET_START
+	BSNAnchorL3HeaderStart  = 1 // OFP_BSN_ANCHOR_L3_HEADER_START
+	BSNAnchorL4HeaderStart  = 2 // OFP_BSN_ANCHOR_L4_HEADER_START
+	BSNAnchorL4PayloadStart = 3 // OFP_BSN_ANCHOR_L4_PAYLOAD_START
+)
+
+type BsnAnchor uint16
+
+func (self BsnAnchor) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_auto_negotiation_type
+	BSNAutoNegotiationDefault = 0 // OFP_BSN_AUTO_NEGOTIATION_DEFAULT
+	BSNAutoNegotiationEnable  = 1 // OFP_BSN_AUTO_NEGOTIATION_ENABLE
+	BSNAutoNegotiationDisable = 2 // OFP_BSN_AUTO_NEGOTIATION_DISABLE
+)
+
+type BsnAutoNegotiationType uint8
+
+func (self BsnAutoNegotiationType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_bfd_endpoint
+	BSNBfdUnused   = 0 // OFP_BSN_BFD_UNUSED
+	BSNBfdMicro    = 1 // OFP_BSN_BFD_MICRO
+	BSNBfd1Hop     = 2 // OFP_BSN_BFD_1_HOP
+	BSNBfdMultiHop = 3 // OFP_BSN_BFD_MULTI_HOP
+)
+
+type BsnBfdEndpoint uint8
+
+func (self BsnBfdEndpoint) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_bfd_endpoint_state
+	BSNBfdEndpointStateAdmindown  = 0 // OFP_BSN_BFD_ENDPOINT_STATE_ADMINDOWN
+	BSNBfdEndpointStateDown       = 1 // OFP_BSN_BFD_ENDPOINT_STATE_DOWN
+	BSNBfdEndpointStateInit       = 2 // OFP_BSN_BFD_ENDPOINT_STATE_INIT
+	BSNBfdEndpointStateUp         = 3 // OFP_BSN_BFD_ENDPOINT_STATE_UP
+	BSNBfdEndpointSessionError    = 4 // OFP_BSN_BFD_ENDPOINT_SESSION_ERROR
+	BSNBfdEndpointRemoteAdmindown = 5 // OFP_BSN_BFD_ENDPOINT_REMOTE_ADMINDOWN
+	BSNBfdEndpointParamsChange    = 6 // OFP_BSN_BFD_ENDPOINT_PARAMS_CHANGE
+)
+
+type BsnBfdEndpointState uint8
+
+func (self BsnBfdEndpointState) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_controller_connection_state
+	BSNControllerConnectionStateDisconnected = 0 // OFP_BSN_CONTROLLER_CONNECTION_STATE_DISCONNECTED
+	BSNControllerConnectionStateConnected    = 1 // OFP_BSN_CONTROLLER_CONNECTION_STATE_CONNECTED
+)
+
+type BsnControllerConnectionState uint8
+
+func (self BsnControllerConnectionState) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_controller_role_reason
+	BSNControllerRoleReasonMasterRequest = 0 // OFP_BSN_CONTROLLER_ROLE_REASON_MASTER_REQUEST
+	BSNControllerRoleReasonConfig        = 1 // OFP_BSN_CONTROLLER_ROLE_REASON_CONFIG
+	BSNControllerRoleReasonExperimenter  = 2 // OFP_BSN_CONTROLLER_ROLE_REASON_EXPERIMENTER
+)
+
+type BsnControllerRoleReason uint8
+
+func (self BsnControllerRoleReason) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_decap
+	BSNDecapVxlan  = 0 // OFP_BSN_DECAP_VXLAN
+	BSNDecapErspan = 1 // OFP_BSN_DECAP_ERSPAN
+	BSNDecapL2GRE  = 2 // OFP_BSN_DECAP_L2_GRE
+	BSNDecapNvgre  = 3 // OFP_BSN_DECAP_NVGRE
+	BSNDecapCapwap = 4 // OFP_BSN_DECAP_CAPWAP
+	BSNDecapL2Mpls = 5 // OFP_BSN_DECAP_L2_MPLS
+	BSNDecapL3GRE  = 6 // OFP_BSN_DECAP_L3_GRE
+	BSNDecapGtp    = 7 // OFP_BSN_DECAP_GTP
+	BSNDecapL3Mpls = 8 // OFP_BSN_DECAP_L3_MPLS
+)
+
+type BsnDecap uint16
+
+func (self BsnDecap) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_encap
+	BSNEncapUnused  = 0 // OFP_BSN_ENCAP_UNUSED
+	BSNEncapIpv4Udp = 1 // OFP_BSN_ENCAP_IPV4_UDP
+	BSNEncapIpv6Udp = 2 // OFP_BSN_ENCAP_IPV6_UDP
+)
+
+type BsnEncap uint8
+
+func (self BsnEncap) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_enhanced_hash_type
+	BSNEnhancedHashL2        = 1  // OFP_BSN_ENHANCED_HASH_L2
+	BSNEnhancedHashL3        = 2  // OFP_BSN_ENHANCED_HASH_L3
+	BSNEnhancedHashL2Gre     = 4  // OFP_BSN_ENHANCED_HASH_L2GRE
+	BSNEnhancedHashMpls      = 8  // OFP_BSN_ENHANCED_HASH_MPLS
+	BSNEnhancedHashGtp       = 16 // OFP_BSN_ENHANCED_HASH_GTP
+	BSNEnhancedHashSymmetric = 32 // OFP_BSN_ENHANCED_HASH_SYMMETRIC
+)
+
+type BsnEnhancedHashType uint64
+
+func (self BsnEnhancedHashType) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNEnhancedHashL2 == BSNEnhancedHashL2 {
+		flags = append(flags, "\"L2\": true")
+	}
+	if self&BSNEnhancedHashL3 == BSNEnhancedHashL3 {
+		flags = append(flags, "\"L3\": true")
+	}
+	if self&BSNEnhancedHashL2Gre == BSNEnhancedHashL2Gre {
+		flags = append(flags, "\"L2Gre\": true")
+	}
+	if self&BSNEnhancedHashMpls == BSNEnhancedHashMpls {
+		flags = append(flags, "\"Mpls\": true")
+	}
+	if self&BSNEnhancedHashGtp == BSNEnhancedHashGtp {
+		flags = append(flags, "\"Gtp\": true")
+	}
+	if self&BSNEnhancedHashSymmetric == BSNEnhancedHashSymmetric {
+		flags = append(flags, "\"Symmetric\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_fabric_port_role
+	BSNFabricPortRolePartitionedSpine = 1 // OFP_BSN_FABRIC_PORT_ROLE_PARTITIONED_SPINE
+)
+
+type BsnFabricPortRole uint16
+
+func (self BsnFabricPortRole) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_flow_classifier
+	BSNFlowClassifierNone        = 0 // OFP_BSN_FLOW_CLASSIFIER_NONE
+	BSNFlowClassifierL2Bc        = 1 // OFP_BSN_FLOW_CLASSIFIER_L2BC
+	BSNFlowClassifierL2Uc        = 2 // OFP_BSN_FLOW_CLASSIFIER_L2UC
+	BSNFlowClassifierL2Unknown   = 3 // OFP_BSN_FLOW_CLASSIFIER_L2UNKNOWN
+	BSNFlowClassifierL2Mcknown   = 4 // OFP_BSN_FLOW_CLASSIFIER_L2MCKNOWN
+	BSNFlowClassifierL2Mcunknown = 5 // OFP_BSN_FLOW_CLASSIFIER_L2MCUNKNOWN
+	BSNFlowClassifierL3Mcunknown = 6 // OFP_BSN_FLOW_CLASSIFIER_L3MCUNKNOWN
+	BSNFlowClassifierL3Mcknown   = 7 // OFP_BSN_FLOW_CLASSIFIER_L3MCKNOWN
+	BSNFlowClassifierL3Ucknown   = 8 // OFP_BSN_FLOW_CLASSIFIER_L3UCKNOWN
+	BSNFlowClassifierL3Ucunknown = 9 // OFP_BSN_FLOW_CLASSIFIER_L3UCUNKNOWN
+)
+
+type BsnFlowClassifier uint16
+
+func (self BsnFlowClassifier) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_forward_error_correction_type
+	BSNForwardErrorCorrectionDefault = 0 // OFP_BSN_FORWARD_ERROR_CORRECTION_DEFAULT
+	BSNForwardErrorCorrectionEnable  = 1 // OFP_BSN_FORWARD_ERROR_CORRECTION_ENABLE
+	BSNForwardErrorCorrectionDisable = 2 // OFP_BSN_FORWARD_ERROR_CORRECTION_DISABLE
+)
+
+type BsnForwardErrorCorrectionType uint8
+
+func (self BsnForwardErrorCorrectionType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_hash_algorithm_type
+	BSNHashAlgorithmCrc16Xor8  = 0 // OFP_BSN_HASH_ALGORITHM_CRC16XOR8
+	BSNHashAlgorithmCrc16Xor4  = 1 // OFP_BSN_HASH_ALGORITHM_CRC16XOR4
+	BSNHashAlgorithmCrc16Xor2  = 2 // OFP_BSN_HASH_ALGORITHM_CRC16XOR2
+	BSNHashAlgorithmCrc16Xor1  = 3 // OFP_BSN_HASH_ALGORITHM_CRC16XOR1
+	BSNHashAlgorithmCrc16      = 4 // OFP_BSN_HASH_ALGORITHM_CRC16
+	BSNHashAlgorithmXor16      = 5 // OFP_BSN_HASH_ALGORITHM_XOR16
+	BSNHashAlgorithmCrc16Ccitt = 6 // OFP_BSN_HASH_ALGORITHM_CRC16CCITT
+	BSNHashAlgorithmCrc32Lo    = 7 // OFP_BSN_HASH_ALGORITHM_CRC32LO
+	BSNHashAlgorithmCrc32Hi    = 8 // OFP_BSN_HASH_ALGORITHM_CRC32HI
+)
+
+type BsnHashAlgorithmType uint16
+
+func (self BsnHashAlgorithmType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_hash_select_flags
+	BSNHashSelectSrcIp = 1 // OFP_BSN_HASH_SELECT_SRC_IP
+	BSNHashSelectDstIp = 2 // OFP_BSN_HASH_SELECT_DST_IP
+)
+
+type BsnHashSelectFlags uint32
+
+func (self BsnHashSelectFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNHashSelectSrcIp == BSNHashSelectSrcIp {
+		flags = append(flags, "\"SrcIp\": true")
+	}
+	if self&BSNHashSelectDstIp == BSNHashSelectDstIp {
+		flags = append(flags, "\"DstIp\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_ip_tunnel_type
+	BSNIpTunnelTypeNone = 0 // OFP_BSN_IP_TUNNEL_TYPE_NONE
+	BSNIpTunnelTypePim  = 1 // OFP_BSN_IP_TUNNEL_TYPE_PIM
+)
+
+type BsnIpTunnelType uint16
+
+func (self BsnIpTunnelType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_lacp_state
+	BSNLacpStateActivity        = 1   // OFP_BSN_LACP_STATE_ACTIVITY
+	BSNLacpStateTimeout         = 2   // OFP_BSN_LACP_STATE_TIMEOUT
+	BSNLacpStateAggregation     = 4   // OFP_BSN_LACP_STATE_AGGREGATION
+	BSNLacpStateSynchronization = 8   // OFP_BSN_LACP_STATE_SYNCHRONIZATION
+	BSNLacpStateCollecting      = 16  // OFP_BSN_LACP_STATE_COLLECTING
+	BSNLacpStateDistributing    = 32  // OFP_BSN_LACP_STATE_DISTRIBUTING
+	BSNLacpStateDefaulted       = 64  // OFP_BSN_LACP_STATE_DEFAULTED
+	BSNLacpStateExpired         = 128 // OFP_BSN_LACP_STATE_EXPIRED
+)
+
+type BsnLacpState uint8
+
+func (self BsnLacpState) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNLacpStateActivity == BSNLacpStateActivity {
+		flags = append(flags, "\"Activity\": true")
+	}
+	if self&BSNLacpStateTimeout == BSNLacpStateTimeout {
+		flags = append(flags, "\"Timeout\": true")
+	}
+	if self&BSNLacpStateAggregation == BSNLacpStateAggregation {
+		flags = append(flags, "\"Aggregation\": true")
+	}
+	if self&BSNLacpStateSynchronization == BSNLacpStateSynchronization {
+		flags = append(flags, "\"Synchronization\": true")
+	}
+	if self&BSNLacpStateCollecting == BSNLacpStateCollecting {
+		flags = append(flags, "\"Collecting\": true")
+	}
+	if self&BSNLacpStateDistributing == BSNLacpStateDistributing {
+		flags = append(flags, "\"Distributing\": true")
+	}
+	if self&BSNLacpStateDefaulted == BSNLacpStateDefaulted {
+		flags = append(flags, "\"Defaulted\": true")
+	}
+	if self&BSNLacpStateExpired == BSNLacpStateExpired {
+		flags = append(flags, "\"Expired\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_lag_flag
+	BSNLagFlagAutoRecovery = 1 // OFP_BSN_LAG_FLAG_AUTO_RECOVERY
+)
+
+type BsnLagFlag uint16
+
+func (self BsnLagFlag) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNLagFlagAutoRecovery == BSNLagFlagAutoRecovery {
+		flags = append(flags, "\"BSNLagFlagAutoRecovery\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_loglevel
+	BSNLoglevelMsg     = 0 // OFP_BSN_LOGLEVEL_MSG
+	BSNLoglevelError   = 1 // OFP_BSN_LOGLEVEL_ERROR
+	BSNLoglevelWarn    = 2 // OFP_BSN_LOGLEVEL_WARN
+	BSNLoglevelInfo    = 3 // OFP_BSN_LOGLEVEL_INFO
+	BSNLoglevelVerbose = 4 // OFP_BSN_LOGLEVEL_VERBOSE
+	BSNLoglevelTrace   = 5 // OFP_BSN_LOGLEVEL_TRACE
+)
+
+type BsnLoglevel uint8
+
+func (self BsnLoglevel) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_loopback_mode
+	BSNLoopbackModeNone      = 0 // OFP_BSN_LOOPBACK_MODE_NONE
+	BSNLoopbackModeMAC       = 1 // OFP_BSN_LOOPBACK_MODE_MAC
+	BSNLoopbackModePhy       = 2 // OFP_BSN_LOOPBACK_MODE_PHY
+	BSNLoopbackModePhyRemote = 3 // OFP_BSN_LOOPBACK_MODE_PHY_REMOTE
+)
+
+type BsnLoopbackMode uint8
+
+func (self BsnLoopbackMode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_lua_upload_flags
+	BSNLuaUploadMore  = 1 // OFP_BSN_LUA_UPLOAD_MORE
+	BSNLuaUploadForce = 2 // OFP_BSN_LUA_UPLOAD_FORCE
+)
+
+type BsnLuaUploadFlags uint16
+
+func (self BsnLuaUploadFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNLuaUploadMore == BSNLuaUploadMore {
+		flags = append(flags, "\"More\": true")
+	}
+	if self&BSNLuaUploadForce == BSNLuaUploadForce {
+		flags = append(flags, "\"Force\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_multicast_packet
+	BSNMulticastPacketNone         = 0 // OFP_BSN_MULTICAST_PACKET_NONE
+	BSNMulticastPacketPimHello     = 1 // OFP_BSN_MULTICAST_PACKET_PIM_HELLO
+	BSNMulticastPacketPimJoinPrune = 2 // OFP_BSN_MULTICAST_PACKET_PIM_JOIN_PRUNE
+	BSNMulticastPacketPimAssert    = 3 // OFP_BSN_MULTICAST_PACKET_PIM_ASSERT
+)
+
+type BsnMulticastPacket uint16
+
+func (self BsnMulticastPacket) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_pktin_flag
+	BSNPktinFlagPdu             = 1       // OFP_BSN_PKTIN_FLAG_PDU
+	BSNPktinFlagNewHost         = 2       // OFP_BSN_PKTIN_FLAG_NEW_HOST
+	BSNPktinFlagStationMove     = 4       // OFP_BSN_PKTIN_FLAG_STATION_MOVE
+	BSNPktinFlagARP             = 8       // OFP_BSN_PKTIN_FLAG_ARP
+	BSNPktinFlagDhcp            = 16      // OFP_BSN_PKTIN_FLAG_DHCP
+	BSNPktinFlagL2Cpu           = 32      // OFP_BSN_PKTIN_FLAG_L2_CPU
+	BSNPktinFlagDebug           = 64      // OFP_BSN_PKTIN_FLAG_DEBUG
+	BSNPktinFlagTtlExpired      = 128     // OFP_BSN_PKTIN_FLAG_TTL_EXPIRED
+	BSNPktinFlagL3Miss          = 256     // OFP_BSN_PKTIN_FLAG_L3_MISS
+	BSNPktinFlagL3Cpu           = 512     // OFP_BSN_PKTIN_FLAG_L3_CPU
+	BSNPktinFlagIngressAcl      = 1024    // OFP_BSN_PKTIN_FLAG_INGRESS_ACL
+	BSNPktinFlagSflow           = 2048    // OFP_BSN_PKTIN_FLAG_SFLOW
+	BSNPktinFlagARPCache        = 4096    // OFP_BSN_PKTIN_FLAG_ARP_CACHE
+	BSNPktinFlagARPTarget       = 8192    // OFP_BSN_PKTIN_FLAG_ARP_TARGET
+	BSNPktinFlagIgmp            = 16384   // OFP_BSN_PKTIN_FLAG_IGMP
+	BSNPktinFlagPim             = 32768   // OFP_BSN_PKTIN_FLAG_PIM
+	BSNPktinFlagVxlanSipMiss    = 65536   // OFP_BSN_PKTIN_FLAG_VXLAN_SIP_MISS
+	BSNPktinFlagMcReserved      = 131072  // OFP_BSN_PKTIN_FLAG_MC_RESERVED
+	BSNPktinFlagAnalytics       = 262144  // OFP_BSN_PKTIN_FLAG_ANALYTICS
+	BSNPktinFlagIcmpv6          = 524288  // OFP_BSN_PKTIN_FLAG_ICMPV6
+	BSNPktinFlagIngressAclLocal = 1048576 // OFP_BSN_PKTIN_FLAG_INGRESS_ACL_LOCAL
+	BSNPktinFlagIpmcMiss        = 2097152 // OFP_BSN_PKTIN_FLAG_IPMC_MISS
+	BSNPktinFlagIpmcRpfFailed   = 4194304 // OFP_BSN_PKTIN_FLAG_IPMC_RPF_FAILED
+	BSNPktinFlagBfdSlowpath     = 8388608 // OFP_BSN_PKTIN_FLAG_BFD_SLOWPATH
+)
+
+type BsnPktinFlag uint64
+
+func (self BsnPktinFlag) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNPktinFlagPdu == BSNPktinFlagPdu {
+		flags = append(flags, "\"Pdu\": true")
+	}
+	if self&BSNPktinFlagNewHost == BSNPktinFlagNewHost {
+		flags = append(flags, "\"NewHost\": true")
+	}
+	if self&BSNPktinFlagStationMove == BSNPktinFlagStationMove {
+		flags = append(flags, "\"StationMove\": true")
+	}
+	if self&BSNPktinFlagARP == BSNPktinFlagARP {
+		flags = append(flags, "\"Arp\": true")
+	}
+	if self&BSNPktinFlagDhcp == BSNPktinFlagDhcp {
+		flags = append(flags, "\"Dhcp\": true")
+	}
+	if self&BSNPktinFlagL2Cpu == BSNPktinFlagL2Cpu {
+		flags = append(flags, "\"L2Cpu\": true")
+	}
+	if self&BSNPktinFlagDebug == BSNPktinFlagDebug {
+		flags = append(flags, "\"Debug\": true")
+	}
+	if self&BSNPktinFlagTtlExpired == BSNPktinFlagTtlExpired {
+		flags = append(flags, "\"TtlExpired\": true")
+	}
+	if self&BSNPktinFlagL3Miss == BSNPktinFlagL3Miss {
+		flags = append(flags, "\"L3Miss\": true")
+	}
+	if self&BSNPktinFlagL3Cpu == BSNPktinFlagL3Cpu {
+		flags = append(flags, "\"L3Cpu\": true")
+	}
+	if self&BSNPktinFlagIngressAcl == BSNPktinFlagIngressAcl {
+		flags = append(flags, "\"IngressAcl\": true")
+	}
+	if self&BSNPktinFlagSflow == BSNPktinFlagSflow {
+		flags = append(flags, "\"Sflow\": true")
+	}
+	if self&BSNPktinFlagARPCache == BSNPktinFlagARPCache {
+		flags = append(flags, "\"ArpCache\": true")
+	}
+	if self&BSNPktinFlagARPTarget == BSNPktinFlagARPTarget {
+		flags = append(flags, "\"ArpTarget\": true")
+	}
+	if self&BSNPktinFlagIgmp == BSNPktinFlagIgmp {
+		flags = append(flags, "\"Igmp\": true")
+	}
+	if self&BSNPktinFlagPim == BSNPktinFlagPim {
+		flags = append(flags, "\"Pim\": true")
+	}
+	if self&BSNPktinFlagVxlanSipMiss == BSNPktinFlagVxlanSipMiss {
+		flags = append(flags, "\"VxlanSipMiss\": true")
+	}
+	if self&BSNPktinFlagMcReserved == BSNPktinFlagMcReserved {
+		flags = append(flags, "\"McReserved\": true")
+	}
+	if self&BSNPktinFlagAnalytics == BSNPktinFlagAnalytics {
+		flags = append(flags, "\"Analytics\": true")
+	}
+	if self&BSNPktinFlagIcmpv6 == BSNPktinFlagIcmpv6 {
+		flags = append(flags, "\"Icmpv6\": true")
+	}
+	if self&BSNPktinFlagIngressAclLocal == BSNPktinFlagIngressAclLocal {
+		flags = append(flags, "\"IngressAclLocal\": true")
+	}
+	if self&BSNPktinFlagIpmcMiss == BSNPktinFlagIpmcMiss {
+		flags = append(flags, "\"IpmcMiss\": true")
+	}
+	if self&BSNPktinFlagIpmcRpfFailed == BSNPktinFlagIpmcRpfFailed {
+		flags = append(flags, "\"IpmcRpfFailed\": true")
+	}
+	if self&BSNPktinFlagBfdSlowpath == BSNPktinFlagBfdSlowpath {
+		flags = append(flags, "\"BfdSlowpath\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_port_counter
+	BSNPortCounterRxBytes                = 0  // OFP_BSN_PORT_COUNTER_RX_BYTES
+	BSNPortCounterRxPacketsUnicast       = 1  // OFP_BSN_PORT_COUNTER_RX_PACKETS_UNICAST
+	BSNPortCounterRxPacketsBroadcast     = 2  // OFP_BSN_PORT_COUNTER_RX_PACKETS_BROADCAST
+	BSNPortCounterRxPacketsMulticast     = 3  // OFP_BSN_PORT_COUNTER_RX_PACKETS_MULTICAST
+	BSNPortCounterRxDropped              = 4  // OFP_BSN_PORT_COUNTER_RX_DROPPED
+	BSNPortCounterRxErrors               = 5  // OFP_BSN_PORT_COUNTER_RX_ERRORS
+	BSNPortCounterTxBytes                = 6  // OFP_BSN_PORT_COUNTER_TX_BYTES
+	BSNPortCounterTxPacketsUnicast       = 7  // OFP_BSN_PORT_COUNTER_TX_PACKETS_UNICAST
+	BSNPortCounterTxPacketsBroadcast     = 8  // OFP_BSN_PORT_COUNTER_TX_PACKETS_BROADCAST
+	BSNPortCounterTxPacketsMulticast     = 9  // OFP_BSN_PORT_COUNTER_TX_PACKETS_MULTICAST
+	BSNPortCounterTxDropped              = 10 // OFP_BSN_PORT_COUNTER_TX_DROPPED
+	BSNPortCounterTxErrors               = 11 // OFP_BSN_PORT_COUNTER_TX_ERRORS
+	BSNPortCounterRxRunts                = 12 // OFP_BSN_PORT_COUNTER_RX_RUNTS
+	BSNPortCounterRxGiants               = 13 // OFP_BSN_PORT_COUNTER_RX_GIANTS
+	BSNPortCounterRxCrcErrors            = 14 // OFP_BSN_PORT_COUNTER_RX_CRC_ERRORS
+	BSNPortCounterRxAlignmentErrors      = 15 // OFP_BSN_PORT_COUNTER_RX_ALIGNMENT_ERRORS
+	BSNPortCounterRxSymbolErrors         = 16 // OFP_BSN_PORT_COUNTER_RX_SYMBOL_ERRORS
+	BSNPortCounterRxPauseInput           = 17 // OFP_BSN_PORT_COUNTER_RX_PAUSE_INPUT
+	BSNPortCounterTxCollisions           = 18 // OFP_BSN_PORT_COUNTER_TX_COLLISIONS
+	BSNPortCounterTxLateCollisions       = 19 // OFP_BSN_PORT_COUNTER_TX_LATE_COLLISIONS
+	BSNPortCounterTxDeferred             = 20 // OFP_BSN_PORT_COUNTER_TX_DEFERRED
+	BSNPortCounterTxPauseOutput          = 21 // OFP_BSN_PORT_COUNTER_TX_PAUSE_OUTPUT
+	BSNPortCounterRxPackets              = 22 // OFP_BSN_PORT_COUNTER_RX_PACKETS
+	BSNPortCounterTxPackets              = 23 // OFP_BSN_PORT_COUNTER_TX_PACKETS
+	BSNPortCounterRxLengthErrors         = 24 // OFP_BSN_PORT_COUNTER_RX_LENGTH_ERRORS
+	BSNPortCounterRxOverflowErrors       = 25 // OFP_BSN_PORT_COUNTER_RX_OVERFLOW_ERRORS
+	BSNPortCounterTxCarrierErrors        = 26 // OFP_BSN_PORT_COUNTER_TX_CARRIER_ERRORS
+	BSNPortCounterRxPacketsBadVLAN       = 27 // OFP_BSN_PORT_COUNTER_RX_PACKETS_BAD_VLAN
+	BSNPortCounterLinkUp                 = 28 // OFP_BSN_PORT_COUNTER_LINK_UP
+	BSNPortCounterLinkDown               = 29 // OFP_BSN_PORT_COUNTER_LINK_DOWN
+	BSNPortCounterRxPfcControlFrame      = 30 // OFP_BSN_PORT_COUNTER_RX_PFC_CONTROL_FRAME
+	BSNPortCounterTxPfcControlFrame      = 31 // OFP_BSN_PORT_COUNTER_TX_PFC_CONTROL_FRAME
+	BSNPortCounterRxPfcFrameXonPriority0 = 32 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_0
+	BSNPortCounterRxPfcFrameXonPriority1 = 33 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_1
+	BSNPortCounterRxPfcFrameXonPriority2 = 34 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_2
+	BSNPortCounterRxPfcFrameXonPriority3 = 35 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_3
+	BSNPortCounterRxPfcFrameXonPriority4 = 36 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_4
+	BSNPortCounterRxPfcFrameXonPriority5 = 37 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_5
+	BSNPortCounterRxPfcFrameXonPriority6 = 38 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_6
+	BSNPortCounterRxPfcFrameXonPriority7 = 39 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_XON_PRIORITY_7
+	BSNPortCounterRxPfcFramePriority0    = 40 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_0
+	BSNPortCounterRxPfcFramePriority1    = 41 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_1
+	BSNPortCounterRxPfcFramePriority2    = 42 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_2
+	BSNPortCounterRxPfcFramePriority3    = 43 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_3
+	BSNPortCounterRxPfcFramePriority4    = 44 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_4
+	BSNPortCounterRxPfcFramePriority5    = 45 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_5
+	BSNPortCounterRxPfcFramePriority6    = 46 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_6
+	BSNPortCounterRxPfcFramePriority7    = 47 // OFP_BSN_PORT_COUNTER_RX_PFC_FRAME_PRIORITY_7
+	BSNPortCounterTxPfcFramePriority0    = 48 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_0
+	BSNPortCounterTxPfcFramePriority1    = 49 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_1
+	BSNPortCounterTxPfcFramePriority2    = 50 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_2
+	BSNPortCounterTxPfcFramePriority3    = 51 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_3
+	BSNPortCounterTxPfcFramePriority4    = 52 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_4
+	BSNPortCounterTxPfcFramePriority5    = 53 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_5
+	BSNPortCounterTxPfcFramePriority6    = 54 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_6
+	BSNPortCounterTxPfcFramePriority7    = 55 // OFP_BSN_PORT_COUNTER_TX_PFC_FRAME_PRIORITY_7
+)
+
+type BsnPortCounter uint8
+
+func (self BsnPortCounter) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_port_mode
+	BSNPortModeNone  = 0  // OFP_BSN_PORT_MODE_NONE
+	BSNPortMode4Xx   = 1  // OFP_BSN_PORT_MODE_4XX
+	BSNPortMode4X1   = 2  // OFP_BSN_PORT_MODE_4X1
+	BSNPortMode4X10  = 3  // OFP_BSN_PORT_MODE_4X10
+	BSNPortMode4X25  = 4  // OFP_BSN_PORT_MODE_4X25
+	BSNPortMode2X50  = 5  // OFP_BSN_PORT_MODE_2X50
+	BSNPortMode1X1   = 6  // OFP_BSN_PORT_MODE_1X1
+	BSNPortMode1X10  = 7  // OFP_BSN_PORT_MODE_1X10
+	BSNPortMode1X25  = 8  // OFP_BSN_PORT_MODE_1X25
+	BSNPortMode1X40  = 9  // OFP_BSN_PORT_MODE_1X40
+	BSNPortMode1X100 = 10 // OFP_BSN_PORT_MODE_1X100
+)
+
+type BsnPortMode uint16
+
+func (self BsnPortMode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_port_speed_gbps_type
+	BSNPortSpeedGbps1   = 1   // OFP_BSN_PORT_SPEED_GBPS_1
+	BSNPortSpeedGbps10  = 10  // OFP_BSN_PORT_SPEED_GBPS_10
+	BSNPortSpeedGbps25  = 25  // OFP_BSN_PORT_SPEED_GBPS_25
+	BSNPortSpeedGbps40  = 40  // OFP_BSN_PORT_SPEED_GBPS_40
+	BSNPortSpeedGbps50  = 50  // OFP_BSN_PORT_SPEED_GBPS_50
+	BSNPortSpeedGbps100 = 100 // OFP_BSN_PORT_SPEED_GBPS_100
+)
+
+type BsnPortSpeedGbpsType uint32
+
+func (self BsnPortSpeedGbpsType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_port_usage
+	BSNPortUnused       = 0 // OFP_BSN_PORT_UNUSED
+	BSNPortTransmitOnly = 1 // OFP_BSN_PORT_TRANSMIT_ONLY
+	BSNPortReceiveOnly  = 2 // OFP_BSN_PORT_RECEIVE_ONLY
+	BSNPortBidirection  = 3 // OFP_BSN_PORT_BIDIRECTION
+)
+
+type BsnPortUsage uint16
+
+func (self BsnPortUsage) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_port_vxlan_mode
+	BSNPortVxlanRecirculationEnable = 0 // OFP_BSN_PORT_VXLAN_RECIRCULATION_ENABLE
+	BSNPortVxlanTerminationEnable   = 1 // OFP_BSN_PORT_VXLAN_TERMINATION_ENABLE
+)
+
+type BsnPortVxlanMode uint8
+
+func (self BsnPortVxlanMode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_push_vlan
+	BSNPushVLANUntagged     = 1 // OFP_BSN_PUSH_VLAN_UNTAGGED
+	BSNPushVLANSingleTagged = 2 // OFP_BSN_PUSH_VLAN_SINGLE_TAGGED
+	BSNPushVLANDoubleTagged = 4 // OFP_BSN_PUSH_VLAN_DOUBLE_TAGGED
+)
+
+type BsnPushVlan uint8
+
+func (self BsnPushVlan) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNPushVLANUntagged == BSNPushVLANUntagged {
+		flags = append(flags, "\"Untagged\": true")
+	}
+	if self&BSNPushVLANSingleTagged == BSNPushVLANSingleTagged {
+		flags = append(flags, "\"SingleTagged\": true")
+	}
+	if self&BSNPushVLANDoubleTagged == BSNPushVLANDoubleTagged {
+		flags = append(flags, "\"DoubleTagged\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_rate_unit
+	BSNRateUnitPps    = 0 // OFP_BSN_RATE_UNIT_PPS
+	BSNRateUnitKbitps = 1 // OFP_BSN_RATE_UNIT_KBITPS
+)
+
+type BsnRateUnit uint8
+
+func (self BsnRateUnit) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_routing_param
+	BSNRoutingParamOspfUcast     = 1 // OFP_BSN_ROUTING_PARAM_OSPF_UCAST
+	BSNRoutingParamOspfMcast     = 2 // OFP_BSN_ROUTING_PARAM_OSPF_MCAST
+	BSNRoutingParamARPFrr        = 3 // OFP_BSN_ROUTING_PARAM_ARP_FRR
+	BSNRoutingParamIpv6OspfUcast = 4 // OFP_BSN_ROUTING_PARAM_IPV6_OSPF_UCAST
+	BSNRoutingParamIpv6OspfMcast = 5 // OFP_BSN_ROUTING_PARAM_IPV6_OSPF_MCAST
+	BSNRoutingParamIpv6NdpFrr    = 6 // OFP_BSN_ROUTING_PARAM_IPV6_NDP_FRR
+)
+
+type BsnRoutingParam uint16
+
+func (self BsnRoutingParam) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_status
+	BSNStatusDisable = 0 // OFP_BSN_STATUS_DISABLE
+	BSNStatusEnable  = 1 // OFP_BSN_STATUS_ENABLE
+)
+
+type BsnStatus uint8
+
+func (self BsnStatus) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_strip_vlan
+	BSNStripVLANFirst  = 1 // OFP_BSN_STRIP_VLAN_FIRST
+	BSNStripVLANSecond = 2 // OFP_BSN_STRIP_VLAN_SECOND
+	BSNStripVLANThird  = 4 // OFP_BSN_STRIP_VLAN_THIRD
+)
+
+type BsnStripVlan uint8
+
+func (self BsnStripVlan) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNStripVLANFirst == BSNStripVLANFirst {
+		flags = append(flags, "\"First\": true")
+	}
+	if self&BSNStripVLANSecond == BSNStripVLANSecond {
+		flags = append(flags, "\"Second\": true")
+	}
+	if self&BSNStripVLANThird == BSNStripVLANThird {
+		flags = append(flags, "\"Third\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_tcp_flag
+	BSNTCPFlagFin = 1   // OFP_BSN_TCP_FLAG_FIN
+	BSNTCPFlagSyn = 2   // OFP_BSN_TCP_FLAG_SYN
+	BSNTCPFlagRst = 4   // OFP_BSN_TCP_FLAG_RST
+	BSNTCPFlagPsh = 8   // OFP_BSN_TCP_FLAG_PSH
+	BSNTCPFlagAck = 16  // OFP_BSN_TCP_FLAG_ACK
+	BSNTCPFlagUrg = 32  // OFP_BSN_TCP_FLAG_URG
+	BSNTCPFlagEce = 64  // OFP_BSN_TCP_FLAG_ECE
+	BSNTCPFlagCwr = 128 // OFP_BSN_TCP_FLAG_CWR
+	BSNTCPFlagNs  = 256 // OFP_BSN_TCP_FLAG_NS
+)
+
+type BsnTcpFlag uint16
+
+func (self BsnTcpFlag) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNTCPFlagFin == BSNTCPFlagFin {
+		flags = append(flags, "\"Fin\": true")
+	}
+	if self&BSNTCPFlagSyn == BSNTCPFlagSyn {
+		flags = append(flags, "\"Syn\": true")
+	}
+	if self&BSNTCPFlagRst == BSNTCPFlagRst {
+		flags = append(flags, "\"Rst\": true")
+	}
+	if self&BSNTCPFlagPsh == BSNTCPFlagPsh {
+		flags = append(flags, "\"Psh\": true")
+	}
+	if self&BSNTCPFlagAck == BSNTCPFlagAck {
+		flags = append(flags, "\"Ack\": true")
+	}
+	if self&BSNTCPFlagUrg == BSNTCPFlagUrg {
+		flags = append(flags, "\"Urg\": true")
+	}
+	if self&BSNTCPFlagEce == BSNTCPFlagEce {
+		flags = append(flags, "\"Ece\": true")
+	}
+	if self&BSNTCPFlagCwr == BSNTCPFlagCwr {
+		flags = append(flags, "\"Cwr\": true")
+	}
+	if self&BSNTCPFlagNs == BSNTCPFlagNs {
+		flags = append(flags, "\"Ns\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_tunnel_type
+	BSNTunnelL2Gre = 1 // OFP_BSN_TUNNEL_L2GRE
+)
+
+type BsnTunnelType uint64
+
+func (self BsnTunnelType) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNTunnelL2Gre == BSNTunnelL2Gre {
+		flags = append(flags, "\"BSNTunnelL2Gre\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_udf_anchor
+	BSNUdfAnchorPacketStart   = 0 // OFP_BSN_UDF_ANCHOR_PACKET_START
+	BSNUdfAnchorL3HeaderStart = 1 // OFP_BSN_UDF_ANCHOR_L3_HEADER_START
+	BSNUdfAnchorL4HeaderStart = 2 // OFP_BSN_UDF_ANCHOR_L4_HEADER_START
+)
+
+type BsnUdfAnchor uint16
+
+func (self BsnUdfAnchor) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_udf_mode
+	BSNUdf8X2Bytes = 1 // OFP_BSN_UDF_8X2_BYTES
+)
+
+type BsnUdfMode uint8
+
+func (self BsnUdfMode) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&BSNUdf8X2Bytes == BSNUdf8X2Bytes {
+		flags = append(flags, "\"BSNUdf8X2Bytes\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_upgrade
+	BSNUpgradeInvalid    = 0 // OFP_BSN_UPGRADE_INVALID
+	BSNUpgradeInProgress = 1 // OFP_BSN_UPGRADE_IN_PROGRESS
+)
+
+type BsnUpgrade uint16
+
+func (self BsnUpgrade) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_vlan_counter_constants
+	BSNVLANAll = 65535 // OFP_BSN_VLAN_ALL
+)
+
+const (
+	// Identifiers from group ofp_bsn_vport_l2gre_flags
+	OFBSNVportL2GreLocalMACIsValid  = 1  // OF_BSN_VPORT_L2GRE_LOCAL_MAC_IS_VALID
+	OFBSNVportL2GreDSCPAssign       = 2  // OF_BSN_VPORT_L2GRE_DSCP_ASSIGN
+	OFBSNVportL2GreDSCPCopy         = 4  // OF_BSN_VPORT_L2GRE_DSCP_COPY
+	OFBSNVportL2GreLoopbackIsValid  = 8  // OF_BSN_VPORT_L2GRE_LOOPBACK_IS_VALID
+	OFBSNVportL2GreRateLimitIsValid = 16 // OF_BSN_VPORT_L2GRE_RATE_LIMIT_IS_VALID
+)
+
+type BsnVportL2GreFlags uint32
+
+func (self BsnVportL2GreFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFBSNVportL2GreLocalMACIsValid == OFBSNVportL2GreLocalMACIsValid {
+		flags = append(flags, "\"LocalMACIsValid\": true")
+	}
+	if self&OFBSNVportL2GreDSCPAssign == OFBSNVportL2GreDSCPAssign {
+		flags = append(flags, "\"DscpAssign\": true")
+	}
+	if self&OFBSNVportL2GreDSCPCopy == OFBSNVportL2GreDSCPCopy {
+		flags = append(flags, "\"DscpCopy\": true")
+	}
+	if self&OFBSNVportL2GreLoopbackIsValid == OFBSNVportL2GreLoopbackIsValid {
+		flags = append(flags, "\"LoopbackIsValid\": true")
+	}
+	if self&OFBSNVportL2GreRateLimitIsValid == OFBSNVportL2GreRateLimitIsValid {
+		flags = append(flags, "\"RateLimitIsValid\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_vport_q_in_q_untagged
+	OFBSNVportQInQUntagged = 65535 // OF_BSN_VPORT_Q_IN_Q_UNTAGGED
+)
+
+type BsnVportQInQUntagged uint16
+
+func (self BsnVportQInQUntagged) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_bsn_vport_status
+	OFBSNVportStatusOk     = 0 // OF_BSN_VPORT_STATUS_OK
+	OFBSNVportStatusFailed = 1 // OF_BSN_VPORT_STATUS_FAILED
+)
+
+const (
+	// Identifiers from group ofp_bsn_vrf_counter_constants
+	BSNVrfAll = 4294967295 // OFP_BSN_VRF_ALL
+)
+
+type BsnVrfCounterConstants uint32
+
+func (self BsnVrfCounterConstants) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_capabilities
+	OFPCFlowStats   = 1   // OFPC_FLOW_STATS
+	OFPCTableStats  = 2   // OFPC_TABLE_STATS
+	OFPCPortStats   = 4   // OFPC_PORT_STATS
+	OFPCGroupStats  = 8   // OFPC_GROUP_STATS
+	OFPCIpReasm     = 32  // OFPC_IP_REASM
+	OFPCQueueStats  = 64  // OFPC_QUEUE_STATS
+	OFPCPortBlocked = 256 // OFPC_PORT_BLOCKED
+)
+
+type Capabilities uint32
+
+func (self Capabilities) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPCFlowStats == OFPCFlowStats {
+		flags = append(flags, "\"FlowStats\": true")
+	}
+	if self&OFPCTableStats == OFPCTableStats {
+		flags = append(flags, "\"TableStats\": true")
+	}
+	if self&OFPCPortStats == OFPCPortStats {
+		flags = append(flags, "\"PortStats\": true")
+	}
+	if self&OFPCGroupStats == OFPCGroupStats {
+		flags = append(flags, "\"GroupStats\": true")
+	}
+	if self&OFPCIpReasm == OFPCIpReasm {
+		flags = append(flags, "\"IpReasm\": true")
+	}
+	if self&OFPCQueueStats == OFPCQueueStats {
+		flags = append(flags, "\"QueueStats\": true")
+	}
+	if self&OFPCPortBlocked == OFPCPortBlocked {
+		flags = append(flags, "\"PortBlocked\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_config_flags
+	OFPCFragNormal = 0 // OFPC_FRAG_NORMAL
+	OFPCFragDrop   = 1 // OFPC_FRAG_DROP
+	OFPCFragReasm  = 2 // OFPC_FRAG_REASM
+	OFPCFragMask   = 3 // OFPC_FRAG_MASK
+)
+
+type ConfigFlags uint16
+
+func (self ConfigFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPCFragNormal == OFPCFragNormal {
+		flags = append(flags, "\"Normal\": true")
+	}
+	if self&OFPCFragDrop == OFPCFragDrop {
+		flags = append(flags, "\"Drop\": true")
+	}
+	if self&OFPCFragReasm == OFPCFragReasm {
+		flags = append(flags, "\"Reasm\": true")
+	}
+	if self&OFPCFragMask == OFPCFragMask {
+		flags = append(flags, "\"Mask\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_controller_max_len
+	OFPCMLMax      = 65509 // OFPCML_MAX
+	OFPCMLNoBuffer = 65535 // OFPCML_NO_BUFFER
+)
+
+type ControllerMaxLen uint16
+
+func (self ControllerMaxLen) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_controller_role
+	OFPCRRoleNochange = 0 // OFPCR_ROLE_NOCHANGE
+	OFPCRRoleEqual    = 1 // OFPCR_ROLE_EQUAL
+	OFPCRRoleMaster   = 2 // OFPCR_ROLE_MASTER
+	OFPCRRoleSlave    = 3 // OFPCR_ROLE_SLAVE
+)
+
+type ControllerRole uint32
+
+func (self ControllerRole) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_cs_states
+	CsNew         = 1   // OFP_CS_NEW
+	CsEstablished = 2   // OFP_CS_ESTABLISHED
+	CsRelated     = 4   // OFP_CS_RELATED
+	CsReplyDir    = 8   // OFP_CS_REPLY_DIR
+	CsInvalid     = 16  // OFP_CS_INVALID
+	CsTracked     = 32  // OFP_CS_TRACKED
+	CsSrcNat      = 64  // OFP_CS_SRC_NAT
+	CsDstNat      = 128 // OFP_CS_DST_NAT
+)
+
+type CsStates uint32
+
+func (self CsStates) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&CsNew == CsNew {
+		flags = append(flags, "\"New\": true")
+	}
+	if self&CsEstablished == CsEstablished {
+		flags = append(flags, "\"Established\": true")
+	}
+	if self&CsRelated == CsRelated {
+		flags = append(flags, "\"Related\": true")
+	}
+	if self&CsReplyDir == CsReplyDir {
+		flags = append(flags, "\"ReplyDir\": true")
+	}
+	if self&CsInvalid == CsInvalid {
+		flags = append(flags, "\"Invalid\": true")
+	}
+	if self&CsTracked == CsTracked {
+		flags = append(flags, "\"Tracked\": true")
+	}
+	if self&CsSrcNat == CsSrcNat {
+		flags = append(flags, "\"SrcNat\": true")
+	}
+	if self&CsDstNat == CsDstNat {
+		flags = append(flags, "\"DstNat\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_ed_nsh_prop_type
+	OFPPPTPropNshNone   = 0 // OFPPPT_PROP_NSH_NONE
+	OFPPPTPropNshMdtype = 1 // OFPPPT_PROP_NSH_MDTYPE
+	OFPPPTPropNshTlv    = 2 // OFPPPT_PROP_NSH_TLV
+)
+
+type EdNshPropType uint8
+
+func (self EdNshPropType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_ed_prop_class
+	OFPPPCBasic        = 0     // OFPPPC_BASIC
+	OFPPPCMpls         = 1     // OFPPPC_MPLS
+	OFPPPCGRE          = 2     // OFPPPC_GRE
+	OFPPPCGtp          = 3     // OFPPPC_GTP
+	OFPPPCNsh          = 4     // OFPPPC_NSH
+	OFPPPCExperimenter = 65535 // OFPPPC_EXPERIMENTER
+)
+
+type EdPropClass uint16
+
+func (self EdPropClass) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_error_type
+	OFPETHelloFailed         = 0     // OFPET_HELLO_FAILED
+	OFPETBadRequest          = 1     // OFPET_BAD_REQUEST
+	OFPETBadAction           = 2     // OFPET_BAD_ACTION
+	OFPETBadInstruction      = 3     // OFPET_BAD_INSTRUCTION
+	OFPETBadMatch            = 4     // OFPET_BAD_MATCH
+	OFPETFlowModFailed       = 5     // OFPET_FLOW_MOD_FAILED
+	OFPETGroupModFailed      = 6     // OFPET_GROUP_MOD_FAILED
+	OFPETPortModFailed       = 7     // OFPET_PORT_MOD_FAILED
+	OFPETTableModFailed      = 8     // OFPET_TABLE_MOD_FAILED
+	OFPETQueueOpFailed       = 9     // OFPET_QUEUE_OP_FAILED
+	OFPETSwitchConfigFailed  = 10    // OFPET_SWITCH_CONFIG_FAILED
+	OFPETRoleRequestFailed   = 11    // OFPET_ROLE_REQUEST_FAILED
+	OFPETMeterModFailed      = 12    // OFPET_METER_MOD_FAILED
+	OFPETTableFeaturesFailed = 13    // OFPET_TABLE_FEATURES_FAILED
+	OFPETExperimenter        = 65535 // OFPET_EXPERIMENTER
+)
+
+type ErrorType uint16
+
+func (self ErrorType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_ethernet_type
+	EthPLoop      = 96    // ETH_P_LOOP
+	EthPPup       = 512   // ETH_P_PUP
+	EthPPupat     = 513   // ETH_P_PUPAT
+	EthPIp        = 2048  // ETH_P_IP
+	EthPX25       = 2053  // ETH_P_X25
+	EthPARP       = 2054  // ETH_P_ARP
+	EthPBpq       = 2303  // ETH_P_BPQ
+	EthPIeeepup   = 2560  // ETH_P_IEEEPUP
+	EthPIeeepupat = 2561  // ETH_P_IEEEPUPAT
+	EthPDec       = 24576 // ETH_P_DEC
+	EthPDnaDl     = 24577 // ETH_P_DNA_DL
+	EthPDnaRc     = 24578 // ETH_P_DNA_RC
+	EthPDnaRt     = 24579 // ETH_P_DNA_RT
+	EthPLat       = 24580 // ETH_P_LAT
+	EthPDiag      = 24581 // ETH_P_DIAG
+	EthPCust      = 24582 // ETH_P_CUST
+	EthPSca       = 24583 // ETH_P_SCA
+	EthPTeb       = 25944 // ETH_P_TEB
+	EthPRarp      = 32821 // ETH_P_RARP
+	EthPAtalk     = 32923 // ETH_P_ATALK
+	EthPAarp      = 33011 // ETH_P_AARP
+	EthP8021Q     = 33024 // ETH_P_8021Q
+	EthPIpx       = 33079 // ETH_P_IPX
+	EthPIpv6      = 34525 // ETH_P_IPV6
+	EthPPause     = 34824 // ETH_P_PAUSE
+	EthPSlow      = 34825 // ETH_P_SLOW
+	EthPWccp      = 34878 // ETH_P_WCCP
+	EthPPppDisc   = 34915 // ETH_P_PPP_DISC
+	EthPPppSes    = 34916 // ETH_P_PPP_SES
+	EthPMplsUc    = 34887 // ETH_P_MPLS_UC
+	EthPMplsMc    = 34888 // ETH_P_MPLS_MC
+	EthPAtmmpoa   = 34892 // ETH_P_ATMMPOA
+	EthPAtmfate   = 34948 // ETH_P_ATMFATE
+	EthPPae       = 34958 // ETH_P_PAE
+	EthPAoe       = 34978 // ETH_P_AOE
+	EthPTipc      = 35018 // ETH_P_TIPC
+	EthP1588      = 35063 // ETH_P_1588
+	EthPFcoe      = 35078 // ETH_P_FCOE
+	EthPFip       = 35092 // ETH_P_FIP
+	EthPEdsa      = 56026 // ETH_P_EDSA
+)
+
+type EthernetType uint16
+
+func (self EthernetType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self EthernetType) String() string {
+	switch self {
+	case EthPLoop:
+		return "loop"
+	case EthPPup:
+		return "pup"
+	case EthPPupat:
+		return "pupat"
+	case EthPIp:
+		return "ip"
+	case EthPX25:
+		return "x25"
+	case EthPARP:
+		return "arp"
+	case EthPBpq:
+		return "bpq"
+	case EthPIeeepup:
+		return "ieeepup"
+	case EthPIeeepupat:
+		return "ieeepupat"
+	case EthPDec:
+		return "dec"
+	case EthPDnaDl:
+		return "dna_dl"
+	case EthPDnaRc:
+		return "dna_rc"
+	case EthPDnaRt:
+		return "dna_rt"
+	case EthPLat:
+		return "lat"
+	case EthPDiag:
+		return "diag"
+	case EthPCust:
+		return "cust"
+	case EthPSca:
+		return "sca"
+	case EthPTeb:
+		return "teb"
+	case EthPRarp:
+		return "rarp"
+	case EthPAtalk:
+		return "atalk"
+	case EthPAarp:
+		return "aarp"
+	case EthP8021Q:
+		return "8021q"
+	case EthPIpx:
+		return "ipx"
+	case EthPIpv6:
+		return "ipv6"
+	case EthPPause:
+		return "pause"
+	case EthPSlow:
+		return "slow"
+	case EthPWccp:
+		return "wccp"
+	case EthPPppDisc:
+		return "ppp_disc"
+	case EthPPppSes:
+		return "ppp_ses"
+	case EthPMplsUc:
+		return "mpls_uc"
+	case EthPMplsMc:
+		return "mpls_mc"
+	case EthPAtmmpoa:
+		return "atmmpoa"
+	case EthPAtmfate:
+		return "atmfate"
+	case EthPPae:
+		return "pae"
+	case EthPAoe:
+		return "aoe"
+	case EthPTipc:
+		return "tipc"
+	case EthP1588:
+		return "1588"
+	case EthPFcoe:
+		return "fcoe"
+	case EthPFip:
+		return "fip"
+	case EthPEdsa:
+		return "edsa"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group ofp_flow_mod_command
+	OFPFCAdd          = 0 // OFPFC_ADD
+	OFPFCModify       = 1 // OFPFC_MODIFY
+	OFPFCModifyStrict = 2 // OFPFC_MODIFY_STRICT
+	OFPFCDelete       = 3 // OFPFC_DELETE
+	OFPFCDeleteStrict = 4 // OFPFC_DELETE_STRICT
+)
+
+type FlowModCommand uint8
+
+func (self FlowModCommand) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_flow_mod_failed_code
+	OFPFMFCUnknown    = 0 // OFPFMFC_UNKNOWN
+	OFPFMFCTableFull  = 1 // OFPFMFC_TABLE_FULL
+	OFPFMFCBadTableID = 2 // OFPFMFC_BAD_TABLE_ID
+	OFPFMFCOverlap    = 3 // OFPFMFC_OVERLAP
+	OFPFMFCEperm      = 4 // OFPFMFC_EPERM
+	OFPFMFCBadTimeout = 5 // OFPFMFC_BAD_TIMEOUT
+	OFPFMFCBadCommand = 6 // OFPFMFC_BAD_COMMAND
+	OFPFMFCBadFlags   = 7 // OFPFMFC_BAD_FLAGS
+)
+
+type FlowModFailedCode uint16
+
+func (self FlowModFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_flow_mod_flags
+	OFPFFSendFlowRem  = 1   // OFPFF_SEND_FLOW_REM
+	OFPFFCheckOverlap = 2   // OFPFF_CHECK_OVERLAP
+	OFPFFResetCounts  = 4   // OFPFF_RESET_COUNTS
+	OFPFFNoPktCounts  = 8   // OFPFF_NO_PKT_COUNTS
+	OFPFFNoBytCounts  = 16  // OFPFF_NO_BYT_COUNTS
+	OFPFFBSNSendIdle  = 128 // OFPFF_BSN_SEND_IDLE
+)
+
+type FlowModFlags uint16
+
+func (self FlowModFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPFFSendFlowRem == OFPFFSendFlowRem {
+		flags = append(flags, "\"SendFlowRem\": true")
+	}
+	if self&OFPFFCheckOverlap == OFPFFCheckOverlap {
+		flags = append(flags, "\"CheckOverlap\": true")
+	}
+	if self&OFPFFResetCounts == OFPFFResetCounts {
+		flags = append(flags, "\"ResetCounts\": true")
+	}
+	if self&OFPFFNoPktCounts == OFPFFNoPktCounts {
+		flags = append(flags, "\"NoPktCounts\": true")
+	}
+	if self&OFPFFNoBytCounts == OFPFFNoBytCounts {
+		flags = append(flags, "\"NoBytCounts\": true")
+	}
+	if self&OFPFFBSNSendIdle == OFPFFBSNSendIdle {
+		flags = append(flags, "\"BsnSendIdle\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_flow_removed_reason
+	OFPRRIdleTimeout = 0 // OFPRR_IDLE_TIMEOUT
+	OFPRRHardTimeout = 1 // OFPRR_HARD_TIMEOUT
+	OFPRRDelete      = 2 // OFPRR_DELETE
+	OFPRRGroupDelete = 3 // OFPRR_GROUP_DELETE
+)
+
+type FlowRemovedReason uint8
+
+func (self FlowRemovedReason) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_group
+	OFPGMax = 4294967040 // OFPG_MAX
+	OFPGAll = 4294967292 // OFPG_ALL
+	OFPGAny = 4294967295 // OFPG_ANY
+)
+
+type Group uint32
+
+func (self Group) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_group_capabilities
+	OFPGFCSelectWeight   = 1 // OFPGFC_SELECT_WEIGHT
+	OFPGFCSelectLiveness = 2 // OFPGFC_SELECT_LIVENESS
+	OFPGFCChaining       = 4 // OFPGFC_CHAINING
+	OFPGFCChainingChecks = 8 // OFPGFC_CHAINING_CHECKS
+)
+
+type GroupCapabilities uint32
+
+func (self GroupCapabilities) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPGFCSelectWeight == OFPGFCSelectWeight {
+		flags = append(flags, "\"SelectWeight\": true")
+	}
+	if self&OFPGFCSelectLiveness == OFPGFCSelectLiveness {
+		flags = append(flags, "\"SelectLiveness\": true")
+	}
+	if self&OFPGFCChaining == OFPGFCChaining {
+		flags = append(flags, "\"Chaining\": true")
+	}
+	if self&OFPGFCChainingChecks == OFPGFCChainingChecks {
+		flags = append(flags, "\"ChainingChecks\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_group_mod_command
+	OFPGCAdd    = 0 // OFPGC_ADD
+	OFPGCModify = 1 // OFPGC_MODIFY
+	OFPGCDelete = 2 // OFPGC_DELETE
+)
+
+type GroupModCommand uint16
+
+func (self GroupModCommand) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_group_mod_failed_code
+	OFPGMFCGroupExists         = 0  // OFPGMFC_GROUP_EXISTS
+	OFPGMFCInvalidGroup        = 1  // OFPGMFC_INVALID_GROUP
+	OFPGMFCWeightUnsupported   = 2  // OFPGMFC_WEIGHT_UNSUPPORTED
+	OFPGMFCOutOfGroups         = 3  // OFPGMFC_OUT_OF_GROUPS
+	OFPGMFCOutOfBuckets        = 4  // OFPGMFC_OUT_OF_BUCKETS
+	OFPGMFCChainingUnsupported = 5  // OFPGMFC_CHAINING_UNSUPPORTED
+	OFPGMFCWatchUnsupported    = 6  // OFPGMFC_WATCH_UNSUPPORTED
+	OFPGMFCLoop                = 7  // OFPGMFC_LOOP
+	OFPGMFCUnknownGroup        = 8  // OFPGMFC_UNKNOWN_GROUP
+	OFPGMFCChainedGroup        = 9  // OFPGMFC_CHAINED_GROUP
+	OFPGMFCBadType             = 10 // OFPGMFC_BAD_TYPE
+	OFPGMFCBadCommand          = 11 // OFPGMFC_BAD_COMMAND
+	OFPGMFCBadBucket           = 12 // OFPGMFC_BAD_BUCKET
+	OFPGMFCBadWatch            = 13 // OFPGMFC_BAD_WATCH
+	OFPGMFCEperm               = 14 // OFPGMFC_EPERM
+)
+
+type GroupModFailedCode uint16
+
+func (self GroupModFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_group_type
+	OFPGTAll      = 0 // OFPGT_ALL
+	OFPGTSelect   = 1 // OFPGT_SELECT
+	OFPGTIndirect = 2 // OFPGT_INDIRECT
+	OFPGTFf       = 3 // OFPGT_FF
+)
+
+type GroupType uint8
+
+func (self GroupType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self GroupType) String() string {
+	switch self {
+	case OFPGTAll:
+		return "all"
+	case OFPGTSelect:
+		return "select"
+	case OFPGTIndirect:
+		return "indirect"
+	case OFPGTFf:
+		return "ff"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group ofp_hello_elem_type
+	OFPHETVersionbitmap = 1 // OFPHET_VERSIONBITMAP
+)
+
+type HelloElemType uint16
+
+func (self HelloElemType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_hello_failed_code
+	OFPHFCIncompatible = 0 // OFPHFC_INCOMPATIBLE
+	OFPHFCEperm        = 1 // OFPHFC_EPERM
+)
+
+type HelloFailedCode uint16
+
+func (self HelloFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_icmp_type
+	IcmpEchoreply      = 0  // ICMP_ECHOREPLY
+	IcmpDestUnreach    = 3  // ICMP_DEST_UNREACH
+	IcmpSourceQuench   = 4  // ICMP_SOURCE_QUENCH
+	IcmpRedirect       = 5  // ICMP_REDIRECT
+	IcmpEcho           = 8  // ICMP_ECHO
+	IcmpTimeExceeded   = 11 // ICMP_TIME_EXCEEDED
+	IcmpParameterprob  = 12 // ICMP_PARAMETERPROB
+	IcmpTimestamp      = 13 // ICMP_TIMESTAMP
+	IcmpTimestampreply = 14 // ICMP_TIMESTAMPREPLY
+	IcmpInfoRequest    = 15 // ICMP_INFO_REQUEST
+	IcmpInfoReply      = 16 // ICMP_INFO_REPLY
+	IcmpAddress        = 17 // ICMP_ADDRESS
+	IcmpAddressreply   = 18 // ICMP_ADDRESSREPLY
+)
+
+type IcmpType uint8
+
+func (self IcmpType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self IcmpType) String() string {
+	switch self {
+	case IcmpEchoreply:
+		return "echoreply"
+	case IcmpDestUnreach:
+		return "dest_unreach"
+	case IcmpSourceQuench:
+		return "source_quench"
+	case IcmpRedirect:
+		return "redirect"
+	case IcmpEcho:
+		return "echo"
+	case IcmpTimeExceeded:
+		return "time_exceeded"
+	case IcmpParameterprob:
+		return "parameterprob"
+	case IcmpTimestamp:
+		return "timestamp"
+	case IcmpTimestampreply:
+		return "timestampreply"
+	case IcmpInfoRequest:
+		return "info_request"
+	case IcmpInfoReply:
+		return "info_reply"
+	case IcmpAddress:
+		return "address"
+	case IcmpAddressreply:
+		return "addressreply"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group ofp_icmpv6_type
+	Icmpv6EchoRequest     = 128 // ICMPV6_ECHO_REQUEST
+	Icmpv6EchoReply       = 129 // ICMPV6_ECHO_REPLY
+	Icmpv6MgmQuery        = 130 // ICMPV6_MGM_QUERY
+	Icmpv6MgmReport       = 131 // ICMPV6_MGM_REPORT
+	Icmpv6MgmReduction    = 132 // ICMPV6_MGM_REDUCTION
+	Icmpv6NiQuery         = 139 // ICMPV6_NI_QUERY
+	Icmpv6NiReply         = 140 // ICMPV6_NI_REPLY
+	Icmpv6Mld2Report      = 143 // ICMPV6_MLD2_REPORT
+	Icmpv6DhaadRequest    = 144 // ICMPV6_DHAAD_REQUEST
+	Icmpv6DhaadReply      = 145 // ICMPV6_DHAAD_REPLY
+	Icmpv6MobilePrefixSol = 146 // ICMPV6_MOBILE_PREFIX_SOL
+	Icmpv6MobilePrefixAdv = 147 // ICMPV6_MOBILE_PREFIX_ADV
+)
+
+type Icmpv6Type uint8
+
+func (self Icmpv6Type) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self Icmpv6Type) String() string {
+	switch self {
+	case Icmpv6EchoRequest:
+		return "echo_request"
+	case Icmpv6EchoReply:
+		return "echo_reply"
+	case Icmpv6MgmQuery:
+		return "mgm_query"
+	case Icmpv6MgmReport:
+		return "mgm_report"
+	case Icmpv6MgmReduction:
+		return "mgm_reduction"
+	case Icmpv6NiQuery:
+		return "ni_query"
+	case Icmpv6NiReply:
+		return "ni_reply"
+	case Icmpv6Mld2Report:
+		return "mld2_report"
+	case Icmpv6DhaadRequest:
+		return "dhaad_request"
+	case Icmpv6DhaadReply:
+		return "dhaad_reply"
+	case Icmpv6MobilePrefixSol:
+		return "mobile_prefix_sol"
+	case Icmpv6MobilePrefixAdv:
+		return "mobile_prefix_adv"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group ofp_instruction_type
+	OFPITGotoTable     = 1     // OFPIT_GOTO_TABLE
+	OFPITWriteMetadata = 2     // OFPIT_WRITE_METADATA
+	OFPITWriteActions  = 3     // OFPIT_WRITE_ACTIONS
+	OFPITApplyActions  = 4     // OFPIT_APPLY_ACTIONS
+	OFPITClearActions  = 5     // OFPIT_CLEAR_ACTIONS
+	OFPITMeter         = 6     // OFPIT_METER
+	OFPITExperimenter  = 65535 // OFPIT_EXPERIMENTER
+)
+
+type InstructionType uint16
+
+func (self InstructionType) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPITGotoTable == OFPITGotoTable {
+		flags = append(flags, "\"GotoTable\": true")
+	}
+	if self&OFPITWriteMetadata == OFPITWriteMetadata {
+		flags = append(flags, "\"WriteMetadata\": true")
+	}
+	if self&OFPITWriteActions == OFPITWriteActions {
+		flags = append(flags, "\"WriteActions\": true")
+	}
+	if self&OFPITApplyActions == OFPITApplyActions {
+		flags = append(flags, "\"ApplyActions\": true")
+	}
+	if self&OFPITClearActions == OFPITClearActions {
+		flags = append(flags, "\"ClearActions\": true")
+	}
+	if self&OFPITMeter == OFPITMeter {
+		flags = append(flags, "\"Meter\": true")
+	}
+	if self&OFPITExperimenter == OFPITExperimenter {
+		flags = append(flags, "\"Experimenter\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_ip_prototype
+	IpprotoIp       = 0   // IPPROTO_IP
+	IpprotoICMP     = 1   // IPPROTO_ICMP
+	IpprotoIgmp     = 2   // IPPROTO_IGMP
+	IpprotoIpip     = 4   // IPPROTO_IPIP
+	IpprotoTCP      = 6   // IPPROTO_TCP
+	IpprotoEgp      = 8   // IPPROTO_EGP
+	IpprotoPup      = 12  // IPPROTO_PUP
+	IpprotoUdp      = 17  // IPPROTO_UDP
+	IpprotoIdp      = 22  // IPPROTO_IDP
+	IpprotoTp       = 29  // IPPROTO_TP
+	IpprotoDccp     = 33  // IPPROTO_DCCP
+	IpprotoIpv6     = 41  // IPPROTO_IPV6
+	IpprotoRsvp     = 46  // IPPROTO_RSVP
+	IpprotoGRE      = 47  // IPPROTO_GRE
+	IpprotoEsp      = 50  // IPPROTO_ESP
+	IpprotoAh       = 51  // IPPROTO_AH
+	IpprotoMtp      = 92  // IPPROTO_MTP
+	IpprotoBeetph   = 94  // IPPROTO_BEETPH
+	IpprotoEncap    = 98  // IPPROTO_ENCAP
+	IpprotoPim      = 103 // IPPROTO_PIM
+	IpprotoComp     = 108 // IPPROTO_COMP
+	IpprotoSctp     = 132 // IPPROTO_SCTP
+	IpprotoUdplite  = 136 // IPPROTO_UDPLITE
+	IpprotoMpls     = 137 // IPPROTO_MPLS
+	IpprotoRaw      = 255 // IPPROTO_RAW
+	IpprotoRouting  = 43  // IPPROTO_ROUTING
+	IpprotoFragment = 44  // IPPROTO_FRAGMENT
+	IpprotoIcmpv6   = 58  // IPPROTO_ICMPV6
+	IpprotoNone     = 59  // IPPROTO_NONE
+	IpprotoDstopts  = 60  // IPPROTO_DSTOPTS
+	IpprotoMh       = 135 // IPPROTO_MH
+	IpprotoL2Tp     = 115 // IPPROTO_L2TP
+)
+
+type IpPrototype uint8
+
+func (self IpPrototype) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self IpPrototype) String() string {
+	switch self {
+	case IpprotoIp:
+		return "ip"
+	case IpprotoICMP:
+		return "icmp"
+	case IpprotoIgmp:
+		return "igmp"
+	case IpprotoIpip:
+		return "ipip"
+	case IpprotoTCP:
+		return "tcp"
+	case IpprotoEgp:
+		return "egp"
+	case IpprotoPup:
+		return "pup"
+	case IpprotoUdp:
+		return "udp"
+	case IpprotoIdp:
+		return "idp"
+	case IpprotoTp:
+		return "tp"
+	case IpprotoDccp:
+		return "dccp"
+	case IpprotoIpv6:
+		return "ipv6"
+	case IpprotoRsvp:
+		return "rsvp"
+	case IpprotoGRE:
+		return "gre"
+	case IpprotoEsp:
+		return "esp"
+	case IpprotoAh:
+		return "ah"
+	case IpprotoMtp:
+		return "mtp"
+	case IpprotoBeetph:
+		return "beetph"
+	case IpprotoEncap:
+		return "encap"
+	case IpprotoPim:
+		return "pim"
+	case IpprotoComp:
+		return "comp"
+	case IpprotoSctp:
+		return "sctp"
+	case IpprotoUdplite:
+		return "udplite"
+	case IpprotoMpls:
+		return "mpls"
+	case IpprotoRaw:
+		return "raw"
+	case IpprotoRouting:
+		return "routing"
+	case IpprotoFragment:
+		return "fragment"
+	case IpprotoIcmpv6:
+		return "icmpv6"
+	case IpprotoNone:
+		return "none"
+	case IpprotoDstopts:
+		return "dstopts"
+	case IpprotoMh:
+		return "mh"
+	case IpprotoL2Tp:
+		return "l2tp"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group ofp_ipv6exthdr_flags
+	OFPIEHNonext = 1   // OFPIEH_NONEXT
+	OFPIEHEsp    = 2   // OFPIEH_ESP
+	OFPIEHAuth   = 4   // OFPIEH_AUTH
+	OFPIEHDest   = 8   // OFPIEH_DEST
+	OFPIEHFrag   = 16  // OFPIEH_FRAG
+	OFPIEHRouter = 32  // OFPIEH_ROUTER
+	OFPIEHHop    = 64  // OFPIEH_HOP
+	OFPIEHUnrep  = 128 // OFPIEH_UNREP
+	OFPIEHUnseq  = 256 // OFPIEH_UNSEQ
+)
+
+type Ipv6ExthdrFlags uint16
+
+func (self Ipv6ExthdrFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPIEHNonext == OFPIEHNonext {
+		flags = append(flags, "\"Nonext\": true")
+	}
+	if self&OFPIEHEsp == OFPIEHEsp {
+		flags = append(flags, "\"Esp\": true")
+	}
+	if self&OFPIEHAuth == OFPIEHAuth {
+		flags = append(flags, "\"Auth\": true")
+	}
+	if self&OFPIEHDest == OFPIEHDest {
+		flags = append(flags, "\"Dest\": true")
+	}
+	if self&OFPIEHFrag == OFPIEHFrag {
+		flags = append(flags, "\"Frag\": true")
+	}
+	if self&OFPIEHRouter == OFPIEHRouter {
+		flags = append(flags, "\"Router\": true")
+	}
+	if self&OFPIEHHop == OFPIEHHop {
+		flags = append(flags, "\"Hop\": true")
+	}
+	if self&OFPIEHUnrep == OFPIEHUnrep {
+		flags = append(flags, "\"Unrep\": true")
+	}
+	if self&OFPIEHUnseq == OFPIEHUnseq {
+		flags = append(flags, "\"Unseq\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_match_type
+	OFPMTStandard = 0 // OFPMT_STANDARD
+	OFPMTOXM      = 1 // OFPMT_OXM
+)
+
+type MatchType uint16
+
+func (self MatchType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_meter
+	OFPMMax        = 4294901760 // OFPM_MAX
+	OFPMSlowpath   = 4294967293 // OFPM_SLOWPATH
+	OFPMController = 4294967294 // OFPM_CONTROLLER
+	OFPMAll        = 4294967295 // OFPM_ALL
+)
+
+type Meter uint32
+
+func (self Meter) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_meter_band_type
+	OFPMBTDrop         = 1     // OFPMBT_DROP
+	OFPMBTDSCPRemark   = 2     // OFPMBT_DSCP_REMARK
+	OFPMBTExperimenter = 65535 // OFPMBT_EXPERIMENTER
+)
+
+type MeterBandType uint16
+
+func (self MeterBandType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_meter_flags
+	OFPMFKbps  = 1 // OFPMF_KBPS
+	OFPMFPktps = 2 // OFPMF_PKTPS
+	OFPMFBurst = 4 // OFPMF_BURST
+	OFPMFStats = 8 // OFPMF_STATS
+)
+
+type MeterFlags uint16
+
+func (self MeterFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPMFKbps == OFPMFKbps {
+		flags = append(flags, "\"Kbps\": true")
+	}
+	if self&OFPMFPktps == OFPMFPktps {
+		flags = append(flags, "\"Pktps\": true")
+	}
+	if self&OFPMFBurst == OFPMFBurst {
+		flags = append(flags, "\"Burst\": true")
+	}
+	if self&OFPMFStats == OFPMFStats {
+		flags = append(flags, "\"Stats\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_meter_mod_command
+	OFPMCAdd    = 0 // OFPMC_ADD
+	OFPMCModify = 1 // OFPMC_MODIFY
+	OFPMCDelete = 2 // OFPMC_DELETE
+)
+
+type MeterModCommand uint16
+
+func (self MeterModCommand) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_meter_mod_failed_code
+	OFPMMFCUnknown      = 0  // OFPMMFC_UNKNOWN
+	OFPMMFCMeterExists  = 1  // OFPMMFC_METER_EXISTS
+	OFPMMFCInvalidMeter = 2  // OFPMMFC_INVALID_METER
+	OFPMMFCUnknownMeter = 3  // OFPMMFC_UNKNOWN_METER
+	OFPMMFCBadCommand   = 4  // OFPMMFC_BAD_COMMAND
+	OFPMMFCBadFlags     = 5  // OFPMMFC_BAD_FLAGS
+	OFPMMFCBadRate      = 6  // OFPMMFC_BAD_RATE
+	OFPMMFCBadBurst     = 7  // OFPMMFC_BAD_BURST
+	OFPMMFCBadBand      = 8  // OFPMMFC_BAD_BAND
+	OFPMMFCBadBandValue = 9  // OFPMMFC_BAD_BAND_VALUE
+	OFPMMFCOutOfMeters  = 10 // OFPMMFC_OUT_OF_METERS
+	OFPMMFCOutOfBands   = 11 // OFPMMFC_OUT_OF_BANDS
+)
+
+type MeterModFailedCode uint16
+
+func (self MeterModFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_ovs_tcp_flag
+	OvsTCPFlagFin = 1   // OFP_OVS_TCP_FLAG_FIN
+	OvsTCPFlagSyn = 2   // OFP_OVS_TCP_FLAG_SYN
+	OvsTCPFlagRst = 4   // OFP_OVS_TCP_FLAG_RST
+	OvsTCPFlagPsh = 8   // OFP_OVS_TCP_FLAG_PSH
+	OvsTCPFlagAck = 16  // OFP_OVS_TCP_FLAG_ACK
+	OvsTCPFlagUrg = 32  // OFP_OVS_TCP_FLAG_URG
+	OvsTCPFlagEce = 64  // OFP_OVS_TCP_FLAG_ECE
+	OvsTCPFlagCwr = 128 // OFP_OVS_TCP_FLAG_CWR
+	OvsTCPFlagNs  = 256 // OFP_OVS_TCP_FLAG_NS
+)
+
+type OvsTcpFlag uint16
+
+func (self OvsTcpFlag) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OvsTCPFlagFin == OvsTCPFlagFin {
+		flags = append(flags, "\"Fin\": true")
+	}
+	if self&OvsTCPFlagSyn == OvsTCPFlagSyn {
+		flags = append(flags, "\"Syn\": true")
+	}
+	if self&OvsTCPFlagRst == OvsTCPFlagRst {
+		flags = append(flags, "\"Rst\": true")
+	}
+	if self&OvsTCPFlagPsh == OvsTCPFlagPsh {
+		flags = append(flags, "\"Psh\": true")
+	}
+	if self&OvsTCPFlagAck == OvsTCPFlagAck {
+		flags = append(flags, "\"Ack\": true")
+	}
+	if self&OvsTCPFlagUrg == OvsTCPFlagUrg {
+		flags = append(flags, "\"Urg\": true")
+	}
+	if self&OvsTCPFlagEce == OvsTCPFlagEce {
+		flags = append(flags, "\"Ece\": true")
+	}
+	if self&OvsTCPFlagCwr == OvsTCPFlagCwr {
+		flags = append(flags, "\"Cwr\": true")
+	}
+	if self&OvsTCPFlagNs == OvsTCPFlagNs {
+		flags = append(flags, "\"Ns\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_oxm_class
+	OFPXMCNxm0          = 0     // OFPXMC_NXM_0
+	OFPXMCNxm1          = 1     // OFPXMC_NXM_1
+	OFPXMCOpenflowBasic = 32768 // OFPXMC_OPENFLOW_BASIC
+	OFPXMCExperimenter  = 65535 // OFPXMC_EXPERIMENTER
+)
+
+type OxmClass uint16
+
+func (self OxmClass) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_packet_in_reason
+	OFPRNoMatch                     = 0   // OFPR_NO_MATCH
+	OFPRAction                      = 1   // OFPR_ACTION
+	OFPRInvalidTtl                  = 2   // OFPR_INVALID_TTL
+	OFPRBSNNewHost                  = 128 // OFPR_BSN_NEW_HOST
+	OFPRBSNStationMove              = 129 // OFPR_BSN_STATION_MOVE
+	OFPRBSNBadVLAN                  = 130 // OFPR_BSN_BAD_VLAN
+	OFPRBSNDestinationLookupFailure = 131 // OFPR_BSN_DESTINATION_LOOKUP_FAILURE
+	OFPRBSNNoRoute                  = 132 // OFPR_BSN_NO_ROUTE
+	OFPRBSNICMPEchoRequest          = 133 // OFPR_BSN_ICMP_ECHO_REQUEST
+	OFPRBSNDestNetworkUnreachable   = 134 // OFPR_BSN_DEST_NETWORK_UNREACHABLE
+	OFPRBSNDestHostUnreachable      = 135 // OFPR_BSN_DEST_HOST_UNREACHABLE
+	OFPRBSNDestPortUnreachable      = 136 // OFPR_BSN_DEST_PORT_UNREACHABLE
+	OFPRBSNFragmentationRequired    = 137 // OFPR_BSN_FRAGMENTATION_REQUIRED
+	OFPRBSNARP                      = 139 // OFPR_BSN_ARP
+	OFPRBSNDhcp                     = 140 // OFPR_BSN_DHCP
+	OFPRBSNDebug                    = 141 // OFPR_BSN_DEBUG
+	OFPRBSNPacketOfDeath            = 142 // OFPR_BSN_PACKET_OF_DEATH
+)
+
+type PacketInReason uint8
+
+func (self PacketInReason) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_packet_type
+	PtEthernet     = 0          // OFP_PT_ETHERNET
+	PtUseNextProto = 65534      // OFP_PT_USE_NEXT_PROTO
+	PtIpv4         = 67584      // OFP_PT_IPV4
+	PtMpls         = 100423     // OFP_PT_MPLS
+	PtMplsMc       = 100424     // OFP_PT_MPLS_MC
+	PtNsh          = 100687     // OFP_PT_NSH
+	PtUnknown      = 4294967295 // OFP_PT_UNKNOWN
+)
+
+type PacketType uint32
+
+func (self PacketType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self PacketType) String() string {
+	switch self {
+	case PtEthernet:
+		return "ethernet"
+	case PtUseNextProto:
+		return "use_next_proto"
+	case PtIpv4:
+		return "ipv4"
+	case PtMpls:
+		return "mpls"
+	case PtMplsMc:
+		return "mpls_mc"
+	case PtNsh:
+		return "nsh"
+	case PtUnknown:
+		return "unknown"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group ofp_port
+	OFPPMax        = 4294967040 // OFPP_MAX
+	OFPPInPort     = 4294967288 // OFPP_IN_PORT
+	OFPPTable      = 4294967289 // OFPP_TABLE
+	OFPPNormal     = 4294967290 // OFPP_NORMAL
+	OFPPFlood      = 4294967291 // OFPP_FLOOD
+	OFPPAll        = 4294967292 // OFPP_ALL
+	OFPPController = 4294967293 // OFPP_CONTROLLER
+	OFPPLocal      = 4294967294 // OFPP_LOCAL
+	OFPPAny        = 4294967295 // OFPP_ANY
+)
+
+type Port uint32
+
+func (self Port) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_port_config
+	OFPPCPortDown      = 1          // OFPPC_PORT_DOWN
+	OFPPCNoRecv        = 4          // OFPPC_NO_RECV
+	OFPPCNoFwd         = 32         // OFPPC_NO_FWD
+	OFPPCNoPacketIn    = 64         // OFPPC_NO_PACKET_IN
+	OFPPCBSNMirrorDest = 2147483648 // OFPPC_BSN_MIRROR_DEST
+)
+
+type PortConfig uint32
+
+func (self PortConfig) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPPCPortDown == OFPPCPortDown {
+		flags = append(flags, "\"PortDown\": true")
+	}
+	if self&OFPPCNoRecv == OFPPCNoRecv {
+		flags = append(flags, "\"NoRecv\": true")
+	}
+	if self&OFPPCNoFwd == OFPPCNoFwd {
+		flags = append(flags, "\"NoFwd\": true")
+	}
+	if self&OFPPCNoPacketIn == OFPPCNoPacketIn {
+		flags = append(flags, "\"NoPacketIn\": true")
+	}
+	if self&OFPPCBSNMirrorDest == OFPPCBSNMirrorDest {
+		flags = append(flags, "\"BsnMirrorDest\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_port_features
+	OFPPF10MbHd             = 1          // OFPPF_10MB_HD
+	OFPPF10MbFd             = 2          // OFPPF_10MB_FD
+	OFPPF100MbHd            = 4          // OFPPF_100MB_HD
+	OFPPF100MbFd            = 8          // OFPPF_100MB_FD
+	OFPPF1GbHd              = 16         // OFPPF_1GB_HD
+	OFPPF1GbFd              = 32         // OFPPF_1GB_FD
+	OFPPF10GbFd             = 64         // OFPPF_10GB_FD
+	OFPPF40GbFd             = 128        // OFPPF_40GB_FD
+	OFPPF100GbFd            = 256        // OFPPF_100GB_FD
+	OFPPF1TbFd              = 512        // OFPPF_1TB_FD
+	OFPPFOther              = 1024       // OFPPF_OTHER
+	OFPPFCopper             = 2048       // OFPPF_COPPER
+	OFPPFFiber              = 4096       // OFPPF_FIBER
+	OFPPFAutoneg            = 8192       // OFPPF_AUTONEG
+	OFPPFPause              = 16384      // OFPPF_PAUSE
+	OFPPFPauseAsym          = 32768      // OFPPF_PAUSE_ASYM
+	OFPPFBSNBreakoutCapable = 2147483648 // OFPPF_BSN_BREAKOUT_CAPABLE
+)
+
+type PortFeatures uint32
+
+func (self PortFeatures) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPPF10MbHd == OFPPF10MbHd {
+		flags = append(flags, "\"10MbHd\": true")
+	}
+	if self&OFPPF10MbFd == OFPPF10MbFd {
+		flags = append(flags, "\"10MbFd\": true")
+	}
+	if self&OFPPF100MbHd == OFPPF100MbHd {
+		flags = append(flags, "\"100MbHd\": true")
+	}
+	if self&OFPPF100MbFd == OFPPF100MbFd {
+		flags = append(flags, "\"100MbFd\": true")
+	}
+	if self&OFPPF1GbHd == OFPPF1GbHd {
+		flags = append(flags, "\"1GbHd\": true")
+	}
+	if self&OFPPF1GbFd == OFPPF1GbFd {
+		flags = append(flags, "\"1GbFd\": true")
+	}
+	if self&OFPPF10GbFd == OFPPF10GbFd {
+		flags = append(flags, "\"10GbFd\": true")
+	}
+	if self&OFPPF40GbFd == OFPPF40GbFd {
+		flags = append(flags, "\"40GbFd\": true")
+	}
+	if self&OFPPF100GbFd == OFPPF100GbFd {
+		flags = append(flags, "\"100GbFd\": true")
+	}
+	if self&OFPPF1TbFd == OFPPF1TbFd {
+		flags = append(flags, "\"1TbFd\": true")
+	}
+	if self&OFPPFOther == OFPPFOther {
+		flags = append(flags, "\"Other\": true")
+	}
+	if self&OFPPFCopper == OFPPFCopper {
+		flags = append(flags, "\"Copper\": true")
+	}
+	if self&OFPPFFiber == OFPPFFiber {
+		flags = append(flags, "\"Fiber\": true")
+	}
+	if self&OFPPFAutoneg == OFPPFAutoneg {
+		flags = append(flags, "\"Autoneg\": true")
+	}
+	if self&OFPPFPause == OFPPFPause {
+		flags = append(flags, "\"Pause\": true")
+	}
+	if self&OFPPFPauseAsym == OFPPFPauseAsym {
+		flags = append(flags, "\"PauseAsym\": true")
+	}
+	if self&OFPPFBSNBreakoutCapable == OFPPFBSNBreakoutCapable {
+		flags = append(flags, "\"BsnBreakoutCapable\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_port_mod_failed_code
+	OFPPMFCBadPort      = 0 // OFPPMFC_BAD_PORT
+	OFPPMFCBadHwAddr    = 1 // OFPPMFC_BAD_HW_ADDR
+	OFPPMFCBadConfig    = 2 // OFPPMFC_BAD_CONFIG
+	OFPPMFCBadAdvertise = 3 // OFPPMFC_BAD_ADVERTISE
+	OFPPMFCEperm        = 4 // OFPPMFC_EPERM
+)
+
+type PortModFailedCode uint16
+
+func (self PortModFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_port_reason
+	OFPPRAdd    = 0 // OFPPR_ADD
+	OFPPRDelete = 1 // OFPPR_DELETE
+	OFPPRModify = 2 // OFPPR_MODIFY
+)
+
+type PortReason uint8
+
+func (self PortReason) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_port_state
+	OFPPSLinkDown = 1 // OFPPS_LINK_DOWN
+	OFPPSBlocked  = 2 // OFPPS_BLOCKED
+	OFPPSLive     = 4 // OFPPS_LIVE
+)
+
+type PortState uint32
+
+func (self PortState) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPPSLinkDown == OFPPSLinkDown {
+		flags = append(flags, "\"LinkDown\": true")
+	}
+	if self&OFPPSBlocked == OFPPSBlocked {
+		flags = append(flags, "\"Blocked\": true")
+	}
+	if self&OFPPSLive == OFPPSLive {
+		flags = append(flags, "\"Live\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_queue_op_failed_code
+	OFPQOFCBadPort  = 0 // OFPQOFC_BAD_PORT
+	OFPQOFCBadQueue = 1 // OFPQOFC_BAD_QUEUE
+	OFPQOFCEperm    = 2 // OFPQOFC_EPERM
+)
+
+type QueueOpFailedCode uint16
+
+func (self QueueOpFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_queue_properties
+	OFPQTMinRate      = 1     // OFPQT_MIN_RATE
+	OFPQTMaxRate      = 2     // OFPQT_MAX_RATE
+	OFPQTExperimenter = 65535 // OFPQT_EXPERIMENTER
+)
+
+type QueueProperties uint16
+
+func (self QueueProperties) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_role_request_failed_code
+	OFPRRFCStale   = 0 // OFPRRFC_STALE
+	OFPRRFCUnsup   = 1 // OFPRRFC_UNSUP
+	OFPRRFCBadRole = 2 // OFPRRFC_BAD_ROLE
+)
+
+type RoleRequestFailedCode uint16
+
+func (self RoleRequestFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_stats_reply_flags
+	OFPSFReplyMore = 1 // OFPSF_REPLY_MORE
+)
+
+type StatsReplyFlags uint16
+
+func (self StatsReplyFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPSFReplyMore == OFPSFReplyMore {
+		flags = append(flags, "\"OFPSFReplyMore\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_stats_request_flags
+	OFPSFReqMore = 1 // OFPSF_REQ_MORE
+)
+
+type StatsRequestFlags uint16
+
+func (self StatsRequestFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPSFReqMore == OFPSFReqMore {
+		flags = append(flags, "\"OFPSFReqMore\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_stats_type
+	OFPSTDesc          = 0     // OFPST_DESC
+	OFPSTFlow          = 1     // OFPST_FLOW
+	OFPSTAggregate     = 2     // OFPST_AGGREGATE
+	OFPSTTable         = 3     // OFPST_TABLE
+	OFPSTPort          = 4     // OFPST_PORT
+	OFPSTQueue         = 5     // OFPST_QUEUE
+	OFPSTGroup         = 6     // OFPST_GROUP
+	OFPSTGroupDesc     = 7     // OFPST_GROUP_DESC
+	OFPSTGroupFeatures = 8     // OFPST_GROUP_FEATURES
+	OFPSTMeter         = 9     // OFPST_METER
+	OFPSTMeterConfig   = 10    // OFPST_METER_CONFIG
+	OFPSTMeterFeatures = 11    // OFPST_METER_FEATURES
+	OFPSTTableFeatures = 12    // OFPST_TABLE_FEATURES
+	OFPSTPortDesc      = 13    // OFPST_PORT_DESC
+	OFPSTExperimenter  = 65535 // OFPST_EXPERIMENTER
+)
+
+type StatsType uint16
+
+func (self StatsType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_switch_config_failed_code
+	OFPSCFCBadFlags = 0 // OFPSCFC_BAD_FLAGS
+	OFPSCFCBadLen   = 1 // OFPSCFC_BAD_LEN
+	OFPSCFCEperm    = 2 // OFPSCFC_EPERM
+)
+
+type SwitchConfigFailedCode uint16
+
+func (self SwitchConfigFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_table
+	OFPTTMax = 254 // OFPTT_MAX
+	OFPTTAll = 255 // OFPTT_ALL
+)
+
+type Table uint8
+
+func (self Table) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_table_config
+	OFPTCDeprecatedMask = 3 // OFPTC_DEPRECATED_MASK
+)
+
+type TableConfig uint32
+
+func (self TableConfig) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&OFPTCDeprecatedMask == OFPTCDeprecatedMask {
+		flags = append(flags, "\"OFPTCDeprecatedMask\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_table_feature_prop_type
+	OFPTFPTInstructions      = 0     // OFPTFPT_INSTRUCTIONS
+	OFPTFPTInstructionsMiss  = 1     // OFPTFPT_INSTRUCTIONS_MISS
+	OFPTFPTNextTables        = 2     // OFPTFPT_NEXT_TABLES
+	OFPTFPTNextTablesMiss    = 3     // OFPTFPT_NEXT_TABLES_MISS
+	OFPTFPTWriteActions      = 4     // OFPTFPT_WRITE_ACTIONS
+	OFPTFPTWriteActionsMiss  = 5     // OFPTFPT_WRITE_ACTIONS_MISS
+	OFPTFPTApplyActions      = 6     // OFPTFPT_APPLY_ACTIONS
+	OFPTFPTApplyActionsMiss  = 7     // OFPTFPT_APPLY_ACTIONS_MISS
+	OFPTFPTMatch             = 8     // OFPTFPT_MATCH
+	OFPTFPTWildcards         = 10    // OFPTFPT_WILDCARDS
+	OFPTFPTWriteSetfield     = 12    // OFPTFPT_WRITE_SETFIELD
+	OFPTFPTWriteSetfieldMiss = 13    // OFPTFPT_WRITE_SETFIELD_MISS
+	OFPTFPTApplySetfield     = 14    // OFPTFPT_APPLY_SETFIELD
+	OFPTFPTApplySetfieldMiss = 15    // OFPTFPT_APPLY_SETFIELD_MISS
+	OFPTFPTExperimenter      = 65534 // OFPTFPT_EXPERIMENTER
+	OFPTFPTExperimenterMiss  = 65535 // OFPTFPT_EXPERIMENTER_MISS
+)
+
+type TableFeaturePropType uint16
+
+func (self TableFeaturePropType) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_table_features_failed_code
+	OFPTFFCBadTable    = 0 // OFPTFFC_BAD_TABLE
+	OFPTFFCBadMetadata = 1 // OFPTFFC_BAD_METADATA
+	OFPTFFCBadType     = 2 // OFPTFFC_BAD_TYPE
+	OFPTFFCBadLen      = 3 // OFPTFFC_BAD_LEN
+	OFPTFFCBadArgument = 4 // OFPTFFC_BAD_ARGUMENT
+	OFPTFFCEperm       = 5 // OFPTFFC_EPERM
+)
+
+type TableFeaturesFailedCode uint16
+
+func (self TableFeaturesFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_table_mod_failed_code
+	OFPTMFCBadTable  = 0 // OFPTMFC_BAD_TABLE
+	OFPTMFCBadConfig = 1 // OFPTMFC_BAD_CONFIG
+	OFPTMFCEperm     = 2 // OFPTMFC_EPERM
+)
+
+type TableModFailedCode uint16
+
+func (self TableModFailedCode) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
+
+const (
+	// Identifiers from group ofp_tcp_flags
+	TcpFlagCwr = 128 // TCP_FLAG_CWR
+	TcpFlagEce = 64  // TCP_FLAG_ECE
+	TcpFlagUrg = 32  // TCP_FLAG_URG
+	TcpFlagAck = 16  // TCP_FLAG_ACK
+	TcpFlagPsh = 8   // TCP_FLAG_PSH
+	TcpFlagRst = 4   // TCP_FLAG_RST
+	TcpFlagSyn = 2   // TCP_FLAG_SYN
+	TcpFlagFin = 1   // TCP_FLAG_FIN
+)
+
+type TcpFlags uint16
+
+func (self TcpFlags) MarshalJSON() ([]byte, error) {
+	var flags []string
+	if self&TcpFlagCwr == TcpFlagCwr {
+		flags = append(flags, "\"Cwr\": true")
+	}
+	if self&TcpFlagEce == TcpFlagEce {
+		flags = append(flags, "\"Ece\": true")
+	}
+	if self&TcpFlagUrg == TcpFlagUrg {
+		flags = append(flags, "\"Urg\": true")
+	}
+	if self&TcpFlagAck == TcpFlagAck {
+		flags = append(flags, "\"Ack\": true")
+	}
+	if self&TcpFlagPsh == TcpFlagPsh {
+		flags = append(flags, "\"Psh\": true")
+	}
+	if self&TcpFlagRst == TcpFlagRst {
+		flags = append(flags, "\"Rst\": true")
+	}
+	if self&TcpFlagSyn == TcpFlagSyn {
+		flags = append(flags, "\"Syn\": true")
+	}
+	if self&TcpFlagFin == TcpFlagFin {
+		flags = append(flags, "\"Fin\": true")
+	}
+	return []byte("{" + strings.Join(flags, ", ") + "}"), nil
+}
+
+const (
+	// Identifiers from group ofp_type
+	OFPTHello                 = 0  // OFPT_HELLO
+	OFPTError                 = 1  // OFPT_ERROR
+	OFPTEchoRequest           = 2  // OFPT_ECHO_REQUEST
+	OFPTEchoReply             = 3  // OFPT_ECHO_REPLY
+	OFPTExperimenter          = 4  // OFPT_EXPERIMENTER
+	OFPTFeaturesRequest       = 5  // OFPT_FEATURES_REQUEST
+	OFPTFeaturesReply         = 6  // OFPT_FEATURES_REPLY
+	OFPTGetConfigRequest      = 7  // OFPT_GET_CONFIG_REQUEST
+	OFPTGetConfigReply        = 8  // OFPT_GET_CONFIG_REPLY
+	OFPTSetConfig             = 9  // OFPT_SET_CONFIG
+	OFPTPacketIn              = 10 // OFPT_PACKET_IN
+	OFPTFlowRemoved           = 11 // OFPT_FLOW_REMOVED
+	OFPTPortStatus            = 12 // OFPT_PORT_STATUS
+	OFPTPacketOut             = 13 // OFPT_PACKET_OUT
+	OFPTFlowMod               = 14 // OFPT_FLOW_MOD
+	OFPTGroupMod              = 15 // OFPT_GROUP_MOD
+	OFPTPortMod               = 16 // OFPT_PORT_MOD
+	OFPTTableMod              = 17 // OFPT_TABLE_MOD
+	OFPTStatsRequest          = 18 // OFPT_STATS_REQUEST
+	OFPTStatsReply            = 19 // OFPT_STATS_REPLY
+	OFPTBarrierRequest        = 20 // OFPT_BARRIER_REQUEST
+	OFPTBarrierReply          = 21 // OFPT_BARRIER_REPLY
+	OFPTQueueGetConfigRequest = 22 // OFPT_QUEUE_GET_CONFIG_REQUEST
+	OFPTQueueGetConfigReply   = 23 // OFPT_QUEUE_GET_CONFIG_REPLY
+	OFPTRoleRequest           = 24 // OFPT_ROLE_REQUEST
+	OFPTRoleReply             = 25 // OFPT_ROLE_REPLY
+	OFPTGetAsyncRequest       = 26 // OFPT_GET_ASYNC_REQUEST
+	OFPTGetAsyncReply         = 27 // OFPT_GET_ASYNC_REPLY
+	OFPTSetAsync              = 28 // OFPT_SET_ASYNC
+	OFPTMeterMod              = 29 // OFPT_METER_MOD
+)
+
+type Type uint8
+
+func (self Type) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("\"%s\"", self)), nil
+}
+
+func (self Type) String() string {
+	switch self {
+	case OFPTHello:
+		return "hello"
+	case OFPTError:
+		return "error"
+	case OFPTEchoRequest:
+		return "echo_request"
+	case OFPTEchoReply:
+		return "echo_reply"
+	case OFPTExperimenter:
+		return "experimenter"
+	case OFPTFeaturesRequest:
+		return "features_request"
+	case OFPTFeaturesReply:
+		return "features_reply"
+	case OFPTGetConfigRequest:
+		return "get_config_request"
+	case OFPTGetConfigReply:
+		return "get_config_reply"
+	case OFPTSetConfig:
+		return "set_config"
+	case OFPTPacketIn:
+		return "packet_in"
+	case OFPTFlowRemoved:
+		return "flow_removed"
+	case OFPTPortStatus:
+		return "port_status"
+	case OFPTPacketOut:
+		return "packet_out"
+	case OFPTFlowMod:
+		return "flow_mod"
+	case OFPTGroupMod:
+		return "group_mod"
+	case OFPTPortMod:
+		return "port_mod"
+	case OFPTTableMod:
+		return "table_mod"
+	case OFPTStatsRequest:
+		return "stats_request"
+	case OFPTStatsReply:
+		return "stats_reply"
+	case OFPTBarrierRequest:
+		return "barrier_request"
+	case OFPTBarrierReply:
+		return "barrier_reply"
+	case OFPTQueueGetConfigRequest:
+		return "queue_get_config_request"
+	case OFPTQueueGetConfigReply:
+		return "queue_get_config_reply"
+	case OFPTRoleRequest:
+		return "role_request"
+	case OFPTRoleReply:
+		return "role_reply"
+	case OFPTGetAsyncRequest:
+		return "get_async_request"
+	case OFPTGetAsyncReply:
+		return "get_async_reply"
+	case OFPTSetAsync:
+		return "set_async"
+	case OFPTMeterMod:
+		return "meter_mod"
+	default:
+		return fmt.Sprintf("%d", self)
+	}
+}
+
+const (
+	// Identifiers from group ofp_vlan_id
+	OFPVIDNone    = 0    // OFPVID_NONE
+	OFPVIDPresent = 4096 // OFPVID_PRESENT
+)
+
+type VlanId uint16
+
+func (self VlanId) MarshalJSON() ([]byte, error) {
+	return []byte(fmt.Sprintf("%d", self)), nil
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/instruction.go b/vendor/github.com/skydive-project/goloxi/of13/instruction.go
new file mode 100644
index 0000000..53a2eca
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/instruction.go
@@ -0,0 +1,1168 @@
+/*
+ * Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+ * Copyright (c) 2011, 2012 Open Networking Foundation
+ * Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler.
+ * Copyright 2018, Red Hat, Inc.
+ */
+// Automatically generated by LOXI from template module.go
+// Do not modify
+
+package of13
+
+import (
+	"bytes"
+	"encoding/binary"
+	"fmt"
+
+	"github.com/skydive-project/goloxi"
+)
+
+type Instruction struct {
+	Type uint16
+	Len  uint16
+}
+
+type IInstruction interface {
+	goloxi.Serializable
+	GetType() uint16
+	GetLen() uint16
+}
+
+func (self *Instruction) GetType() uint16 {
+	return self.Type
+}
+
+func (self *Instruction) SetType(v uint16) {
+	self.Type = v
+}
+
+func (self *Instruction) GetLen() uint16 {
+	return self.Len
+}
+
+func (self *Instruction) SetLen(v uint16) {
+	self.Len = v
+}
+
+func (self *Instruction) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint16(uint16(self.Type))
+	encoder.PutUint16(uint16(self.Len))
+
+	return nil
+}
+
+func DecodeInstruction(decoder *goloxi.Decoder) (IInstruction, error) {
+	_instruction := &Instruction{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("Instruction packet too short: %d < 4", decoder.Length())
+	}
+	_instruction.Type = uint16(decoder.ReadUint16())
+	_instruction.Len = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_instruction.Len), 2+2)
+
+	switch _instruction.Type {
+	case 1:
+		return DecodeInstructionGotoTable(_instruction, decoder)
+	case 2:
+		return DecodeInstructionWriteMetadata(_instruction, decoder)
+	case 3:
+		return DecodeInstructionWriteActions(_instruction, decoder)
+	case 4:
+		return DecodeInstructionApplyActions(_instruction, decoder)
+	case 5:
+		return DecodeInstructionClearActions(_instruction, decoder)
+	case 6:
+		return DecodeInstructionMeter(_instruction, decoder)
+	case 65535:
+		return DecodeInstructionExperimenter(_instruction, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'Instruction'", _instruction.Type)
+	}
+}
+
+func NewInstruction(_type uint16) *Instruction {
+	obj := &Instruction{}
+	obj.Type = _type
+	return obj
+}
+
+type InstructionApplyActions struct {
+	*Instruction
+	Actions []goloxi.IAction
+}
+
+type IInstructionApplyActions interface {
+	IInstruction
+	GetActions() []goloxi.IAction
+}
+
+func (self *InstructionApplyActions) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *InstructionApplyActions) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *InstructionApplyActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Instruction.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionApplyActions(parent *Instruction, decoder *goloxi.Decoder) (*InstructionApplyActions, error) {
+	_instructionapplyactions := &InstructionApplyActions{Instruction: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionApplyActions packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_instructionapplyactions.Actions = append(_instructionapplyactions.Actions, item)
+		}
+	}
+	return _instructionapplyactions, nil
+}
+
+func NewInstructionApplyActions() *InstructionApplyActions {
+	obj := &InstructionApplyActions{
+		Instruction: NewInstruction(4),
+	}
+	return obj
+}
+
+type InstructionExperimenter struct {
+	*Instruction
+	Experimenter uint32
+}
+
+type IInstructionExperimenter interface {
+	IInstruction
+	GetExperimenter() uint32
+}
+
+func (self *InstructionExperimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *InstructionExperimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *InstructionExperimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Instruction.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Experimenter))
+
+	return nil
+}
+
+func DecodeInstructionExperimenter(parent *Instruction, decoder *goloxi.Decoder) (IInstructionExperimenter, error) {
+	_instructionexperimenter := &InstructionExperimenter{Instruction: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionExperimenter packet too short: %d < 4", decoder.Length())
+	}
+	_instructionexperimenter.Experimenter = uint32(decoder.ReadUint32())
+
+	switch _instructionexperimenter.Experimenter {
+	case 6035143:
+		return DecodeInstructionBsn(_instructionexperimenter, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'InstructionExperimenter'", _instructionexperimenter.Experimenter)
+	}
+}
+
+func NewInstructionExperimenter(_experimenter uint32) *InstructionExperimenter {
+	obj := &InstructionExperimenter{
+		Instruction: NewInstruction(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type InstructionBsn struct {
+	*InstructionExperimenter
+	Subtype uint32
+}
+
+type IInstructionBsn interface {
+	IInstructionExperimenter
+	GetSubtype() uint32
+}
+
+func (self *InstructionBsn) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *InstructionBsn) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *InstructionBsn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionExperimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Subtype))
+
+	return nil
+}
+
+func DecodeInstructionBsn(parent *InstructionExperimenter, decoder *goloxi.Decoder) (IInstructionBsn, error) {
+	_instructionbsn := &InstructionBsn{InstructionExperimenter: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsn packet too short: %d < 4", decoder.Length())
+	}
+	_instructionbsn.Subtype = uint32(decoder.ReadUint32())
+
+	switch _instructionbsn.Subtype {
+	case 0:
+		return DecodeInstructionBsnDisableSrcMacCheck(_instructionbsn, decoder)
+	case 1:
+		return DecodeInstructionBsnArpOffload(_instructionbsn, decoder)
+	case 2:
+		return DecodeInstructionBsnDhcpOffload(_instructionbsn, decoder)
+	case 3:
+		return DecodeInstructionBsnDisableSplitHorizonCheck(_instructionbsn, decoder)
+	case 4:
+		return DecodeInstructionBsnPermit(_instructionbsn, decoder)
+	case 5:
+		return DecodeInstructionBsnDeny(_instructionbsn, decoder)
+	case 6:
+		return DecodeInstructionBsnPacketOfDeath(_instructionbsn, decoder)
+	case 7:
+		return DecodeInstructionBsnPrioritizePdus(_instructionbsn, decoder)
+	case 8:
+		return DecodeInstructionBsnRequireVlanXlate(_instructionbsn, decoder)
+	case 9:
+		return DecodeInstructionBsnDisableVlanCounters(_instructionbsn, decoder)
+	case 10:
+		return DecodeInstructionBsnSpanDestination(_instructionbsn, decoder)
+	case 11:
+		return DecodeInstructionBsnAutoNegotiation(_instructionbsn, decoder)
+	case 12:
+		return DecodeInstructionBsnInternalPriority(_instructionbsn, decoder)
+	case 13:
+		return DecodeInstructionBsnDisableL3(_instructionbsn, decoder)
+	case 14:
+		return DecodeInstructionBsnNdpOffload(_instructionbsn, decoder)
+	case 15:
+		return DecodeInstructionBsnHashSelect(_instructionbsn, decoder)
+	case 16:
+		return DecodeInstructionBsnDirectedBroadcast(_instructionbsn, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'InstructionBsn'", _instructionbsn.Subtype)
+	}
+}
+
+func NewInstructionBsn(_subtype uint32) *InstructionBsn {
+	obj := &InstructionBsn{
+		InstructionExperimenter: NewInstructionExperimenter(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type InstructionBsnArpOffload struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnArpOffload interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnArpOffload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnArpOffload(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnArpOffload, error) {
+	_instructionbsnarpoffload := &InstructionBsnArpOffload{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnArpOffload packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnarpoffload, nil
+}
+
+func NewInstructionBsnArpOffload() *InstructionBsnArpOffload {
+	obj := &InstructionBsnArpOffload{
+		InstructionBsn: NewInstructionBsn(1),
+	}
+	return obj
+}
+
+type InstructionBsnAutoNegotiation struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnAutoNegotiation interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnAutoNegotiation) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnAutoNegotiation(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnAutoNegotiation, error) {
+	_instructionbsnautonegotiation := &InstructionBsnAutoNegotiation{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnAutoNegotiation packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnautonegotiation, nil
+}
+
+func NewInstructionBsnAutoNegotiation() *InstructionBsnAutoNegotiation {
+	obj := &InstructionBsnAutoNegotiation{
+		InstructionBsn: NewInstructionBsn(11),
+	}
+	return obj
+}
+
+type InstructionBsnDeny struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnDeny interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnDeny) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnDeny(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnDeny, error) {
+	_instructionbsndeny := &InstructionBsnDeny{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnDeny packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsndeny, nil
+}
+
+func NewInstructionBsnDeny() *InstructionBsnDeny {
+	obj := &InstructionBsnDeny{
+		InstructionBsn: NewInstructionBsn(5),
+	}
+	return obj
+}
+
+type InstructionBsnDhcpOffload struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnDhcpOffload interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnDhcpOffload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnDhcpOffload(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnDhcpOffload, error) {
+	_instructionbsndhcpoffload := &InstructionBsnDhcpOffload{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnDhcpOffload packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsndhcpoffload, nil
+}
+
+func NewInstructionBsnDhcpOffload() *InstructionBsnDhcpOffload {
+	obj := &InstructionBsnDhcpOffload{
+		InstructionBsn: NewInstructionBsn(2),
+	}
+	return obj
+}
+
+type InstructionBsnDirectedBroadcast struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnDirectedBroadcast interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnDirectedBroadcast) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnDirectedBroadcast(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnDirectedBroadcast, error) {
+	_instructionbsndirectedbroadcast := &InstructionBsnDirectedBroadcast{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnDirectedBroadcast packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsndirectedbroadcast, nil
+}
+
+func NewInstructionBsnDirectedBroadcast() *InstructionBsnDirectedBroadcast {
+	obj := &InstructionBsnDirectedBroadcast{
+		InstructionBsn: NewInstructionBsn(16),
+	}
+	return obj
+}
+
+type InstructionBsnDisableL3 struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnDisableL3 interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnDisableL3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnDisableL3(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnDisableL3, error) {
+	_instructionbsndisablel3 := &InstructionBsnDisableL3{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnDisableL3 packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsndisablel3, nil
+}
+
+func NewInstructionBsnDisableL3() *InstructionBsnDisableL3 {
+	obj := &InstructionBsnDisableL3{
+		InstructionBsn: NewInstructionBsn(13),
+	}
+	return obj
+}
+
+type InstructionBsnDisableSplitHorizonCheck struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnDisableSplitHorizonCheck interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnDisableSplitHorizonCheck) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnDisableSplitHorizonCheck(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnDisableSplitHorizonCheck, error) {
+	_instructionbsndisablesplithorizoncheck := &InstructionBsnDisableSplitHorizonCheck{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnDisableSplitHorizonCheck packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsndisablesplithorizoncheck, nil
+}
+
+func NewInstructionBsnDisableSplitHorizonCheck() *InstructionBsnDisableSplitHorizonCheck {
+	obj := &InstructionBsnDisableSplitHorizonCheck{
+		InstructionBsn: NewInstructionBsn(3),
+	}
+	return obj
+}
+
+type InstructionBsnDisableSrcMacCheck struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnDisableSrcMacCheck interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnDisableSrcMacCheck) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnDisableSrcMacCheck(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnDisableSrcMacCheck, error) {
+	_instructionbsndisablesrcmaccheck := &InstructionBsnDisableSrcMacCheck{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnDisableSrcMacCheck packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsndisablesrcmaccheck, nil
+}
+
+func NewInstructionBsnDisableSrcMacCheck() *InstructionBsnDisableSrcMacCheck {
+	obj := &InstructionBsnDisableSrcMacCheck{
+		InstructionBsn: NewInstructionBsn(0),
+	}
+	return obj
+}
+
+type InstructionBsnDisableVlanCounters struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnDisableVlanCounters interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnDisableVlanCounters) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnDisableVlanCounters(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnDisableVlanCounters, error) {
+	_instructionbsndisablevlancounters := &InstructionBsnDisableVlanCounters{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnDisableVlanCounters packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsndisablevlancounters, nil
+}
+
+func NewInstructionBsnDisableVlanCounters() *InstructionBsnDisableVlanCounters {
+	obj := &InstructionBsnDisableVlanCounters{
+		InstructionBsn: NewInstructionBsn(9),
+	}
+	return obj
+}
+
+type InstructionBsnHashSelect struct {
+	*InstructionBsn
+	Flags BsnHashSelectFlags
+}
+
+type IInstructionBsnHashSelect interface {
+	IInstructionBsn
+	GetFlags() BsnHashSelectFlags
+}
+
+func (self *InstructionBsnHashSelect) GetFlags() BsnHashSelectFlags {
+	return self.Flags
+}
+
+func (self *InstructionBsnHashSelect) SetFlags(v BsnHashSelectFlags) {
+	self.Flags = v
+}
+
+func (self *InstructionBsnHashSelect) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Flags))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnHashSelect(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnHashSelect, error) {
+	_instructionbsnhashselect := &InstructionBsnHashSelect{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnHashSelect packet too short: %d < 4", decoder.Length())
+	}
+	_instructionbsnhashselect.Flags = BsnHashSelectFlags(decoder.ReadUint32())
+	return _instructionbsnhashselect, nil
+}
+
+func NewInstructionBsnHashSelect() *InstructionBsnHashSelect {
+	obj := &InstructionBsnHashSelect{
+		InstructionBsn: NewInstructionBsn(15),
+	}
+	return obj
+}
+
+type InstructionBsnInternalPriority struct {
+	*InstructionBsn
+	Value uint32
+}
+
+type IInstructionBsnInternalPriority interface {
+	IInstructionBsn
+	GetValue() uint32
+}
+
+func (self *InstructionBsnInternalPriority) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *InstructionBsnInternalPriority) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *InstructionBsnInternalPriority) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnInternalPriority(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnInternalPriority, error) {
+	_instructionbsninternalpriority := &InstructionBsnInternalPriority{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnInternalPriority packet too short: %d < 4", decoder.Length())
+	}
+	_instructionbsninternalpriority.Value = uint32(decoder.ReadUint32())
+	return _instructionbsninternalpriority, nil
+}
+
+func NewInstructionBsnInternalPriority() *InstructionBsnInternalPriority {
+	obj := &InstructionBsnInternalPriority{
+		InstructionBsn: NewInstructionBsn(12),
+	}
+	return obj
+}
+
+type InstructionBsnNdpOffload struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnNdpOffload interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnNdpOffload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnNdpOffload(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnNdpOffload, error) {
+	_instructionbsnndpoffload := &InstructionBsnNdpOffload{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnNdpOffload packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnndpoffload, nil
+}
+
+func NewInstructionBsnNdpOffload() *InstructionBsnNdpOffload {
+	obj := &InstructionBsnNdpOffload{
+		InstructionBsn: NewInstructionBsn(14),
+	}
+	return obj
+}
+
+type InstructionBsnPacketOfDeath struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnPacketOfDeath interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnPacketOfDeath) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnPacketOfDeath(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnPacketOfDeath, error) {
+	_instructionbsnpacketofdeath := &InstructionBsnPacketOfDeath{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnPacketOfDeath packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnpacketofdeath, nil
+}
+
+func NewInstructionBsnPacketOfDeath() *InstructionBsnPacketOfDeath {
+	obj := &InstructionBsnPacketOfDeath{
+		InstructionBsn: NewInstructionBsn(6),
+	}
+	return obj
+}
+
+type InstructionBsnPermit struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnPermit interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnPermit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnPermit(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnPermit, error) {
+	_instructionbsnpermit := &InstructionBsnPermit{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnPermit packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnpermit, nil
+}
+
+func NewInstructionBsnPermit() *InstructionBsnPermit {
+	obj := &InstructionBsnPermit{
+		InstructionBsn: NewInstructionBsn(4),
+	}
+	return obj
+}
+
+type InstructionBsnPrioritizePdus struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnPrioritizePdus interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnPrioritizePdus) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnPrioritizePdus(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnPrioritizePdus, error) {
+	_instructionbsnprioritizepdus := &InstructionBsnPrioritizePdus{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnPrioritizePdus packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnprioritizepdus, nil
+}
+
+func NewInstructionBsnPrioritizePdus() *InstructionBsnPrioritizePdus {
+	obj := &InstructionBsnPrioritizePdus{
+		InstructionBsn: NewInstructionBsn(7),
+	}
+	return obj
+}
+
+type InstructionBsnRequireVlanXlate struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnRequireVlanXlate interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnRequireVlanXlate) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnRequireVlanXlate(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnRequireVlanXlate, error) {
+	_instructionbsnrequirevlanxlate := &InstructionBsnRequireVlanXlate{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnRequireVlanXlate packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnrequirevlanxlate, nil
+}
+
+func NewInstructionBsnRequireVlanXlate() *InstructionBsnRequireVlanXlate {
+	obj := &InstructionBsnRequireVlanXlate{
+		InstructionBsn: NewInstructionBsn(8),
+	}
+	return obj
+}
+
+type InstructionBsnSpanDestination struct {
+	*InstructionBsn
+}
+
+type IInstructionBsnSpanDestination interface {
+	IInstructionBsn
+}
+
+func (self *InstructionBsnSpanDestination) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.InstructionBsn.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionBsnSpanDestination(parent *InstructionBsn, decoder *goloxi.Decoder) (*InstructionBsnSpanDestination, error) {
+	_instructionbsnspandestination := &InstructionBsnSpanDestination{InstructionBsn: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionBsnSpanDestination packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionbsnspandestination, nil
+}
+
+func NewInstructionBsnSpanDestination() *InstructionBsnSpanDestination {
+	obj := &InstructionBsnSpanDestination{
+		InstructionBsn: NewInstructionBsn(10),
+	}
+	return obj
+}
+
+type InstructionClearActions struct {
+	*Instruction
+}
+
+type IInstructionClearActions interface {
+	IInstruction
+}
+
+func (self *InstructionClearActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Instruction.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionClearActions(parent *Instruction, decoder *goloxi.Decoder) (*InstructionClearActions, error) {
+	_instructionclearactions := &InstructionClearActions{Instruction: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionClearActions packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _instructionclearactions, nil
+}
+
+func NewInstructionClearActions() *InstructionClearActions {
+	obj := &InstructionClearActions{
+		Instruction: NewInstruction(5),
+	}
+	return obj
+}
+
+type InstructionGotoTable struct {
+	*Instruction
+	TableId uint8
+}
+
+type IInstructionGotoTable interface {
+	IInstruction
+	GetTableId() uint8
+}
+
+func (self *InstructionGotoTable) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *InstructionGotoTable) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *InstructionGotoTable) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Instruction.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionGotoTable(parent *Instruction, decoder *goloxi.Decoder) (*InstructionGotoTable, error) {
+	_instructiongototable := &InstructionGotoTable{Instruction: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionGotoTable packet too short: %d < 4", decoder.Length())
+	}
+	_instructiongototable.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _instructiongototable, nil
+}
+
+func NewInstructionGotoTable() *InstructionGotoTable {
+	obj := &InstructionGotoTable{
+		Instruction: NewInstruction(1),
+	}
+	return obj
+}
+
+type InstructionMeter struct {
+	*Instruction
+	MeterId uint32
+}
+
+type IInstructionMeter interface {
+	IInstruction
+	GetMeterId() uint32
+}
+
+func (self *InstructionMeter) GetMeterId() uint32 {
+	return self.MeterId
+}
+
+func (self *InstructionMeter) SetMeterId(v uint32) {
+	self.MeterId = v
+}
+
+func (self *InstructionMeter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Instruction.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.MeterId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionMeter(parent *Instruction, decoder *goloxi.Decoder) (*InstructionMeter, error) {
+	_instructionmeter := &InstructionMeter{Instruction: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionMeter packet too short: %d < 4", decoder.Length())
+	}
+	_instructionmeter.MeterId = uint32(decoder.ReadUint32())
+	return _instructionmeter, nil
+}
+
+func NewInstructionMeter() *InstructionMeter {
+	obj := &InstructionMeter{
+		Instruction: NewInstruction(6),
+	}
+	return obj
+}
+
+type InstructionWriteActions struct {
+	*Instruction
+	Actions []goloxi.IAction
+}
+
+type IInstructionWriteActions interface {
+	IInstruction
+	GetActions() []goloxi.IAction
+}
+
+func (self *InstructionWriteActions) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *InstructionWriteActions) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *InstructionWriteActions) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Instruction.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionWriteActions(parent *Instruction, decoder *goloxi.Decoder) (*InstructionWriteActions, error) {
+	_instructionwriteactions := &InstructionWriteActions{Instruction: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("InstructionWriteActions packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_instructionwriteactions.Actions = append(_instructionwriteactions.Actions, item)
+		}
+	}
+	return _instructionwriteactions, nil
+}
+
+func NewInstructionWriteActions() *InstructionWriteActions {
+	obj := &InstructionWriteActions{
+		Instruction: NewInstruction(3),
+	}
+	return obj
+}
+
+type InstructionWriteMetadata struct {
+	*Instruction
+	Metadata     uint64
+	MetadataMask uint64
+}
+
+type IInstructionWriteMetadata interface {
+	IInstruction
+	GetMetadata() uint64
+	GetMetadataMask() uint64
+}
+
+func (self *InstructionWriteMetadata) GetMetadata() uint64 {
+	return self.Metadata
+}
+
+func (self *InstructionWriteMetadata) SetMetadata(v uint64) {
+	self.Metadata = v
+}
+
+func (self *InstructionWriteMetadata) GetMetadataMask() uint64 {
+	return self.MetadataMask
+}
+
+func (self *InstructionWriteMetadata) SetMetadataMask(v uint64) {
+	self.MetadataMask = v
+}
+
+func (self *InstructionWriteMetadata) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Instruction.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.Metadata))
+	encoder.PutUint64(uint64(self.MetadataMask))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeInstructionWriteMetadata(parent *Instruction, decoder *goloxi.Decoder) (*InstructionWriteMetadata, error) {
+	_instructionwritemetadata := &InstructionWriteMetadata{Instruction: parent}
+	if decoder.Length() < 20 {
+		return nil, fmt.Errorf("InstructionWriteMetadata packet too short: %d < 20", decoder.Length())
+	}
+	decoder.Skip(4)
+	_instructionwritemetadata.Metadata = uint64(decoder.ReadUint64())
+	_instructionwritemetadata.MetadataMask = uint64(decoder.ReadUint64())
+	return _instructionwritemetadata, nil
+}
+
+func NewInstructionWriteMetadata() *InstructionWriteMetadata {
+	obj := &InstructionWriteMetadata{
+		Instruction: NewInstruction(2),
+	}
+	return obj
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/message.go b/vendor/github.com/skydive-project/goloxi/of13/message.go
new file mode 100644
index 0000000..2b9ba0e
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/message.go
@@ -0,0 +1,11065 @@
+/*
+ * Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+ * Copyright (c) 2011, 2012 Open Networking Foundation
+ * Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler.
+ * Copyright 2018, Red Hat, Inc.
+ */
+// Automatically generated by LOXI from template module.go
+// Do not modify
+
+package of13
+
+import (
+	"bytes"
+	"encoding/binary"
+	"fmt"
+	"net"
+
+	"github.com/skydive-project/goloxi"
+)
+
+type Header struct {
+	Version uint8
+	Type    uint8
+	Length  uint16
+	Xid     uint32
+}
+
+type IHeader interface {
+	goloxi.Serializable
+	GetVersion() uint8
+	GetType() uint8
+	GetLength() uint16
+	GetXid() uint32
+}
+
+func (self *Header) GetVersion() uint8 {
+	return self.Version
+}
+
+func (self *Header) SetVersion(v uint8) {
+	self.Version = v
+}
+
+func (self *Header) GetType() uint8 {
+	return self.Type
+}
+
+func (self *Header) SetType(v uint8) {
+	self.Type = v
+}
+
+func (self *Header) GetLength() uint16 {
+	return self.Length
+}
+
+func (self *Header) SetLength(v uint16) {
+	self.Length = v
+}
+
+func (self *Header) GetXid() uint32 {
+	return self.Xid
+}
+
+func (self *Header) SetXid(v uint32) {
+	self.Xid = v
+}
+
+func (self *Header) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint8(uint8(4))
+	encoder.PutUint8(uint8(self.Type))
+	encoder.PutUint16(uint16(self.Length))
+	encoder.PutUint32(uint32(self.Xid))
+
+	return nil
+}
+func (self *Header) Decode(decoder *goloxi.Decoder) error {
+	if decoder.Length() < 8 {
+		return fmt.Errorf("Header packet too short: %d < 8", decoder.Length())
+	}
+
+	self.Version = uint8(decoder.ReadByte())
+	self.Type = uint8(decoder.ReadByte())
+	self.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(self.Length), 2+2)
+	self.Xid = uint32(decoder.ReadUint32())
+
+	return nil
+}
+func DecodeHeader(decoder *goloxi.Decoder) (IHeader, error) {
+	_header := &Header{}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("Header packet too short: %d < 8", decoder.Length())
+	}
+	_header.Version = uint8(decoder.ReadByte())
+	_header.Type = uint8(decoder.ReadByte())
+	_header.Length = uint16(decoder.ReadUint16())
+	oldDecoder := decoder
+	defer func() { decoder = oldDecoder }()
+	decoder = decoder.SliceDecoder(int(_header.Length), 2+2)
+	_header.Xid = uint32(decoder.ReadUint32())
+
+	switch _header.Type {
+	case 0:
+		return DecodeHello(_header, decoder)
+	case 1:
+		return DecodeErrorMsg(_header, decoder)
+	case 2:
+		return DecodeEchoRequest(_header, decoder)
+	case 3:
+		return DecodeEchoReply(_header, decoder)
+	case 4:
+		return DecodeExperimenter(_header, decoder)
+	case 5:
+		return DecodeFeaturesRequest(_header, decoder)
+	case 6:
+		return DecodeFeaturesReply(_header, decoder)
+	case 7:
+		return DecodeGetConfigRequest(_header, decoder)
+	case 8:
+		return DecodeGetConfigReply(_header, decoder)
+	case 9:
+		return DecodeSetConfig(_header, decoder)
+	case 10:
+		return DecodePacketIn(_header, decoder)
+	case 11:
+		return DecodeFlowRemoved(_header, decoder)
+	case 12:
+		return DecodePortStatus(_header, decoder)
+	case 13:
+		return DecodePacketOut(_header, decoder)
+	case 14:
+		return DecodeFlowMod(_header, decoder)
+	case 15:
+		return DecodeGroupMod(_header, decoder)
+	case 16:
+		return DecodePortMod(_header, decoder)
+	case 17:
+		return DecodeTableMod(_header, decoder)
+	case 18:
+		return DecodeStatsRequest(_header, decoder)
+	case 19:
+		return DecodeStatsReply(_header, decoder)
+	case 20:
+		return DecodeBarrierRequest(_header, decoder)
+	case 21:
+		return DecodeBarrierReply(_header, decoder)
+	case 22:
+		return DecodeQueueGetConfigRequest(_header, decoder)
+	case 23:
+		return DecodeQueueGetConfigReply(_header, decoder)
+	case 24:
+		return DecodeRoleRequest(_header, decoder)
+	case 25:
+		return DecodeRoleReply(_header, decoder)
+	case 26:
+		return DecodeAsyncGetRequest(_header, decoder)
+	case 27:
+		return DecodeAsyncGetReply(_header, decoder)
+	case 28:
+		return DecodeAsyncSet(_header, decoder)
+	case 29:
+		return DecodeMeterMod(_header, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'Header'", _header.Type)
+	}
+}
+
+func NewHeader(_type uint8) *Header {
+	obj := &Header{}
+	obj.Type = _type
+	return obj
+}
+
+type StatsReply struct {
+	*Header
+	StatsType uint16
+	Flags     StatsReplyFlags
+}
+
+type IStatsReply interface {
+	IHeader
+	GetStatsType() uint16
+	GetFlags() StatsReplyFlags
+}
+
+func (self *StatsReply) GetStatsType() uint16 {
+	return self.StatsType
+}
+
+func (self *StatsReply) SetStatsType(v uint16) {
+	self.StatsType = v
+}
+
+func (self *StatsReply) GetFlags() StatsReplyFlags {
+	return self.Flags
+}
+
+func (self *StatsReply) SetFlags(v StatsReplyFlags) {
+	self.Flags = v
+}
+
+func (self *StatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.StatsType))
+	encoder.PutUint16(uint16(self.Flags))
+
+	return nil
+}
+
+func DecodeStatsReply(parent *Header, decoder *goloxi.Decoder) (IStatsReply, error) {
+	_statsreply := &StatsReply{Header: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("StatsReply packet too short: %d < 4", decoder.Length())
+	}
+	_statsreply.StatsType = uint16(decoder.ReadUint16())
+	_statsreply.Flags = StatsReplyFlags(decoder.ReadUint16())
+
+	switch _statsreply.StatsType {
+	case 0:
+		return DecodeDescStatsReply(_statsreply, decoder)
+	case 1:
+		return DecodeFlowStatsReply(_statsreply, decoder)
+	case 2:
+		return DecodeAggregateStatsReply(_statsreply, decoder)
+	case 3:
+		return DecodeTableStatsReply(_statsreply, decoder)
+	case 4:
+		return DecodePortStatsReply(_statsreply, decoder)
+	case 5:
+		return DecodeQueueStatsReply(_statsreply, decoder)
+	case 6:
+		return DecodeGroupStatsReply(_statsreply, decoder)
+	case 7:
+		return DecodeGroupDescStatsReply(_statsreply, decoder)
+	case 8:
+		return DecodeGroupFeaturesStatsReply(_statsreply, decoder)
+	case 9:
+		return DecodeMeterStatsReply(_statsreply, decoder)
+	case 10:
+		return DecodeMeterConfigStatsReply(_statsreply, decoder)
+	case 11:
+		return DecodeMeterFeaturesStatsReply(_statsreply, decoder)
+	case 12:
+		return DecodeTableFeaturesStatsReply(_statsreply, decoder)
+	case 13:
+		return DecodePortDescStatsReply(_statsreply, decoder)
+	case 65535:
+		return DecodeExperimenterStatsReply(_statsreply, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'StatsReply'", _statsreply.StatsType)
+	}
+}
+
+func NewStatsReply(_stats_type uint16) *StatsReply {
+	obj := &StatsReply{
+		Header: NewHeader(19),
+	}
+	obj.StatsType = _stats_type
+	return obj
+}
+
+type AggregateStatsReply struct {
+	*StatsReply
+	PacketCount uint64
+	ByteCount   uint64
+	FlowCount   uint32
+}
+
+type IAggregateStatsReply interface {
+	IStatsReply
+	GetPacketCount() uint64
+	GetByteCount() uint64
+	GetFlowCount() uint32
+}
+
+func (self *AggregateStatsReply) GetPacketCount() uint64 {
+	return self.PacketCount
+}
+
+func (self *AggregateStatsReply) SetPacketCount(v uint64) {
+	self.PacketCount = v
+}
+
+func (self *AggregateStatsReply) GetByteCount() uint64 {
+	return self.ByteCount
+}
+
+func (self *AggregateStatsReply) SetByteCount(v uint64) {
+	self.ByteCount = v
+}
+
+func (self *AggregateStatsReply) GetFlowCount() uint32 {
+	return self.FlowCount
+}
+
+func (self *AggregateStatsReply) SetFlowCount(v uint32) {
+	self.FlowCount = v
+}
+
+func (self *AggregateStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.PacketCount))
+	encoder.PutUint64(uint64(self.ByteCount))
+	encoder.PutUint32(uint32(self.FlowCount))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeAggregateStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*AggregateStatsReply, error) {
+	_aggregatestatsreply := &AggregateStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("AggregateStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	_aggregatestatsreply.PacketCount = uint64(decoder.ReadUint64())
+	_aggregatestatsreply.ByteCount = uint64(decoder.ReadUint64())
+	_aggregatestatsreply.FlowCount = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _aggregatestatsreply, nil
+}
+
+func NewAggregateStatsReply() *AggregateStatsReply {
+	obj := &AggregateStatsReply{
+		StatsReply: NewStatsReply(2),
+	}
+	return obj
+}
+
+type StatsRequest struct {
+	*Header
+	StatsType uint16
+	Flags     StatsRequestFlags
+}
+
+type IStatsRequest interface {
+	IHeader
+	GetStatsType() uint16
+	GetFlags() StatsRequestFlags
+}
+
+func (self *StatsRequest) GetStatsType() uint16 {
+	return self.StatsType
+}
+
+func (self *StatsRequest) SetStatsType(v uint16) {
+	self.StatsType = v
+}
+
+func (self *StatsRequest) GetFlags() StatsRequestFlags {
+	return self.Flags
+}
+
+func (self *StatsRequest) SetFlags(v StatsRequestFlags) {
+	self.Flags = v
+}
+
+func (self *StatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.StatsType))
+	encoder.PutUint16(uint16(self.Flags))
+
+	return nil
+}
+
+func DecodeStatsRequest(parent *Header, decoder *goloxi.Decoder) (IStatsRequest, error) {
+	_statsrequest := &StatsRequest{Header: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("StatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	_statsrequest.StatsType = uint16(decoder.ReadUint16())
+	_statsrequest.Flags = StatsRequestFlags(decoder.ReadUint16())
+
+	switch _statsrequest.StatsType {
+	case 0:
+		return DecodeDescStatsRequest(_statsrequest, decoder)
+	case 1:
+		return DecodeFlowStatsRequest(_statsrequest, decoder)
+	case 2:
+		return DecodeAggregateStatsRequest(_statsrequest, decoder)
+	case 3:
+		return DecodeTableStatsRequest(_statsrequest, decoder)
+	case 4:
+		return DecodePortStatsRequest(_statsrequest, decoder)
+	case 5:
+		return DecodeQueueStatsRequest(_statsrequest, decoder)
+	case 6:
+		return DecodeGroupStatsRequest(_statsrequest, decoder)
+	case 7:
+		return DecodeGroupDescStatsRequest(_statsrequest, decoder)
+	case 8:
+		return DecodeGroupFeaturesStatsRequest(_statsrequest, decoder)
+	case 9:
+		return DecodeMeterStatsRequest(_statsrequest, decoder)
+	case 10:
+		return DecodeMeterConfigStatsRequest(_statsrequest, decoder)
+	case 11:
+		return DecodeMeterFeaturesStatsRequest(_statsrequest, decoder)
+	case 12:
+		return DecodeTableFeaturesStatsRequest(_statsrequest, decoder)
+	case 13:
+		return DecodePortDescStatsRequest(_statsrequest, decoder)
+	case 65535:
+		return DecodeExperimenterStatsRequest(_statsrequest, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'StatsRequest'", _statsrequest.StatsType)
+	}
+}
+
+func NewStatsRequest(_stats_type uint16) *StatsRequest {
+	obj := &StatsRequest{
+		Header: NewHeader(18),
+	}
+	obj.StatsType = _stats_type
+	return obj
+}
+
+type AggregateStatsRequest struct {
+	*StatsRequest
+	TableId    uint8
+	OutPort    Port
+	OutGroup   uint32
+	Cookie     uint64
+	CookieMask uint64
+	Match      Match
+}
+
+type IAggregateStatsRequest interface {
+	IStatsRequest
+	GetTableId() uint8
+	GetOutPort() Port
+	GetOutGroup() uint32
+	GetCookie() uint64
+	GetCookieMask() uint64
+	GetMatch() Match
+}
+
+func (self *AggregateStatsRequest) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *AggregateStatsRequest) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *AggregateStatsRequest) GetOutPort() Port {
+	return self.OutPort
+}
+
+func (self *AggregateStatsRequest) SetOutPort(v Port) {
+	self.OutPort = v
+}
+
+func (self *AggregateStatsRequest) GetOutGroup() uint32 {
+	return self.OutGroup
+}
+
+func (self *AggregateStatsRequest) SetOutGroup(v uint32) {
+	self.OutGroup = v
+}
+
+func (self *AggregateStatsRequest) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *AggregateStatsRequest) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *AggregateStatsRequest) GetCookieMask() uint64 {
+	return self.CookieMask
+}
+
+func (self *AggregateStatsRequest) SetCookieMask(v uint64) {
+	self.CookieMask = v
+}
+
+func (self *AggregateStatsRequest) GetMatch() Match {
+	return self.Match
+}
+
+func (self *AggregateStatsRequest) SetMatch(v Match) {
+	self.Match = v
+}
+
+func (self *AggregateStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	self.OutPort.Serialize(encoder)
+	encoder.PutUint32(uint32(self.OutGroup))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint64(uint64(self.CookieMask))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeAggregateStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*AggregateStatsRequest, error) {
+	_aggregatestatsrequest := &AggregateStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 28 {
+		return nil, fmt.Errorf("AggregateStatsRequest packet too short: %d < 28", decoder.Length())
+	}
+	decoder.Skip(4)
+	_aggregatestatsrequest.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_aggregatestatsrequest.OutPort.Decode(decoder)
+	_aggregatestatsrequest.OutGroup = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	_aggregatestatsrequest.Cookie = uint64(decoder.ReadUint64())
+	_aggregatestatsrequest.CookieMask = uint64(decoder.ReadUint64())
+	if err := _aggregatestatsrequest.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+	return _aggregatestatsrequest, nil
+}
+
+func NewAggregateStatsRequest() *AggregateStatsRequest {
+	obj := &AggregateStatsRequest{
+		StatsRequest: NewStatsRequest(2),
+	}
+	return obj
+}
+
+type AsyncGetReply struct {
+	*Header
+	PacketInMaskEqualMaster    uint32
+	PacketInMaskSlave          uint32
+	PortStatusMaskEqualMaster  uint32
+	PortStatusMaskSlave        uint32
+	FlowRemovedMaskEqualMaster uint32
+	FlowRemovedMaskSlave       uint32
+}
+
+type IAsyncGetReply interface {
+	IHeader
+	GetPacketInMaskEqualMaster() uint32
+	GetPacketInMaskSlave() uint32
+	GetPortStatusMaskEqualMaster() uint32
+	GetPortStatusMaskSlave() uint32
+	GetFlowRemovedMaskEqualMaster() uint32
+	GetFlowRemovedMaskSlave() uint32
+}
+
+func (self *AsyncGetReply) GetPacketInMaskEqualMaster() uint32 {
+	return self.PacketInMaskEqualMaster
+}
+
+func (self *AsyncGetReply) SetPacketInMaskEqualMaster(v uint32) {
+	self.PacketInMaskEqualMaster = v
+}
+
+func (self *AsyncGetReply) GetPacketInMaskSlave() uint32 {
+	return self.PacketInMaskSlave
+}
+
+func (self *AsyncGetReply) SetPacketInMaskSlave(v uint32) {
+	self.PacketInMaskSlave = v
+}
+
+func (self *AsyncGetReply) GetPortStatusMaskEqualMaster() uint32 {
+	return self.PortStatusMaskEqualMaster
+}
+
+func (self *AsyncGetReply) SetPortStatusMaskEqualMaster(v uint32) {
+	self.PortStatusMaskEqualMaster = v
+}
+
+func (self *AsyncGetReply) GetPortStatusMaskSlave() uint32 {
+	return self.PortStatusMaskSlave
+}
+
+func (self *AsyncGetReply) SetPortStatusMaskSlave(v uint32) {
+	self.PortStatusMaskSlave = v
+}
+
+func (self *AsyncGetReply) GetFlowRemovedMaskEqualMaster() uint32 {
+	return self.FlowRemovedMaskEqualMaster
+}
+
+func (self *AsyncGetReply) SetFlowRemovedMaskEqualMaster(v uint32) {
+	self.FlowRemovedMaskEqualMaster = v
+}
+
+func (self *AsyncGetReply) GetFlowRemovedMaskSlave() uint32 {
+	return self.FlowRemovedMaskSlave
+}
+
+func (self *AsyncGetReply) SetFlowRemovedMaskSlave(v uint32) {
+	self.FlowRemovedMaskSlave = v
+}
+
+func (self *AsyncGetReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.PacketInMaskEqualMaster))
+	encoder.PutUint32(uint32(self.PacketInMaskSlave))
+	encoder.PutUint32(uint32(self.PortStatusMaskEqualMaster))
+	encoder.PutUint32(uint32(self.PortStatusMaskSlave))
+	encoder.PutUint32(uint32(self.FlowRemovedMaskEqualMaster))
+	encoder.PutUint32(uint32(self.FlowRemovedMaskSlave))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeAsyncGetReply(parent *Header, decoder *goloxi.Decoder) (*AsyncGetReply, error) {
+	_asyncgetreply := &AsyncGetReply{Header: parent}
+	if decoder.Length() < 24 {
+		return nil, fmt.Errorf("AsyncGetReply packet too short: %d < 24", decoder.Length())
+	}
+	_asyncgetreply.PacketInMaskEqualMaster = uint32(decoder.ReadUint32())
+	_asyncgetreply.PacketInMaskSlave = uint32(decoder.ReadUint32())
+	_asyncgetreply.PortStatusMaskEqualMaster = uint32(decoder.ReadUint32())
+	_asyncgetreply.PortStatusMaskSlave = uint32(decoder.ReadUint32())
+	_asyncgetreply.FlowRemovedMaskEqualMaster = uint32(decoder.ReadUint32())
+	_asyncgetreply.FlowRemovedMaskSlave = uint32(decoder.ReadUint32())
+	return _asyncgetreply, nil
+}
+
+func NewAsyncGetReply() *AsyncGetReply {
+	obj := &AsyncGetReply{
+		Header: NewHeader(27),
+	}
+	return obj
+}
+
+type AsyncGetRequest struct {
+	*Header
+}
+
+type IAsyncGetRequest interface {
+	IHeader
+}
+
+func (self *AsyncGetRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeAsyncGetRequest(parent *Header, decoder *goloxi.Decoder) (*AsyncGetRequest, error) {
+	_asyncgetrequest := &AsyncGetRequest{Header: parent}
+	return _asyncgetrequest, nil
+}
+
+func NewAsyncGetRequest() *AsyncGetRequest {
+	obj := &AsyncGetRequest{
+		Header: NewHeader(26),
+	}
+	return obj
+}
+
+type AsyncSet struct {
+	*Header
+	PacketInMaskEqualMaster    uint32
+	PacketInMaskSlave          uint32
+	PortStatusMaskEqualMaster  uint32
+	PortStatusMaskSlave        uint32
+	FlowRemovedMaskEqualMaster uint32
+	FlowRemovedMaskSlave       uint32
+}
+
+type IAsyncSet interface {
+	IHeader
+	GetPacketInMaskEqualMaster() uint32
+	GetPacketInMaskSlave() uint32
+	GetPortStatusMaskEqualMaster() uint32
+	GetPortStatusMaskSlave() uint32
+	GetFlowRemovedMaskEqualMaster() uint32
+	GetFlowRemovedMaskSlave() uint32
+}
+
+func (self *AsyncSet) GetPacketInMaskEqualMaster() uint32 {
+	return self.PacketInMaskEqualMaster
+}
+
+func (self *AsyncSet) SetPacketInMaskEqualMaster(v uint32) {
+	self.PacketInMaskEqualMaster = v
+}
+
+func (self *AsyncSet) GetPacketInMaskSlave() uint32 {
+	return self.PacketInMaskSlave
+}
+
+func (self *AsyncSet) SetPacketInMaskSlave(v uint32) {
+	self.PacketInMaskSlave = v
+}
+
+func (self *AsyncSet) GetPortStatusMaskEqualMaster() uint32 {
+	return self.PortStatusMaskEqualMaster
+}
+
+func (self *AsyncSet) SetPortStatusMaskEqualMaster(v uint32) {
+	self.PortStatusMaskEqualMaster = v
+}
+
+func (self *AsyncSet) GetPortStatusMaskSlave() uint32 {
+	return self.PortStatusMaskSlave
+}
+
+func (self *AsyncSet) SetPortStatusMaskSlave(v uint32) {
+	self.PortStatusMaskSlave = v
+}
+
+func (self *AsyncSet) GetFlowRemovedMaskEqualMaster() uint32 {
+	return self.FlowRemovedMaskEqualMaster
+}
+
+func (self *AsyncSet) SetFlowRemovedMaskEqualMaster(v uint32) {
+	self.FlowRemovedMaskEqualMaster = v
+}
+
+func (self *AsyncSet) GetFlowRemovedMaskSlave() uint32 {
+	return self.FlowRemovedMaskSlave
+}
+
+func (self *AsyncSet) SetFlowRemovedMaskSlave(v uint32) {
+	self.FlowRemovedMaskSlave = v
+}
+
+func (self *AsyncSet) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.PacketInMaskEqualMaster))
+	encoder.PutUint32(uint32(self.PacketInMaskSlave))
+	encoder.PutUint32(uint32(self.PortStatusMaskEqualMaster))
+	encoder.PutUint32(uint32(self.PortStatusMaskSlave))
+	encoder.PutUint32(uint32(self.FlowRemovedMaskEqualMaster))
+	encoder.PutUint32(uint32(self.FlowRemovedMaskSlave))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeAsyncSet(parent *Header, decoder *goloxi.Decoder) (*AsyncSet, error) {
+	_asyncset := &AsyncSet{Header: parent}
+	if decoder.Length() < 24 {
+		return nil, fmt.Errorf("AsyncSet packet too short: %d < 24", decoder.Length())
+	}
+	_asyncset.PacketInMaskEqualMaster = uint32(decoder.ReadUint32())
+	_asyncset.PacketInMaskSlave = uint32(decoder.ReadUint32())
+	_asyncset.PortStatusMaskEqualMaster = uint32(decoder.ReadUint32())
+	_asyncset.PortStatusMaskSlave = uint32(decoder.ReadUint32())
+	_asyncset.FlowRemovedMaskEqualMaster = uint32(decoder.ReadUint32())
+	_asyncset.FlowRemovedMaskSlave = uint32(decoder.ReadUint32())
+	return _asyncset, nil
+}
+
+func NewAsyncSet() *AsyncSet {
+	obj := &AsyncSet{
+		Header: NewHeader(28),
+	}
+	return obj
+}
+
+type ErrorMsg struct {
+	*Header
+	ErrType uint16
+}
+
+type IErrorMsg interface {
+	IHeader
+	GetErrType() uint16
+}
+
+func (self *ErrorMsg) GetErrType() uint16 {
+	return self.ErrType
+}
+
+func (self *ErrorMsg) SetErrType(v uint16) {
+	self.ErrType = v
+}
+
+func (self *ErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.ErrType))
+
+	return nil
+}
+
+func DecodeErrorMsg(parent *Header, decoder *goloxi.Decoder) (IErrorMsg, error) {
+	_errormsg := &ErrorMsg{Header: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("ErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_errormsg.ErrType = uint16(decoder.ReadUint16())
+
+	switch _errormsg.ErrType {
+	case 0:
+		return DecodeHelloFailedErrorMsg(_errormsg, decoder)
+	case 1:
+		return DecodeBadRequestErrorMsg(_errormsg, decoder)
+	case 2:
+		return DecodeBadActionErrorMsg(_errormsg, decoder)
+	case 3:
+		return DecodeBadInstructionErrorMsg(_errormsg, decoder)
+	case 4:
+		return DecodeBadMatchErrorMsg(_errormsg, decoder)
+	case 5:
+		return DecodeFlowModFailedErrorMsg(_errormsg, decoder)
+	case 6:
+		return DecodeGroupModFailedErrorMsg(_errormsg, decoder)
+	case 7:
+		return DecodePortModFailedErrorMsg(_errormsg, decoder)
+	case 8:
+		return DecodeTableModFailedErrorMsg(_errormsg, decoder)
+	case 9:
+		return DecodeQueueOpFailedErrorMsg(_errormsg, decoder)
+	case 10:
+		return DecodeSwitchConfigFailedErrorMsg(_errormsg, decoder)
+	case 11:
+		return DecodeRoleRequestFailedErrorMsg(_errormsg, decoder)
+	case 12:
+		return DecodeMeterModFailedErrorMsg(_errormsg, decoder)
+	case 13:
+		return DecodeTableFeaturesFailedErrorMsg(_errormsg, decoder)
+	case 65535:
+		return DecodeExperimenterErrorMsg(_errormsg, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ErrorMsg'", _errormsg.ErrType)
+	}
+}
+
+func NewErrorMsg(_err_type uint16) *ErrorMsg {
+	obj := &ErrorMsg{
+		Header: NewHeader(1),
+	}
+	obj.ErrType = _err_type
+	return obj
+}
+
+type BadActionErrorMsg struct {
+	*ErrorMsg
+	Code BadActionCode
+	Data []byte
+}
+
+type IBadActionErrorMsg interface {
+	IErrorMsg
+	GetCode() BadActionCode
+	GetData() []byte
+}
+
+func (self *BadActionErrorMsg) GetCode() BadActionCode {
+	return self.Code
+}
+
+func (self *BadActionErrorMsg) SetCode(v BadActionCode) {
+	self.Code = v
+}
+
+func (self *BadActionErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *BadActionErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BadActionErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBadActionErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*BadActionErrorMsg, error) {
+	_badactionerrormsg := &BadActionErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BadActionErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_badactionerrormsg.Code = BadActionCode(decoder.ReadUint16())
+	_badactionerrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _badactionerrormsg, nil
+}
+
+func NewBadActionErrorMsg() *BadActionErrorMsg {
+	obj := &BadActionErrorMsg{
+		ErrorMsg: NewErrorMsg(2),
+	}
+	return obj
+}
+
+type BadInstructionErrorMsg struct {
+	*ErrorMsg
+	Code BadInstructionCode
+	Data []byte
+}
+
+type IBadInstructionErrorMsg interface {
+	IErrorMsg
+	GetCode() BadInstructionCode
+	GetData() []byte
+}
+
+func (self *BadInstructionErrorMsg) GetCode() BadInstructionCode {
+	return self.Code
+}
+
+func (self *BadInstructionErrorMsg) SetCode(v BadInstructionCode) {
+	self.Code = v
+}
+
+func (self *BadInstructionErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *BadInstructionErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BadInstructionErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBadInstructionErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*BadInstructionErrorMsg, error) {
+	_badinstructionerrormsg := &BadInstructionErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BadInstructionErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_badinstructionerrormsg.Code = BadInstructionCode(decoder.ReadUint16())
+	_badinstructionerrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _badinstructionerrormsg, nil
+}
+
+func NewBadInstructionErrorMsg() *BadInstructionErrorMsg {
+	obj := &BadInstructionErrorMsg{
+		ErrorMsg: NewErrorMsg(3),
+	}
+	return obj
+}
+
+type BadMatchErrorMsg struct {
+	*ErrorMsg
+	Code BadMatchCode
+	Data []byte
+}
+
+type IBadMatchErrorMsg interface {
+	IErrorMsg
+	GetCode() BadMatchCode
+	GetData() []byte
+}
+
+func (self *BadMatchErrorMsg) GetCode() BadMatchCode {
+	return self.Code
+}
+
+func (self *BadMatchErrorMsg) SetCode(v BadMatchCode) {
+	self.Code = v
+}
+
+func (self *BadMatchErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *BadMatchErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BadMatchErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBadMatchErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*BadMatchErrorMsg, error) {
+	_badmatcherrormsg := &BadMatchErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BadMatchErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_badmatcherrormsg.Code = BadMatchCode(decoder.ReadUint16())
+	_badmatcherrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _badmatcherrormsg, nil
+}
+
+func NewBadMatchErrorMsg() *BadMatchErrorMsg {
+	obj := &BadMatchErrorMsg{
+		ErrorMsg: NewErrorMsg(4),
+	}
+	return obj
+}
+
+type BadRequestErrorMsg struct {
+	*ErrorMsg
+	Code BadRequestCode
+	Data []byte
+}
+
+type IBadRequestErrorMsg interface {
+	IErrorMsg
+	GetCode() BadRequestCode
+	GetData() []byte
+}
+
+func (self *BadRequestErrorMsg) GetCode() BadRequestCode {
+	return self.Code
+}
+
+func (self *BadRequestErrorMsg) SetCode(v BadRequestCode) {
+	self.Code = v
+}
+
+func (self *BadRequestErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *BadRequestErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BadRequestErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBadRequestErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*BadRequestErrorMsg, error) {
+	_badrequesterrormsg := &BadRequestErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BadRequestErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_badrequesterrormsg.Code = BadRequestCode(decoder.ReadUint16())
+	_badrequesterrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _badrequesterrormsg, nil
+}
+
+func NewBadRequestErrorMsg() *BadRequestErrorMsg {
+	obj := &BadRequestErrorMsg{
+		ErrorMsg: NewErrorMsg(1),
+	}
+	return obj
+}
+
+type BarrierReply struct {
+	*Header
+}
+
+type IBarrierReply interface {
+	IHeader
+}
+
+func (self *BarrierReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBarrierReply(parent *Header, decoder *goloxi.Decoder) (*BarrierReply, error) {
+	_barrierreply := &BarrierReply{Header: parent}
+	return _barrierreply, nil
+}
+
+func NewBarrierReply() *BarrierReply {
+	obj := &BarrierReply{
+		Header: NewHeader(21),
+	}
+	return obj
+}
+
+type BarrierRequest struct {
+	*Header
+}
+
+type IBarrierRequest interface {
+	IHeader
+}
+
+func (self *BarrierRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBarrierRequest(parent *Header, decoder *goloxi.Decoder) (*BarrierRequest, error) {
+	_barrierrequest := &BarrierRequest{Header: parent}
+	return _barrierrequest, nil
+}
+
+func NewBarrierRequest() *BarrierRequest {
+	obj := &BarrierRequest{
+		Header: NewHeader(20),
+	}
+	return obj
+}
+
+type Experimenter struct {
+	*Header
+	Experimenter uint32
+	Subtype      uint32
+}
+
+type IExperimenter interface {
+	IHeader
+	GetExperimenter() uint32
+	GetSubtype() uint32
+}
+
+func (self *Experimenter) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *Experimenter) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *Experimenter) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *Experimenter) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *Experimenter) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Experimenter))
+	encoder.PutUint32(uint32(self.Subtype))
+
+	return nil
+}
+
+func DecodeExperimenter(parent *Header, decoder *goloxi.Decoder) (IExperimenter, error) {
+	_experimenter := &Experimenter{Header: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("Experimenter packet too short: %d < 8", decoder.Length())
+	}
+	_experimenter.Experimenter = uint32(decoder.ReadUint32())
+	_experimenter.Subtype = uint32(decoder.ReadUint32())
+
+	switch _experimenter.Experimenter {
+	case 8992:
+		return DecodeNiciraHeader(_experimenter, decoder)
+	case 6035143:
+		return DecodeBsnHeader(_experimenter, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'Experimenter'", _experimenter.Experimenter)
+	}
+}
+
+func NewExperimenter(_experimenter uint32) *Experimenter {
+	obj := &Experimenter{
+		Header: NewHeader(4),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type BsnHeader struct {
+	*Experimenter
+}
+
+type IBsnHeader interface {
+	IExperimenter
+}
+
+func (self *BsnHeader) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Experimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeBsnHeader(parent *Experimenter, decoder *goloxi.Decoder) (IBsnHeader, error) {
+	_bsnheader := &BsnHeader{Experimenter: parent}
+
+	switch _bsnheader.Subtype {
+	case 3:
+		return DecodeBsnSetMirroring(_bsnheader, decoder)
+	case 4:
+		return DecodeBsnGetMirroringRequest(_bsnheader, decoder)
+	case 5:
+		return DecodeBsnGetMirroringReply(_bsnheader, decoder)
+	case 9:
+		return DecodeBsnGetInterfacesRequest(_bsnheader, decoder)
+	case 10:
+		return DecodeBsnGetInterfacesReply(_bsnheader, decoder)
+	case 11:
+		return DecodeBsnSetPktinSuppressionRequest(_bsnheader, decoder)
+	case 15:
+		return DecodeBsnVirtualPortCreateRequest(_bsnheader, decoder)
+	case 16:
+		return DecodeBsnVirtualPortCreateReply(_bsnheader, decoder)
+	case 17:
+		return DecodeBsnVirtualPortRemoveRequest(_bsnheader, decoder)
+	case 18:
+		return DecodeBsnBwEnableSetRequest(_bsnheader, decoder)
+	case 19:
+		return DecodeBsnBwEnableGetRequest(_bsnheader, decoder)
+	case 20:
+		return DecodeBsnBwEnableGetReply(_bsnheader, decoder)
+	case 21:
+		return DecodeBsnBwClearDataRequest(_bsnheader, decoder)
+	case 22:
+		return DecodeBsnBwClearDataReply(_bsnheader, decoder)
+	case 23:
+		return DecodeBsnBwEnableSetReply(_bsnheader, decoder)
+	case 25:
+		return DecodeBsnSetPktinSuppressionReply(_bsnheader, decoder)
+	case 26:
+		return DecodeBsnVirtualPortRemoveReply(_bsnheader, decoder)
+	case 31:
+		return DecodeBsnPduTxRequest(_bsnheader, decoder)
+	case 32:
+		return DecodeBsnPduTxReply(_bsnheader, decoder)
+	case 33:
+		return DecodeBsnPduRxRequest(_bsnheader, decoder)
+	case 34:
+		return DecodeBsnPduRxReply(_bsnheader, decoder)
+	case 35:
+		return DecodeBsnPduRxTimeout(_bsnheader, decoder)
+	case 36:
+		return DecodeBsnFlowIdleEnableSetRequest(_bsnheader, decoder)
+	case 37:
+		return DecodeBsnFlowIdleEnableSetReply(_bsnheader, decoder)
+	case 38:
+		return DecodeBsnFlowIdleEnableGetRequest(_bsnheader, decoder)
+	case 39:
+		return DecodeBsnFlowIdleEnableGetReply(_bsnheader, decoder)
+	case 40:
+		return DecodeBsnFlowIdle(_bsnheader, decoder)
+	case 41:
+		return DecodeBsnSetLacpRequest(_bsnheader, decoder)
+	case 42:
+		return DecodeBsnSetLacpReply(_bsnheader, decoder)
+	case 43:
+		return DecodeBsnLacpConvergenceNotif(_bsnheader, decoder)
+	case 44:
+		return DecodeBsnTimeRequest(_bsnheader, decoder)
+	case 45:
+		return DecodeBsnTimeReply(_bsnheader, decoder)
+	case 46:
+		return DecodeBsnGentableEntryAdd(_bsnheader, decoder)
+	case 47:
+		return DecodeBsnGentableEntryDelete(_bsnheader, decoder)
+	case 48:
+		return DecodeBsnGentableClearRequest(_bsnheader, decoder)
+	case 49:
+		return DecodeBsnGentableClearReply(_bsnheader, decoder)
+	case 50:
+		return DecodeBsnGentableSetBucketsSize(_bsnheader, decoder)
+	case 51:
+		return DecodeBsnGetSwitchPipelineRequest(_bsnheader, decoder)
+	case 52:
+		return DecodeBsnGetSwitchPipelineReply(_bsnheader, decoder)
+	case 53:
+		return DecodeBsnSetSwitchPipelineRequest(_bsnheader, decoder)
+	case 54:
+		return DecodeBsnSetSwitchPipelineReply(_bsnheader, decoder)
+	case 55:
+		return DecodeBsnRoleStatus(_bsnheader, decoder)
+	case 56:
+		return DecodeBsnControllerConnectionsRequest(_bsnheader, decoder)
+	case 57:
+		return DecodeBsnControllerConnectionsReply(_bsnheader, decoder)
+	case 58:
+		return DecodeBsnSetAuxCxnsRequest(_bsnheader, decoder)
+	case 59:
+		return DecodeBsnSetAuxCxnsReply(_bsnheader, decoder)
+	case 60:
+		return DecodeBsnArpIdle(_bsnheader, decoder)
+	case 61:
+		return DecodeBsnTableSetBucketsSize(_bsnheader, decoder)
+	case 63:
+		return DecodeBsnLog(_bsnheader, decoder)
+	case 64:
+		return DecodeBsnLuaUpload(_bsnheader, decoder)
+	case 65:
+		return DecodeBsnLuaCommandRequest(_bsnheader, decoder)
+	case 66:
+		return DecodeBsnLuaCommandReply(_bsnheader, decoder)
+	case 67:
+		return DecodeBsnLuaNotification(_bsnheader, decoder)
+	case 70:
+		return DecodeBsnVlanCounterClear(_bsnheader, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'BsnHeader'", _bsnheader.Subtype)
+	}
+}
+
+func NewBsnHeader(_subtype uint32) *BsnHeader {
+	obj := &BsnHeader{
+		Experimenter: NewExperimenter(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type BsnArpIdle struct {
+	*BsnHeader
+	VlanVid  uint16
+	Ipv4Addr net.IP
+}
+
+type IBsnArpIdle interface {
+	IBsnHeader
+	GetVlanVid() uint16
+	GetIpv4Addr() net.IP
+}
+
+func (self *BsnArpIdle) GetVlanVid() uint16 {
+	return self.VlanVid
+}
+
+func (self *BsnArpIdle) SetVlanVid(v uint16) {
+	self.VlanVid = v
+}
+
+func (self *BsnArpIdle) GetIpv4Addr() net.IP {
+	return self.Ipv4Addr
+}
+
+func (self *BsnArpIdle) SetIpv4Addr(v net.IP) {
+	self.Ipv4Addr = v
+}
+
+func (self *BsnArpIdle) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.VlanVid))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.Write(self.Ipv4Addr.To4())
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnArpIdle(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnArpIdle, error) {
+	_bsnarpidle := &BsnArpIdle{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnArpIdle packet too short: %d < 8", decoder.Length())
+	}
+	_bsnarpidle.VlanVid = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_bsnarpidle.Ipv4Addr = net.IP(decoder.Read(4))
+	return _bsnarpidle, nil
+}
+
+func NewBsnArpIdle() *BsnArpIdle {
+	obj := &BsnArpIdle{
+		BsnHeader: NewBsnHeader(60),
+	}
+	return obj
+}
+
+type ExperimenterErrorMsg struct {
+	*ErrorMsg
+	Subtype      uint16
+	Experimenter uint32
+}
+
+type IExperimenterErrorMsg interface {
+	IErrorMsg
+	GetSubtype() uint16
+	GetExperimenter() uint32
+}
+
+func (self *ExperimenterErrorMsg) GetSubtype() uint16 {
+	return self.Subtype
+}
+
+func (self *ExperimenterErrorMsg) SetSubtype(v uint16) {
+	self.Subtype = v
+}
+
+func (self *ExperimenterErrorMsg) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *ExperimenterErrorMsg) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *ExperimenterErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Subtype))
+	encoder.PutUint32(uint32(self.Experimenter))
+
+	return nil
+}
+
+func DecodeExperimenterErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (IExperimenterErrorMsg, error) {
+	_experimentererrormsg := &ExperimenterErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("ExperimenterErrorMsg packet too short: %d < 6", decoder.Length())
+	}
+	_experimentererrormsg.Subtype = uint16(decoder.ReadUint16())
+	_experimentererrormsg.Experimenter = uint32(decoder.ReadUint32())
+
+	switch _experimentererrormsg.Experimenter {
+	case 6035143:
+		return DecodeBsnBaseError(_experimentererrormsg, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ExperimenterErrorMsg'", _experimentererrormsg.Experimenter)
+	}
+}
+
+func NewExperimenterErrorMsg(_experimenter uint32) *ExperimenterErrorMsg {
+	obj := &ExperimenterErrorMsg{
+		ErrorMsg: NewErrorMsg(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type BsnBaseError struct {
+	*ExperimenterErrorMsg
+	ErrMsg string
+}
+
+type IBsnBaseError interface {
+	IExperimenterErrorMsg
+	GetErrMsg() string
+}
+
+func (self *BsnBaseError) GetErrMsg() string {
+	return self.ErrMsg
+}
+
+func (self *BsnBaseError) SetErrMsg(v string) {
+	self.ErrMsg = v
+}
+
+func (self *BsnBaseError) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ExperimenterErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write([]byte(self.ErrMsg))
+
+	return nil
+}
+
+func DecodeBsnBaseError(parent *ExperimenterErrorMsg, decoder *goloxi.Decoder) (IBsnBaseError, error) {
+	_bsnbaseerror := &BsnBaseError{ExperimenterErrorMsg: parent}
+	if decoder.Length() < 256 {
+		return nil, fmt.Errorf("BsnBaseError packet too short: %d < 256", decoder.Length())
+	}
+	_bsnbaseerror.ErrMsg = string(bytes.Trim(decoder.Read(256), "\x00"))
+
+	switch _bsnbaseerror.Subtype {
+	case 1:
+		return DecodeBsnError(_bsnbaseerror, decoder)
+	case 2:
+		return DecodeBsnGentableError(_bsnbaseerror, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'BsnBaseError'", _bsnbaseerror.Subtype)
+	}
+}
+
+func NewBsnBaseError(_subtype uint16) *BsnBaseError {
+	obj := &BsnBaseError{
+		ExperimenterErrorMsg: NewExperimenterErrorMsg(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type BsnBwClearDataReply struct {
+	*BsnHeader
+	Status uint32
+}
+
+type IBsnBwClearDataReply interface {
+	IBsnHeader
+	GetStatus() uint32
+}
+
+func (self *BsnBwClearDataReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnBwClearDataReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnBwClearDataReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnBwClearDataReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnBwClearDataReply, error) {
+	_bsnbwcleardatareply := &BsnBwClearDataReply{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnBwClearDataReply packet too short: %d < 4", decoder.Length())
+	}
+	_bsnbwcleardatareply.Status = uint32(decoder.ReadUint32())
+	return _bsnbwcleardatareply, nil
+}
+
+func NewBsnBwClearDataReply() *BsnBwClearDataReply {
+	obj := &BsnBwClearDataReply{
+		BsnHeader: NewBsnHeader(22),
+	}
+	return obj
+}
+
+type BsnBwClearDataRequest struct {
+	*BsnHeader
+}
+
+type IBsnBwClearDataRequest interface {
+	IBsnHeader
+}
+
+func (self *BsnBwClearDataRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnBwClearDataRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnBwClearDataRequest, error) {
+	_bsnbwcleardatarequest := &BsnBwClearDataRequest{BsnHeader: parent}
+	return _bsnbwcleardatarequest, nil
+}
+
+func NewBsnBwClearDataRequest() *BsnBwClearDataRequest {
+	obj := &BsnBwClearDataRequest{
+		BsnHeader: NewBsnHeader(21),
+	}
+	return obj
+}
+
+type BsnBwEnableGetReply struct {
+	*BsnHeader
+	Enabled uint32
+}
+
+type IBsnBwEnableGetReply interface {
+	IBsnHeader
+	GetEnabled() uint32
+}
+
+func (self *BsnBwEnableGetReply) GetEnabled() uint32 {
+	return self.Enabled
+}
+
+func (self *BsnBwEnableGetReply) SetEnabled(v uint32) {
+	self.Enabled = v
+}
+
+func (self *BsnBwEnableGetReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Enabled))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnBwEnableGetReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnBwEnableGetReply, error) {
+	_bsnbwenablegetreply := &BsnBwEnableGetReply{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnBwEnableGetReply packet too short: %d < 4", decoder.Length())
+	}
+	_bsnbwenablegetreply.Enabled = uint32(decoder.ReadUint32())
+	return _bsnbwenablegetreply, nil
+}
+
+func NewBsnBwEnableGetReply() *BsnBwEnableGetReply {
+	obj := &BsnBwEnableGetReply{
+		BsnHeader: NewBsnHeader(20),
+	}
+	return obj
+}
+
+type BsnBwEnableGetRequest struct {
+	*BsnHeader
+}
+
+type IBsnBwEnableGetRequest interface {
+	IBsnHeader
+}
+
+func (self *BsnBwEnableGetRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnBwEnableGetRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnBwEnableGetRequest, error) {
+	_bsnbwenablegetrequest := &BsnBwEnableGetRequest{BsnHeader: parent}
+	return _bsnbwenablegetrequest, nil
+}
+
+func NewBsnBwEnableGetRequest() *BsnBwEnableGetRequest {
+	obj := &BsnBwEnableGetRequest{
+		BsnHeader: NewBsnHeader(19),
+	}
+	return obj
+}
+
+type BsnBwEnableSetReply struct {
+	*BsnHeader
+	Enable uint32
+	Status uint32
+}
+
+type IBsnBwEnableSetReply interface {
+	IBsnHeader
+	GetEnable() uint32
+	GetStatus() uint32
+}
+
+func (self *BsnBwEnableSetReply) GetEnable() uint32 {
+	return self.Enable
+}
+
+func (self *BsnBwEnableSetReply) SetEnable(v uint32) {
+	self.Enable = v
+}
+
+func (self *BsnBwEnableSetReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnBwEnableSetReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnBwEnableSetReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Enable))
+	encoder.PutUint32(uint32(self.Status))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnBwEnableSetReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnBwEnableSetReply, error) {
+	_bsnbwenablesetreply := &BsnBwEnableSetReply{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnBwEnableSetReply packet too short: %d < 8", decoder.Length())
+	}
+	_bsnbwenablesetreply.Enable = uint32(decoder.ReadUint32())
+	_bsnbwenablesetreply.Status = uint32(decoder.ReadUint32())
+	return _bsnbwenablesetreply, nil
+}
+
+func NewBsnBwEnableSetReply() *BsnBwEnableSetReply {
+	obj := &BsnBwEnableSetReply{
+		BsnHeader: NewBsnHeader(23),
+	}
+	return obj
+}
+
+type BsnBwEnableSetRequest struct {
+	*BsnHeader
+	Enable uint32
+}
+
+type IBsnBwEnableSetRequest interface {
+	IBsnHeader
+	GetEnable() uint32
+}
+
+func (self *BsnBwEnableSetRequest) GetEnable() uint32 {
+	return self.Enable
+}
+
+func (self *BsnBwEnableSetRequest) SetEnable(v uint32) {
+	self.Enable = v
+}
+
+func (self *BsnBwEnableSetRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Enable))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnBwEnableSetRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnBwEnableSetRequest, error) {
+	_bsnbwenablesetrequest := &BsnBwEnableSetRequest{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnBwEnableSetRequest packet too short: %d < 4", decoder.Length())
+	}
+	_bsnbwenablesetrequest.Enable = uint32(decoder.ReadUint32())
+	return _bsnbwenablesetrequest, nil
+}
+
+func NewBsnBwEnableSetRequest() *BsnBwEnableSetRequest {
+	obj := &BsnBwEnableSetRequest{
+		BsnHeader: NewBsnHeader(18),
+	}
+	return obj
+}
+
+type BsnControllerConnectionsReply struct {
+	*BsnHeader
+	Connections []*BsnControllerConnection
+}
+
+type IBsnControllerConnectionsReply interface {
+	IBsnHeader
+	GetConnections() []*BsnControllerConnection
+}
+
+func (self *BsnControllerConnectionsReply) GetConnections() []*BsnControllerConnection {
+	return self.Connections
+}
+
+func (self *BsnControllerConnectionsReply) SetConnections(v []*BsnControllerConnection) {
+	self.Connections = v
+}
+
+func (self *BsnControllerConnectionsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Connections {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnControllerConnectionsReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnControllerConnectionsReply, error) {
+	_bsncontrollerconnectionsreply := &BsnControllerConnectionsReply{BsnHeader: parent}
+
+	for decoder.Length() >= 264 {
+		item, err := DecodeBsnControllerConnection(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsncontrollerconnectionsreply.Connections = append(_bsncontrollerconnectionsreply.Connections, item)
+		}
+	}
+	return _bsncontrollerconnectionsreply, nil
+}
+
+func NewBsnControllerConnectionsReply() *BsnControllerConnectionsReply {
+	obj := &BsnControllerConnectionsReply{
+		BsnHeader: NewBsnHeader(57),
+	}
+	return obj
+}
+
+type BsnControllerConnectionsRequest struct {
+	*BsnHeader
+}
+
+type IBsnControllerConnectionsRequest interface {
+	IBsnHeader
+}
+
+func (self *BsnControllerConnectionsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnControllerConnectionsRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnControllerConnectionsRequest, error) {
+	_bsncontrollerconnectionsrequest := &BsnControllerConnectionsRequest{BsnHeader: parent}
+	return _bsncontrollerconnectionsrequest, nil
+}
+
+func NewBsnControllerConnectionsRequest() *BsnControllerConnectionsRequest {
+	obj := &BsnControllerConnectionsRequest{
+		BsnHeader: NewBsnHeader(56),
+	}
+	return obj
+}
+
+type ExperimenterStatsReply struct {
+	*StatsReply
+	Experimenter uint32
+	Subtype      uint32
+}
+
+type IExperimenterStatsReply interface {
+	IStatsReply
+	GetExperimenter() uint32
+	GetSubtype() uint32
+}
+
+func (self *ExperimenterStatsReply) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *ExperimenterStatsReply) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *ExperimenterStatsReply) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *ExperimenterStatsReply) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *ExperimenterStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.Experimenter))
+	encoder.PutUint32(uint32(self.Subtype))
+
+	return nil
+}
+
+func DecodeExperimenterStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (IExperimenterStatsReply, error) {
+	_experimenterstatsreply := &ExperimenterStatsReply{StatsReply: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("ExperimenterStatsReply packet too short: %d < 12", decoder.Length())
+	}
+	decoder.Skip(4)
+	_experimenterstatsreply.Experimenter = uint32(decoder.ReadUint32())
+	_experimenterstatsreply.Subtype = uint32(decoder.ReadUint32())
+
+	switch _experimenterstatsreply.Experimenter {
+	case 8992:
+		return DecodeNiciraStatsReply(_experimenterstatsreply, decoder)
+	case 6035143:
+		return DecodeBsnStatsReply(_experimenterstatsreply, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ExperimenterStatsReply'", _experimenterstatsreply.Experimenter)
+	}
+}
+
+func NewExperimenterStatsReply(_experimenter uint32) *ExperimenterStatsReply {
+	obj := &ExperimenterStatsReply{
+		StatsReply: NewStatsReply(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type BsnStatsReply struct {
+	*ExperimenterStatsReply
+}
+
+type IBsnStatsReply interface {
+	IExperimenterStatsReply
+}
+
+func (self *BsnStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ExperimenterStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeBsnStatsReply(parent *ExperimenterStatsReply, decoder *goloxi.Decoder) (IBsnStatsReply, error) {
+	_bsnstatsreply := &BsnStatsReply{ExperimenterStatsReply: parent}
+
+	switch _bsnstatsreply.Subtype {
+	case 1:
+		return DecodeBsnLacpStatsReply(_bsnstatsreply, decoder)
+	case 2:
+		return DecodeBsnGentableEntryDescStatsReply(_bsnstatsreply, decoder)
+	case 3:
+		return DecodeBsnGentableEntryStatsReply(_bsnstatsreply, decoder)
+	case 4:
+		return DecodeBsnGentableDescStatsReply(_bsnstatsreply, decoder)
+	case 5:
+		return DecodeBsnGentableBucketStatsReply(_bsnstatsreply, decoder)
+	case 6:
+		return DecodeBsnSwitchPipelineStatsReply(_bsnstatsreply, decoder)
+	case 7:
+		return DecodeBsnGentableStatsReply(_bsnstatsreply, decoder)
+	case 8:
+		return DecodeBsnPortCounterStatsReply(_bsnstatsreply, decoder)
+	case 9:
+		return DecodeBsnVlanCounterStatsReply(_bsnstatsreply, decoder)
+	case 10:
+		return DecodeBsnFlowChecksumBucketStatsReply(_bsnstatsreply, decoder)
+	case 11:
+		return DecodeBsnTableChecksumStatsReply(_bsnstatsreply, decoder)
+	case 12:
+		return DecodeBsnDebugCounterStatsReply(_bsnstatsreply, decoder)
+	case 13:
+		return DecodeBsnDebugCounterDescStatsReply(_bsnstatsreply, decoder)
+	case 14:
+		return DecodeBsnImageDescStatsReply(_bsnstatsreply, decoder)
+	case 15:
+		return DecodeBsnVrfCounterStatsReply(_bsnstatsreply, decoder)
+	case 16:
+		return DecodeBsnGenericStatsReply(_bsnstatsreply, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'BsnStatsReply'", _bsnstatsreply.Subtype)
+	}
+}
+
+func NewBsnStatsReply(_subtype uint32) *BsnStatsReply {
+	obj := &BsnStatsReply{
+		ExperimenterStatsReply: NewExperimenterStatsReply(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type BsnDebugCounterDescStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnDebugCounterDescStatsEntry
+}
+
+type IBsnDebugCounterDescStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnDebugCounterDescStatsEntry
+}
+
+func (self *BsnDebugCounterDescStatsReply) GetEntries() []*BsnDebugCounterDescStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnDebugCounterDescStatsReply) SetEntries(v []*BsnDebugCounterDescStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnDebugCounterDescStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnDebugCounterDescStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnDebugCounterDescStatsReply, error) {
+	_bsndebugcounterdescstatsreply := &BsnDebugCounterDescStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 328 {
+		item, err := DecodeBsnDebugCounterDescStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsndebugcounterdescstatsreply.Entries = append(_bsndebugcounterdescstatsreply.Entries, item)
+		}
+	}
+	return _bsndebugcounterdescstatsreply, nil
+}
+
+func NewBsnDebugCounterDescStatsReply() *BsnDebugCounterDescStatsReply {
+	obj := &BsnDebugCounterDescStatsReply{
+		BsnStatsReply: NewBsnStatsReply(13),
+	}
+	return obj
+}
+
+type ExperimenterStatsRequest struct {
+	*StatsRequest
+	Experimenter uint32
+	Subtype      uint32
+}
+
+type IExperimenterStatsRequest interface {
+	IStatsRequest
+	GetExperimenter() uint32
+	GetSubtype() uint32
+}
+
+func (self *ExperimenterStatsRequest) GetExperimenter() uint32 {
+	return self.Experimenter
+}
+
+func (self *ExperimenterStatsRequest) SetExperimenter(v uint32) {
+	self.Experimenter = v
+}
+
+func (self *ExperimenterStatsRequest) GetSubtype() uint32 {
+	return self.Subtype
+}
+
+func (self *ExperimenterStatsRequest) SetSubtype(v uint32) {
+	self.Subtype = v
+}
+
+func (self *ExperimenterStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.Experimenter))
+	encoder.PutUint32(uint32(self.Subtype))
+
+	return nil
+}
+
+func DecodeExperimenterStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (IExperimenterStatsRequest, error) {
+	_experimenterstatsrequest := &ExperimenterStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("ExperimenterStatsRequest packet too short: %d < 12", decoder.Length())
+	}
+	decoder.Skip(4)
+	_experimenterstatsrequest.Experimenter = uint32(decoder.ReadUint32())
+	_experimenterstatsrequest.Subtype = uint32(decoder.ReadUint32())
+
+	switch _experimenterstatsrequest.Experimenter {
+	case 8992:
+		return DecodeNiciraFlowStatsRequest(_experimenterstatsrequest, decoder)
+	case 6035143:
+		return DecodeBsnStatsRequest(_experimenterstatsrequest, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'ExperimenterStatsRequest'", _experimenterstatsrequest.Experimenter)
+	}
+}
+
+func NewExperimenterStatsRequest(_experimenter uint32) *ExperimenterStatsRequest {
+	obj := &ExperimenterStatsRequest{
+		StatsRequest: NewStatsRequest(65535),
+	}
+	obj.Experimenter = _experimenter
+	return obj
+}
+
+type BsnStatsRequest struct {
+	*ExperimenterStatsRequest
+}
+
+type IBsnStatsRequest interface {
+	IExperimenterStatsRequest
+}
+
+func (self *BsnStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ExperimenterStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeBsnStatsRequest(parent *ExperimenterStatsRequest, decoder *goloxi.Decoder) (IBsnStatsRequest, error) {
+	_bsnstatsrequest := &BsnStatsRequest{ExperimenterStatsRequest: parent}
+
+	switch _bsnstatsrequest.Subtype {
+	case 1:
+		return DecodeBsnLacpStatsRequest(_bsnstatsrequest, decoder)
+	case 2:
+		return DecodeBsnGentableEntryDescStatsRequest(_bsnstatsrequest, decoder)
+	case 3:
+		return DecodeBsnGentableEntryStatsRequest(_bsnstatsrequest, decoder)
+	case 4:
+		return DecodeBsnGentableDescStatsRequest(_bsnstatsrequest, decoder)
+	case 5:
+		return DecodeBsnGentableBucketStatsRequest(_bsnstatsrequest, decoder)
+	case 6:
+		return DecodeBsnSwitchPipelineStatsRequest(_bsnstatsrequest, decoder)
+	case 7:
+		return DecodeBsnGentableStatsRequest(_bsnstatsrequest, decoder)
+	case 8:
+		return DecodeBsnPortCounterStatsRequest(_bsnstatsrequest, decoder)
+	case 9:
+		return DecodeBsnVlanCounterStatsRequest(_bsnstatsrequest, decoder)
+	case 10:
+		return DecodeBsnFlowChecksumBucketStatsRequest(_bsnstatsrequest, decoder)
+	case 11:
+		return DecodeBsnTableChecksumStatsRequest(_bsnstatsrequest, decoder)
+	case 12:
+		return DecodeBsnDebugCounterStatsRequest(_bsnstatsrequest, decoder)
+	case 13:
+		return DecodeBsnDebugCounterDescStatsRequest(_bsnstatsrequest, decoder)
+	case 14:
+		return DecodeBsnImageDescStatsRequest(_bsnstatsrequest, decoder)
+	case 15:
+		return DecodeBsnVrfCounterStatsRequest(_bsnstatsrequest, decoder)
+	case 16:
+		return DecodeBsnGenericStatsRequest(_bsnstatsrequest, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'BsnStatsRequest'", _bsnstatsrequest.Subtype)
+	}
+}
+
+func NewBsnStatsRequest(_subtype uint32) *BsnStatsRequest {
+	obj := &BsnStatsRequest{
+		ExperimenterStatsRequest: NewExperimenterStatsRequest(6035143),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type BsnDebugCounterDescStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnDebugCounterDescStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnDebugCounterDescStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnDebugCounterDescStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnDebugCounterDescStatsRequest, error) {
+	_bsndebugcounterdescstatsrequest := &BsnDebugCounterDescStatsRequest{BsnStatsRequest: parent}
+	return _bsndebugcounterdescstatsrequest, nil
+}
+
+func NewBsnDebugCounterDescStatsRequest() *BsnDebugCounterDescStatsRequest {
+	obj := &BsnDebugCounterDescStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(13),
+	}
+	return obj
+}
+
+type BsnDebugCounterStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnDebugCounterStatsEntry
+}
+
+type IBsnDebugCounterStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnDebugCounterStatsEntry
+}
+
+func (self *BsnDebugCounterStatsReply) GetEntries() []*BsnDebugCounterStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnDebugCounterStatsReply) SetEntries(v []*BsnDebugCounterStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnDebugCounterStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnDebugCounterStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnDebugCounterStatsReply, error) {
+	_bsndebugcounterstatsreply := &BsnDebugCounterStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 16 {
+		item, err := DecodeBsnDebugCounterStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsndebugcounterstatsreply.Entries = append(_bsndebugcounterstatsreply.Entries, item)
+		}
+	}
+	return _bsndebugcounterstatsreply, nil
+}
+
+func NewBsnDebugCounterStatsReply() *BsnDebugCounterStatsReply {
+	obj := &BsnDebugCounterStatsReply{
+		BsnStatsReply: NewBsnStatsReply(12),
+	}
+	return obj
+}
+
+type BsnDebugCounterStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnDebugCounterStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnDebugCounterStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnDebugCounterStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnDebugCounterStatsRequest, error) {
+	_bsndebugcounterstatsrequest := &BsnDebugCounterStatsRequest{BsnStatsRequest: parent}
+	return _bsndebugcounterstatsrequest, nil
+}
+
+func NewBsnDebugCounterStatsRequest() *BsnDebugCounterStatsRequest {
+	obj := &BsnDebugCounterStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(12),
+	}
+	return obj
+}
+
+type BsnError struct {
+	*BsnBaseError
+}
+
+type IBsnError interface {
+	IBsnBaseError
+}
+
+func (self *BsnError) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnBaseError.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnError(parent *BsnBaseError, decoder *goloxi.Decoder) (*BsnError, error) {
+	_bsnerror := &BsnError{BsnBaseError: parent}
+	return _bsnerror, nil
+}
+
+func NewBsnError() *BsnError {
+	obj := &BsnError{
+		BsnBaseError: NewBsnBaseError(1),
+	}
+	return obj
+}
+
+type BsnFlowChecksumBucketStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnFlowChecksumBucketStatsEntry
+}
+
+type IBsnFlowChecksumBucketStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnFlowChecksumBucketStatsEntry
+}
+
+func (self *BsnFlowChecksumBucketStatsReply) GetEntries() []*BsnFlowChecksumBucketStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnFlowChecksumBucketStatsReply) SetEntries(v []*BsnFlowChecksumBucketStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnFlowChecksumBucketStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnFlowChecksumBucketStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnFlowChecksumBucketStatsReply, error) {
+	_bsnflowchecksumbucketstatsreply := &BsnFlowChecksumBucketStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeBsnFlowChecksumBucketStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnflowchecksumbucketstatsreply.Entries = append(_bsnflowchecksumbucketstatsreply.Entries, item)
+		}
+	}
+	return _bsnflowchecksumbucketstatsreply, nil
+}
+
+func NewBsnFlowChecksumBucketStatsReply() *BsnFlowChecksumBucketStatsReply {
+	obj := &BsnFlowChecksumBucketStatsReply{
+		BsnStatsReply: NewBsnStatsReply(10),
+	}
+	return obj
+}
+
+type BsnFlowChecksumBucketStatsRequest struct {
+	*BsnStatsRequest
+	TableId uint8
+}
+
+type IBsnFlowChecksumBucketStatsRequest interface {
+	IBsnStatsRequest
+	GetTableId() uint8
+}
+
+func (self *BsnFlowChecksumBucketStatsRequest) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *BsnFlowChecksumBucketStatsRequest) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *BsnFlowChecksumBucketStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.TableId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnFlowChecksumBucketStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnFlowChecksumBucketStatsRequest, error) {
+	_bsnflowchecksumbucketstatsrequest := &BsnFlowChecksumBucketStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnFlowChecksumBucketStatsRequest packet too short: %d < 1", decoder.Length())
+	}
+	_bsnflowchecksumbucketstatsrequest.TableId = uint8(decoder.ReadByte())
+	return _bsnflowchecksumbucketstatsrequest, nil
+}
+
+func NewBsnFlowChecksumBucketStatsRequest() *BsnFlowChecksumBucketStatsRequest {
+	obj := &BsnFlowChecksumBucketStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(10),
+	}
+	return obj
+}
+
+type BsnFlowIdle struct {
+	*BsnHeader
+	Cookie   uint64
+	Priority uint16
+	TableId  uint8
+	Match    Match
+}
+
+type IBsnFlowIdle interface {
+	IBsnHeader
+	GetCookie() uint64
+	GetPriority() uint16
+	GetTableId() uint8
+	GetMatch() Match
+}
+
+func (self *BsnFlowIdle) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *BsnFlowIdle) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *BsnFlowIdle) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *BsnFlowIdle) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *BsnFlowIdle) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *BsnFlowIdle) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *BsnFlowIdle) GetMatch() Match {
+	return self.Match
+}
+
+func (self *BsnFlowIdle) SetMatch(v Match) {
+	self.Match = v
+}
+
+func (self *BsnFlowIdle) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 5))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnFlowIdle(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnFlowIdle, error) {
+	_bsnflowidle := &BsnFlowIdle{BsnHeader: parent}
+	if decoder.Length() < 24 {
+		return nil, fmt.Errorf("BsnFlowIdle packet too short: %d < 24", decoder.Length())
+	}
+	_bsnflowidle.Cookie = uint64(decoder.ReadUint64())
+	_bsnflowidle.Priority = uint16(decoder.ReadUint16())
+	_bsnflowidle.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(5)
+	if err := _bsnflowidle.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+	return _bsnflowidle, nil
+}
+
+func NewBsnFlowIdle() *BsnFlowIdle {
+	obj := &BsnFlowIdle{
+		BsnHeader: NewBsnHeader(40),
+	}
+	return obj
+}
+
+type BsnFlowIdleEnableGetReply struct {
+	*BsnHeader
+	Enabled uint32
+}
+
+type IBsnFlowIdleEnableGetReply interface {
+	IBsnHeader
+	GetEnabled() uint32
+}
+
+func (self *BsnFlowIdleEnableGetReply) GetEnabled() uint32 {
+	return self.Enabled
+}
+
+func (self *BsnFlowIdleEnableGetReply) SetEnabled(v uint32) {
+	self.Enabled = v
+}
+
+func (self *BsnFlowIdleEnableGetReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Enabled))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnFlowIdleEnableGetReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnFlowIdleEnableGetReply, error) {
+	_bsnflowidleenablegetreply := &BsnFlowIdleEnableGetReply{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnFlowIdleEnableGetReply packet too short: %d < 4", decoder.Length())
+	}
+	_bsnflowidleenablegetreply.Enabled = uint32(decoder.ReadUint32())
+	return _bsnflowidleenablegetreply, nil
+}
+
+func NewBsnFlowIdleEnableGetReply() *BsnFlowIdleEnableGetReply {
+	obj := &BsnFlowIdleEnableGetReply{
+		BsnHeader: NewBsnHeader(39),
+	}
+	return obj
+}
+
+type BsnFlowIdleEnableGetRequest struct {
+	*BsnHeader
+}
+
+type IBsnFlowIdleEnableGetRequest interface {
+	IBsnHeader
+}
+
+func (self *BsnFlowIdleEnableGetRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnFlowIdleEnableGetRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnFlowIdleEnableGetRequest, error) {
+	_bsnflowidleenablegetrequest := &BsnFlowIdleEnableGetRequest{BsnHeader: parent}
+	return _bsnflowidleenablegetrequest, nil
+}
+
+func NewBsnFlowIdleEnableGetRequest() *BsnFlowIdleEnableGetRequest {
+	obj := &BsnFlowIdleEnableGetRequest{
+		BsnHeader: NewBsnHeader(38),
+	}
+	return obj
+}
+
+type BsnFlowIdleEnableSetReply struct {
+	*BsnHeader
+	Enable uint32
+	Status uint32
+}
+
+type IBsnFlowIdleEnableSetReply interface {
+	IBsnHeader
+	GetEnable() uint32
+	GetStatus() uint32
+}
+
+func (self *BsnFlowIdleEnableSetReply) GetEnable() uint32 {
+	return self.Enable
+}
+
+func (self *BsnFlowIdleEnableSetReply) SetEnable(v uint32) {
+	self.Enable = v
+}
+
+func (self *BsnFlowIdleEnableSetReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnFlowIdleEnableSetReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnFlowIdleEnableSetReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Enable))
+	encoder.PutUint32(uint32(self.Status))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnFlowIdleEnableSetReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnFlowIdleEnableSetReply, error) {
+	_bsnflowidleenablesetreply := &BsnFlowIdleEnableSetReply{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnFlowIdleEnableSetReply packet too short: %d < 8", decoder.Length())
+	}
+	_bsnflowidleenablesetreply.Enable = uint32(decoder.ReadUint32())
+	_bsnflowidleenablesetreply.Status = uint32(decoder.ReadUint32())
+	return _bsnflowidleenablesetreply, nil
+}
+
+func NewBsnFlowIdleEnableSetReply() *BsnFlowIdleEnableSetReply {
+	obj := &BsnFlowIdleEnableSetReply{
+		BsnHeader: NewBsnHeader(37),
+	}
+	return obj
+}
+
+type BsnFlowIdleEnableSetRequest struct {
+	*BsnHeader
+	Enable uint32
+}
+
+type IBsnFlowIdleEnableSetRequest interface {
+	IBsnHeader
+	GetEnable() uint32
+}
+
+func (self *BsnFlowIdleEnableSetRequest) GetEnable() uint32 {
+	return self.Enable
+}
+
+func (self *BsnFlowIdleEnableSetRequest) SetEnable(v uint32) {
+	self.Enable = v
+}
+
+func (self *BsnFlowIdleEnableSetRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Enable))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnFlowIdleEnableSetRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnFlowIdleEnableSetRequest, error) {
+	_bsnflowidleenablesetrequest := &BsnFlowIdleEnableSetRequest{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnFlowIdleEnableSetRequest packet too short: %d < 4", decoder.Length())
+	}
+	_bsnflowidleenablesetrequest.Enable = uint32(decoder.ReadUint32())
+	return _bsnflowidleenablesetrequest, nil
+}
+
+func NewBsnFlowIdleEnableSetRequest() *BsnFlowIdleEnableSetRequest {
+	obj := &BsnFlowIdleEnableSetRequest{
+		BsnHeader: NewBsnHeader(36),
+	}
+	return obj
+}
+
+type BsnGenericStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnGenericStatsEntry
+}
+
+type IBsnGenericStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnGenericStatsEntry
+}
+
+func (self *BsnGenericStatsReply) GetEntries() []*BsnGenericStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnGenericStatsReply) SetEntries(v []*BsnGenericStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnGenericStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGenericStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnGenericStatsReply, error) {
+	_bsngenericstatsreply := &BsnGenericStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 2 {
+		item, err := DecodeBsnGenericStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngenericstatsreply.Entries = append(_bsngenericstatsreply.Entries, item)
+		}
+	}
+	return _bsngenericstatsreply, nil
+}
+
+func NewBsnGenericStatsReply() *BsnGenericStatsReply {
+	obj := &BsnGenericStatsReply{
+		BsnStatsReply: NewBsnStatsReply(16),
+	}
+	return obj
+}
+
+type BsnGenericStatsRequest struct {
+	*BsnStatsRequest
+	Name string
+	Tlvs []IBsnTlv
+}
+
+type IBsnGenericStatsRequest interface {
+	IBsnStatsRequest
+	GetName() string
+	GetTlvs() []IBsnTlv
+}
+
+func (self *BsnGenericStatsRequest) GetName() string {
+	return self.Name
+}
+
+func (self *BsnGenericStatsRequest) SetName(v string) {
+	self.Name = v
+}
+
+func (self *BsnGenericStatsRequest) GetTlvs() []IBsnTlv {
+	return self.Tlvs
+}
+
+func (self *BsnGenericStatsRequest) SetTlvs(v []IBsnTlv) {
+	self.Tlvs = v
+}
+
+func (self *BsnGenericStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write([]byte(self.Name))
+	for _, obj := range self.Tlvs {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGenericStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnGenericStatsRequest, error) {
+	_bsngenericstatsrequest := &BsnGenericStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 64 {
+		return nil, fmt.Errorf("BsnGenericStatsRequest packet too short: %d < 64", decoder.Length())
+	}
+	_bsngenericstatsrequest.Name = string(bytes.Trim(decoder.Read(64), "\x00"))
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngenericstatsrequest.Tlvs = append(_bsngenericstatsrequest.Tlvs, item)
+		}
+	}
+	return _bsngenericstatsrequest, nil
+}
+
+func NewBsnGenericStatsRequest() *BsnGenericStatsRequest {
+	obj := &BsnGenericStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(16),
+	}
+	return obj
+}
+
+type BsnGentableBucketStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnGentableBucketStatsEntry
+}
+
+type IBsnGentableBucketStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnGentableBucketStatsEntry
+}
+
+func (self *BsnGentableBucketStatsReply) GetEntries() []*BsnGentableBucketStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnGentableBucketStatsReply) SetEntries(v []*BsnGentableBucketStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnGentableBucketStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableBucketStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnGentableBucketStatsReply, error) {
+	_bsngentablebucketstatsreply := &BsnGentableBucketStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 16 {
+		item, err := DecodeBsnGentableBucketStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentablebucketstatsreply.Entries = append(_bsngentablebucketstatsreply.Entries, item)
+		}
+	}
+	return _bsngentablebucketstatsreply, nil
+}
+
+func NewBsnGentableBucketStatsReply() *BsnGentableBucketStatsReply {
+	obj := &BsnGentableBucketStatsReply{
+		BsnStatsReply: NewBsnStatsReply(5),
+	}
+	return obj
+}
+
+type BsnGentableBucketStatsRequest struct {
+	*BsnStatsRequest
+	TableId uint16
+}
+
+type IBsnGentableBucketStatsRequest interface {
+	IBsnStatsRequest
+	GetTableId() uint16
+}
+
+func (self *BsnGentableBucketStatsRequest) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableBucketStatsRequest) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableBucketStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableBucketStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnGentableBucketStatsRequest, error) {
+	_bsngentablebucketstatsrequest := &BsnGentableBucketStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnGentableBucketStatsRequest packet too short: %d < 2", decoder.Length())
+	}
+	_bsngentablebucketstatsrequest.TableId = uint16(decoder.ReadUint16())
+	return _bsngentablebucketstatsrequest, nil
+}
+
+func NewBsnGentableBucketStatsRequest() *BsnGentableBucketStatsRequest {
+	obj := &BsnGentableBucketStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(5),
+	}
+	return obj
+}
+
+type BsnGentableClearReply struct {
+	*BsnHeader
+	TableId      uint16
+	DeletedCount uint32
+	ErrorCount   uint32
+}
+
+type IBsnGentableClearReply interface {
+	IBsnHeader
+	GetTableId() uint16
+	GetDeletedCount() uint32
+	GetErrorCount() uint32
+}
+
+func (self *BsnGentableClearReply) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableClearReply) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableClearReply) GetDeletedCount() uint32 {
+	return self.DeletedCount
+}
+
+func (self *BsnGentableClearReply) SetDeletedCount(v uint32) {
+	self.DeletedCount = v
+}
+
+func (self *BsnGentableClearReply) GetErrorCount() uint32 {
+	return self.ErrorCount
+}
+
+func (self *BsnGentableClearReply) SetErrorCount(v uint32) {
+	self.ErrorCount = v
+}
+
+func (self *BsnGentableClearReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.DeletedCount))
+	encoder.PutUint32(uint32(self.ErrorCount))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableClearReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGentableClearReply, error) {
+	_bsngentableclearreply := &BsnGentableClearReply{BsnHeader: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("BsnGentableClearReply packet too short: %d < 12", decoder.Length())
+	}
+	_bsngentableclearreply.TableId = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_bsngentableclearreply.DeletedCount = uint32(decoder.ReadUint32())
+	_bsngentableclearreply.ErrorCount = uint32(decoder.ReadUint32())
+	return _bsngentableclearreply, nil
+}
+
+func NewBsnGentableClearReply() *BsnGentableClearReply {
+	obj := &BsnGentableClearReply{
+		BsnHeader: NewBsnHeader(49),
+	}
+	return obj
+}
+
+type BsnGentableClearRequest struct {
+	*BsnHeader
+	TableId      uint16
+	Checksum     Checksum128
+	ChecksumMask Checksum128
+}
+
+type IBsnGentableClearRequest interface {
+	IBsnHeader
+	GetTableId() uint16
+	GetChecksum() Checksum128
+	GetChecksumMask() Checksum128
+}
+
+func (self *BsnGentableClearRequest) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableClearRequest) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableClearRequest) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *BsnGentableClearRequest) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *BsnGentableClearRequest) GetChecksumMask() Checksum128 {
+	return self.ChecksumMask
+}
+
+func (self *BsnGentableClearRequest) SetChecksumMask(v Checksum128) {
+	self.ChecksumMask = v
+}
+
+func (self *BsnGentableClearRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	self.Checksum.Serialize(encoder)
+	self.ChecksumMask.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableClearRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGentableClearRequest, error) {
+	_bsngentableclearrequest := &BsnGentableClearRequest{BsnHeader: parent}
+	if decoder.Length() < 36 {
+		return nil, fmt.Errorf("BsnGentableClearRequest packet too short: %d < 36", decoder.Length())
+	}
+	_bsngentableclearrequest.TableId = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_bsngentableclearrequest.Checksum.Decode(decoder)
+	_bsngentableclearrequest.ChecksumMask.Decode(decoder)
+	return _bsngentableclearrequest, nil
+}
+
+func NewBsnGentableClearRequest() *BsnGentableClearRequest {
+	obj := &BsnGentableClearRequest{
+		BsnHeader: NewBsnHeader(48),
+	}
+	return obj
+}
+
+type BsnGentableDescStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnGentableDescStatsEntry
+}
+
+type IBsnGentableDescStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnGentableDescStatsEntry
+}
+
+func (self *BsnGentableDescStatsReply) GetEntries() []*BsnGentableDescStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnGentableDescStatsReply) SetEntries(v []*BsnGentableDescStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnGentableDescStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableDescStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnGentableDescStatsReply, error) {
+	_bsngentabledescstatsreply := &BsnGentableDescStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 48 {
+		item, err := DecodeBsnGentableDescStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentabledescstatsreply.Entries = append(_bsngentabledescstatsreply.Entries, item)
+		}
+	}
+	return _bsngentabledescstatsreply, nil
+}
+
+func NewBsnGentableDescStatsReply() *BsnGentableDescStatsReply {
+	obj := &BsnGentableDescStatsReply{
+		BsnStatsReply: NewBsnStatsReply(4),
+	}
+	return obj
+}
+
+type BsnGentableDescStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnGentableDescStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnGentableDescStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableDescStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnGentableDescStatsRequest, error) {
+	_bsngentabledescstatsrequest := &BsnGentableDescStatsRequest{BsnStatsRequest: parent}
+	return _bsngentabledescstatsrequest, nil
+}
+
+func NewBsnGentableDescStatsRequest() *BsnGentableDescStatsRequest {
+	obj := &BsnGentableDescStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(4),
+	}
+	return obj
+}
+
+type BsnGentableEntryAdd struct {
+	*BsnHeader
+	TableId   uint16
+	KeyLength uint16
+	Checksum  Checksum128
+	Key       []IBsnTlv
+	Value     []IBsnTlv
+}
+
+type IBsnGentableEntryAdd interface {
+	IBsnHeader
+	GetTableId() uint16
+	GetKeyLength() uint16
+	GetChecksum() Checksum128
+	GetKey() []IBsnTlv
+	GetValue() []IBsnTlv
+}
+
+func (self *BsnGentableEntryAdd) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableEntryAdd) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableEntryAdd) GetKeyLength() uint16 {
+	return self.KeyLength
+}
+
+func (self *BsnGentableEntryAdd) SetKeyLength(v uint16) {
+	self.KeyLength = v
+}
+
+func (self *BsnGentableEntryAdd) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *BsnGentableEntryAdd) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *BsnGentableEntryAdd) GetKey() []IBsnTlv {
+	return self.Key
+}
+
+func (self *BsnGentableEntryAdd) SetKey(v []IBsnTlv) {
+	self.Key = v
+}
+
+func (self *BsnGentableEntryAdd) GetValue() []IBsnTlv {
+	return self.Value
+}
+
+func (self *BsnGentableEntryAdd) SetValue(v []IBsnTlv) {
+	self.Value = v
+}
+
+func (self *BsnGentableEntryAdd) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.PutUint16(uint16(self.KeyLength))
+	self.Checksum.Serialize(encoder)
+	for _, obj := range self.Key {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+	for _, obj := range self.Value {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryAdd(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGentableEntryAdd, error) {
+	_bsngentableentryadd := &BsnGentableEntryAdd{BsnHeader: parent}
+	if decoder.Length() < 20 {
+		return nil, fmt.Errorf("BsnGentableEntryAdd packet too short: %d < 20", decoder.Length())
+	}
+	_bsngentableentryadd.TableId = uint16(decoder.ReadUint16())
+	_bsngentableentryadd.KeyLength = uint16(decoder.ReadUint16())
+	_bsngentableentryadd.Checksum.Decode(decoder)
+
+	for i := 0; i < int(_bsngentableentryadd.KeyLength); i++ {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentryadd.Key = append(_bsngentableentryadd.Key, item)
+		}
+	}
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentryadd.Value = append(_bsngentableentryadd.Value, item)
+		}
+	}
+	return _bsngentableentryadd, nil
+}
+
+func NewBsnGentableEntryAdd() *BsnGentableEntryAdd {
+	obj := &BsnGentableEntryAdd{
+		BsnHeader: NewBsnHeader(46),
+	}
+	return obj
+}
+
+type BsnGentableEntryDelete struct {
+	*BsnHeader
+	TableId uint16
+	Key     []IBsnTlv
+}
+
+type IBsnGentableEntryDelete interface {
+	IBsnHeader
+	GetTableId() uint16
+	GetKey() []IBsnTlv
+}
+
+func (self *BsnGentableEntryDelete) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableEntryDelete) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableEntryDelete) GetKey() []IBsnTlv {
+	return self.Key
+}
+
+func (self *BsnGentableEntryDelete) SetKey(v []IBsnTlv) {
+	self.Key = v
+}
+
+func (self *BsnGentableEntryDelete) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	for _, obj := range self.Key {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryDelete(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGentableEntryDelete, error) {
+	_bsngentableentrydelete := &BsnGentableEntryDelete{BsnHeader: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnGentableEntryDelete packet too short: %d < 2", decoder.Length())
+	}
+	_bsngentableentrydelete.TableId = uint16(decoder.ReadUint16())
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnTlv(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentrydelete.Key = append(_bsngentableentrydelete.Key, item)
+		}
+	}
+	return _bsngentableentrydelete, nil
+}
+
+func NewBsnGentableEntryDelete() *BsnGentableEntryDelete {
+	obj := &BsnGentableEntryDelete{
+		BsnHeader: NewBsnHeader(47),
+	}
+	return obj
+}
+
+type BsnGentableEntryDescStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnGentableEntryDescStatsEntry
+}
+
+type IBsnGentableEntryDescStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnGentableEntryDescStatsEntry
+}
+
+func (self *BsnGentableEntryDescStatsReply) GetEntries() []*BsnGentableEntryDescStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnGentableEntryDescStatsReply) SetEntries(v []*BsnGentableEntryDescStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnGentableEntryDescStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryDescStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnGentableEntryDescStatsReply, error) {
+	_bsngentableentrydescstatsreply := &BsnGentableEntryDescStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 20 {
+		item, err := DecodeBsnGentableEntryDescStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentrydescstatsreply.Entries = append(_bsngentableentrydescstatsreply.Entries, item)
+		}
+	}
+	return _bsngentableentrydescstatsreply, nil
+}
+
+func NewBsnGentableEntryDescStatsReply() *BsnGentableEntryDescStatsReply {
+	obj := &BsnGentableEntryDescStatsReply{
+		BsnStatsReply: NewBsnStatsReply(2),
+	}
+	return obj
+}
+
+type BsnGentableEntryDescStatsRequest struct {
+	*BsnStatsRequest
+	TableId      uint16
+	Checksum     Checksum128
+	ChecksumMask Checksum128
+}
+
+type IBsnGentableEntryDescStatsRequest interface {
+	IBsnStatsRequest
+	GetTableId() uint16
+	GetChecksum() Checksum128
+	GetChecksumMask() Checksum128
+}
+
+func (self *BsnGentableEntryDescStatsRequest) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableEntryDescStatsRequest) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableEntryDescStatsRequest) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *BsnGentableEntryDescStatsRequest) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *BsnGentableEntryDescStatsRequest) GetChecksumMask() Checksum128 {
+	return self.ChecksumMask
+}
+
+func (self *BsnGentableEntryDescStatsRequest) SetChecksumMask(v Checksum128) {
+	self.ChecksumMask = v
+}
+
+func (self *BsnGentableEntryDescStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	self.Checksum.Serialize(encoder)
+	self.ChecksumMask.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryDescStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnGentableEntryDescStatsRequest, error) {
+	_bsngentableentrydescstatsrequest := &BsnGentableEntryDescStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 36 {
+		return nil, fmt.Errorf("BsnGentableEntryDescStatsRequest packet too short: %d < 36", decoder.Length())
+	}
+	_bsngentableentrydescstatsrequest.TableId = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_bsngentableentrydescstatsrequest.Checksum.Decode(decoder)
+	_bsngentableentrydescstatsrequest.ChecksumMask.Decode(decoder)
+	return _bsngentableentrydescstatsrequest, nil
+}
+
+func NewBsnGentableEntryDescStatsRequest() *BsnGentableEntryDescStatsRequest {
+	obj := &BsnGentableEntryDescStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(2),
+	}
+	return obj
+}
+
+type BsnGentableEntryStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnGentableEntryStatsEntry
+}
+
+type IBsnGentableEntryStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnGentableEntryStatsEntry
+}
+
+func (self *BsnGentableEntryStatsReply) GetEntries() []*BsnGentableEntryStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnGentableEntryStatsReply) SetEntries(v []*BsnGentableEntryStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnGentableEntryStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnGentableEntryStatsReply, error) {
+	_bsngentableentrystatsreply := &BsnGentableEntryStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeBsnGentableEntryStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentableentrystatsreply.Entries = append(_bsngentableentrystatsreply.Entries, item)
+		}
+	}
+	return _bsngentableentrystatsreply, nil
+}
+
+func NewBsnGentableEntryStatsReply() *BsnGentableEntryStatsReply {
+	obj := &BsnGentableEntryStatsReply{
+		BsnStatsReply: NewBsnStatsReply(3),
+	}
+	return obj
+}
+
+type BsnGentableEntryStatsRequest struct {
+	*BsnStatsRequest
+	TableId      uint16
+	Checksum     Checksum128
+	ChecksumMask Checksum128
+}
+
+type IBsnGentableEntryStatsRequest interface {
+	IBsnStatsRequest
+	GetTableId() uint16
+	GetChecksum() Checksum128
+	GetChecksumMask() Checksum128
+}
+
+func (self *BsnGentableEntryStatsRequest) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableEntryStatsRequest) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableEntryStatsRequest) GetChecksum() Checksum128 {
+	return self.Checksum
+}
+
+func (self *BsnGentableEntryStatsRequest) SetChecksum(v Checksum128) {
+	self.Checksum = v
+}
+
+func (self *BsnGentableEntryStatsRequest) GetChecksumMask() Checksum128 {
+	return self.ChecksumMask
+}
+
+func (self *BsnGentableEntryStatsRequest) SetChecksumMask(v Checksum128) {
+	self.ChecksumMask = v
+}
+
+func (self *BsnGentableEntryStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	self.Checksum.Serialize(encoder)
+	self.ChecksumMask.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableEntryStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnGentableEntryStatsRequest, error) {
+	_bsngentableentrystatsrequest := &BsnGentableEntryStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 36 {
+		return nil, fmt.Errorf("BsnGentableEntryStatsRequest packet too short: %d < 36", decoder.Length())
+	}
+	_bsngentableentrystatsrequest.TableId = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_bsngentableentrystatsrequest.Checksum.Decode(decoder)
+	_bsngentableentrystatsrequest.ChecksumMask.Decode(decoder)
+	return _bsngentableentrystatsrequest, nil
+}
+
+func NewBsnGentableEntryStatsRequest() *BsnGentableEntryStatsRequest {
+	obj := &BsnGentableEntryStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(3),
+	}
+	return obj
+}
+
+type BsnGentableError struct {
+	*BsnBaseError
+	ErrorCode BsnGentableErrorCode
+	TableId   uint16
+}
+
+type IBsnGentableError interface {
+	IBsnBaseError
+	GetErrorCode() BsnGentableErrorCode
+	GetTableId() uint16
+}
+
+func (self *BsnGentableError) GetErrorCode() BsnGentableErrorCode {
+	return self.ErrorCode
+}
+
+func (self *BsnGentableError) SetErrorCode(v BsnGentableErrorCode) {
+	self.ErrorCode = v
+}
+
+func (self *BsnGentableError) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableError) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableError) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnBaseError.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.ErrorCode))
+	encoder.PutUint16(uint16(self.TableId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableError(parent *BsnBaseError, decoder *goloxi.Decoder) (*BsnGentableError, error) {
+	_bsngentableerror := &BsnGentableError{BsnBaseError: parent}
+	if decoder.Length() < 260 {
+		return nil, fmt.Errorf("BsnGentableError packet too short: %d < 260", decoder.Length())
+	}
+	_bsngentableerror.ErrorCode = BsnGentableErrorCode(decoder.ReadUint16())
+	_bsngentableerror.TableId = uint16(decoder.ReadUint16())
+	return _bsngentableerror, nil
+}
+
+func NewBsnGentableError() *BsnGentableError {
+	obj := &BsnGentableError{
+		BsnBaseError: NewBsnBaseError(2),
+	}
+	return obj
+}
+
+type BsnGentableSetBucketsSize struct {
+	*BsnHeader
+	TableId     uint16
+	BucketsSize uint32
+}
+
+type IBsnGentableSetBucketsSize interface {
+	IBsnHeader
+	GetTableId() uint16
+	GetBucketsSize() uint32
+}
+
+func (self *BsnGentableSetBucketsSize) GetTableId() uint16 {
+	return self.TableId
+}
+
+func (self *BsnGentableSetBucketsSize) SetTableId(v uint16) {
+	self.TableId = v
+}
+
+func (self *BsnGentableSetBucketsSize) GetBucketsSize() uint32 {
+	return self.BucketsSize
+}
+
+func (self *BsnGentableSetBucketsSize) SetBucketsSize(v uint32) {
+	self.BucketsSize = v
+}
+
+func (self *BsnGentableSetBucketsSize) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.BucketsSize))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableSetBucketsSize(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGentableSetBucketsSize, error) {
+	_bsngentablesetbucketssize := &BsnGentableSetBucketsSize{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnGentableSetBucketsSize packet too short: %d < 8", decoder.Length())
+	}
+	_bsngentablesetbucketssize.TableId = uint16(decoder.ReadUint16())
+	decoder.Skip(2)
+	_bsngentablesetbucketssize.BucketsSize = uint32(decoder.ReadUint32())
+	return _bsngentablesetbucketssize, nil
+}
+
+func NewBsnGentableSetBucketsSize() *BsnGentableSetBucketsSize {
+	obj := &BsnGentableSetBucketsSize{
+		BsnHeader: NewBsnHeader(50),
+	}
+	return obj
+}
+
+type BsnGentableStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnGentableStatsEntry
+}
+
+type IBsnGentableStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnGentableStatsEntry
+}
+
+func (self *BsnGentableStatsReply) GetEntries() []*BsnGentableStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnGentableStatsReply) SetEntries(v []*BsnGentableStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnGentableStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnGentableStatsReply, error) {
+	_bsngentablestatsreply := &BsnGentableStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 24 {
+		item, err := DecodeBsnGentableStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngentablestatsreply.Entries = append(_bsngentablestatsreply.Entries, item)
+		}
+	}
+	return _bsngentablestatsreply, nil
+}
+
+func NewBsnGentableStatsReply() *BsnGentableStatsReply {
+	obj := &BsnGentableStatsReply{
+		BsnStatsReply: NewBsnStatsReply(7),
+	}
+	return obj
+}
+
+type BsnGentableStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnGentableStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnGentableStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGentableStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnGentableStatsRequest, error) {
+	_bsngentablestatsrequest := &BsnGentableStatsRequest{BsnStatsRequest: parent}
+	return _bsngentablestatsrequest, nil
+}
+
+func NewBsnGentableStatsRequest() *BsnGentableStatsRequest {
+	obj := &BsnGentableStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(7),
+	}
+	return obj
+}
+
+type BsnGetInterfacesReply struct {
+	*BsnHeader
+	Interfaces []*BsnInterface
+}
+
+type IBsnGetInterfacesReply interface {
+	IBsnHeader
+	GetInterfaces() []*BsnInterface
+}
+
+func (self *BsnGetInterfacesReply) GetInterfaces() []*BsnInterface {
+	return self.Interfaces
+}
+
+func (self *BsnGetInterfacesReply) SetInterfaces(v []*BsnInterface) {
+	self.Interfaces = v
+}
+
+func (self *BsnGetInterfacesReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Interfaces {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGetInterfacesReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGetInterfacesReply, error) {
+	_bsngetinterfacesreply := &BsnGetInterfacesReply{BsnHeader: parent}
+
+	for decoder.Length() >= 32 {
+		item, err := DecodeBsnInterface(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsngetinterfacesreply.Interfaces = append(_bsngetinterfacesreply.Interfaces, item)
+		}
+	}
+	return _bsngetinterfacesreply, nil
+}
+
+func NewBsnGetInterfacesReply() *BsnGetInterfacesReply {
+	obj := &BsnGetInterfacesReply{
+		BsnHeader: NewBsnHeader(10),
+	}
+	return obj
+}
+
+type BsnGetInterfacesRequest struct {
+	*BsnHeader
+}
+
+type IBsnGetInterfacesRequest interface {
+	IBsnHeader
+}
+
+func (self *BsnGetInterfacesRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGetInterfacesRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGetInterfacesRequest, error) {
+	_bsngetinterfacesrequest := &BsnGetInterfacesRequest{BsnHeader: parent}
+	return _bsngetinterfacesrequest, nil
+}
+
+func NewBsnGetInterfacesRequest() *BsnGetInterfacesRequest {
+	obj := &BsnGetInterfacesRequest{
+		BsnHeader: NewBsnHeader(9),
+	}
+	return obj
+}
+
+type BsnGetMirroringReply struct {
+	*BsnHeader
+	ReportMirrorPorts uint8
+}
+
+type IBsnGetMirroringReply interface {
+	IBsnHeader
+	GetReportMirrorPorts() uint8
+}
+
+func (self *BsnGetMirroringReply) GetReportMirrorPorts() uint8 {
+	return self.ReportMirrorPorts
+}
+
+func (self *BsnGetMirroringReply) SetReportMirrorPorts(v uint8) {
+	self.ReportMirrorPorts = v
+}
+
+func (self *BsnGetMirroringReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.ReportMirrorPorts))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGetMirroringReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGetMirroringReply, error) {
+	_bsngetmirroringreply := &BsnGetMirroringReply{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnGetMirroringReply packet too short: %d < 4", decoder.Length())
+	}
+	_bsngetmirroringreply.ReportMirrorPorts = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _bsngetmirroringreply, nil
+}
+
+func NewBsnGetMirroringReply() *BsnGetMirroringReply {
+	obj := &BsnGetMirroringReply{
+		BsnHeader: NewBsnHeader(5),
+	}
+	return obj
+}
+
+type BsnGetMirroringRequest struct {
+	*BsnHeader
+	ReportMirrorPorts uint8
+}
+
+type IBsnGetMirroringRequest interface {
+	IBsnHeader
+	GetReportMirrorPorts() uint8
+}
+
+func (self *BsnGetMirroringRequest) GetReportMirrorPorts() uint8 {
+	return self.ReportMirrorPorts
+}
+
+func (self *BsnGetMirroringRequest) SetReportMirrorPorts(v uint8) {
+	self.ReportMirrorPorts = v
+}
+
+func (self *BsnGetMirroringRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.ReportMirrorPorts))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGetMirroringRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGetMirroringRequest, error) {
+	_bsngetmirroringrequest := &BsnGetMirroringRequest{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnGetMirroringRequest packet too short: %d < 4", decoder.Length())
+	}
+	_bsngetmirroringrequest.ReportMirrorPorts = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _bsngetmirroringrequest, nil
+}
+
+func NewBsnGetMirroringRequest() *BsnGetMirroringRequest {
+	obj := &BsnGetMirroringRequest{
+		BsnHeader: NewBsnHeader(4),
+	}
+	return obj
+}
+
+type BsnGetSwitchPipelineReply struct {
+	*BsnHeader
+	Pipeline string
+}
+
+type IBsnGetSwitchPipelineReply interface {
+	IBsnHeader
+	GetPipeline() string
+}
+
+func (self *BsnGetSwitchPipelineReply) GetPipeline() string {
+	return self.Pipeline
+}
+
+func (self *BsnGetSwitchPipelineReply) SetPipeline(v string) {
+	self.Pipeline = v
+}
+
+func (self *BsnGetSwitchPipelineReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write([]byte(self.Pipeline))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGetSwitchPipelineReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGetSwitchPipelineReply, error) {
+	_bsngetswitchpipelinereply := &BsnGetSwitchPipelineReply{BsnHeader: parent}
+	if decoder.Length() < 256 {
+		return nil, fmt.Errorf("BsnGetSwitchPipelineReply packet too short: %d < 256", decoder.Length())
+	}
+	_bsngetswitchpipelinereply.Pipeline = string(bytes.Trim(decoder.Read(256), "\x00"))
+	return _bsngetswitchpipelinereply, nil
+}
+
+func NewBsnGetSwitchPipelineReply() *BsnGetSwitchPipelineReply {
+	obj := &BsnGetSwitchPipelineReply{
+		BsnHeader: NewBsnHeader(52),
+	}
+	return obj
+}
+
+type BsnGetSwitchPipelineRequest struct {
+	*BsnHeader
+}
+
+type IBsnGetSwitchPipelineRequest interface {
+	IBsnHeader
+}
+
+func (self *BsnGetSwitchPipelineRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnGetSwitchPipelineRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnGetSwitchPipelineRequest, error) {
+	_bsngetswitchpipelinerequest := &BsnGetSwitchPipelineRequest{BsnHeader: parent}
+	return _bsngetswitchpipelinerequest, nil
+}
+
+func NewBsnGetSwitchPipelineRequest() *BsnGetSwitchPipelineRequest {
+	obj := &BsnGetSwitchPipelineRequest{
+		BsnHeader: NewBsnHeader(51),
+	}
+	return obj
+}
+
+type BsnImageDescStatsReply struct {
+	*BsnStatsReply
+	ImageChecksum         string
+	StartupConfigChecksum string
+}
+
+type IBsnImageDescStatsReply interface {
+	IBsnStatsReply
+	GetImageChecksum() string
+	GetStartupConfigChecksum() string
+}
+
+func (self *BsnImageDescStatsReply) GetImageChecksum() string {
+	return self.ImageChecksum
+}
+
+func (self *BsnImageDescStatsReply) SetImageChecksum(v string) {
+	self.ImageChecksum = v
+}
+
+func (self *BsnImageDescStatsReply) GetStartupConfigChecksum() string {
+	return self.StartupConfigChecksum
+}
+
+func (self *BsnImageDescStatsReply) SetStartupConfigChecksum(v string) {
+	self.StartupConfigChecksum = v
+}
+
+func (self *BsnImageDescStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write([]byte(self.ImageChecksum))
+	encoder.Write([]byte(self.StartupConfigChecksum))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnImageDescStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnImageDescStatsReply, error) {
+	_bsnimagedescstatsreply := &BsnImageDescStatsReply{BsnStatsReply: parent}
+	if decoder.Length() < 512 {
+		return nil, fmt.Errorf("BsnImageDescStatsReply packet too short: %d < 512", decoder.Length())
+	}
+	_bsnimagedescstatsreply.ImageChecksum = string(bytes.Trim(decoder.Read(256), "\x00"))
+	_bsnimagedescstatsreply.StartupConfigChecksum = string(bytes.Trim(decoder.Read(256), "\x00"))
+	return _bsnimagedescstatsreply, nil
+}
+
+func NewBsnImageDescStatsReply() *BsnImageDescStatsReply {
+	obj := &BsnImageDescStatsReply{
+		BsnStatsReply: NewBsnStatsReply(14),
+	}
+	return obj
+}
+
+type BsnImageDescStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnImageDescStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnImageDescStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnImageDescStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnImageDescStatsRequest, error) {
+	_bsnimagedescstatsrequest := &BsnImageDescStatsRequest{BsnStatsRequest: parent}
+	return _bsnimagedescstatsrequest, nil
+}
+
+func NewBsnImageDescStatsRequest() *BsnImageDescStatsRequest {
+	obj := &BsnImageDescStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(14),
+	}
+	return obj
+}
+
+type BsnLacpConvergenceNotif struct {
+	*BsnHeader
+	ConvergenceStatus   uint8
+	PortNo              Port
+	ActorSysPriority    uint16
+	ActorSysMac         net.HardwareAddr
+	ActorPortPriority   uint16
+	ActorPortNum        uint16
+	ActorKey            uint16
+	PartnerSysPriority  uint16
+	PartnerSysMac       net.HardwareAddr
+	PartnerPortPriority uint16
+	PartnerPortNum      uint16
+	PartnerKey          uint16
+}
+
+type IBsnLacpConvergenceNotif interface {
+	IBsnHeader
+	GetConvergenceStatus() uint8
+	GetPortNo() Port
+	GetActorSysPriority() uint16
+	GetActorSysMac() net.HardwareAddr
+	GetActorPortPriority() uint16
+	GetActorPortNum() uint16
+	GetActorKey() uint16
+	GetPartnerSysPriority() uint16
+	GetPartnerSysMac() net.HardwareAddr
+	GetPartnerPortPriority() uint16
+	GetPartnerPortNum() uint16
+	GetPartnerKey() uint16
+}
+
+func (self *BsnLacpConvergenceNotif) GetConvergenceStatus() uint8 {
+	return self.ConvergenceStatus
+}
+
+func (self *BsnLacpConvergenceNotif) SetConvergenceStatus(v uint8) {
+	self.ConvergenceStatus = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnLacpConvergenceNotif) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetActorSysPriority() uint16 {
+	return self.ActorSysPriority
+}
+
+func (self *BsnLacpConvergenceNotif) SetActorSysPriority(v uint16) {
+	self.ActorSysPriority = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetActorSysMac() net.HardwareAddr {
+	return self.ActorSysMac
+}
+
+func (self *BsnLacpConvergenceNotif) SetActorSysMac(v net.HardwareAddr) {
+	self.ActorSysMac = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetActorPortPriority() uint16 {
+	return self.ActorPortPriority
+}
+
+func (self *BsnLacpConvergenceNotif) SetActorPortPriority(v uint16) {
+	self.ActorPortPriority = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetActorPortNum() uint16 {
+	return self.ActorPortNum
+}
+
+func (self *BsnLacpConvergenceNotif) SetActorPortNum(v uint16) {
+	self.ActorPortNum = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetActorKey() uint16 {
+	return self.ActorKey
+}
+
+func (self *BsnLacpConvergenceNotif) SetActorKey(v uint16) {
+	self.ActorKey = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetPartnerSysPriority() uint16 {
+	return self.PartnerSysPriority
+}
+
+func (self *BsnLacpConvergenceNotif) SetPartnerSysPriority(v uint16) {
+	self.PartnerSysPriority = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetPartnerSysMac() net.HardwareAddr {
+	return self.PartnerSysMac
+}
+
+func (self *BsnLacpConvergenceNotif) SetPartnerSysMac(v net.HardwareAddr) {
+	self.PartnerSysMac = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetPartnerPortPriority() uint16 {
+	return self.PartnerPortPriority
+}
+
+func (self *BsnLacpConvergenceNotif) SetPartnerPortPriority(v uint16) {
+	self.PartnerPortPriority = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetPartnerPortNum() uint16 {
+	return self.PartnerPortNum
+}
+
+func (self *BsnLacpConvergenceNotif) SetPartnerPortNum(v uint16) {
+	self.PartnerPortNum = v
+}
+
+func (self *BsnLacpConvergenceNotif) GetPartnerKey() uint16 {
+	return self.PartnerKey
+}
+
+func (self *BsnLacpConvergenceNotif) SetPartnerKey(v uint16) {
+	self.PartnerKey = v
+}
+
+func (self *BsnLacpConvergenceNotif) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.ConvergenceStatus))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint16(uint16(self.ActorSysPriority))
+	encoder.Write(self.ActorSysMac)
+	encoder.PutUint16(uint16(self.ActorPortPriority))
+	encoder.PutUint16(uint16(self.ActorPortNum))
+	encoder.PutUint16(uint16(self.ActorKey))
+	encoder.PutUint16(uint16(self.PartnerSysPriority))
+	encoder.Write(self.PartnerSysMac)
+	encoder.PutUint16(uint16(self.PartnerPortPriority))
+	encoder.PutUint16(uint16(self.PartnerPortNum))
+	encoder.PutUint16(uint16(self.PartnerKey))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLacpConvergenceNotif(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnLacpConvergenceNotif, error) {
+	_bsnlacpconvergencenotif := &BsnLacpConvergenceNotif{BsnHeader: parent}
+	if decoder.Length() < 36 {
+		return nil, fmt.Errorf("BsnLacpConvergenceNotif packet too short: %d < 36", decoder.Length())
+	}
+	_bsnlacpconvergencenotif.ConvergenceStatus = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_bsnlacpconvergencenotif.PortNo.Decode(decoder)
+	_bsnlacpconvergencenotif.ActorSysPriority = uint16(decoder.ReadUint16())
+	_bsnlacpconvergencenotif.ActorSysMac = net.HardwareAddr(decoder.Read(6))
+	_bsnlacpconvergencenotif.ActorPortPriority = uint16(decoder.ReadUint16())
+	_bsnlacpconvergencenotif.ActorPortNum = uint16(decoder.ReadUint16())
+	_bsnlacpconvergencenotif.ActorKey = uint16(decoder.ReadUint16())
+	_bsnlacpconvergencenotif.PartnerSysPriority = uint16(decoder.ReadUint16())
+	_bsnlacpconvergencenotif.PartnerSysMac = net.HardwareAddr(decoder.Read(6))
+	_bsnlacpconvergencenotif.PartnerPortPriority = uint16(decoder.ReadUint16())
+	_bsnlacpconvergencenotif.PartnerPortNum = uint16(decoder.ReadUint16())
+	_bsnlacpconvergencenotif.PartnerKey = uint16(decoder.ReadUint16())
+	return _bsnlacpconvergencenotif, nil
+}
+
+func NewBsnLacpConvergenceNotif() *BsnLacpConvergenceNotif {
+	obj := &BsnLacpConvergenceNotif{
+		BsnHeader: NewBsnHeader(43),
+	}
+	return obj
+}
+
+type BsnLacpStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnLacpStatsEntry
+}
+
+type IBsnLacpStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnLacpStatsEntry
+}
+
+func (self *BsnLacpStatsReply) GetEntries() []*BsnLacpStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnLacpStatsReply) SetEntries(v []*BsnLacpStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnLacpStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLacpStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnLacpStatsReply, error) {
+	_bsnlacpstatsreply := &BsnLacpStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 36 {
+		item, err := DecodeBsnLacpStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnlacpstatsreply.Entries = append(_bsnlacpstatsreply.Entries, item)
+		}
+	}
+	return _bsnlacpstatsreply, nil
+}
+
+func NewBsnLacpStatsReply() *BsnLacpStatsReply {
+	obj := &BsnLacpStatsReply{
+		BsnStatsReply: NewBsnStatsReply(1),
+	}
+	return obj
+}
+
+type BsnLacpStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnLacpStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnLacpStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLacpStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnLacpStatsRequest, error) {
+	_bsnlacpstatsrequest := &BsnLacpStatsRequest{BsnStatsRequest: parent}
+	return _bsnlacpstatsrequest, nil
+}
+
+func NewBsnLacpStatsRequest() *BsnLacpStatsRequest {
+	obj := &BsnLacpStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(1),
+	}
+	return obj
+}
+
+type BsnLog struct {
+	*BsnHeader
+	Loglevel BsnLoglevel
+	Data     []byte
+}
+
+type IBsnLog interface {
+	IBsnHeader
+	GetLoglevel() BsnLoglevel
+	GetData() []byte
+}
+
+func (self *BsnLog) GetLoglevel() BsnLoglevel {
+	return self.Loglevel
+}
+
+func (self *BsnLog) SetLoglevel(v BsnLoglevel) {
+	self.Loglevel = v
+}
+
+func (self *BsnLog) GetData() []byte {
+	return self.Data
+}
+
+func (self *BsnLog) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BsnLog) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Loglevel))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLog(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnLog, error) {
+	_bsnlog := &BsnLog{BsnHeader: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("BsnLog packet too short: %d < 1", decoder.Length())
+	}
+	_bsnlog.Loglevel = BsnLoglevel(decoder.ReadByte())
+	_bsnlog.Data = decoder.Read(int(decoder.Length()))
+	return _bsnlog, nil
+}
+
+func NewBsnLog() *BsnLog {
+	obj := &BsnLog{
+		BsnHeader: NewBsnHeader(63),
+	}
+	return obj
+}
+
+type BsnLuaCommandReply struct {
+	*BsnHeader
+	Data []byte
+}
+
+type IBsnLuaCommandReply interface {
+	IBsnHeader
+	GetData() []byte
+}
+
+func (self *BsnLuaCommandReply) GetData() []byte {
+	return self.Data
+}
+
+func (self *BsnLuaCommandReply) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BsnLuaCommandReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLuaCommandReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnLuaCommandReply, error) {
+	_bsnluacommandreply := &BsnLuaCommandReply{BsnHeader: parent}
+	_bsnluacommandreply.Data = decoder.Read(int(decoder.Length()))
+	return _bsnluacommandreply, nil
+}
+
+func NewBsnLuaCommandReply() *BsnLuaCommandReply {
+	obj := &BsnLuaCommandReply{
+		BsnHeader: NewBsnHeader(66),
+	}
+	return obj
+}
+
+type BsnLuaCommandRequest struct {
+	*BsnHeader
+	Data []byte
+}
+
+type IBsnLuaCommandRequest interface {
+	IBsnHeader
+	GetData() []byte
+}
+
+func (self *BsnLuaCommandRequest) GetData() []byte {
+	return self.Data
+}
+
+func (self *BsnLuaCommandRequest) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BsnLuaCommandRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLuaCommandRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnLuaCommandRequest, error) {
+	_bsnluacommandrequest := &BsnLuaCommandRequest{BsnHeader: parent}
+	_bsnluacommandrequest.Data = decoder.Read(int(decoder.Length()))
+	return _bsnluacommandrequest, nil
+}
+
+func NewBsnLuaCommandRequest() *BsnLuaCommandRequest {
+	obj := &BsnLuaCommandRequest{
+		BsnHeader: NewBsnHeader(65),
+	}
+	return obj
+}
+
+type BsnLuaNotification struct {
+	*BsnHeader
+	Data []byte
+}
+
+type IBsnLuaNotification interface {
+	IBsnHeader
+	GetData() []byte
+}
+
+func (self *BsnLuaNotification) GetData() []byte {
+	return self.Data
+}
+
+func (self *BsnLuaNotification) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BsnLuaNotification) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLuaNotification(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnLuaNotification, error) {
+	_bsnluanotification := &BsnLuaNotification{BsnHeader: parent}
+	_bsnluanotification.Data = decoder.Read(int(decoder.Length()))
+	return _bsnluanotification, nil
+}
+
+func NewBsnLuaNotification() *BsnLuaNotification {
+	obj := &BsnLuaNotification{
+		BsnHeader: NewBsnHeader(67),
+	}
+	return obj
+}
+
+type BsnLuaUpload struct {
+	*BsnHeader
+	Flags    BsnLuaUploadFlags
+	Filename string
+	Data     []byte
+}
+
+type IBsnLuaUpload interface {
+	IBsnHeader
+	GetFlags() BsnLuaUploadFlags
+	GetFilename() string
+	GetData() []byte
+}
+
+func (self *BsnLuaUpload) GetFlags() BsnLuaUploadFlags {
+	return self.Flags
+}
+
+func (self *BsnLuaUpload) SetFlags(v BsnLuaUploadFlags) {
+	self.Flags = v
+}
+
+func (self *BsnLuaUpload) GetFilename() string {
+	return self.Filename
+}
+
+func (self *BsnLuaUpload) SetFilename(v string) {
+	self.Filename = v
+}
+
+func (self *BsnLuaUpload) GetData() []byte {
+	return self.Data
+}
+
+func (self *BsnLuaUpload) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BsnLuaUpload) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.Write([]byte(self.Filename))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnLuaUpload(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnLuaUpload, error) {
+	_bsnluaupload := &BsnLuaUpload{BsnHeader: parent}
+	if decoder.Length() < 66 {
+		return nil, fmt.Errorf("BsnLuaUpload packet too short: %d < 66", decoder.Length())
+	}
+	_bsnluaupload.Flags = BsnLuaUploadFlags(decoder.ReadUint16())
+	_bsnluaupload.Filename = string(bytes.Trim(decoder.Read(64), "\x00"))
+	_bsnluaupload.Data = decoder.Read(int(decoder.Length()))
+	return _bsnluaupload, nil
+}
+
+func NewBsnLuaUpload() *BsnLuaUpload {
+	obj := &BsnLuaUpload{
+		BsnHeader: NewBsnHeader(64),
+	}
+	return obj
+}
+
+type BsnPduRxReply struct {
+	*BsnHeader
+	Status  uint32
+	PortNo  Port
+	SlotNum uint8
+}
+
+type IBsnPduRxReply interface {
+	IBsnHeader
+	GetStatus() uint32
+	GetPortNo() Port
+	GetSlotNum() uint8
+}
+
+func (self *BsnPduRxReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnPduRxReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnPduRxReply) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnPduRxReply) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnPduRxReply) GetSlotNum() uint8 {
+	return self.SlotNum
+}
+
+func (self *BsnPduRxReply) SetSlotNum(v uint8) {
+	self.SlotNum = v
+}
+
+func (self *BsnPduRxReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint8(uint8(self.SlotNum))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPduRxReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnPduRxReply, error) {
+	_bsnpdurxreply := &BsnPduRxReply{BsnHeader: parent}
+	if decoder.Length() < 9 {
+		return nil, fmt.Errorf("BsnPduRxReply packet too short: %d < 9", decoder.Length())
+	}
+	_bsnpdurxreply.Status = uint32(decoder.ReadUint32())
+	_bsnpdurxreply.PortNo.Decode(decoder)
+	_bsnpdurxreply.SlotNum = uint8(decoder.ReadByte())
+	return _bsnpdurxreply, nil
+}
+
+func NewBsnPduRxReply() *BsnPduRxReply {
+	obj := &BsnPduRxReply{
+		BsnHeader: NewBsnHeader(34),
+	}
+	return obj
+}
+
+type BsnPduRxRequest struct {
+	*BsnHeader
+	TimeoutMs uint32
+	PortNo    Port
+	SlotNum   uint8
+	Data      []byte
+}
+
+type IBsnPduRxRequest interface {
+	IBsnHeader
+	GetTimeoutMs() uint32
+	GetPortNo() Port
+	GetSlotNum() uint8
+	GetData() []byte
+}
+
+func (self *BsnPduRxRequest) GetTimeoutMs() uint32 {
+	return self.TimeoutMs
+}
+
+func (self *BsnPduRxRequest) SetTimeoutMs(v uint32) {
+	self.TimeoutMs = v
+}
+
+func (self *BsnPduRxRequest) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnPduRxRequest) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnPduRxRequest) GetSlotNum() uint8 {
+	return self.SlotNum
+}
+
+func (self *BsnPduRxRequest) SetSlotNum(v uint8) {
+	self.SlotNum = v
+}
+
+func (self *BsnPduRxRequest) GetData() []byte {
+	return self.Data
+}
+
+func (self *BsnPduRxRequest) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BsnPduRxRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.TimeoutMs))
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint8(uint8(self.SlotNum))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPduRxRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnPduRxRequest, error) {
+	_bsnpdurxrequest := &BsnPduRxRequest{BsnHeader: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("BsnPduRxRequest packet too short: %d < 12", decoder.Length())
+	}
+	_bsnpdurxrequest.TimeoutMs = uint32(decoder.ReadUint32())
+	_bsnpdurxrequest.PortNo.Decode(decoder)
+	_bsnpdurxrequest.SlotNum = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_bsnpdurxrequest.Data = decoder.Read(int(decoder.Length()))
+	return _bsnpdurxrequest, nil
+}
+
+func NewBsnPduRxRequest() *BsnPduRxRequest {
+	obj := &BsnPduRxRequest{
+		BsnHeader: NewBsnHeader(33),
+	}
+	return obj
+}
+
+type BsnPduRxTimeout struct {
+	*BsnHeader
+	PortNo  Port
+	SlotNum uint8
+}
+
+type IBsnPduRxTimeout interface {
+	IBsnHeader
+	GetPortNo() Port
+	GetSlotNum() uint8
+}
+
+func (self *BsnPduRxTimeout) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnPduRxTimeout) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnPduRxTimeout) GetSlotNum() uint8 {
+	return self.SlotNum
+}
+
+func (self *BsnPduRxTimeout) SetSlotNum(v uint8) {
+	self.SlotNum = v
+}
+
+func (self *BsnPduRxTimeout) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint8(uint8(self.SlotNum))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPduRxTimeout(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnPduRxTimeout, error) {
+	_bsnpdurxtimeout := &BsnPduRxTimeout{BsnHeader: parent}
+	if decoder.Length() < 5 {
+		return nil, fmt.Errorf("BsnPduRxTimeout packet too short: %d < 5", decoder.Length())
+	}
+	_bsnpdurxtimeout.PortNo.Decode(decoder)
+	_bsnpdurxtimeout.SlotNum = uint8(decoder.ReadByte())
+	return _bsnpdurxtimeout, nil
+}
+
+func NewBsnPduRxTimeout() *BsnPduRxTimeout {
+	obj := &BsnPduRxTimeout{
+		BsnHeader: NewBsnHeader(35),
+	}
+	return obj
+}
+
+type BsnPduTxReply struct {
+	*BsnHeader
+	Status  uint32
+	PortNo  Port
+	SlotNum uint8
+}
+
+type IBsnPduTxReply interface {
+	IBsnHeader
+	GetStatus() uint32
+	GetPortNo() Port
+	GetSlotNum() uint8
+}
+
+func (self *BsnPduTxReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnPduTxReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnPduTxReply) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnPduTxReply) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnPduTxReply) GetSlotNum() uint8 {
+	return self.SlotNum
+}
+
+func (self *BsnPduTxReply) SetSlotNum(v uint8) {
+	self.SlotNum = v
+}
+
+func (self *BsnPduTxReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint8(uint8(self.SlotNum))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPduTxReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnPduTxReply, error) {
+	_bsnpdutxreply := &BsnPduTxReply{BsnHeader: parent}
+	if decoder.Length() < 9 {
+		return nil, fmt.Errorf("BsnPduTxReply packet too short: %d < 9", decoder.Length())
+	}
+	_bsnpdutxreply.Status = uint32(decoder.ReadUint32())
+	_bsnpdutxreply.PortNo.Decode(decoder)
+	_bsnpdutxreply.SlotNum = uint8(decoder.ReadByte())
+	return _bsnpdutxreply, nil
+}
+
+func NewBsnPduTxReply() *BsnPduTxReply {
+	obj := &BsnPduTxReply{
+		BsnHeader: NewBsnHeader(32),
+	}
+	return obj
+}
+
+type BsnPduTxRequest struct {
+	*BsnHeader
+	TxIntervalMs uint32
+	PortNo       Port
+	SlotNum      uint8
+	Data         []byte
+}
+
+type IBsnPduTxRequest interface {
+	IBsnHeader
+	GetTxIntervalMs() uint32
+	GetPortNo() Port
+	GetSlotNum() uint8
+	GetData() []byte
+}
+
+func (self *BsnPduTxRequest) GetTxIntervalMs() uint32 {
+	return self.TxIntervalMs
+}
+
+func (self *BsnPduTxRequest) SetTxIntervalMs(v uint32) {
+	self.TxIntervalMs = v
+}
+
+func (self *BsnPduTxRequest) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnPduTxRequest) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnPduTxRequest) GetSlotNum() uint8 {
+	return self.SlotNum
+}
+
+func (self *BsnPduTxRequest) SetSlotNum(v uint8) {
+	self.SlotNum = v
+}
+
+func (self *BsnPduTxRequest) GetData() []byte {
+	return self.Data
+}
+
+func (self *BsnPduTxRequest) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *BsnPduTxRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.TxIntervalMs))
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint8(uint8(self.SlotNum))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPduTxRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnPduTxRequest, error) {
+	_bsnpdutxrequest := &BsnPduTxRequest{BsnHeader: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("BsnPduTxRequest packet too short: %d < 12", decoder.Length())
+	}
+	_bsnpdutxrequest.TxIntervalMs = uint32(decoder.ReadUint32())
+	_bsnpdutxrequest.PortNo.Decode(decoder)
+	_bsnpdutxrequest.SlotNum = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_bsnpdutxrequest.Data = decoder.Read(int(decoder.Length()))
+	return _bsnpdutxrequest, nil
+}
+
+func NewBsnPduTxRequest() *BsnPduTxRequest {
+	obj := &BsnPduTxRequest{
+		BsnHeader: NewBsnHeader(31),
+	}
+	return obj
+}
+
+type BsnPortCounterStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnPortCounterStatsEntry
+}
+
+type IBsnPortCounterStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnPortCounterStatsEntry
+}
+
+func (self *BsnPortCounterStatsReply) GetEntries() []*BsnPortCounterStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnPortCounterStatsReply) SetEntries(v []*BsnPortCounterStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnPortCounterStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPortCounterStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnPortCounterStatsReply, error) {
+	_bsnportcounterstatsreply := &BsnPortCounterStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeBsnPortCounterStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnportcounterstatsreply.Entries = append(_bsnportcounterstatsreply.Entries, item)
+		}
+	}
+	return _bsnportcounterstatsreply, nil
+}
+
+func NewBsnPortCounterStatsReply() *BsnPortCounterStatsReply {
+	obj := &BsnPortCounterStatsReply{
+		BsnStatsReply: NewBsnStatsReply(8),
+	}
+	return obj
+}
+
+type BsnPortCounterStatsRequest struct {
+	*BsnStatsRequest
+	PortNo Port
+}
+
+type IBsnPortCounterStatsRequest interface {
+	IBsnStatsRequest
+	GetPortNo() Port
+}
+
+func (self *BsnPortCounterStatsRequest) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnPortCounterStatsRequest) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnPortCounterStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.PortNo.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnPortCounterStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnPortCounterStatsRequest, error) {
+	_bsnportcounterstatsrequest := &BsnPortCounterStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnPortCounterStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	_bsnportcounterstatsrequest.PortNo.Decode(decoder)
+	return _bsnportcounterstatsrequest, nil
+}
+
+func NewBsnPortCounterStatsRequest() *BsnPortCounterStatsRequest {
+	obj := &BsnPortCounterStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(8),
+	}
+	return obj
+}
+
+type BsnRoleStatus struct {
+	*BsnHeader
+	Role         ControllerRole
+	Reason       BsnControllerRoleReason
+	GenerationId uint64
+}
+
+type IBsnRoleStatus interface {
+	IBsnHeader
+	GetRole() ControllerRole
+	GetReason() BsnControllerRoleReason
+	GetGenerationId() uint64
+}
+
+func (self *BsnRoleStatus) GetRole() ControllerRole {
+	return self.Role
+}
+
+func (self *BsnRoleStatus) SetRole(v ControllerRole) {
+	self.Role = v
+}
+
+func (self *BsnRoleStatus) GetReason() BsnControllerRoleReason {
+	return self.Reason
+}
+
+func (self *BsnRoleStatus) SetReason(v BsnControllerRoleReason) {
+	self.Reason = v
+}
+
+func (self *BsnRoleStatus) GetGenerationId() uint64 {
+	return self.GenerationId
+}
+
+func (self *BsnRoleStatus) SetGenerationId(v uint64) {
+	self.GenerationId = v
+}
+
+func (self *BsnRoleStatus) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Role))
+	encoder.PutUint8(uint8(self.Reason))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	encoder.PutUint64(uint64(self.GenerationId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnRoleStatus(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnRoleStatus, error) {
+	_bsnrolestatus := &BsnRoleStatus{BsnHeader: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BsnRoleStatus packet too short: %d < 16", decoder.Length())
+	}
+	_bsnrolestatus.Role = ControllerRole(decoder.ReadUint32())
+	_bsnrolestatus.Reason = BsnControllerRoleReason(decoder.ReadByte())
+	decoder.Skip(3)
+	_bsnrolestatus.GenerationId = uint64(decoder.ReadUint64())
+	return _bsnrolestatus, nil
+}
+
+func NewBsnRoleStatus() *BsnRoleStatus {
+	obj := &BsnRoleStatus{
+		BsnHeader: NewBsnHeader(55),
+	}
+	return obj
+}
+
+type BsnSetAuxCxnsReply struct {
+	*BsnHeader
+	NumAux uint32
+	Status uint32
+}
+
+type IBsnSetAuxCxnsReply interface {
+	IBsnHeader
+	GetNumAux() uint32
+	GetStatus() uint32
+}
+
+func (self *BsnSetAuxCxnsReply) GetNumAux() uint32 {
+	return self.NumAux
+}
+
+func (self *BsnSetAuxCxnsReply) SetNumAux(v uint32) {
+	self.NumAux = v
+}
+
+func (self *BsnSetAuxCxnsReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnSetAuxCxnsReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnSetAuxCxnsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.NumAux))
+	encoder.PutUint32(uint32(self.Status))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetAuxCxnsReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetAuxCxnsReply, error) {
+	_bsnsetauxcxnsreply := &BsnSetAuxCxnsReply{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnSetAuxCxnsReply packet too short: %d < 8", decoder.Length())
+	}
+	_bsnsetauxcxnsreply.NumAux = uint32(decoder.ReadUint32())
+	_bsnsetauxcxnsreply.Status = uint32(decoder.ReadUint32())
+	return _bsnsetauxcxnsreply, nil
+}
+
+func NewBsnSetAuxCxnsReply() *BsnSetAuxCxnsReply {
+	obj := &BsnSetAuxCxnsReply{
+		BsnHeader: NewBsnHeader(59),
+	}
+	return obj
+}
+
+type BsnSetAuxCxnsRequest struct {
+	*BsnHeader
+	NumAux uint32
+}
+
+type IBsnSetAuxCxnsRequest interface {
+	IBsnHeader
+	GetNumAux() uint32
+}
+
+func (self *BsnSetAuxCxnsRequest) GetNumAux() uint32 {
+	return self.NumAux
+}
+
+func (self *BsnSetAuxCxnsRequest) SetNumAux(v uint32) {
+	self.NumAux = v
+}
+
+func (self *BsnSetAuxCxnsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.NumAux))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetAuxCxnsRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetAuxCxnsRequest, error) {
+	_bsnsetauxcxnsrequest := &BsnSetAuxCxnsRequest{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnSetAuxCxnsRequest packet too short: %d < 4", decoder.Length())
+	}
+	_bsnsetauxcxnsrequest.NumAux = uint32(decoder.ReadUint32())
+	return _bsnsetauxcxnsrequest, nil
+}
+
+func NewBsnSetAuxCxnsRequest() *BsnSetAuxCxnsRequest {
+	obj := &BsnSetAuxCxnsRequest{
+		BsnHeader: NewBsnHeader(58),
+	}
+	return obj
+}
+
+type BsnSetLacpReply struct {
+	*BsnHeader
+	Status uint32
+	PortNo Port
+}
+
+type IBsnSetLacpReply interface {
+	IBsnHeader
+	GetStatus() uint32
+	GetPortNo() Port
+}
+
+func (self *BsnSetLacpReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnSetLacpReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnSetLacpReply) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnSetLacpReply) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnSetLacpReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+	self.PortNo.Serialize(encoder)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetLacpReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetLacpReply, error) {
+	_bsnsetlacpreply := &BsnSetLacpReply{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnSetLacpReply packet too short: %d < 8", decoder.Length())
+	}
+	_bsnsetlacpreply.Status = uint32(decoder.ReadUint32())
+	_bsnsetlacpreply.PortNo.Decode(decoder)
+	return _bsnsetlacpreply, nil
+}
+
+func NewBsnSetLacpReply() *BsnSetLacpReply {
+	obj := &BsnSetLacpReply{
+		BsnHeader: NewBsnHeader(42),
+	}
+	return obj
+}
+
+type BsnSetLacpRequest struct {
+	*BsnHeader
+	Enabled           uint8
+	PortNo            Port
+	ActorSysPriority  uint16
+	ActorSysMac       net.HardwareAddr
+	ActorPortPriority uint16
+	ActorPortNum      uint16
+	ActorKey          uint16
+}
+
+type IBsnSetLacpRequest interface {
+	IBsnHeader
+	GetEnabled() uint8
+	GetPortNo() Port
+	GetActorSysPriority() uint16
+	GetActorSysMac() net.HardwareAddr
+	GetActorPortPriority() uint16
+	GetActorPortNum() uint16
+	GetActorKey() uint16
+}
+
+func (self *BsnSetLacpRequest) GetEnabled() uint8 {
+	return self.Enabled
+}
+
+func (self *BsnSetLacpRequest) SetEnabled(v uint8) {
+	self.Enabled = v
+}
+
+func (self *BsnSetLacpRequest) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *BsnSetLacpRequest) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *BsnSetLacpRequest) GetActorSysPriority() uint16 {
+	return self.ActorSysPriority
+}
+
+func (self *BsnSetLacpRequest) SetActorSysPriority(v uint16) {
+	self.ActorSysPriority = v
+}
+
+func (self *BsnSetLacpRequest) GetActorSysMac() net.HardwareAddr {
+	return self.ActorSysMac
+}
+
+func (self *BsnSetLacpRequest) SetActorSysMac(v net.HardwareAddr) {
+	self.ActorSysMac = v
+}
+
+func (self *BsnSetLacpRequest) GetActorPortPriority() uint16 {
+	return self.ActorPortPriority
+}
+
+func (self *BsnSetLacpRequest) SetActorPortPriority(v uint16) {
+	self.ActorPortPriority = v
+}
+
+func (self *BsnSetLacpRequest) GetActorPortNum() uint16 {
+	return self.ActorPortNum
+}
+
+func (self *BsnSetLacpRequest) SetActorPortNum(v uint16) {
+	self.ActorPortNum = v
+}
+
+func (self *BsnSetLacpRequest) GetActorKey() uint16 {
+	return self.ActorKey
+}
+
+func (self *BsnSetLacpRequest) SetActorKey(v uint16) {
+	self.ActorKey = v
+}
+
+func (self *BsnSetLacpRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Enabled))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint16(uint16(self.ActorSysPriority))
+	encoder.Write(self.ActorSysMac)
+	encoder.PutUint16(uint16(self.ActorPortPriority))
+	encoder.PutUint16(uint16(self.ActorPortNum))
+	encoder.PutUint16(uint16(self.ActorKey))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetLacpRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetLacpRequest, error) {
+	_bsnsetlacprequest := &BsnSetLacpRequest{BsnHeader: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("BsnSetLacpRequest packet too short: %d < 22", decoder.Length())
+	}
+	_bsnsetlacprequest.Enabled = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_bsnsetlacprequest.PortNo.Decode(decoder)
+	_bsnsetlacprequest.ActorSysPriority = uint16(decoder.ReadUint16())
+	_bsnsetlacprequest.ActorSysMac = net.HardwareAddr(decoder.Read(6))
+	_bsnsetlacprequest.ActorPortPriority = uint16(decoder.ReadUint16())
+	_bsnsetlacprequest.ActorPortNum = uint16(decoder.ReadUint16())
+	_bsnsetlacprequest.ActorKey = uint16(decoder.ReadUint16())
+	return _bsnsetlacprequest, nil
+}
+
+func NewBsnSetLacpRequest() *BsnSetLacpRequest {
+	obj := &BsnSetLacpRequest{
+		BsnHeader: NewBsnHeader(41),
+	}
+	return obj
+}
+
+type BsnSetMirroring struct {
+	*BsnHeader
+	ReportMirrorPorts uint8
+}
+
+type IBsnSetMirroring interface {
+	IBsnHeader
+	GetReportMirrorPorts() uint8
+}
+
+func (self *BsnSetMirroring) GetReportMirrorPorts() uint8 {
+	return self.ReportMirrorPorts
+}
+
+func (self *BsnSetMirroring) SetReportMirrorPorts(v uint8) {
+	self.ReportMirrorPorts = v
+}
+
+func (self *BsnSetMirroring) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.ReportMirrorPorts))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetMirroring(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetMirroring, error) {
+	_bsnsetmirroring := &BsnSetMirroring{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnSetMirroring packet too short: %d < 4", decoder.Length())
+	}
+	_bsnsetmirroring.ReportMirrorPorts = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _bsnsetmirroring, nil
+}
+
+func NewBsnSetMirroring() *BsnSetMirroring {
+	obj := &BsnSetMirroring{
+		BsnHeader: NewBsnHeader(3),
+	}
+	return obj
+}
+
+type BsnSetPktinSuppressionReply struct {
+	*BsnHeader
+	Status uint32
+}
+
+type IBsnSetPktinSuppressionReply interface {
+	IBsnHeader
+	GetStatus() uint32
+}
+
+func (self *BsnSetPktinSuppressionReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnSetPktinSuppressionReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnSetPktinSuppressionReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetPktinSuppressionReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetPktinSuppressionReply, error) {
+	_bsnsetpktinsuppressionreply := &BsnSetPktinSuppressionReply{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnSetPktinSuppressionReply packet too short: %d < 4", decoder.Length())
+	}
+	_bsnsetpktinsuppressionreply.Status = uint32(decoder.ReadUint32())
+	return _bsnsetpktinsuppressionreply, nil
+}
+
+func NewBsnSetPktinSuppressionReply() *BsnSetPktinSuppressionReply {
+	obj := &BsnSetPktinSuppressionReply{
+		BsnHeader: NewBsnHeader(25),
+	}
+	return obj
+}
+
+type BsnSetPktinSuppressionRequest struct {
+	*BsnHeader
+	Enabled     uint8
+	IdleTimeout uint16
+	HardTimeout uint16
+	Priority    uint16
+	Cookie      uint64
+}
+
+type IBsnSetPktinSuppressionRequest interface {
+	IBsnHeader
+	GetEnabled() uint8
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetPriority() uint16
+	GetCookie() uint64
+}
+
+func (self *BsnSetPktinSuppressionRequest) GetEnabled() uint8 {
+	return self.Enabled
+}
+
+func (self *BsnSetPktinSuppressionRequest) SetEnabled(v uint8) {
+	self.Enabled = v
+}
+
+func (self *BsnSetPktinSuppressionRequest) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *BsnSetPktinSuppressionRequest) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *BsnSetPktinSuppressionRequest) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *BsnSetPktinSuppressionRequest) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *BsnSetPktinSuppressionRequest) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *BsnSetPktinSuppressionRequest) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *BsnSetPktinSuppressionRequest) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *BsnSetPktinSuppressionRequest) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *BsnSetPktinSuppressionRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Enabled))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint64(uint64(self.Cookie))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetPktinSuppressionRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetPktinSuppressionRequest, error) {
+	_bsnsetpktinsuppressionrequest := &BsnSetPktinSuppressionRequest{BsnHeader: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("BsnSetPktinSuppressionRequest packet too short: %d < 16", decoder.Length())
+	}
+	_bsnsetpktinsuppressionrequest.Enabled = uint8(decoder.ReadByte())
+	decoder.Skip(1)
+	_bsnsetpktinsuppressionrequest.IdleTimeout = uint16(decoder.ReadUint16())
+	_bsnsetpktinsuppressionrequest.HardTimeout = uint16(decoder.ReadUint16())
+	_bsnsetpktinsuppressionrequest.Priority = uint16(decoder.ReadUint16())
+	_bsnsetpktinsuppressionrequest.Cookie = uint64(decoder.ReadUint64())
+	return _bsnsetpktinsuppressionrequest, nil
+}
+
+func NewBsnSetPktinSuppressionRequest() *BsnSetPktinSuppressionRequest {
+	obj := &BsnSetPktinSuppressionRequest{
+		BsnHeader: NewBsnHeader(11),
+	}
+	return obj
+}
+
+type BsnSetSwitchPipelineReply struct {
+	*BsnHeader
+	Status uint32
+}
+
+type IBsnSetSwitchPipelineReply interface {
+	IBsnHeader
+	GetStatus() uint32
+}
+
+func (self *BsnSetSwitchPipelineReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnSetSwitchPipelineReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnSetSwitchPipelineReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetSwitchPipelineReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetSwitchPipelineReply, error) {
+	_bsnsetswitchpipelinereply := &BsnSetSwitchPipelineReply{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnSetSwitchPipelineReply packet too short: %d < 4", decoder.Length())
+	}
+	_bsnsetswitchpipelinereply.Status = uint32(decoder.ReadUint32())
+	return _bsnsetswitchpipelinereply, nil
+}
+
+func NewBsnSetSwitchPipelineReply() *BsnSetSwitchPipelineReply {
+	obj := &BsnSetSwitchPipelineReply{
+		BsnHeader: NewBsnHeader(54),
+	}
+	return obj
+}
+
+type BsnSetSwitchPipelineRequest struct {
+	*BsnHeader
+	Pipeline string
+}
+
+type IBsnSetSwitchPipelineRequest interface {
+	IBsnHeader
+	GetPipeline() string
+}
+
+func (self *BsnSetSwitchPipelineRequest) GetPipeline() string {
+	return self.Pipeline
+}
+
+func (self *BsnSetSwitchPipelineRequest) SetPipeline(v string) {
+	self.Pipeline = v
+}
+
+func (self *BsnSetSwitchPipelineRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write([]byte(self.Pipeline))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSetSwitchPipelineRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnSetSwitchPipelineRequest, error) {
+	_bsnsetswitchpipelinerequest := &BsnSetSwitchPipelineRequest{BsnHeader: parent}
+	if decoder.Length() < 256 {
+		return nil, fmt.Errorf("BsnSetSwitchPipelineRequest packet too short: %d < 256", decoder.Length())
+	}
+	_bsnsetswitchpipelinerequest.Pipeline = string(bytes.Trim(decoder.Read(256), "\x00"))
+	return _bsnsetswitchpipelinerequest, nil
+}
+
+func NewBsnSetSwitchPipelineRequest() *BsnSetSwitchPipelineRequest {
+	obj := &BsnSetSwitchPipelineRequest{
+		BsnHeader: NewBsnHeader(53),
+	}
+	return obj
+}
+
+type BsnSwitchPipelineStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnSwitchPipelineStatsEntry
+}
+
+type IBsnSwitchPipelineStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnSwitchPipelineStatsEntry
+}
+
+func (self *BsnSwitchPipelineStatsReply) GetEntries() []*BsnSwitchPipelineStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnSwitchPipelineStatsReply) SetEntries(v []*BsnSwitchPipelineStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnSwitchPipelineStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSwitchPipelineStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnSwitchPipelineStatsReply, error) {
+	_bsnswitchpipelinestatsreply := &BsnSwitchPipelineStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 256 {
+		item, err := DecodeBsnSwitchPipelineStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnswitchpipelinestatsreply.Entries = append(_bsnswitchpipelinestatsreply.Entries, item)
+		}
+	}
+	return _bsnswitchpipelinestatsreply, nil
+}
+
+func NewBsnSwitchPipelineStatsReply() *BsnSwitchPipelineStatsReply {
+	obj := &BsnSwitchPipelineStatsReply{
+		BsnStatsReply: NewBsnStatsReply(6),
+	}
+	return obj
+}
+
+type BsnSwitchPipelineStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnSwitchPipelineStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnSwitchPipelineStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnSwitchPipelineStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnSwitchPipelineStatsRequest, error) {
+	_bsnswitchpipelinestatsrequest := &BsnSwitchPipelineStatsRequest{BsnStatsRequest: parent}
+	return _bsnswitchpipelinestatsrequest, nil
+}
+
+func NewBsnSwitchPipelineStatsRequest() *BsnSwitchPipelineStatsRequest {
+	obj := &BsnSwitchPipelineStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(6),
+	}
+	return obj
+}
+
+type BsnTableChecksumStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnTableChecksumStatsEntry
+}
+
+type IBsnTableChecksumStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnTableChecksumStatsEntry
+}
+
+func (self *BsnTableChecksumStatsReply) GetEntries() []*BsnTableChecksumStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnTableChecksumStatsReply) SetEntries(v []*BsnTableChecksumStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnTableChecksumStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTableChecksumStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnTableChecksumStatsReply, error) {
+	_bsntablechecksumstatsreply := &BsnTableChecksumStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 9 {
+		item, err := DecodeBsnTableChecksumStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsntablechecksumstatsreply.Entries = append(_bsntablechecksumstatsreply.Entries, item)
+		}
+	}
+	return _bsntablechecksumstatsreply, nil
+}
+
+func NewBsnTableChecksumStatsReply() *BsnTableChecksumStatsReply {
+	obj := &BsnTableChecksumStatsReply{
+		BsnStatsReply: NewBsnStatsReply(11),
+	}
+	return obj
+}
+
+type BsnTableChecksumStatsRequest struct {
+	*BsnStatsRequest
+}
+
+type IBsnTableChecksumStatsRequest interface {
+	IBsnStatsRequest
+}
+
+func (self *BsnTableChecksumStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTableChecksumStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnTableChecksumStatsRequest, error) {
+	_bsntablechecksumstatsrequest := &BsnTableChecksumStatsRequest{BsnStatsRequest: parent}
+	return _bsntablechecksumstatsrequest, nil
+}
+
+func NewBsnTableChecksumStatsRequest() *BsnTableChecksumStatsRequest {
+	obj := &BsnTableChecksumStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(11),
+	}
+	return obj
+}
+
+type BsnTableSetBucketsSize struct {
+	*BsnHeader
+	TableId     uint8
+	BucketsSize uint32
+}
+
+type IBsnTableSetBucketsSize interface {
+	IBsnHeader
+	GetTableId() uint8
+	GetBucketsSize() uint32
+}
+
+func (self *BsnTableSetBucketsSize) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *BsnTableSetBucketsSize) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *BsnTableSetBucketsSize) GetBucketsSize() uint32 {
+	return self.BucketsSize
+}
+
+func (self *BsnTableSetBucketsSize) SetBucketsSize(v uint32) {
+	self.BucketsSize = v
+}
+
+func (self *BsnTableSetBucketsSize) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.BucketsSize))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTableSetBucketsSize(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnTableSetBucketsSize, error) {
+	_bsntablesetbucketssize := &BsnTableSetBucketsSize{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTableSetBucketsSize packet too short: %d < 8", decoder.Length())
+	}
+	decoder.Skip(1)
+	_bsntablesetbucketssize.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(2)
+	_bsntablesetbucketssize.BucketsSize = uint32(decoder.ReadUint32())
+	return _bsntablesetbucketssize, nil
+}
+
+func NewBsnTableSetBucketsSize() *BsnTableSetBucketsSize {
+	obj := &BsnTableSetBucketsSize{
+		BsnHeader: NewBsnHeader(61),
+	}
+	return obj
+}
+
+type BsnTimeReply struct {
+	*BsnHeader
+	TimeMs uint64
+}
+
+type IBsnTimeReply interface {
+	IBsnHeader
+	GetTimeMs() uint64
+}
+
+func (self *BsnTimeReply) GetTimeMs() uint64 {
+	return self.TimeMs
+}
+
+func (self *BsnTimeReply) SetTimeMs(v uint64) {
+	self.TimeMs = v
+}
+
+func (self *BsnTimeReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.TimeMs))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTimeReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnTimeReply, error) {
+	_bsntimereply := &BsnTimeReply{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnTimeReply packet too short: %d < 8", decoder.Length())
+	}
+	_bsntimereply.TimeMs = uint64(decoder.ReadUint64())
+	return _bsntimereply, nil
+}
+
+func NewBsnTimeReply() *BsnTimeReply {
+	obj := &BsnTimeReply{
+		BsnHeader: NewBsnHeader(45),
+	}
+	return obj
+}
+
+type BsnTimeRequest struct {
+	*BsnHeader
+}
+
+type IBsnTimeRequest interface {
+	IBsnHeader
+}
+
+func (self *BsnTimeRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnTimeRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnTimeRequest, error) {
+	_bsntimerequest := &BsnTimeRequest{BsnHeader: parent}
+	return _bsntimerequest, nil
+}
+
+func NewBsnTimeRequest() *BsnTimeRequest {
+	obj := &BsnTimeRequest{
+		BsnHeader: NewBsnHeader(44),
+	}
+	return obj
+}
+
+type BsnVirtualPortCreateReply struct {
+	*BsnHeader
+	Status  uint32
+	VportNo uint32
+}
+
+type IBsnVirtualPortCreateReply interface {
+	IBsnHeader
+	GetStatus() uint32
+	GetVportNo() uint32
+}
+
+func (self *BsnVirtualPortCreateReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnVirtualPortCreateReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnVirtualPortCreateReply) GetVportNo() uint32 {
+	return self.VportNo
+}
+
+func (self *BsnVirtualPortCreateReply) SetVportNo(v uint32) {
+	self.VportNo = v
+}
+
+func (self *BsnVirtualPortCreateReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+	encoder.PutUint32(uint32(self.VportNo))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVirtualPortCreateReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnVirtualPortCreateReply, error) {
+	_bsnvirtualportcreatereply := &BsnVirtualPortCreateReply{BsnHeader: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("BsnVirtualPortCreateReply packet too short: %d < 8", decoder.Length())
+	}
+	_bsnvirtualportcreatereply.Status = uint32(decoder.ReadUint32())
+	_bsnvirtualportcreatereply.VportNo = uint32(decoder.ReadUint32())
+	return _bsnvirtualportcreatereply, nil
+}
+
+func NewBsnVirtualPortCreateReply() *BsnVirtualPortCreateReply {
+	obj := &BsnVirtualPortCreateReply{
+		BsnHeader: NewBsnHeader(16),
+	}
+	return obj
+}
+
+type BsnVirtualPortCreateRequest struct {
+	*BsnHeader
+	Vport BSNVport
+}
+
+type IBsnVirtualPortCreateRequest interface {
+	IBsnHeader
+	GetVport() BSNVport
+}
+
+func (self *BsnVirtualPortCreateRequest) GetVport() BSNVport {
+	return self.Vport
+}
+
+func (self *BsnVirtualPortCreateRequest) SetVport(v BSNVport) {
+	self.Vport = v
+}
+
+func (self *BsnVirtualPortCreateRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	if err := self.Vport.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVirtualPortCreateRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnVirtualPortCreateRequest, error) {
+	_bsnvirtualportcreaterequest := &BsnVirtualPortCreateRequest{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnVirtualPortCreateRequest packet too short: %d < 4", decoder.Length())
+	}
+	if err := _bsnvirtualportcreaterequest.Vport.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	return _bsnvirtualportcreaterequest, nil
+}
+
+func NewBsnVirtualPortCreateRequest() *BsnVirtualPortCreateRequest {
+	obj := &BsnVirtualPortCreateRequest{
+		BsnHeader: NewBsnHeader(15),
+	}
+	return obj
+}
+
+type BsnVirtualPortRemoveReply struct {
+	*BsnHeader
+	Status uint32
+}
+
+type IBsnVirtualPortRemoveReply interface {
+	IBsnHeader
+	GetStatus() uint32
+}
+
+func (self *BsnVirtualPortRemoveReply) GetStatus() uint32 {
+	return self.Status
+}
+
+func (self *BsnVirtualPortRemoveReply) SetStatus(v uint32) {
+	self.Status = v
+}
+
+func (self *BsnVirtualPortRemoveReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Status))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVirtualPortRemoveReply(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnVirtualPortRemoveReply, error) {
+	_bsnvirtualportremovereply := &BsnVirtualPortRemoveReply{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnVirtualPortRemoveReply packet too short: %d < 4", decoder.Length())
+	}
+	_bsnvirtualportremovereply.Status = uint32(decoder.ReadUint32())
+	return _bsnvirtualportremovereply, nil
+}
+
+func NewBsnVirtualPortRemoveReply() *BsnVirtualPortRemoveReply {
+	obj := &BsnVirtualPortRemoveReply{
+		BsnHeader: NewBsnHeader(26),
+	}
+	return obj
+}
+
+type BsnVirtualPortRemoveRequest struct {
+	*BsnHeader
+	VportNo uint32
+}
+
+type IBsnVirtualPortRemoveRequest interface {
+	IBsnHeader
+	GetVportNo() uint32
+}
+
+func (self *BsnVirtualPortRemoveRequest) GetVportNo() uint32 {
+	return self.VportNo
+}
+
+func (self *BsnVirtualPortRemoveRequest) SetVportNo(v uint32) {
+	self.VportNo = v
+}
+
+func (self *BsnVirtualPortRemoveRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.VportNo))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVirtualPortRemoveRequest(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnVirtualPortRemoveRequest, error) {
+	_bsnvirtualportremoverequest := &BsnVirtualPortRemoveRequest{BsnHeader: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnVirtualPortRemoveRequest packet too short: %d < 4", decoder.Length())
+	}
+	_bsnvirtualportremoverequest.VportNo = uint32(decoder.ReadUint32())
+	return _bsnvirtualportremoverequest, nil
+}
+
+func NewBsnVirtualPortRemoveRequest() *BsnVirtualPortRemoveRequest {
+	obj := &BsnVirtualPortRemoveRequest{
+		BsnHeader: NewBsnHeader(17),
+	}
+	return obj
+}
+
+type BsnVlanCounterClear struct {
+	*BsnHeader
+	VlanVid uint16
+}
+
+type IBsnVlanCounterClear interface {
+	IBsnHeader
+	GetVlanVid() uint16
+}
+
+func (self *BsnVlanCounterClear) GetVlanVid() uint16 {
+	return self.VlanVid
+}
+
+func (self *BsnVlanCounterClear) SetVlanVid(v uint16) {
+	self.VlanVid = v
+}
+
+func (self *BsnVlanCounterClear) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnHeader.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.VlanVid))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVlanCounterClear(parent *BsnHeader, decoder *goloxi.Decoder) (*BsnVlanCounterClear, error) {
+	_bsnvlancounterclear := &BsnVlanCounterClear{BsnHeader: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnVlanCounterClear packet too short: %d < 2", decoder.Length())
+	}
+	_bsnvlancounterclear.VlanVid = uint16(decoder.ReadUint16())
+	return _bsnvlancounterclear, nil
+}
+
+func NewBsnVlanCounterClear() *BsnVlanCounterClear {
+	obj := &BsnVlanCounterClear{
+		BsnHeader: NewBsnHeader(70),
+	}
+	return obj
+}
+
+type BsnVlanCounterStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnVlanCounterStatsEntry
+}
+
+type IBsnVlanCounterStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnVlanCounterStatsEntry
+}
+
+func (self *BsnVlanCounterStatsReply) GetEntries() []*BsnVlanCounterStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnVlanCounterStatsReply) SetEntries(v []*BsnVlanCounterStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnVlanCounterStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVlanCounterStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnVlanCounterStatsReply, error) {
+	_bsnvlancounterstatsreply := &BsnVlanCounterStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeBsnVlanCounterStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnvlancounterstatsreply.Entries = append(_bsnvlancounterstatsreply.Entries, item)
+		}
+	}
+	return _bsnvlancounterstatsreply, nil
+}
+
+func NewBsnVlanCounterStatsReply() *BsnVlanCounterStatsReply {
+	obj := &BsnVlanCounterStatsReply{
+		BsnStatsReply: NewBsnStatsReply(9),
+	}
+	return obj
+}
+
+type BsnVlanCounterStatsRequest struct {
+	*BsnStatsRequest
+	VlanVid uint16
+}
+
+type IBsnVlanCounterStatsRequest interface {
+	IBsnStatsRequest
+	GetVlanVid() uint16
+}
+
+func (self *BsnVlanCounterStatsRequest) GetVlanVid() uint16 {
+	return self.VlanVid
+}
+
+func (self *BsnVlanCounterStatsRequest) SetVlanVid(v uint16) {
+	self.VlanVid = v
+}
+
+func (self *BsnVlanCounterStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.VlanVid))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVlanCounterStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnVlanCounterStatsRequest, error) {
+	_bsnvlancounterstatsrequest := &BsnVlanCounterStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("BsnVlanCounterStatsRequest packet too short: %d < 2", decoder.Length())
+	}
+	_bsnvlancounterstatsrequest.VlanVid = uint16(decoder.ReadUint16())
+	return _bsnvlancounterstatsrequest, nil
+}
+
+func NewBsnVlanCounterStatsRequest() *BsnVlanCounterStatsRequest {
+	obj := &BsnVlanCounterStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(9),
+	}
+	return obj
+}
+
+type BsnVrfCounterStatsReply struct {
+	*BsnStatsReply
+	Entries []*BsnVrfCounterStatsEntry
+}
+
+type IBsnVrfCounterStatsReply interface {
+	IBsnStatsReply
+	GetEntries() []*BsnVrfCounterStatsEntry
+}
+
+func (self *BsnVrfCounterStatsReply) GetEntries() []*BsnVrfCounterStatsEntry {
+	return self.Entries
+}
+
+func (self *BsnVrfCounterStatsReply) SetEntries(v []*BsnVrfCounterStatsEntry) {
+	self.Entries = v
+}
+
+func (self *BsnVrfCounterStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVrfCounterStatsReply(parent *BsnStatsReply, decoder *goloxi.Decoder) (*BsnVrfCounterStatsReply, error) {
+	_bsnvrfcounterstatsreply := &BsnVrfCounterStatsReply{BsnStatsReply: parent}
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeBsnVrfCounterStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_bsnvrfcounterstatsreply.Entries = append(_bsnvrfcounterstatsreply.Entries, item)
+		}
+	}
+	return _bsnvrfcounterstatsreply, nil
+}
+
+func NewBsnVrfCounterStatsReply() *BsnVrfCounterStatsReply {
+	obj := &BsnVrfCounterStatsReply{
+		BsnStatsReply: NewBsnStatsReply(15),
+	}
+	return obj
+}
+
+type BsnVrfCounterStatsRequest struct {
+	*BsnStatsRequest
+	Vrf uint32
+}
+
+type IBsnVrfCounterStatsRequest interface {
+	IBsnStatsRequest
+	GetVrf() uint32
+}
+
+func (self *BsnVrfCounterStatsRequest) GetVrf() uint32 {
+	return self.Vrf
+}
+
+func (self *BsnVrfCounterStatsRequest) SetVrf(v uint32) {
+	self.Vrf = v
+}
+
+func (self *BsnVrfCounterStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.BsnStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Vrf))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeBsnVrfCounterStatsRequest(parent *BsnStatsRequest, decoder *goloxi.Decoder) (*BsnVrfCounterStatsRequest, error) {
+	_bsnvrfcounterstatsrequest := &BsnVrfCounterStatsRequest{BsnStatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("BsnVrfCounterStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	_bsnvrfcounterstatsrequest.Vrf = uint32(decoder.ReadUint32())
+	return _bsnvrfcounterstatsrequest, nil
+}
+
+func NewBsnVrfCounterStatsRequest() *BsnVrfCounterStatsRequest {
+	obj := &BsnVrfCounterStatsRequest{
+		BsnStatsRequest: NewBsnStatsRequest(15),
+	}
+	return obj
+}
+
+type DescStatsReply struct {
+	*StatsReply
+	MfrDesc   string
+	HwDesc    string
+	SwDesc    string
+	SerialNum string
+	DpDesc    string
+}
+
+type IDescStatsReply interface {
+	IStatsReply
+	GetMfrDesc() string
+	GetHwDesc() string
+	GetSwDesc() string
+	GetSerialNum() string
+	GetDpDesc() string
+}
+
+func (self *DescStatsReply) GetMfrDesc() string {
+	return self.MfrDesc
+}
+
+func (self *DescStatsReply) SetMfrDesc(v string) {
+	self.MfrDesc = v
+}
+
+func (self *DescStatsReply) GetHwDesc() string {
+	return self.HwDesc
+}
+
+func (self *DescStatsReply) SetHwDesc(v string) {
+	self.HwDesc = v
+}
+
+func (self *DescStatsReply) GetSwDesc() string {
+	return self.SwDesc
+}
+
+func (self *DescStatsReply) SetSwDesc(v string) {
+	self.SwDesc = v
+}
+
+func (self *DescStatsReply) GetSerialNum() string {
+	return self.SerialNum
+}
+
+func (self *DescStatsReply) SetSerialNum(v string) {
+	self.SerialNum = v
+}
+
+func (self *DescStatsReply) GetDpDesc() string {
+	return self.DpDesc
+}
+
+func (self *DescStatsReply) SetDpDesc(v string) {
+	self.DpDesc = v
+}
+
+func (self *DescStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.Write([]byte(self.MfrDesc))
+	encoder.Write([]byte(self.HwDesc))
+	encoder.Write([]byte(self.SwDesc))
+	encoder.Write([]byte(self.SerialNum))
+	encoder.Write([]byte(self.DpDesc))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeDescStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*DescStatsReply, error) {
+	_descstatsreply := &DescStatsReply{StatsReply: parent}
+	if decoder.Length() < 1060 {
+		return nil, fmt.Errorf("DescStatsReply packet too short: %d < 1060", decoder.Length())
+	}
+	decoder.Skip(4)
+	_descstatsreply.MfrDesc = string(bytes.Trim(decoder.Read(256), "\x00"))
+	_descstatsreply.HwDesc = string(bytes.Trim(decoder.Read(256), "\x00"))
+	_descstatsreply.SwDesc = string(bytes.Trim(decoder.Read(256), "\x00"))
+	_descstatsreply.SerialNum = string(bytes.Trim(decoder.Read(32), "\x00"))
+	_descstatsreply.DpDesc = string(bytes.Trim(decoder.Read(256), "\x00"))
+	return _descstatsreply, nil
+}
+
+func NewDescStatsReply() *DescStatsReply {
+	obj := &DescStatsReply{
+		StatsReply: NewStatsReply(0),
+	}
+	return obj
+}
+
+type DescStatsRequest struct {
+	*StatsRequest
+}
+
+type IDescStatsRequest interface {
+	IStatsRequest
+}
+
+func (self *DescStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeDescStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*DescStatsRequest, error) {
+	_descstatsrequest := &DescStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("DescStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _descstatsrequest, nil
+}
+
+func NewDescStatsRequest() *DescStatsRequest {
+	obj := &DescStatsRequest{
+		StatsRequest: NewStatsRequest(0),
+	}
+	return obj
+}
+
+type EchoReply struct {
+	*Header
+	Data []byte
+}
+
+type IEchoReply interface {
+	IHeader
+	GetData() []byte
+}
+
+func (self *EchoReply) GetData() []byte {
+	return self.Data
+}
+
+func (self *EchoReply) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *EchoReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeEchoReply(parent *Header, decoder *goloxi.Decoder) (*EchoReply, error) {
+	_echoreply := &EchoReply{Header: parent}
+	_echoreply.Data = decoder.Read(int(decoder.Length()))
+	return _echoreply, nil
+}
+
+func NewEchoReply() *EchoReply {
+	obj := &EchoReply{
+		Header: NewHeader(3),
+	}
+	return obj
+}
+
+type EchoRequest struct {
+	*Header
+	Data []byte
+}
+
+type IEchoRequest interface {
+	IHeader
+	GetData() []byte
+}
+
+func (self *EchoRequest) GetData() []byte {
+	return self.Data
+}
+
+func (self *EchoRequest) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *EchoRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeEchoRequest(parent *Header, decoder *goloxi.Decoder) (*EchoRequest, error) {
+	_echorequest := &EchoRequest{Header: parent}
+	_echorequest.Data = decoder.Read(int(decoder.Length()))
+	return _echorequest, nil
+}
+
+func NewEchoRequest() *EchoRequest {
+	obj := &EchoRequest{
+		Header: NewHeader(2),
+	}
+	return obj
+}
+
+type FeaturesReply struct {
+	*Header
+	DatapathId   uint64
+	NBuffers     uint32
+	NTables      uint8
+	AuxiliaryId  uint8
+	Capabilities Capabilities
+	Reserved     uint32
+}
+
+type IFeaturesReply interface {
+	IHeader
+	GetDatapathId() uint64
+	GetNBuffers() uint32
+	GetNTables() uint8
+	GetAuxiliaryId() uint8
+	GetCapabilities() Capabilities
+	GetReserved() uint32
+}
+
+func (self *FeaturesReply) GetDatapathId() uint64 {
+	return self.DatapathId
+}
+
+func (self *FeaturesReply) SetDatapathId(v uint64) {
+	self.DatapathId = v
+}
+
+func (self *FeaturesReply) GetNBuffers() uint32 {
+	return self.NBuffers
+}
+
+func (self *FeaturesReply) SetNBuffers(v uint32) {
+	self.NBuffers = v
+}
+
+func (self *FeaturesReply) GetNTables() uint8 {
+	return self.NTables
+}
+
+func (self *FeaturesReply) SetNTables(v uint8) {
+	self.NTables = v
+}
+
+func (self *FeaturesReply) GetAuxiliaryId() uint8 {
+	return self.AuxiliaryId
+}
+
+func (self *FeaturesReply) SetAuxiliaryId(v uint8) {
+	self.AuxiliaryId = v
+}
+
+func (self *FeaturesReply) GetCapabilities() Capabilities {
+	return self.Capabilities
+}
+
+func (self *FeaturesReply) SetCapabilities(v Capabilities) {
+	self.Capabilities = v
+}
+
+func (self *FeaturesReply) GetReserved() uint32 {
+	return self.Reserved
+}
+
+func (self *FeaturesReply) SetReserved(v uint32) {
+	self.Reserved = v
+}
+
+func (self *FeaturesReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.DatapathId))
+	encoder.PutUint32(uint32(self.NBuffers))
+	encoder.PutUint8(uint8(self.NTables))
+	encoder.PutUint8(uint8(self.AuxiliaryId))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.Capabilities))
+	encoder.PutUint32(uint32(self.Reserved))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFeaturesReply(parent *Header, decoder *goloxi.Decoder) (*FeaturesReply, error) {
+	_featuresreply := &FeaturesReply{Header: parent}
+	if decoder.Length() < 24 {
+		return nil, fmt.Errorf("FeaturesReply packet too short: %d < 24", decoder.Length())
+	}
+	_featuresreply.DatapathId = uint64(decoder.ReadUint64())
+	_featuresreply.NBuffers = uint32(decoder.ReadUint32())
+	_featuresreply.NTables = uint8(decoder.ReadByte())
+	_featuresreply.AuxiliaryId = uint8(decoder.ReadByte())
+	decoder.Skip(2)
+	_featuresreply.Capabilities = Capabilities(decoder.ReadUint32())
+	_featuresreply.Reserved = uint32(decoder.ReadUint32())
+	return _featuresreply, nil
+}
+
+func NewFeaturesReply() *FeaturesReply {
+	obj := &FeaturesReply{
+		Header: NewHeader(6),
+	}
+	return obj
+}
+
+type FeaturesRequest struct {
+	*Header
+}
+
+type IFeaturesRequest interface {
+	IHeader
+}
+
+func (self *FeaturesRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFeaturesRequest(parent *Header, decoder *goloxi.Decoder) (*FeaturesRequest, error) {
+	_featuresrequest := &FeaturesRequest{Header: parent}
+	return _featuresrequest, nil
+}
+
+func NewFeaturesRequest() *FeaturesRequest {
+	obj := &FeaturesRequest{
+		Header: NewHeader(5),
+	}
+	return obj
+}
+
+type FlowMod struct {
+	*Header
+	Cookie       uint64
+	CookieMask   uint64
+	TableId      uint8
+	Command      FmCmd
+	IdleTimeout  uint16
+	HardTimeout  uint16
+	Priority     uint16
+	BufferId     uint32
+	OutPort      Port
+	OutGroup     uint32
+	Flags        FlowModFlags
+	Match        Match
+	Instructions []IInstruction
+}
+
+type IFlowMod interface {
+	IHeader
+	GetCookie() uint64
+	GetCookieMask() uint64
+	GetTableId() uint8
+	GetCommand() FmCmd
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetPriority() uint16
+	GetBufferId() uint32
+	GetOutPort() Port
+	GetOutGroup() uint32
+	GetFlags() FlowModFlags
+	GetMatch() Match
+	GetInstructions() []IInstruction
+}
+
+func (self *FlowMod) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *FlowMod) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *FlowMod) GetCookieMask() uint64 {
+	return self.CookieMask
+}
+
+func (self *FlowMod) SetCookieMask(v uint64) {
+	self.CookieMask = v
+}
+
+func (self *FlowMod) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *FlowMod) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *FlowMod) GetCommand() FmCmd {
+	return self.Command
+}
+
+func (self *FlowMod) SetCommand(v FmCmd) {
+	self.Command = v
+}
+
+func (self *FlowMod) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *FlowMod) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *FlowMod) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *FlowMod) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *FlowMod) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *FlowMod) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *FlowMod) GetBufferId() uint32 {
+	return self.BufferId
+}
+
+func (self *FlowMod) SetBufferId(v uint32) {
+	self.BufferId = v
+}
+
+func (self *FlowMod) GetOutPort() Port {
+	return self.OutPort
+}
+
+func (self *FlowMod) SetOutPort(v Port) {
+	self.OutPort = v
+}
+
+func (self *FlowMod) GetOutGroup() uint32 {
+	return self.OutGroup
+}
+
+func (self *FlowMod) SetOutGroup(v uint32) {
+	self.OutGroup = v
+}
+
+func (self *FlowMod) GetFlags() FlowModFlags {
+	return self.Flags
+}
+
+func (self *FlowMod) SetFlags(v FlowModFlags) {
+	self.Flags = v
+}
+
+func (self *FlowMod) GetMatch() Match {
+	return self.Match
+}
+
+func (self *FlowMod) SetMatch(v Match) {
+	self.Match = v
+}
+
+func (self *FlowMod) GetInstructions() []IInstruction {
+	return self.Instructions
+}
+
+func (self *FlowMod) SetInstructions(v []IInstruction) {
+	self.Instructions = v
+}
+
+func (self *FlowMod) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint64(uint64(self.CookieMask))
+	encoder.PutUint8(uint8(self.TableId))
+	self.Command.Serialize(encoder)
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint32(uint32(self.BufferId))
+	self.OutPort.Serialize(encoder)
+	encoder.PutUint32(uint32(self.OutGroup))
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Instructions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func DecodeFlowMod(parent *Header, decoder *goloxi.Decoder) (IFlowMod, error) {
+	_flowmod := &FlowMod{Header: parent}
+	if decoder.Length() < 48 {
+		return nil, fmt.Errorf("FlowMod packet too short: %d < 48", decoder.Length())
+	}
+	_flowmod.Cookie = uint64(decoder.ReadUint64())
+	_flowmod.CookieMask = uint64(decoder.ReadUint64())
+	_flowmod.TableId = uint8(decoder.ReadByte())
+	_flowmod.Command.Decode(decoder)
+	_flowmod.IdleTimeout = uint16(decoder.ReadUint16())
+	_flowmod.HardTimeout = uint16(decoder.ReadUint16())
+	_flowmod.Priority = uint16(decoder.ReadUint16())
+	_flowmod.BufferId = uint32(decoder.ReadUint32())
+	_flowmod.OutPort.Decode(decoder)
+	_flowmod.OutGroup = uint32(decoder.ReadUint32())
+	_flowmod.Flags = FlowModFlags(decoder.ReadUint16())
+	decoder.Skip(2)
+	if err := _flowmod.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeInstruction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_flowmod.Instructions = append(_flowmod.Instructions, item)
+		}
+	}
+
+	switch _flowmod.Command {
+	case 0:
+		return DecodeFlowAdd(_flowmod, decoder)
+	case 1:
+		return DecodeFlowModify(_flowmod, decoder)
+	case 2:
+		return DecodeFlowModifyStrict(_flowmod, decoder)
+	case 3:
+		return DecodeFlowDelete(_flowmod, decoder)
+	case 4:
+		return DecodeFlowDeleteStrict(_flowmod, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'FlowMod'", _flowmod.Command)
+	}
+}
+
+func NewFlowMod(__command FmCmd) *FlowMod {
+	obj := &FlowMod{
+		Header: NewHeader(14),
+	}
+	obj.Command = __command
+	return obj
+}
+
+type FlowAdd struct {
+	*FlowMod
+}
+
+type IFlowAdd interface {
+	IFlowMod
+}
+
+func (self *FlowAdd) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowAdd(parent *FlowMod, decoder *goloxi.Decoder) (*FlowAdd, error) {
+	_flowadd := &FlowAdd{FlowMod: parent}
+	return _flowadd, nil
+}
+
+func NewFlowAdd() *FlowAdd {
+	obj := &FlowAdd{
+		FlowMod: NewFlowMod(0),
+	}
+	return obj
+}
+
+type FlowDelete struct {
+	*FlowMod
+}
+
+type IFlowDelete interface {
+	IFlowMod
+}
+
+func (self *FlowDelete) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowDelete(parent *FlowMod, decoder *goloxi.Decoder) (*FlowDelete, error) {
+	_flowdelete := &FlowDelete{FlowMod: parent}
+	return _flowdelete, nil
+}
+
+func NewFlowDelete() *FlowDelete {
+	obj := &FlowDelete{
+		FlowMod: NewFlowMod(3),
+	}
+	return obj
+}
+
+type FlowDeleteStrict struct {
+	*FlowMod
+}
+
+type IFlowDeleteStrict interface {
+	IFlowMod
+}
+
+func (self *FlowDeleteStrict) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowDeleteStrict(parent *FlowMod, decoder *goloxi.Decoder) (*FlowDeleteStrict, error) {
+	_flowdeletestrict := &FlowDeleteStrict{FlowMod: parent}
+	return _flowdeletestrict, nil
+}
+
+func NewFlowDeleteStrict() *FlowDeleteStrict {
+	obj := &FlowDeleteStrict{
+		FlowMod: NewFlowMod(4),
+	}
+	return obj
+}
+
+type FlowModFailedErrorMsg struct {
+	*ErrorMsg
+	Code FlowModFailedCode
+	Data []byte
+}
+
+type IFlowModFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() FlowModFailedCode
+	GetData() []byte
+}
+
+func (self *FlowModFailedErrorMsg) GetCode() FlowModFailedCode {
+	return self.Code
+}
+
+func (self *FlowModFailedErrorMsg) SetCode(v FlowModFailedCode) {
+	self.Code = v
+}
+
+func (self *FlowModFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *FlowModFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *FlowModFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowModFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*FlowModFailedErrorMsg, error) {
+	_flowmodfailederrormsg := &FlowModFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("FlowModFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_flowmodfailederrormsg.Code = FlowModFailedCode(decoder.ReadUint16())
+	_flowmodfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _flowmodfailederrormsg, nil
+}
+
+func NewFlowModFailedErrorMsg() *FlowModFailedErrorMsg {
+	obj := &FlowModFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(5),
+	}
+	return obj
+}
+
+type FlowModify struct {
+	*FlowMod
+}
+
+type IFlowModify interface {
+	IFlowMod
+}
+
+func (self *FlowModify) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowModify(parent *FlowMod, decoder *goloxi.Decoder) (*FlowModify, error) {
+	_flowmodify := &FlowModify{FlowMod: parent}
+	return _flowmodify, nil
+}
+
+func NewFlowModify() *FlowModify {
+	obj := &FlowModify{
+		FlowMod: NewFlowMod(1),
+	}
+	return obj
+}
+
+type FlowModifyStrict struct {
+	*FlowMod
+}
+
+type IFlowModifyStrict interface {
+	IFlowMod
+}
+
+func (self *FlowModifyStrict) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.FlowMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowModifyStrict(parent *FlowMod, decoder *goloxi.Decoder) (*FlowModifyStrict, error) {
+	_flowmodifystrict := &FlowModifyStrict{FlowMod: parent}
+	return _flowmodifystrict, nil
+}
+
+func NewFlowModifyStrict() *FlowModifyStrict {
+	obj := &FlowModifyStrict{
+		FlowMod: NewFlowMod(2),
+	}
+	return obj
+}
+
+type FlowRemoved struct {
+	*Header
+	Cookie       uint64
+	Priority     uint16
+	Reason       FlowRemovedReason
+	TableId      uint8
+	DurationSec  uint32
+	DurationNsec uint32
+	IdleTimeout  uint16
+	HardTimeout  uint16
+	PacketCount  uint64
+	ByteCount    uint64
+	Match        Match
+}
+
+type IFlowRemoved interface {
+	IHeader
+	GetCookie() uint64
+	GetPriority() uint16
+	GetReason() FlowRemovedReason
+	GetTableId() uint8
+	GetDurationSec() uint32
+	GetDurationNsec() uint32
+	GetIdleTimeout() uint16
+	GetHardTimeout() uint16
+	GetPacketCount() uint64
+	GetByteCount() uint64
+	GetMatch() Match
+}
+
+func (self *FlowRemoved) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *FlowRemoved) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *FlowRemoved) GetPriority() uint16 {
+	return self.Priority
+}
+
+func (self *FlowRemoved) SetPriority(v uint16) {
+	self.Priority = v
+}
+
+func (self *FlowRemoved) GetReason() FlowRemovedReason {
+	return self.Reason
+}
+
+func (self *FlowRemoved) SetReason(v FlowRemovedReason) {
+	self.Reason = v
+}
+
+func (self *FlowRemoved) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *FlowRemoved) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *FlowRemoved) GetDurationSec() uint32 {
+	return self.DurationSec
+}
+
+func (self *FlowRemoved) SetDurationSec(v uint32) {
+	self.DurationSec = v
+}
+
+func (self *FlowRemoved) GetDurationNsec() uint32 {
+	return self.DurationNsec
+}
+
+func (self *FlowRemoved) SetDurationNsec(v uint32) {
+	self.DurationNsec = v
+}
+
+func (self *FlowRemoved) GetIdleTimeout() uint16 {
+	return self.IdleTimeout
+}
+
+func (self *FlowRemoved) SetIdleTimeout(v uint16) {
+	self.IdleTimeout = v
+}
+
+func (self *FlowRemoved) GetHardTimeout() uint16 {
+	return self.HardTimeout
+}
+
+func (self *FlowRemoved) SetHardTimeout(v uint16) {
+	self.HardTimeout = v
+}
+
+func (self *FlowRemoved) GetPacketCount() uint64 {
+	return self.PacketCount
+}
+
+func (self *FlowRemoved) SetPacketCount(v uint64) {
+	self.PacketCount = v
+}
+
+func (self *FlowRemoved) GetByteCount() uint64 {
+	return self.ByteCount
+}
+
+func (self *FlowRemoved) SetByteCount(v uint64) {
+	self.ByteCount = v
+}
+
+func (self *FlowRemoved) GetMatch() Match {
+	return self.Match
+}
+
+func (self *FlowRemoved) SetMatch(v Match) {
+	self.Match = v
+}
+
+func (self *FlowRemoved) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint16(uint16(self.Priority))
+	encoder.PutUint8(uint8(self.Reason))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.PutUint32(uint32(self.DurationSec))
+	encoder.PutUint32(uint32(self.DurationNsec))
+	encoder.PutUint16(uint16(self.IdleTimeout))
+	encoder.PutUint16(uint16(self.HardTimeout))
+	encoder.PutUint64(uint64(self.PacketCount))
+	encoder.PutUint64(uint64(self.ByteCount))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowRemoved(parent *Header, decoder *goloxi.Decoder) (*FlowRemoved, error) {
+	_flowremoved := &FlowRemoved{Header: parent}
+	if decoder.Length() < 48 {
+		return nil, fmt.Errorf("FlowRemoved packet too short: %d < 48", decoder.Length())
+	}
+	_flowremoved.Cookie = uint64(decoder.ReadUint64())
+	_flowremoved.Priority = uint16(decoder.ReadUint16())
+	_flowremoved.Reason = FlowRemovedReason(decoder.ReadByte())
+	_flowremoved.TableId = uint8(decoder.ReadByte())
+	_flowremoved.DurationSec = uint32(decoder.ReadUint32())
+	_flowremoved.DurationNsec = uint32(decoder.ReadUint32())
+	_flowremoved.IdleTimeout = uint16(decoder.ReadUint16())
+	_flowremoved.HardTimeout = uint16(decoder.ReadUint16())
+	_flowremoved.PacketCount = uint64(decoder.ReadUint64())
+	_flowremoved.ByteCount = uint64(decoder.ReadUint64())
+	if err := _flowremoved.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+	return _flowremoved, nil
+}
+
+func NewFlowRemoved() *FlowRemoved {
+	obj := &FlowRemoved{
+		Header: NewHeader(11),
+	}
+	return obj
+}
+
+type FlowStatsReply struct {
+	*StatsReply
+	Entries []*FlowStatsEntry
+}
+
+type IFlowStatsReply interface {
+	IStatsReply
+	GetEntries() []*FlowStatsEntry
+}
+
+func (self *FlowStatsReply) GetEntries() []*FlowStatsEntry {
+	return self.Entries
+}
+
+func (self *FlowStatsReply) SetEntries(v []*FlowStatsEntry) {
+	self.Entries = v
+}
+
+func (self *FlowStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*FlowStatsReply, error) {
+	_flowstatsreply := &FlowStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("FlowStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 56 {
+		item, err := DecodeFlowStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_flowstatsreply.Entries = append(_flowstatsreply.Entries, item)
+		}
+	}
+	return _flowstatsreply, nil
+}
+
+func NewFlowStatsReply() *FlowStatsReply {
+	obj := &FlowStatsReply{
+		StatsReply: NewStatsReply(1),
+	}
+	return obj
+}
+
+type FlowStatsRequest struct {
+	*StatsRequest
+	TableId    uint8
+	OutPort    Port
+	OutGroup   uint32
+	Cookie     uint64
+	CookieMask uint64
+	Match      Match
+}
+
+type IFlowStatsRequest interface {
+	IStatsRequest
+	GetTableId() uint8
+	GetOutPort() Port
+	GetOutGroup() uint32
+	GetCookie() uint64
+	GetCookieMask() uint64
+	GetMatch() Match
+}
+
+func (self *FlowStatsRequest) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *FlowStatsRequest) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *FlowStatsRequest) GetOutPort() Port {
+	return self.OutPort
+}
+
+func (self *FlowStatsRequest) SetOutPort(v Port) {
+	self.OutPort = v
+}
+
+func (self *FlowStatsRequest) GetOutGroup() uint32 {
+	return self.OutGroup
+}
+
+func (self *FlowStatsRequest) SetOutGroup(v uint32) {
+	self.OutGroup = v
+}
+
+func (self *FlowStatsRequest) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *FlowStatsRequest) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *FlowStatsRequest) GetCookieMask() uint64 {
+	return self.CookieMask
+}
+
+func (self *FlowStatsRequest) SetCookieMask(v uint64) {
+	self.CookieMask = v
+}
+
+func (self *FlowStatsRequest) GetMatch() Match {
+	return self.Match
+}
+
+func (self *FlowStatsRequest) SetMatch(v Match) {
+	self.Match = v
+}
+
+func (self *FlowStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	self.OutPort.Serialize(encoder)
+	encoder.PutUint32(uint32(self.OutGroup))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.Cookie))
+	encoder.PutUint64(uint64(self.CookieMask))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeFlowStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*FlowStatsRequest, error) {
+	_flowstatsrequest := &FlowStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 28 {
+		return nil, fmt.Errorf("FlowStatsRequest packet too short: %d < 28", decoder.Length())
+	}
+	decoder.Skip(4)
+	_flowstatsrequest.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_flowstatsrequest.OutPort.Decode(decoder)
+	_flowstatsrequest.OutGroup = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	_flowstatsrequest.Cookie = uint64(decoder.ReadUint64())
+	_flowstatsrequest.CookieMask = uint64(decoder.ReadUint64())
+	if err := _flowstatsrequest.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+	return _flowstatsrequest, nil
+}
+
+func NewFlowStatsRequest() *FlowStatsRequest {
+	obj := &FlowStatsRequest{
+		StatsRequest: NewStatsRequest(1),
+	}
+	return obj
+}
+
+type GetConfigReply struct {
+	*Header
+	Flags       ConfigFlags
+	MissSendLen uint16
+}
+
+type IGetConfigReply interface {
+	IHeader
+	GetFlags() ConfigFlags
+	GetMissSendLen() uint16
+}
+
+func (self *GetConfigReply) GetFlags() ConfigFlags {
+	return self.Flags
+}
+
+func (self *GetConfigReply) SetFlags(v ConfigFlags) {
+	self.Flags = v
+}
+
+func (self *GetConfigReply) GetMissSendLen() uint16 {
+	return self.MissSendLen
+}
+
+func (self *GetConfigReply) SetMissSendLen(v uint16) {
+	self.MissSendLen = v
+}
+
+func (self *GetConfigReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.PutUint16(uint16(self.MissSendLen))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGetConfigReply(parent *Header, decoder *goloxi.Decoder) (*GetConfigReply, error) {
+	_getconfigreply := &GetConfigReply{Header: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("GetConfigReply packet too short: %d < 4", decoder.Length())
+	}
+	_getconfigreply.Flags = ConfigFlags(decoder.ReadUint16())
+	_getconfigreply.MissSendLen = uint16(decoder.ReadUint16())
+	return _getconfigreply, nil
+}
+
+func NewGetConfigReply() *GetConfigReply {
+	obj := &GetConfigReply{
+		Header: NewHeader(8),
+	}
+	return obj
+}
+
+type GetConfigRequest struct {
+	*Header
+}
+
+type IGetConfigRequest interface {
+	IHeader
+}
+
+func (self *GetConfigRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGetConfigRequest(parent *Header, decoder *goloxi.Decoder) (*GetConfigRequest, error) {
+	_getconfigrequest := &GetConfigRequest{Header: parent}
+	return _getconfigrequest, nil
+}
+
+func NewGetConfigRequest() *GetConfigRequest {
+	obj := &GetConfigRequest{
+		Header: NewHeader(7),
+	}
+	return obj
+}
+
+type GroupMod struct {
+	*Header
+	Command   GroupModCommand
+	GroupType GroupType
+	GroupId   uint32
+	Buckets   []*Bucket
+}
+
+type IGroupMod interface {
+	IHeader
+	GetCommand() GroupModCommand
+	GetGroupType() GroupType
+	GetGroupId() uint32
+	GetBuckets() []*Bucket
+}
+
+func (self *GroupMod) GetCommand() GroupModCommand {
+	return self.Command
+}
+
+func (self *GroupMod) SetCommand(v GroupModCommand) {
+	self.Command = v
+}
+
+func (self *GroupMod) GetGroupType() GroupType {
+	return self.GroupType
+}
+
+func (self *GroupMod) SetGroupType(v GroupType) {
+	self.GroupType = v
+}
+
+func (self *GroupMod) GetGroupId() uint32 {
+	return self.GroupId
+}
+
+func (self *GroupMod) SetGroupId(v uint32) {
+	self.GroupId = v
+}
+
+func (self *GroupMod) GetBuckets() []*Bucket {
+	return self.Buckets
+}
+
+func (self *GroupMod) SetBuckets(v []*Bucket) {
+	self.Buckets = v
+}
+
+func (self *GroupMod) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Command))
+	encoder.PutUint8(uint8(self.GroupType))
+	encoder.Write(bytes.Repeat([]byte{0}, 1))
+	encoder.PutUint32(uint32(self.GroupId))
+	for _, obj := range self.Buckets {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func DecodeGroupMod(parent *Header, decoder *goloxi.Decoder) (IGroupMod, error) {
+	_groupmod := &GroupMod{Header: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("GroupMod packet too short: %d < 8", decoder.Length())
+	}
+	_groupmod.Command = GroupModCommand(decoder.ReadUint16())
+	_groupmod.GroupType = GroupType(decoder.ReadByte())
+	decoder.Skip(1)
+	_groupmod.GroupId = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 16 {
+		item, err := DecodeBucket(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_groupmod.Buckets = append(_groupmod.Buckets, item)
+		}
+	}
+
+	switch _groupmod.Command {
+	case 0:
+		return DecodeGroupAdd(_groupmod, decoder)
+	case 1:
+		return DecodeGroupModify(_groupmod, decoder)
+	case 2:
+		return DecodeGroupDelete(_groupmod, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'GroupMod'", _groupmod.Command)
+	}
+}
+
+func NewGroupMod(_command GroupModCommand) *GroupMod {
+	obj := &GroupMod{
+		Header: NewHeader(15),
+	}
+	obj.Command = _command
+	return obj
+}
+
+type GroupAdd struct {
+	*GroupMod
+}
+
+type IGroupAdd interface {
+	IGroupMod
+}
+
+func (self *GroupAdd) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.GroupMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupAdd(parent *GroupMod, decoder *goloxi.Decoder) (*GroupAdd, error) {
+	_groupadd := &GroupAdd{GroupMod: parent}
+	return _groupadd, nil
+}
+
+func NewGroupAdd() *GroupAdd {
+	obj := &GroupAdd{
+		GroupMod: NewGroupMod(0),
+	}
+	return obj
+}
+
+type GroupDelete struct {
+	*GroupMod
+}
+
+type IGroupDelete interface {
+	IGroupMod
+}
+
+func (self *GroupDelete) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.GroupMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupDelete(parent *GroupMod, decoder *goloxi.Decoder) (*GroupDelete, error) {
+	_groupdelete := &GroupDelete{GroupMod: parent}
+	return _groupdelete, nil
+}
+
+func NewGroupDelete() *GroupDelete {
+	obj := &GroupDelete{
+		GroupMod: NewGroupMod(2),
+	}
+	return obj
+}
+
+type GroupDescStatsReply struct {
+	*StatsReply
+	Entries []*GroupDescStatsEntry
+}
+
+type IGroupDescStatsReply interface {
+	IStatsReply
+	GetEntries() []*GroupDescStatsEntry
+}
+
+func (self *GroupDescStatsReply) GetEntries() []*GroupDescStatsEntry {
+	return self.Entries
+}
+
+func (self *GroupDescStatsReply) SetEntries(v []*GroupDescStatsEntry) {
+	self.Entries = v
+}
+
+func (self *GroupDescStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupDescStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*GroupDescStatsReply, error) {
+	_groupdescstatsreply := &GroupDescStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("GroupDescStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeGroupDescStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_groupdescstatsreply.Entries = append(_groupdescstatsreply.Entries, item)
+		}
+	}
+	return _groupdescstatsreply, nil
+}
+
+func NewGroupDescStatsReply() *GroupDescStatsReply {
+	obj := &GroupDescStatsReply{
+		StatsReply: NewStatsReply(7),
+	}
+	return obj
+}
+
+type GroupDescStatsRequest struct {
+	*StatsRequest
+}
+
+type IGroupDescStatsRequest interface {
+	IStatsRequest
+}
+
+func (self *GroupDescStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupDescStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*GroupDescStatsRequest, error) {
+	_groupdescstatsrequest := &GroupDescStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("GroupDescStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _groupdescstatsrequest, nil
+}
+
+func NewGroupDescStatsRequest() *GroupDescStatsRequest {
+	obj := &GroupDescStatsRequest{
+		StatsRequest: NewStatsRequest(7),
+	}
+	return obj
+}
+
+type GroupFeaturesStatsReply struct {
+	*StatsReply
+	Types             uint32
+	Capabilities      GroupCapabilities
+	MaxGroupsAll      uint32
+	MaxGroupsSelect   uint32
+	MaxGroupsIndirect uint32
+	MaxGroupsFf       uint32
+	ActionsAll        uint32
+	ActionsSelect     uint32
+	ActionsIndirect   uint32
+	ActionsFf         uint32
+}
+
+type IGroupFeaturesStatsReply interface {
+	IStatsReply
+	GetTypes() uint32
+	GetCapabilities() GroupCapabilities
+	GetMaxGroupsAll() uint32
+	GetMaxGroupsSelect() uint32
+	GetMaxGroupsIndirect() uint32
+	GetMaxGroupsFf() uint32
+	GetActionsAll() uint32
+	GetActionsSelect() uint32
+	GetActionsIndirect() uint32
+	GetActionsFf() uint32
+}
+
+func (self *GroupFeaturesStatsReply) GetTypes() uint32 {
+	return self.Types
+}
+
+func (self *GroupFeaturesStatsReply) SetTypes(v uint32) {
+	self.Types = v
+}
+
+func (self *GroupFeaturesStatsReply) GetCapabilities() GroupCapabilities {
+	return self.Capabilities
+}
+
+func (self *GroupFeaturesStatsReply) SetCapabilities(v GroupCapabilities) {
+	self.Capabilities = v
+}
+
+func (self *GroupFeaturesStatsReply) GetMaxGroupsAll() uint32 {
+	return self.MaxGroupsAll
+}
+
+func (self *GroupFeaturesStatsReply) SetMaxGroupsAll(v uint32) {
+	self.MaxGroupsAll = v
+}
+
+func (self *GroupFeaturesStatsReply) GetMaxGroupsSelect() uint32 {
+	return self.MaxGroupsSelect
+}
+
+func (self *GroupFeaturesStatsReply) SetMaxGroupsSelect(v uint32) {
+	self.MaxGroupsSelect = v
+}
+
+func (self *GroupFeaturesStatsReply) GetMaxGroupsIndirect() uint32 {
+	return self.MaxGroupsIndirect
+}
+
+func (self *GroupFeaturesStatsReply) SetMaxGroupsIndirect(v uint32) {
+	self.MaxGroupsIndirect = v
+}
+
+func (self *GroupFeaturesStatsReply) GetMaxGroupsFf() uint32 {
+	return self.MaxGroupsFf
+}
+
+func (self *GroupFeaturesStatsReply) SetMaxGroupsFf(v uint32) {
+	self.MaxGroupsFf = v
+}
+
+func (self *GroupFeaturesStatsReply) GetActionsAll() uint32 {
+	return self.ActionsAll
+}
+
+func (self *GroupFeaturesStatsReply) SetActionsAll(v uint32) {
+	self.ActionsAll = v
+}
+
+func (self *GroupFeaturesStatsReply) GetActionsSelect() uint32 {
+	return self.ActionsSelect
+}
+
+func (self *GroupFeaturesStatsReply) SetActionsSelect(v uint32) {
+	self.ActionsSelect = v
+}
+
+func (self *GroupFeaturesStatsReply) GetActionsIndirect() uint32 {
+	return self.ActionsIndirect
+}
+
+func (self *GroupFeaturesStatsReply) SetActionsIndirect(v uint32) {
+	self.ActionsIndirect = v
+}
+
+func (self *GroupFeaturesStatsReply) GetActionsFf() uint32 {
+	return self.ActionsFf
+}
+
+func (self *GroupFeaturesStatsReply) SetActionsFf(v uint32) {
+	self.ActionsFf = v
+}
+
+func (self *GroupFeaturesStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.Types))
+	encoder.PutUint32(uint32(self.Capabilities))
+	encoder.PutUint32(uint32(self.MaxGroupsAll))
+	encoder.PutUint32(uint32(self.MaxGroupsSelect))
+	encoder.PutUint32(uint32(self.MaxGroupsIndirect))
+	encoder.PutUint32(uint32(self.MaxGroupsFf))
+	encoder.PutUint32(uint32(self.ActionsAll))
+	encoder.PutUint32(uint32(self.ActionsSelect))
+	encoder.PutUint32(uint32(self.ActionsIndirect))
+	encoder.PutUint32(uint32(self.ActionsFf))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupFeaturesStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*GroupFeaturesStatsReply, error) {
+	_groupfeaturesstatsreply := &GroupFeaturesStatsReply{StatsReply: parent}
+	if decoder.Length() < 44 {
+		return nil, fmt.Errorf("GroupFeaturesStatsReply packet too short: %d < 44", decoder.Length())
+	}
+	decoder.Skip(4)
+	_groupfeaturesstatsreply.Types = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.Capabilities = GroupCapabilities(decoder.ReadUint32())
+	_groupfeaturesstatsreply.MaxGroupsAll = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.MaxGroupsSelect = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.MaxGroupsIndirect = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.MaxGroupsFf = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.ActionsAll = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.ActionsSelect = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.ActionsIndirect = uint32(decoder.ReadUint32())
+	_groupfeaturesstatsreply.ActionsFf = uint32(decoder.ReadUint32())
+	return _groupfeaturesstatsreply, nil
+}
+
+func NewGroupFeaturesStatsReply() *GroupFeaturesStatsReply {
+	obj := &GroupFeaturesStatsReply{
+		StatsReply: NewStatsReply(8),
+	}
+	return obj
+}
+
+type GroupFeaturesStatsRequest struct {
+	*StatsRequest
+}
+
+type IGroupFeaturesStatsRequest interface {
+	IStatsRequest
+}
+
+func (self *GroupFeaturesStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupFeaturesStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*GroupFeaturesStatsRequest, error) {
+	_groupfeaturesstatsrequest := &GroupFeaturesStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("GroupFeaturesStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _groupfeaturesstatsrequest, nil
+}
+
+func NewGroupFeaturesStatsRequest() *GroupFeaturesStatsRequest {
+	obj := &GroupFeaturesStatsRequest{
+		StatsRequest: NewStatsRequest(8),
+	}
+	return obj
+}
+
+type GroupModFailedErrorMsg struct {
+	*ErrorMsg
+	Code GroupModFailedCode
+	Data []byte
+}
+
+type IGroupModFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() GroupModFailedCode
+	GetData() []byte
+}
+
+func (self *GroupModFailedErrorMsg) GetCode() GroupModFailedCode {
+	return self.Code
+}
+
+func (self *GroupModFailedErrorMsg) SetCode(v GroupModFailedCode) {
+	self.Code = v
+}
+
+func (self *GroupModFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *GroupModFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *GroupModFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupModFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*GroupModFailedErrorMsg, error) {
+	_groupmodfailederrormsg := &GroupModFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("GroupModFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_groupmodfailederrormsg.Code = GroupModFailedCode(decoder.ReadUint16())
+	_groupmodfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _groupmodfailederrormsg, nil
+}
+
+func NewGroupModFailedErrorMsg() *GroupModFailedErrorMsg {
+	obj := &GroupModFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(6),
+	}
+	return obj
+}
+
+type GroupModify struct {
+	*GroupMod
+}
+
+type IGroupModify interface {
+	IGroupMod
+}
+
+func (self *GroupModify) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.GroupMod.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupModify(parent *GroupMod, decoder *goloxi.Decoder) (*GroupModify, error) {
+	_groupmodify := &GroupModify{GroupMod: parent}
+	return _groupmodify, nil
+}
+
+func NewGroupModify() *GroupModify {
+	obj := &GroupModify{
+		GroupMod: NewGroupMod(1),
+	}
+	return obj
+}
+
+type GroupStatsReply struct {
+	*StatsReply
+	Entries []*GroupStatsEntry
+}
+
+type IGroupStatsReply interface {
+	IStatsReply
+	GetEntries() []*GroupStatsEntry
+}
+
+func (self *GroupStatsReply) GetEntries() []*GroupStatsEntry {
+	return self.Entries
+}
+
+func (self *GroupStatsReply) SetEntries(v []*GroupStatsEntry) {
+	self.Entries = v
+}
+
+func (self *GroupStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*GroupStatsReply, error) {
+	_groupstatsreply := &GroupStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("GroupStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 40 {
+		item, err := DecodeGroupStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_groupstatsreply.Entries = append(_groupstatsreply.Entries, item)
+		}
+	}
+	return _groupstatsreply, nil
+}
+
+func NewGroupStatsReply() *GroupStatsReply {
+	obj := &GroupStatsReply{
+		StatsReply: NewStatsReply(6),
+	}
+	return obj
+}
+
+type GroupStatsRequest struct {
+	*StatsRequest
+	GroupId uint32
+}
+
+type IGroupStatsRequest interface {
+	IStatsRequest
+	GetGroupId() uint32
+}
+
+func (self *GroupStatsRequest) GetGroupId() uint32 {
+	return self.GroupId
+}
+
+func (self *GroupStatsRequest) SetGroupId(v uint32) {
+	self.GroupId = v
+}
+
+func (self *GroupStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.GroupId))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeGroupStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*GroupStatsRequest, error) {
+	_groupstatsrequest := &GroupStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("GroupStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	_groupstatsrequest.GroupId = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _groupstatsrequest, nil
+}
+
+func NewGroupStatsRequest() *GroupStatsRequest {
+	obj := &GroupStatsRequest{
+		StatsRequest: NewStatsRequest(6),
+	}
+	return obj
+}
+
+type Hello struct {
+	*Header
+	Elements []IHelloElem
+}
+
+type IHello interface {
+	IHeader
+	GetElements() []IHelloElem
+}
+
+func (self *Hello) GetElements() []IHelloElem {
+	return self.Elements
+}
+
+func (self *Hello) SetElements(v []IHelloElem) {
+	self.Elements = v
+}
+
+func (self *Hello) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	for _, obj := range self.Elements {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeHello(parent *Header, decoder *goloxi.Decoder) (*Hello, error) {
+	_hello := &Hello{Header: parent}
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeHelloElem(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_hello.Elements = append(_hello.Elements, item)
+		}
+	}
+	return _hello, nil
+}
+
+func NewHello() *Hello {
+	obj := &Hello{
+		Header: NewHeader(0),
+	}
+	return obj
+}
+
+type HelloFailedErrorMsg struct {
+	*ErrorMsg
+	Code HelloFailedCode
+	Data []byte
+}
+
+type IHelloFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() HelloFailedCode
+	GetData() []byte
+}
+
+func (self *HelloFailedErrorMsg) GetCode() HelloFailedCode {
+	return self.Code
+}
+
+func (self *HelloFailedErrorMsg) SetCode(v HelloFailedCode) {
+	self.Code = v
+}
+
+func (self *HelloFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *HelloFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *HelloFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeHelloFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*HelloFailedErrorMsg, error) {
+	_hellofailederrormsg := &HelloFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("HelloFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_hellofailederrormsg.Code = HelloFailedCode(decoder.ReadUint16())
+	_hellofailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _hellofailederrormsg, nil
+}
+
+func NewHelloFailedErrorMsg() *HelloFailedErrorMsg {
+	obj := &HelloFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(0),
+	}
+	return obj
+}
+
+type MeterConfigStatsReply struct {
+	*StatsReply
+	Entries []*MeterConfig
+}
+
+type IMeterConfigStatsReply interface {
+	IStatsReply
+	GetEntries() []*MeterConfig
+}
+
+func (self *MeterConfigStatsReply) GetEntries() []*MeterConfig {
+	return self.Entries
+}
+
+func (self *MeterConfigStatsReply) SetEntries(v []*MeterConfig) {
+	self.Entries = v
+}
+
+func (self *MeterConfigStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterConfigStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*MeterConfigStatsReply, error) {
+	_meterconfigstatsreply := &MeterConfigStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("MeterConfigStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 8 {
+		item, err := DecodeMeterConfig(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_meterconfigstatsreply.Entries = append(_meterconfigstatsreply.Entries, item)
+		}
+	}
+	return _meterconfigstatsreply, nil
+}
+
+func NewMeterConfigStatsReply() *MeterConfigStatsReply {
+	obj := &MeterConfigStatsReply{
+		StatsReply: NewStatsReply(10),
+	}
+	return obj
+}
+
+type MeterConfigStatsRequest struct {
+	*StatsRequest
+	MeterId uint32
+}
+
+type IMeterConfigStatsRequest interface {
+	IStatsRequest
+	GetMeterId() uint32
+}
+
+func (self *MeterConfigStatsRequest) GetMeterId() uint32 {
+	return self.MeterId
+}
+
+func (self *MeterConfigStatsRequest) SetMeterId(v uint32) {
+	self.MeterId = v
+}
+
+func (self *MeterConfigStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.MeterId))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterConfigStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*MeterConfigStatsRequest, error) {
+	_meterconfigstatsrequest := &MeterConfigStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("MeterConfigStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	_meterconfigstatsrequest.MeterId = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _meterconfigstatsrequest, nil
+}
+
+func NewMeterConfigStatsRequest() *MeterConfigStatsRequest {
+	obj := &MeterConfigStatsRequest{
+		StatsRequest: NewStatsRequest(10),
+	}
+	return obj
+}
+
+type MeterFeaturesStatsReply struct {
+	*StatsReply
+	Features MeterFeatures
+}
+
+type IMeterFeaturesStatsReply interface {
+	IStatsReply
+	GetFeatures() MeterFeatures
+}
+
+func (self *MeterFeaturesStatsReply) GetFeatures() MeterFeatures {
+	return self.Features
+}
+
+func (self *MeterFeaturesStatsReply) SetFeatures(v MeterFeatures) {
+	self.Features = v
+}
+
+func (self *MeterFeaturesStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	if err := self.Features.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterFeaturesStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*MeterFeaturesStatsReply, error) {
+	_meterfeaturesstatsreply := &MeterFeaturesStatsReply{StatsReply: parent}
+	if decoder.Length() < 20 {
+		return nil, fmt.Errorf("MeterFeaturesStatsReply packet too short: %d < 20", decoder.Length())
+	}
+	decoder.Skip(4)
+	if err := _meterfeaturesstatsreply.Features.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	return _meterfeaturesstatsreply, nil
+}
+
+func NewMeterFeaturesStatsReply() *MeterFeaturesStatsReply {
+	obj := &MeterFeaturesStatsReply{
+		StatsReply: NewStatsReply(11),
+	}
+	return obj
+}
+
+type MeterFeaturesStatsRequest struct {
+	*StatsRequest
+}
+
+type IMeterFeaturesStatsRequest interface {
+	IStatsRequest
+}
+
+func (self *MeterFeaturesStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterFeaturesStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*MeterFeaturesStatsRequest, error) {
+	_meterfeaturesstatsrequest := &MeterFeaturesStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("MeterFeaturesStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _meterfeaturesstatsrequest, nil
+}
+
+func NewMeterFeaturesStatsRequest() *MeterFeaturesStatsRequest {
+	obj := &MeterFeaturesStatsRequest{
+		StatsRequest: NewStatsRequest(11),
+	}
+	return obj
+}
+
+type MeterMod struct {
+	*Header
+	Command MeterModCommand
+	Flags   MeterFlags
+	MeterId uint32
+	Meters  []IMeterBand
+}
+
+type IMeterMod interface {
+	IHeader
+	GetCommand() MeterModCommand
+	GetFlags() MeterFlags
+	GetMeterId() uint32
+	GetMeters() []IMeterBand
+}
+
+func (self *MeterMod) GetCommand() MeterModCommand {
+	return self.Command
+}
+
+func (self *MeterMod) SetCommand(v MeterModCommand) {
+	self.Command = v
+}
+
+func (self *MeterMod) GetFlags() MeterFlags {
+	return self.Flags
+}
+
+func (self *MeterMod) SetFlags(v MeterFlags) {
+	self.Flags = v
+}
+
+func (self *MeterMod) GetMeterId() uint32 {
+	return self.MeterId
+}
+
+func (self *MeterMod) SetMeterId(v uint32) {
+	self.MeterId = v
+}
+
+func (self *MeterMod) GetMeters() []IMeterBand {
+	return self.Meters
+}
+
+func (self *MeterMod) SetMeters(v []IMeterBand) {
+	self.Meters = v
+}
+
+func (self *MeterMod) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Command))
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.PutUint32(uint32(self.MeterId))
+	for _, obj := range self.Meters {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterMod(parent *Header, decoder *goloxi.Decoder) (*MeterMod, error) {
+	_metermod := &MeterMod{Header: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("MeterMod packet too short: %d < 8", decoder.Length())
+	}
+	_metermod.Command = MeterModCommand(decoder.ReadUint16())
+	_metermod.Flags = MeterFlags(decoder.ReadUint16())
+	_metermod.MeterId = uint32(decoder.ReadUint32())
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeMeterBand(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_metermod.Meters = append(_metermod.Meters, item)
+		}
+	}
+	return _metermod, nil
+}
+
+func NewMeterMod() *MeterMod {
+	obj := &MeterMod{
+		Header: NewHeader(29),
+	}
+	return obj
+}
+
+type MeterModFailedErrorMsg struct {
+	*ErrorMsg
+	Code MeterModFailedCode
+	Data []byte
+}
+
+type IMeterModFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() MeterModFailedCode
+	GetData() []byte
+}
+
+func (self *MeterModFailedErrorMsg) GetCode() MeterModFailedCode {
+	return self.Code
+}
+
+func (self *MeterModFailedErrorMsg) SetCode(v MeterModFailedCode) {
+	self.Code = v
+}
+
+func (self *MeterModFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *MeterModFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *MeterModFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterModFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*MeterModFailedErrorMsg, error) {
+	_metermodfailederrormsg := &MeterModFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("MeterModFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_metermodfailederrormsg.Code = MeterModFailedCode(decoder.ReadUint16())
+	_metermodfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _metermodfailederrormsg, nil
+}
+
+func NewMeterModFailedErrorMsg() *MeterModFailedErrorMsg {
+	obj := &MeterModFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(12),
+	}
+	return obj
+}
+
+type MeterStatsReply struct {
+	*StatsReply
+	Entries []*MeterStats
+}
+
+type IMeterStatsReply interface {
+	IStatsReply
+	GetEntries() []*MeterStats
+}
+
+func (self *MeterStatsReply) GetEntries() []*MeterStats {
+	return self.Entries
+}
+
+func (self *MeterStatsReply) SetEntries(v []*MeterStats) {
+	self.Entries = v
+}
+
+func (self *MeterStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*MeterStatsReply, error) {
+	_meterstatsreply := &MeterStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("MeterStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 40 {
+		item, err := DecodeMeterStats(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_meterstatsreply.Entries = append(_meterstatsreply.Entries, item)
+		}
+	}
+	return _meterstatsreply, nil
+}
+
+func NewMeterStatsReply() *MeterStatsReply {
+	obj := &MeterStatsReply{
+		StatsReply: NewStatsReply(9),
+	}
+	return obj
+}
+
+type MeterStatsRequest struct {
+	*StatsRequest
+	MeterId uint32
+}
+
+type IMeterStatsRequest interface {
+	IStatsRequest
+	GetMeterId() uint32
+}
+
+func (self *MeterStatsRequest) GetMeterId() uint32 {
+	return self.MeterId
+}
+
+func (self *MeterStatsRequest) SetMeterId(v uint32) {
+	self.MeterId = v
+}
+
+func (self *MeterStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.MeterId))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeMeterStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*MeterStatsRequest, error) {
+	_meterstatsrequest := &MeterStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("MeterStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	_meterstatsrequest.MeterId = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _meterstatsrequest, nil
+}
+
+func NewMeterStatsRequest() *MeterStatsRequest {
+	obj := &MeterStatsRequest{
+		StatsRequest: NewStatsRequest(9),
+	}
+	return obj
+}
+
+type NiciraStatsReply struct {
+	*ExperimenterStatsReply
+}
+
+type INiciraStatsReply interface {
+	IExperimenterStatsReply
+}
+
+func (self *NiciraStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ExperimenterStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeNiciraStatsReply(parent *ExperimenterStatsReply, decoder *goloxi.Decoder) (INiciraStatsReply, error) {
+	_nicirastatsreply := &NiciraStatsReply{ExperimenterStatsReply: parent}
+	if decoder.Length() < -4 {
+		return nil, fmt.Errorf("NiciraStatsReply packet too short: %d < -4", decoder.Length())
+	}
+
+	switch _nicirastatsreply.Subtype {
+	case 0:
+		return DecodeNiciraFlowStatsReply(_nicirastatsreply, decoder)
+	case 2:
+		return DecodeNiciraFlowMonitorReply(_nicirastatsreply, decoder)
+	default:
+		return nil, fmt.Errorf("Invalid type '%d' for 'NiciraStatsReply'", _nicirastatsreply.Subtype)
+	}
+}
+
+func NewNiciraStatsReply(_subtype uint32) *NiciraStatsReply {
+	obj := &NiciraStatsReply{
+		ExperimenterStatsReply: NewExperimenterStatsReply(8992),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type NiciraFlowMonitorReply struct {
+	*NiciraStatsReply
+	Updates []INiciraFlowUpdateEvent
+}
+
+type INiciraFlowMonitorReply interface {
+	INiciraStatsReply
+	GetUpdates() []INiciraFlowUpdateEvent
+}
+
+func (self *NiciraFlowMonitorReply) GetUpdates() []INiciraFlowUpdateEvent {
+	return self.Updates
+}
+
+func (self *NiciraFlowMonitorReply) SetUpdates(v []INiciraFlowUpdateEvent) {
+	self.Updates = v
+}
+
+func (self *NiciraFlowMonitorReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.NiciraStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Updates {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowMonitorReply(parent *NiciraStatsReply, decoder *goloxi.Decoder) (*NiciraFlowMonitorReply, error) {
+	_niciraflowmonitorreply := &NiciraFlowMonitorReply{NiciraStatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NiciraFlowMonitorReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 4 {
+		item, err := DecodeNiciraFlowUpdateEvent(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_niciraflowmonitorreply.Updates = append(_niciraflowmonitorreply.Updates, item)
+		}
+	}
+	return _niciraflowmonitorreply, nil
+}
+
+func NewNiciraFlowMonitorReply() *NiciraFlowMonitorReply {
+	obj := &NiciraFlowMonitorReply{
+		NiciraStatsReply: NewNiciraStatsReply(2),
+	}
+	return obj
+}
+
+type NiciraFlowMonitorRequest struct {
+	*ExperimenterStatsRequest
+	MonitorId    uint32
+	MonitorFlags NxFlowMonitorFlags
+	OutPort      Port
+	MatchLen     uint16
+	TableId      uint8
+	Match        NiciraMatch
+}
+
+type INiciraFlowMonitorRequest interface {
+	IExperimenterStatsRequest
+	GetMonitorId() uint32
+	GetMonitorFlags() NxFlowMonitorFlags
+	GetOutPort() Port
+	GetMatchLen() uint16
+	GetTableId() uint8
+	GetMatch() NiciraMatch
+}
+
+func (self *NiciraFlowMonitorRequest) GetMonitorId() uint32 {
+	return self.MonitorId
+}
+
+func (self *NiciraFlowMonitorRequest) SetMonitorId(v uint32) {
+	self.MonitorId = v
+}
+
+func (self *NiciraFlowMonitorRequest) GetMonitorFlags() NxFlowMonitorFlags {
+	return self.MonitorFlags
+}
+
+func (self *NiciraFlowMonitorRequest) SetMonitorFlags(v NxFlowMonitorFlags) {
+	self.MonitorFlags = v
+}
+
+func (self *NiciraFlowMonitorRequest) GetOutPort() Port {
+	return self.OutPort
+}
+
+func (self *NiciraFlowMonitorRequest) SetOutPort(v Port) {
+	self.OutPort = v
+}
+
+func (self *NiciraFlowMonitorRequest) GetMatchLen() uint16 {
+	return self.MatchLen
+}
+
+func (self *NiciraFlowMonitorRequest) SetMatchLen(v uint16) {
+	self.MatchLen = v
+}
+
+func (self *NiciraFlowMonitorRequest) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *NiciraFlowMonitorRequest) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *NiciraFlowMonitorRequest) GetMatch() NiciraMatch {
+	return self.Match
+}
+
+func (self *NiciraFlowMonitorRequest) SetMatch(v NiciraMatch) {
+	self.Match = v
+}
+
+func (self *NiciraFlowMonitorRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ExperimenterStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint32(uint32(self.MonitorId))
+	encoder.PutUint16(uint16(self.MonitorFlags))
+	self.OutPort.Serialize(encoder)
+	encoder.PutUint16(uint16(self.MatchLen))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 5))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowMonitorRequest(parent *ExperimenterStatsRequest, decoder *goloxi.Decoder) (*NiciraFlowMonitorRequest, error) {
+	_niciraflowmonitorrequest := &NiciraFlowMonitorRequest{ExperimenterStatsRequest: parent}
+	if decoder.Length() < 22 {
+		return nil, fmt.Errorf("NiciraFlowMonitorRequest packet too short: %d < 22", decoder.Length())
+	}
+	decoder.Skip(4)
+	_niciraflowmonitorrequest.MonitorId = uint32(decoder.ReadUint32())
+	_niciraflowmonitorrequest.MonitorFlags = NxFlowMonitorFlags(decoder.ReadUint16())
+	_niciraflowmonitorrequest.OutPort.Decode(decoder)
+	_niciraflowmonitorrequest.MatchLen = uint16(decoder.ReadUint16())
+	_niciraflowmonitorrequest.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(5)
+	if err := _niciraflowmonitorrequest.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+	return _niciraflowmonitorrequest, nil
+}
+
+func NewNiciraFlowMonitorRequest() *NiciraFlowMonitorRequest {
+	obj := &NiciraFlowMonitorRequest{
+		ExperimenterStatsRequest: NewExperimenterStatsRequest(8992),
+	}
+	return obj
+}
+
+type NiciraFlowStatsReply struct {
+	*NiciraStatsReply
+	Stats []*NiciraFlowStats
+}
+
+type INiciraFlowStatsReply interface {
+	INiciraStatsReply
+	GetStats() []*NiciraFlowStats
+}
+
+func (self *NiciraFlowStatsReply) GetStats() []*NiciraFlowStats {
+	return self.Stats
+}
+
+func (self *NiciraFlowStatsReply) SetStats(v []*NiciraFlowStats) {
+	self.Stats = v
+}
+
+func (self *NiciraFlowStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.NiciraStatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Stats {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowStatsReply(parent *NiciraStatsReply, decoder *goloxi.Decoder) (*NiciraFlowStatsReply, error) {
+	_niciraflowstatsreply := &NiciraFlowStatsReply{NiciraStatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NiciraFlowStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 48 {
+		item, err := DecodeNiciraFlowStats(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_niciraflowstatsreply.Stats = append(_niciraflowstatsreply.Stats, item)
+		}
+	}
+	return _niciraflowstatsreply, nil
+}
+
+func NewNiciraFlowStatsReply() *NiciraFlowStatsReply {
+	obj := &NiciraFlowStatsReply{
+		NiciraStatsReply: NewNiciraStatsReply(0),
+	}
+	return obj
+}
+
+type NiciraFlowStatsRequest struct {
+	*ExperimenterStatsRequest
+	OutPort  Port
+	MatchLen uint16
+	TableId  uint8
+}
+
+type INiciraFlowStatsRequest interface {
+	IExperimenterStatsRequest
+	GetOutPort() Port
+	GetMatchLen() uint16
+	GetTableId() uint8
+}
+
+func (self *NiciraFlowStatsRequest) GetOutPort() Port {
+	return self.OutPort
+}
+
+func (self *NiciraFlowStatsRequest) SetOutPort(v Port) {
+	self.OutPort = v
+}
+
+func (self *NiciraFlowStatsRequest) GetMatchLen() uint16 {
+	return self.MatchLen
+}
+
+func (self *NiciraFlowStatsRequest) SetMatchLen(v uint16) {
+	self.MatchLen = v
+}
+
+func (self *NiciraFlowStatsRequest) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *NiciraFlowStatsRequest) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *NiciraFlowStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ExperimenterStatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	self.OutPort.Serialize(encoder)
+	encoder.PutUint16(uint16(self.MatchLen))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeNiciraFlowStatsRequest(parent *ExperimenterStatsRequest, decoder *goloxi.Decoder) (*NiciraFlowStatsRequest, error) {
+	_niciraflowstatsrequest := &NiciraFlowStatsRequest{ExperimenterStatsRequest: parent}
+	if decoder.Length() < 14 {
+		return nil, fmt.Errorf("NiciraFlowStatsRequest packet too short: %d < 14", decoder.Length())
+	}
+	decoder.Skip(4)
+	_niciraflowstatsrequest.OutPort.Decode(decoder)
+	_niciraflowstatsrequest.MatchLen = uint16(decoder.ReadUint16())
+	_niciraflowstatsrequest.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	return _niciraflowstatsrequest, nil
+}
+
+func NewNiciraFlowStatsRequest() *NiciraFlowStatsRequest {
+	obj := &NiciraFlowStatsRequest{
+		ExperimenterStatsRequest: NewExperimenterStatsRequest(8992),
+	}
+	return obj
+}
+
+type NiciraHeader struct {
+	*Experimenter
+}
+
+type INiciraHeader interface {
+	IExperimenter
+}
+
+func (self *NiciraHeader) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Experimenter.Serialize(encoder); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func DecodeNiciraHeader(parent *Experimenter, decoder *goloxi.Decoder) (INiciraHeader, error) {
+	_niciraheader := &NiciraHeader{Experimenter: parent}
+	return _niciraheader, nil
+}
+
+func NewNiciraHeader(_subtype uint32) *NiciraHeader {
+	obj := &NiciraHeader{
+		Experimenter: NewExperimenter(8992),
+	}
+	obj.Subtype = _subtype
+	return obj
+}
+
+type PacketIn struct {
+	*Header
+	BufferId uint32
+	TotalLen uint16
+	Reason   uint8
+	TableId  uint8
+	Cookie   uint64
+	Match    Match
+	Data     []byte
+}
+
+type IPacketIn interface {
+	IHeader
+	GetBufferId() uint32
+	GetTotalLen() uint16
+	GetReason() uint8
+	GetTableId() uint8
+	GetCookie() uint64
+	GetMatch() Match
+	GetData() []byte
+}
+
+func (self *PacketIn) GetBufferId() uint32 {
+	return self.BufferId
+}
+
+func (self *PacketIn) SetBufferId(v uint32) {
+	self.BufferId = v
+}
+
+func (self *PacketIn) GetTotalLen() uint16 {
+	return self.TotalLen
+}
+
+func (self *PacketIn) SetTotalLen(v uint16) {
+	self.TotalLen = v
+}
+
+func (self *PacketIn) GetReason() uint8 {
+	return self.Reason
+}
+
+func (self *PacketIn) SetReason(v uint8) {
+	self.Reason = v
+}
+
+func (self *PacketIn) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *PacketIn) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *PacketIn) GetCookie() uint64 {
+	return self.Cookie
+}
+
+func (self *PacketIn) SetCookie(v uint64) {
+	self.Cookie = v
+}
+
+func (self *PacketIn) GetMatch() Match {
+	return self.Match
+}
+
+func (self *PacketIn) SetMatch(v Match) {
+	self.Match = v
+}
+
+func (self *PacketIn) GetData() []byte {
+	return self.Data
+}
+
+func (self *PacketIn) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *PacketIn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.BufferId))
+	encoder.PutUint16(uint16(self.TotalLen))
+	encoder.PutUint8(uint8(self.Reason))
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.PutUint64(uint64(self.Cookie))
+	if err := self.Match.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePacketIn(parent *Header, decoder *goloxi.Decoder) (*PacketIn, error) {
+	_packetin := &PacketIn{Header: parent}
+	if decoder.Length() < 26 {
+		return nil, fmt.Errorf("PacketIn packet too short: %d < 26", decoder.Length())
+	}
+	_packetin.BufferId = uint32(decoder.ReadUint32())
+	_packetin.TotalLen = uint16(decoder.ReadUint16())
+	_packetin.Reason = uint8(decoder.ReadByte())
+	_packetin.TableId = uint8(decoder.ReadByte())
+	_packetin.Cookie = uint64(decoder.ReadUint64())
+	if err := _packetin.Match.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	decoder.SkipAlign()
+	decoder.Skip(2)
+	_packetin.Data = decoder.Read(int(decoder.Length()))
+	return _packetin, nil
+}
+
+func NewPacketIn() *PacketIn {
+	obj := &PacketIn{
+		Header: NewHeader(10),
+	}
+	return obj
+}
+
+type PacketOut struct {
+	*Header
+	BufferId   uint32
+	InPort     Port
+	ActionsLen uint16
+	Actions    []goloxi.IAction
+	Data       []byte
+}
+
+type IPacketOut interface {
+	IHeader
+	GetBufferId() uint32
+	GetInPort() Port
+	GetActionsLen() uint16
+	GetActions() []goloxi.IAction
+	GetData() []byte
+}
+
+func (self *PacketOut) GetBufferId() uint32 {
+	return self.BufferId
+}
+
+func (self *PacketOut) SetBufferId(v uint32) {
+	self.BufferId = v
+}
+
+func (self *PacketOut) GetInPort() Port {
+	return self.InPort
+}
+
+func (self *PacketOut) SetInPort(v Port) {
+	self.InPort = v
+}
+
+func (self *PacketOut) GetActionsLen() uint16 {
+	return self.ActionsLen
+}
+
+func (self *PacketOut) SetActionsLen(v uint16) {
+	self.ActionsLen = v
+}
+
+func (self *PacketOut) GetActions() []goloxi.IAction {
+	return self.Actions
+}
+
+func (self *PacketOut) SetActions(v []goloxi.IAction) {
+	self.Actions = v
+}
+
+func (self *PacketOut) GetData() []byte {
+	return self.Data
+}
+
+func (self *PacketOut) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *PacketOut) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.BufferId))
+	self.InPort.Serialize(encoder)
+	encoder.PutUint16(uint16(self.ActionsLen))
+	encoder.Write(bytes.Repeat([]byte{0}, 6))
+	for _, obj := range self.Actions {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePacketOut(parent *Header, decoder *goloxi.Decoder) (*PacketOut, error) {
+	_packetout := &PacketOut{Header: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("PacketOut packet too short: %d < 16", decoder.Length())
+	}
+	_packetout.BufferId = uint32(decoder.ReadUint32())
+	_packetout.InPort.Decode(decoder)
+	_packetout.ActionsLen = uint16(decoder.ReadUint16())
+	decoder.Skip(6)
+
+	for i := 0; i < int(_packetout.ActionsLen); i++ {
+		item, err := DecodeAction(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_packetout.Actions = append(_packetout.Actions, item)
+		}
+	}
+	_packetout.Data = decoder.Read(int(decoder.Length()))
+	return _packetout, nil
+}
+
+func NewPacketOut() *PacketOut {
+	obj := &PacketOut{
+		Header: NewHeader(13),
+	}
+	return obj
+}
+
+type PortDescStatsReply struct {
+	*StatsReply
+	Entries []*PortDesc
+}
+
+type IPortDescStatsReply interface {
+	IStatsReply
+	GetEntries() []*PortDesc
+}
+
+func (self *PortDescStatsReply) GetEntries() []*PortDesc {
+	return self.Entries
+}
+
+func (self *PortDescStatsReply) SetEntries(v []*PortDesc) {
+	self.Entries = v
+}
+
+func (self *PortDescStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePortDescStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*PortDescStatsReply, error) {
+	_portdescstatsreply := &PortDescStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("PortDescStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 64 {
+		item := &PortDesc{}
+		if err := item.Decode(decoder); err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_portdescstatsreply.Entries = append(_portdescstatsreply.Entries, item)
+		}
+	}
+	return _portdescstatsreply, nil
+}
+
+func NewPortDescStatsReply() *PortDescStatsReply {
+	obj := &PortDescStatsReply{
+		StatsReply: NewStatsReply(13),
+	}
+	return obj
+}
+
+type PortDescStatsRequest struct {
+	*StatsRequest
+}
+
+type IPortDescStatsRequest interface {
+	IStatsRequest
+}
+
+func (self *PortDescStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePortDescStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*PortDescStatsRequest, error) {
+	_portdescstatsrequest := &PortDescStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("PortDescStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _portdescstatsrequest, nil
+}
+
+func NewPortDescStatsRequest() *PortDescStatsRequest {
+	obj := &PortDescStatsRequest{
+		StatsRequest: NewStatsRequest(13),
+	}
+	return obj
+}
+
+type PortMod struct {
+	*Header
+	PortNo    Port
+	HwAddr    net.HardwareAddr
+	Config    PortConfig
+	Mask      PortConfig
+	Advertise uint32
+}
+
+type IPortMod interface {
+	IHeader
+	GetPortNo() Port
+	GetHwAddr() net.HardwareAddr
+	GetConfig() PortConfig
+	GetMask() PortConfig
+	GetAdvertise() uint32
+}
+
+func (self *PortMod) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *PortMod) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *PortMod) GetHwAddr() net.HardwareAddr {
+	return self.HwAddr
+}
+
+func (self *PortMod) SetHwAddr(v net.HardwareAddr) {
+	self.HwAddr = v
+}
+
+func (self *PortMod) GetConfig() PortConfig {
+	return self.Config
+}
+
+func (self *PortMod) SetConfig(v PortConfig) {
+	self.Config = v
+}
+
+func (self *PortMod) GetMask() PortConfig {
+	return self.Mask
+}
+
+func (self *PortMod) SetMask(v PortConfig) {
+	self.Mask = v
+}
+
+func (self *PortMod) GetAdvertise() uint32 {
+	return self.Advertise
+}
+
+func (self *PortMod) SetAdvertise(v uint32) {
+	self.Advertise = v
+}
+
+func (self *PortMod) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.PortNo.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.Write(self.HwAddr)
+	encoder.Write(bytes.Repeat([]byte{0}, 2))
+	encoder.PutUint32(uint32(self.Config))
+	encoder.PutUint32(uint32(self.Mask))
+	encoder.PutUint32(uint32(self.Advertise))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePortMod(parent *Header, decoder *goloxi.Decoder) (*PortMod, error) {
+	_portmod := &PortMod{Header: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("PortMod packet too short: %d < 32", decoder.Length())
+	}
+	_portmod.PortNo.Decode(decoder)
+	decoder.Skip(4)
+	_portmod.HwAddr = net.HardwareAddr(decoder.Read(6))
+	decoder.Skip(2)
+	_portmod.Config = PortConfig(decoder.ReadUint32())
+	_portmod.Mask = PortConfig(decoder.ReadUint32())
+	_portmod.Advertise = uint32(decoder.ReadUint32())
+	decoder.Skip(4)
+	return _portmod, nil
+}
+
+func NewPortMod() *PortMod {
+	obj := &PortMod{
+		Header: NewHeader(16),
+	}
+	return obj
+}
+
+type PortModFailedErrorMsg struct {
+	*ErrorMsg
+	Code PortModFailedCode
+	Data []byte
+}
+
+type IPortModFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() PortModFailedCode
+	GetData() []byte
+}
+
+func (self *PortModFailedErrorMsg) GetCode() PortModFailedCode {
+	return self.Code
+}
+
+func (self *PortModFailedErrorMsg) SetCode(v PortModFailedCode) {
+	self.Code = v
+}
+
+func (self *PortModFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *PortModFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *PortModFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePortModFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*PortModFailedErrorMsg, error) {
+	_portmodfailederrormsg := &PortModFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("PortModFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_portmodfailederrormsg.Code = PortModFailedCode(decoder.ReadUint16())
+	_portmodfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _portmodfailederrormsg, nil
+}
+
+func NewPortModFailedErrorMsg() *PortModFailedErrorMsg {
+	obj := &PortModFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(7),
+	}
+	return obj
+}
+
+type PortStatsReply struct {
+	*StatsReply
+	Entries []*PortStatsEntry
+}
+
+type IPortStatsReply interface {
+	IStatsReply
+	GetEntries() []*PortStatsEntry
+}
+
+func (self *PortStatsReply) GetEntries() []*PortStatsEntry {
+	return self.Entries
+}
+
+func (self *PortStatsReply) SetEntries(v []*PortStatsEntry) {
+	self.Entries = v
+}
+
+func (self *PortStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePortStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*PortStatsReply, error) {
+	_portstatsreply := &PortStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("PortStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 112 {
+		item, err := DecodePortStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_portstatsreply.Entries = append(_portstatsreply.Entries, item)
+		}
+	}
+	return _portstatsreply, nil
+}
+
+func NewPortStatsReply() *PortStatsReply {
+	obj := &PortStatsReply{
+		StatsReply: NewStatsReply(4),
+	}
+	return obj
+}
+
+type PortStatsRequest struct {
+	*StatsRequest
+	PortNo Port
+}
+
+type IPortStatsRequest interface {
+	IStatsRequest
+	GetPortNo() Port
+}
+
+func (self *PortStatsRequest) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *PortStatsRequest) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *PortStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	self.PortNo.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePortStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*PortStatsRequest, error) {
+	_portstatsrequest := &PortStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("PortStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	_portstatsrequest.PortNo.Decode(decoder)
+	decoder.Skip(4)
+	return _portstatsrequest, nil
+}
+
+func NewPortStatsRequest() *PortStatsRequest {
+	obj := &PortStatsRequest{
+		StatsRequest: NewStatsRequest(4),
+	}
+	return obj
+}
+
+type PortStatus struct {
+	*Header
+	Reason PortReason
+	Desc   PortDesc
+}
+
+type IPortStatus interface {
+	IHeader
+	GetReason() PortReason
+	GetDesc() PortDesc
+}
+
+func (self *PortStatus) GetReason() PortReason {
+	return self.Reason
+}
+
+func (self *PortStatus) SetReason(v PortReason) {
+	self.Reason = v
+}
+
+func (self *PortStatus) GetDesc() PortDesc {
+	return self.Desc
+}
+
+func (self *PortStatus) SetDesc(v PortDesc) {
+	self.Desc = v
+}
+
+func (self *PortStatus) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Reason))
+	encoder.Write(bytes.Repeat([]byte{0}, 7))
+	if err := self.Desc.Serialize(encoder); err != nil {
+		return err
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodePortStatus(parent *Header, decoder *goloxi.Decoder) (*PortStatus, error) {
+	_portstatus := &PortStatus{Header: parent}
+	if decoder.Length() < 72 {
+		return nil, fmt.Errorf("PortStatus packet too short: %d < 72", decoder.Length())
+	}
+	_portstatus.Reason = PortReason(decoder.ReadByte())
+	decoder.Skip(7)
+	if err := _portstatus.Desc.Decode(decoder); err != nil {
+		return nil, err
+	}
+
+	return _portstatus, nil
+}
+
+func NewPortStatus() *PortStatus {
+	obj := &PortStatus{
+		Header: NewHeader(12),
+	}
+	return obj
+}
+
+type QueueGetConfigReply struct {
+	*Header
+	Port   Port
+	Queues []*PacketQueue
+}
+
+type IQueueGetConfigReply interface {
+	IHeader
+	GetPort() Port
+	GetQueues() []*PacketQueue
+}
+
+func (self *QueueGetConfigReply) GetPort() Port {
+	return self.Port
+}
+
+func (self *QueueGetConfigReply) SetPort(v Port) {
+	self.Port = v
+}
+
+func (self *QueueGetConfigReply) GetQueues() []*PacketQueue {
+	return self.Queues
+}
+
+func (self *QueueGetConfigReply) SetQueues(v []*PacketQueue) {
+	self.Queues = v
+}
+
+func (self *QueueGetConfigReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Port.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Queues {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeQueueGetConfigReply(parent *Header, decoder *goloxi.Decoder) (*QueueGetConfigReply, error) {
+	_queuegetconfigreply := &QueueGetConfigReply{Header: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("QueueGetConfigReply packet too short: %d < 8", decoder.Length())
+	}
+	_queuegetconfigreply.Port.Decode(decoder)
+	decoder.Skip(4)
+
+	for decoder.Length() >= 16 {
+		item, err := DecodePacketQueue(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_queuegetconfigreply.Queues = append(_queuegetconfigreply.Queues, item)
+		}
+	}
+	return _queuegetconfigreply, nil
+}
+
+func NewQueueGetConfigReply() *QueueGetConfigReply {
+	obj := &QueueGetConfigReply{
+		Header: NewHeader(23),
+	}
+	return obj
+}
+
+type QueueGetConfigRequest struct {
+	*Header
+	Port Port
+}
+
+type IQueueGetConfigRequest interface {
+	IHeader
+	GetPort() Port
+}
+
+func (self *QueueGetConfigRequest) GetPort() Port {
+	return self.Port
+}
+
+func (self *QueueGetConfigRequest) SetPort(v Port) {
+	self.Port = v
+}
+
+func (self *QueueGetConfigRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Port.Serialize(encoder)
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeQueueGetConfigRequest(parent *Header, decoder *goloxi.Decoder) (*QueueGetConfigRequest, error) {
+	_queuegetconfigrequest := &QueueGetConfigRequest{Header: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("QueueGetConfigRequest packet too short: %d < 8", decoder.Length())
+	}
+	_queuegetconfigrequest.Port.Decode(decoder)
+	decoder.Skip(4)
+	return _queuegetconfigrequest, nil
+}
+
+func NewQueueGetConfigRequest() *QueueGetConfigRequest {
+	obj := &QueueGetConfigRequest{
+		Header: NewHeader(22),
+	}
+	return obj
+}
+
+type QueueOpFailedErrorMsg struct {
+	*ErrorMsg
+	Code QueueOpFailedCode
+	Data []byte
+}
+
+type IQueueOpFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() QueueOpFailedCode
+	GetData() []byte
+}
+
+func (self *QueueOpFailedErrorMsg) GetCode() QueueOpFailedCode {
+	return self.Code
+}
+
+func (self *QueueOpFailedErrorMsg) SetCode(v QueueOpFailedCode) {
+	self.Code = v
+}
+
+func (self *QueueOpFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *QueueOpFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *QueueOpFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeQueueOpFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*QueueOpFailedErrorMsg, error) {
+	_queueopfailederrormsg := &QueueOpFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("QueueOpFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_queueopfailederrormsg.Code = QueueOpFailedCode(decoder.ReadUint16())
+	_queueopfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _queueopfailederrormsg, nil
+}
+
+func NewQueueOpFailedErrorMsg() *QueueOpFailedErrorMsg {
+	obj := &QueueOpFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(9),
+	}
+	return obj
+}
+
+type QueueStatsReply struct {
+	*StatsReply
+	Entries []*QueueStatsEntry
+}
+
+type IQueueStatsReply interface {
+	IStatsReply
+	GetEntries() []*QueueStatsEntry
+}
+
+func (self *QueueStatsReply) GetEntries() []*QueueStatsEntry {
+	return self.Entries
+}
+
+func (self *QueueStatsReply) SetEntries(v []*QueueStatsEntry) {
+	self.Entries = v
+}
+
+func (self *QueueStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeQueueStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*QueueStatsReply, error) {
+	_queuestatsreply := &QueueStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("QueueStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 40 {
+		item, err := DecodeQueueStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_queuestatsreply.Entries = append(_queuestatsreply.Entries, item)
+		}
+	}
+	return _queuestatsreply, nil
+}
+
+func NewQueueStatsReply() *QueueStatsReply {
+	obj := &QueueStatsReply{
+		StatsReply: NewStatsReply(5),
+	}
+	return obj
+}
+
+type QueueStatsRequest struct {
+	*StatsRequest
+	PortNo  Port
+	QueueId uint32
+}
+
+type IQueueStatsRequest interface {
+	IStatsRequest
+	GetPortNo() Port
+	GetQueueId() uint32
+}
+
+func (self *QueueStatsRequest) GetPortNo() Port {
+	return self.PortNo
+}
+
+func (self *QueueStatsRequest) SetPortNo(v Port) {
+	self.PortNo = v
+}
+
+func (self *QueueStatsRequest) GetQueueId() uint32 {
+	return self.QueueId
+}
+
+func (self *QueueStatsRequest) SetQueueId(v uint32) {
+	self.QueueId = v
+}
+
+func (self *QueueStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	self.PortNo.Serialize(encoder)
+	encoder.PutUint32(uint32(self.QueueId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeQueueStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*QueueStatsRequest, error) {
+	_queuestatsrequest := &QueueStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("QueueStatsRequest packet too short: %d < 12", decoder.Length())
+	}
+	decoder.Skip(4)
+	_queuestatsrequest.PortNo.Decode(decoder)
+	_queuestatsrequest.QueueId = uint32(decoder.ReadUint32())
+	return _queuestatsrequest, nil
+}
+
+func NewQueueStatsRequest() *QueueStatsRequest {
+	obj := &QueueStatsRequest{
+		StatsRequest: NewStatsRequest(5),
+	}
+	return obj
+}
+
+type RoleReply struct {
+	*Header
+	Role         ControllerRole
+	GenerationId uint64
+}
+
+type IRoleReply interface {
+	IHeader
+	GetRole() ControllerRole
+	GetGenerationId() uint64
+}
+
+func (self *RoleReply) GetRole() ControllerRole {
+	return self.Role
+}
+
+func (self *RoleReply) SetRole(v ControllerRole) {
+	self.Role = v
+}
+
+func (self *RoleReply) GetGenerationId() uint64 {
+	return self.GenerationId
+}
+
+func (self *RoleReply) SetGenerationId(v uint64) {
+	self.GenerationId = v
+}
+
+func (self *RoleReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Role))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.GenerationId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeRoleReply(parent *Header, decoder *goloxi.Decoder) (*RoleReply, error) {
+	_rolereply := &RoleReply{Header: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("RoleReply packet too short: %d < 16", decoder.Length())
+	}
+	_rolereply.Role = ControllerRole(decoder.ReadUint32())
+	decoder.Skip(4)
+	_rolereply.GenerationId = uint64(decoder.ReadUint64())
+	return _rolereply, nil
+}
+
+func NewRoleReply() *RoleReply {
+	obj := &RoleReply{
+		Header: NewHeader(25),
+	}
+	return obj
+}
+
+type RoleRequest struct {
+	*Header
+	Role         ControllerRole
+	GenerationId uint64
+}
+
+type IRoleRequest interface {
+	IHeader
+	GetRole() ControllerRole
+	GetGenerationId() uint64
+}
+
+func (self *RoleRequest) GetRole() ControllerRole {
+	return self.Role
+}
+
+func (self *RoleRequest) SetRole(v ControllerRole) {
+	self.Role = v
+}
+
+func (self *RoleRequest) GetGenerationId() uint64 {
+	return self.GenerationId
+}
+
+func (self *RoleRequest) SetGenerationId(v uint64) {
+	self.GenerationId = v
+}
+
+func (self *RoleRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Role))
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	encoder.PutUint64(uint64(self.GenerationId))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeRoleRequest(parent *Header, decoder *goloxi.Decoder) (*RoleRequest, error) {
+	_rolerequest := &RoleRequest{Header: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("RoleRequest packet too short: %d < 16", decoder.Length())
+	}
+	_rolerequest.Role = ControllerRole(decoder.ReadUint32())
+	decoder.Skip(4)
+	_rolerequest.GenerationId = uint64(decoder.ReadUint64())
+	return _rolerequest, nil
+}
+
+func NewRoleRequest() *RoleRequest {
+	obj := &RoleRequest{
+		Header: NewHeader(24),
+	}
+	return obj
+}
+
+type RoleRequestFailedErrorMsg struct {
+	*ErrorMsg
+	Code RoleRequestFailedCode
+	Data []byte
+}
+
+type IRoleRequestFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() RoleRequestFailedCode
+	GetData() []byte
+}
+
+func (self *RoleRequestFailedErrorMsg) GetCode() RoleRequestFailedCode {
+	return self.Code
+}
+
+func (self *RoleRequestFailedErrorMsg) SetCode(v RoleRequestFailedCode) {
+	self.Code = v
+}
+
+func (self *RoleRequestFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *RoleRequestFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *RoleRequestFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeRoleRequestFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*RoleRequestFailedErrorMsg, error) {
+	_rolerequestfailederrormsg := &RoleRequestFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("RoleRequestFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_rolerequestfailederrormsg.Code = RoleRequestFailedCode(decoder.ReadUint16())
+	_rolerequestfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _rolerequestfailederrormsg, nil
+}
+
+func NewRoleRequestFailedErrorMsg() *RoleRequestFailedErrorMsg {
+	obj := &RoleRequestFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(11),
+	}
+	return obj
+}
+
+type SetConfig struct {
+	*Header
+	Flags       ConfigFlags
+	MissSendLen uint16
+}
+
+type ISetConfig interface {
+	IHeader
+	GetFlags() ConfigFlags
+	GetMissSendLen() uint16
+}
+
+func (self *SetConfig) GetFlags() ConfigFlags {
+	return self.Flags
+}
+
+func (self *SetConfig) SetFlags(v ConfigFlags) {
+	self.Flags = v
+}
+
+func (self *SetConfig) GetMissSendLen() uint16 {
+	return self.MissSendLen
+}
+
+func (self *SetConfig) SetMissSendLen(v uint16) {
+	self.MissSendLen = v
+}
+
+func (self *SetConfig) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Flags))
+	encoder.PutUint16(uint16(self.MissSendLen))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeSetConfig(parent *Header, decoder *goloxi.Decoder) (*SetConfig, error) {
+	_setconfig := &SetConfig{Header: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("SetConfig packet too short: %d < 4", decoder.Length())
+	}
+	_setconfig.Flags = ConfigFlags(decoder.ReadUint16())
+	_setconfig.MissSendLen = uint16(decoder.ReadUint16())
+	return _setconfig, nil
+}
+
+func NewSetConfig() *SetConfig {
+	obj := &SetConfig{
+		Header: NewHeader(9),
+	}
+	return obj
+}
+
+type SwitchConfigFailedErrorMsg struct {
+	*ErrorMsg
+	Code SwitchConfigFailedCode
+	Data []byte
+}
+
+type ISwitchConfigFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() SwitchConfigFailedCode
+	GetData() []byte
+}
+
+func (self *SwitchConfigFailedErrorMsg) GetCode() SwitchConfigFailedCode {
+	return self.Code
+}
+
+func (self *SwitchConfigFailedErrorMsg) SetCode(v SwitchConfigFailedCode) {
+	self.Code = v
+}
+
+func (self *SwitchConfigFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *SwitchConfigFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *SwitchConfigFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeSwitchConfigFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*SwitchConfigFailedErrorMsg, error) {
+	_switchconfigfailederrormsg := &SwitchConfigFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("SwitchConfigFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_switchconfigfailederrormsg.Code = SwitchConfigFailedCode(decoder.ReadUint16())
+	_switchconfigfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _switchconfigfailederrormsg, nil
+}
+
+func NewSwitchConfigFailedErrorMsg() *SwitchConfigFailedErrorMsg {
+	obj := &SwitchConfigFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(10),
+	}
+	return obj
+}
+
+type TableFeaturesFailedErrorMsg struct {
+	*ErrorMsg
+	Code TableFeaturesFailedCode
+	Data []byte
+}
+
+type ITableFeaturesFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() TableFeaturesFailedCode
+	GetData() []byte
+}
+
+func (self *TableFeaturesFailedErrorMsg) GetCode() TableFeaturesFailedCode {
+	return self.Code
+}
+
+func (self *TableFeaturesFailedErrorMsg) SetCode(v TableFeaturesFailedCode) {
+	self.Code = v
+}
+
+func (self *TableFeaturesFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *TableFeaturesFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *TableFeaturesFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturesFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*TableFeaturesFailedErrorMsg, error) {
+	_tablefeaturesfailederrormsg := &TableFeaturesFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("TableFeaturesFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_tablefeaturesfailederrormsg.Code = TableFeaturesFailedCode(decoder.ReadUint16())
+	_tablefeaturesfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _tablefeaturesfailederrormsg, nil
+}
+
+func NewTableFeaturesFailedErrorMsg() *TableFeaturesFailedErrorMsg {
+	obj := &TableFeaturesFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(13),
+	}
+	return obj
+}
+
+type TableFeaturesStatsReply struct {
+	*StatsReply
+	Entries []*TableFeatures
+}
+
+type ITableFeaturesStatsReply interface {
+	IStatsReply
+	GetEntries() []*TableFeatures
+}
+
+func (self *TableFeaturesStatsReply) GetEntries() []*TableFeatures {
+	return self.Entries
+}
+
+func (self *TableFeaturesStatsReply) SetEntries(v []*TableFeatures) {
+	self.Entries = v
+}
+
+func (self *TableFeaturesStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturesStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*TableFeaturesStatsReply, error) {
+	_tablefeaturesstatsreply := &TableFeaturesStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("TableFeaturesStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 64 {
+		item, err := DecodeTableFeatures(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturesstatsreply.Entries = append(_tablefeaturesstatsreply.Entries, item)
+		}
+	}
+	return _tablefeaturesstatsreply, nil
+}
+
+func NewTableFeaturesStatsReply() *TableFeaturesStatsReply {
+	obj := &TableFeaturesStatsReply{
+		StatsReply: NewStatsReply(12),
+	}
+	return obj
+}
+
+type TableFeaturesStatsRequest struct {
+	*StatsRequest
+	Entries []*TableFeatures
+}
+
+type ITableFeaturesStatsRequest interface {
+	IStatsRequest
+	GetEntries() []*TableFeatures
+}
+
+func (self *TableFeaturesStatsRequest) GetEntries() []*TableFeatures {
+	return self.Entries
+}
+
+func (self *TableFeaturesStatsRequest) SetEntries(v []*TableFeatures) {
+	self.Entries = v
+}
+
+func (self *TableFeaturesStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableFeaturesStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*TableFeaturesStatsRequest, error) {
+	_tablefeaturesstatsrequest := &TableFeaturesStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("TableFeaturesStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 64 {
+		item, err := DecodeTableFeatures(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablefeaturesstatsrequest.Entries = append(_tablefeaturesstatsrequest.Entries, item)
+		}
+	}
+	return _tablefeaturesstatsrequest, nil
+}
+
+func NewTableFeaturesStatsRequest() *TableFeaturesStatsRequest {
+	obj := &TableFeaturesStatsRequest{
+		StatsRequest: NewStatsRequest(12),
+	}
+	return obj
+}
+
+type TableMod struct {
+	*Header
+	TableId uint8
+	Config  uint32
+}
+
+type ITableMod interface {
+	IHeader
+	GetTableId() uint8
+	GetConfig() uint32
+}
+
+func (self *TableMod) GetTableId() uint8 {
+	return self.TableId
+}
+
+func (self *TableMod) SetTableId(v uint8) {
+	self.TableId = v
+}
+
+func (self *TableMod) GetConfig() uint32 {
+	return self.Config
+}
+
+func (self *TableMod) SetConfig(v uint32) {
+	self.Config = v
+}
+
+func (self *TableMod) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Header.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.TableId))
+	encoder.Write(bytes.Repeat([]byte{0}, 3))
+	encoder.PutUint32(uint32(self.Config))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableMod(parent *Header, decoder *goloxi.Decoder) (*TableMod, error) {
+	_tablemod := &TableMod{Header: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("TableMod packet too short: %d < 8", decoder.Length())
+	}
+	_tablemod.TableId = uint8(decoder.ReadByte())
+	decoder.Skip(3)
+	_tablemod.Config = uint32(decoder.ReadUint32())
+	return _tablemod, nil
+}
+
+func NewTableMod() *TableMod {
+	obj := &TableMod{
+		Header: NewHeader(17),
+	}
+	return obj
+}
+
+type TableModFailedErrorMsg struct {
+	*ErrorMsg
+	Code TableModFailedCode
+	Data []byte
+}
+
+type ITableModFailedErrorMsg interface {
+	IErrorMsg
+	GetCode() TableModFailedCode
+	GetData() []byte
+}
+
+func (self *TableModFailedErrorMsg) GetCode() TableModFailedCode {
+	return self.Code
+}
+
+func (self *TableModFailedErrorMsg) SetCode(v TableModFailedCode) {
+	self.Code = v
+}
+
+func (self *TableModFailedErrorMsg) GetData() []byte {
+	return self.Data
+}
+
+func (self *TableModFailedErrorMsg) SetData(v []byte) {
+	self.Data = v
+}
+
+func (self *TableModFailedErrorMsg) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.ErrorMsg.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Code))
+	encoder.Write(self.Data)
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableModFailedErrorMsg(parent *ErrorMsg, decoder *goloxi.Decoder) (*TableModFailedErrorMsg, error) {
+	_tablemodfailederrormsg := &TableModFailedErrorMsg{ErrorMsg: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("TableModFailedErrorMsg packet too short: %d < 2", decoder.Length())
+	}
+	_tablemodfailederrormsg.Code = TableModFailedCode(decoder.ReadUint16())
+	_tablemodfailederrormsg.Data = decoder.Read(int(decoder.Length()))
+	return _tablemodfailederrormsg, nil
+}
+
+func NewTableModFailedErrorMsg() *TableModFailedErrorMsg {
+	obj := &TableModFailedErrorMsg{
+		ErrorMsg: NewErrorMsg(8),
+	}
+	return obj
+}
+
+type TableStatsReply struct {
+	*StatsReply
+	Entries []*TableStatsEntry
+}
+
+type ITableStatsReply interface {
+	IStatsReply
+	GetEntries() []*TableStatsEntry
+}
+
+func (self *TableStatsReply) GetEntries() []*TableStatsEntry {
+	return self.Entries
+}
+
+func (self *TableStatsReply) SetEntries(v []*TableStatsEntry) {
+	self.Entries = v
+}
+
+func (self *TableStatsReply) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsReply.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+	for _, obj := range self.Entries {
+		if err := obj.Serialize(encoder); err != nil {
+			return err
+		}
+	}
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableStatsReply(parent *StatsReply, decoder *goloxi.Decoder) (*TableStatsReply, error) {
+	_tablestatsreply := &TableStatsReply{StatsReply: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("TableStatsReply packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+
+	for decoder.Length() >= 24 {
+		item, err := DecodeTableStatsEntry(decoder)
+		if err != nil {
+			return nil, err
+		}
+		if item != nil {
+			_tablestatsreply.Entries = append(_tablestatsreply.Entries, item)
+		}
+	}
+	return _tablestatsreply, nil
+}
+
+func NewTableStatsReply() *TableStatsReply {
+	obj := &TableStatsReply{
+		StatsReply: NewStatsReply(3),
+	}
+	return obj
+}
+
+type TableStatsRequest struct {
+	*StatsRequest
+}
+
+type ITableStatsRequest interface {
+	IStatsRequest
+}
+
+func (self *TableStatsRequest) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.StatsRequest.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(bytes.Repeat([]byte{0}, 4))
+
+	binary.BigEndian.PutUint16(encoder.Bytes()[2:4], uint16(len(encoder.Bytes())))
+
+	return nil
+}
+
+func DecodeTableStatsRequest(parent *StatsRequest, decoder *goloxi.Decoder) (*TableStatsRequest, error) {
+	_tablestatsrequest := &TableStatsRequest{StatsRequest: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("TableStatsRequest packet too short: %d < 4", decoder.Length())
+	}
+	decoder.Skip(4)
+	return _tablestatsrequest, nil
+}
+
+func NewTableStatsRequest() *TableStatsRequest {
+	obj := &TableStatsRequest{
+		StatsRequest: NewStatsRequest(3),
+	}
+	return obj
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/oxm.go b/vendor/github.com/skydive-project/goloxi/of13/oxm.go
new file mode 100644
index 0000000..be8bb7d
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/oxm.go
@@ -0,0 +1,29586 @@
+/*
+ * Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
+ * Copyright (c) 2011, 2012 Open Networking Foundation
+ * Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler.
+ * Copyright 2018, Red Hat, Inc.
+ */
+// Automatically generated by LOXI from template module.go
+// Do not modify
+
+package of13
+
+import (
+	"fmt"
+	"net"
+
+	"github.com/skydive-project/goloxi"
+)
+
+type Oxm struct {
+	TypeLen uint32
+}
+
+type IOxm interface {
+	goloxi.Serializable
+	GetTypeLen() uint32
+	GetOXMName() string
+	GetOXMValue() interface{}
+}
+
+func (self *Oxm) GetTypeLen() uint32 {
+	return self.TypeLen
+}
+
+func (self *Oxm) SetTypeLen(v uint32) {
+	self.TypeLen = v
+}
+
+func (self *Oxm) Serialize(encoder *goloxi.Encoder) error {
+
+	encoder.PutUint32(uint32(self.TypeLen))
+
+	return nil
+}
+
+func DecodeOxm(decoder *goloxi.Decoder) (goloxi.IOxm, error) {
+	_oxm := &Oxm{}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("Oxm packet too short: %d < 4", decoder.Length())
+	}
+	_oxm.TypeLen = uint32(decoder.ReadUint32())
+
+	switch _oxm.TypeLen {
+	case 110204:
+		return DecodeNxmTunMetadata47(_oxm, decoder)
+	case 129026:
+		return DecodeOxmConnTrackingTpSrc(_oxm, decoder)
+	case 65540:
+		return DecodeNxmReg0(_oxm, decoder)
+	case 77830:
+		return DecodeNxmNdSll(_oxm, decoder)
+	case 2147499009:
+		return DecodeOxmIcmpv6Code(_oxm, decoder)
+	case 73736:
+		return DecodeNxmTunId(_oxm, decoder)
+	case 2:
+		return DecodeNxmInPort(_oxm, decoder)
+	case 120848:
+		return DecodeOxmConnTrackingLabel(_oxm, decoder)
+	case 203780:
+		return DecodeOxmBsnUdf6(_oxm, decoder)
+	case 111228:
+		return DecodeNxmTunMetadata49(_oxm, decoder)
+	case 74758:
+		return DecodeNxmArpTha(_oxm, decoder)
+	case 2147503112:
+		return DecodeOxmTunnelId(_oxm, decoder)
+	case 112252:
+		return DecodeNxmTunMetadata51(_oxm, decoder)
+	case 108024:
+		return DecodeNxmTunMetadata42Masked(_oxm, decoder)
+	case 2147495176:
+		return DecodeOxmArpSpaMasked(_oxm, decoder)
+	case 113276:
+		return DecodeNxmTunMetadata53(_oxm, decoder)
+	case 109048:
+		return DecodeNxmTunMetadata44Masked(_oxm, decoder)
+	case 94332:
+		return DecodeNxmTunMetadata16(_oxm, decoder)
+	case 2147483652:
+		return DecodeOxmInPort(_oxm, decoder)
+	case 114300:
+		return DecodeNxmTunMetadata55(_oxm, decoder)
+	case 2050:
+		return DecodeNxmVlanTci(_oxm, decoder)
+	case 3073:
+		return DecodeNxmNwProto(_oxm, decoder)
+	case 110072:
+		return DecodeNxmTunMetadata46Masked(_oxm, decoder)
+	case 2147502338:
+		return DecodeOxmMplsBosMasked(_oxm, decoder)
+	case 66564:
+		return DecodeNxmReg2(_oxm, decoder)
+	case 115324:
+		return DecodeNxmTunMetadata57(_oxm, decoder)
+	case 2147486722:
+		return DecodeOxmVlanVid(_oxm, decoder)
+	case 2147487745:
+		return DecodeOxmIpDscp(_oxm, decoder)
+	case 111096:
+		return DecodeNxmTunMetadata48Masked(_oxm, decoder)
+	case 83204:
+		return DecodeNxmTcpFlagsMasked(_oxm, decoder)
+	case 3588:
+		return DecodeNxmIpSrc(_oxm, decoder)
+	case 198660:
+		return DecodeOxmBsnL3InterfaceClassId(_oxm, decoder)
+	case 2147488769:
+		return DecodeOxmIpProto(_oxm, decoder)
+	case 112120:
+		return DecodeNxmTunMetadata50Masked(_oxm, decoder)
+	case 121872:
+		return DecodeNxmTunIpv6Dst(_oxm, decoder)
+	case 199172:
+		return DecodeOxmBsnL3SrcClassId(_oxm, decoder)
+	case 1030:
+		return DecodeNxmEthSrc(_oxm, decoder)
+	case 68612:
+		return DecodeNxmReg6(_oxm, decoder)
+	case 117372:
+		return DecodeNxmTunMetadata61(_oxm, decoder)
+	case 5122:
+		return DecodeNxmTcpDst(_oxm, decoder)
+	case 113144:
+		return DecodeNxmTunMetadata52Masked(_oxm, decoder)
+	case 122896:
+		return DecodeNxmXxreg1(_oxm, decoder)
+	case 209156:
+		return DecodeOxmBsnInnerVlanVidMasked(_oxm, decoder)
+	case 124192:
+		return DecodeNxmXxreg3Masked(_oxm, decoder)
+	case 81672:
+		return DecodeOxmTunnelIpv4SrcMasked(_oxm, decoder)
+	case 2147485702:
+		return DecodeOxmEthSrc(_oxm, decoder)
+	case 4100:
+		return DecodeNxmIpDst(_oxm, decoder)
+	case 118396:
+		return DecodeNxmTunMetadata63(_oxm, decoder)
+	case 2147494146:
+		return DecodeOxmIcmpv4CodeMasked(_oxm, decoder)
+	case 129284:
+		return DecodeOxmConnTrackingTpSrcMasked(_oxm, decoder)
+	case 114168:
+		return DecodeNxmTunMetadata54Masked(_oxm, decoder)
+	case 123920:
+		return DecodeNxmXxreg3(_oxm, decoder)
+	case 200968:
+		return DecodeOxmBsnUdf0Masked(_oxm, decoder)
+	case 78091:
+		return DecodeNxmNdSllMasked(_oxm, decoder)
+	case 2147496204:
+		return DecodeOxmArpShaMasked(_oxm, decoder)
+	case 74000:
+		return DecodeNxmTunIdMasked(_oxm, decoder)
+	case 86140:
+		return DecodeNxmTunMetadata0(_oxm, decoder)
+	case 70660:
+		return DecodeNxmReg10(_oxm, decoder)
+	case 121120:
+		return DecodeOxmConnTrackingLabelMasked(_oxm, decoder)
+	case 107000:
+		return DecodeNxmTunMetadata40Masked(_oxm, decoder)
+	case 3848:
+		return DecodeNxmIpSrcMasked(_oxm, decoder)
+	case 87164:
+		return DecodeNxmTunMetadata2(_oxm, decoder)
+	case 202756:
+		return DecodeOxmBsnUdf4(_oxm, decoder)
+	case 204802:
+		return DecodeOxmBsnTcpFlags(_oxm, decoder)
+	case 205825:
+		return DecodeOxmBsnL2CacheHit(_oxm, decoder)
+	case 116216:
+		return DecodeNxmTunMetadata58Masked(_oxm, decoder)
+	case 199432:
+		return DecodeOxmBsnL3SrcClassIdMasked(_oxm, decoder)
+	case 88188:
+		return DecodeNxmTunMetadata4(_oxm, decoder)
+	case 72708:
+		return DecodeNxmReg14(_oxm, decoder)
+	case 2147492866:
+		return DecodeOxmSctpDst(_oxm, decoder)
+	case 2147493889:
+		return DecodeOxmIcmpv4Code(_oxm, decoder)
+	case 117240:
+		return DecodeNxmTunMetadata60Masked(_oxm, decoder)
+	case 200196:
+		return DecodeOxmBsnEgrPortGroupId(_oxm, decoder)
+	case 128288:
+		return DecodeOxmConnTrackingIpv6SrcMasked(_oxm, decoder)
+	case 89212:
+		return DecodeNxmTunMetadata6(_oxm, decoder)
+	case 2147500300:
+		return DecodeOxmIpv6NdSllMasked(_oxm, decoder)
+	case 8196:
+		return DecodeNxmArpSpa(_oxm, decoder)
+	case 76801:
+		return DecodeNxmIcmpv6Code(_oxm, decoder)
+	case 118264:
+		return DecodeNxmTunMetadata62Masked(_oxm, decoder)
+	case 70148:
+		return DecodeNxmReg9(_oxm, decoder)
+	case 119560:
+		return DecodeOxmConnTrackingStateMasked(_oxm, decoder)
+	case 90236:
+		return DecodeNxmTunMetadata8(_oxm, decoder)
+	case 119044:
+		return DecodeNxmTunFlagsMasked(_oxm, decoder)
+	case 82696:
+		return DecodeNxmPktMarkMasked(_oxm, decoder)
+	case 4294923528:
+		return DecodeOxmOvsTcpFlagsMasked(_oxm, decoder)
+	case 120584:
+		return DecodeOxmConnTrackingMarkMasked(_oxm, decoder)
+	case 91260:
+		return DecodeNxmTunMetadata10(_oxm, decoder)
+	case 87032:
+		return DecodeNxmTunMetadata1Masked(_oxm, decoder)
+	case 126722:
+		return DecodeOxmConnTrackingNwProtoMasked(_oxm, decoder)
+	case 206852:
+		return DecodeOxmBsnIngressPortGroupId(_oxm, decoder)
+	case 208898:
+		return DecodeOxmBsnInnerVlanVid(_oxm, decoder)
+	case 209921:
+		return DecodeOxmBsnIpFragmentation(_oxm, decoder)
+	case 196896:
+		return DecodeOxmBsnInPorts128Masked(_oxm, decoder)
+	case 92284:
+		return DecodeNxmTunMetadata12(_oxm, decoder)
+	case 88056:
+		return DecodeNxmTunMetadata3Masked(_oxm, decoder)
+	case 2147494916:
+		return DecodeOxmArpSpa(_oxm, decoder)
+	case 79873:
+		return DecodeNxmNwEcn(_oxm, decoder)
+	case 196624:
+		return DecodeOxmBsnInPorts128(_oxm, decoder)
+	case 200456:
+		return DecodeOxmBsnEgrPortGroupIdMasked(_oxm, decoder)
+	case 2147489284:
+		return DecodeOxmIpv4Src(_oxm, decoder)
+	case 93308:
+		return DecodeNxmTunMetadata14(_oxm, decoder)
+	case 115192:
+		return DecodeNxmTunMetadata56Masked(_oxm, decoder)
+	case 2561:
+		return DecodeNxmNwTos(_oxm, decoder)
+	case 129538:
+		return DecodeOxmConnTrackingTpDst(_oxm, decoder)
+	case 2147500550:
+		return DecodeOxmIpv6NdTll(_oxm, decoder)
+	case 84484:
+		return DecodeNxmConjId(_oxm, decoder)
+	case 74246:
+		return DecodeNxmArpSha(_oxm, decoder)
+	case 198402:
+		return DecodeOxmBsnGlobalVrfAllowedMasked(_oxm, decoder)
+	case 123408:
+		return DecodeNxmXxreg2(_oxm, decoder)
+	case 90104:
+		return DecodeNxmTunMetadata7Masked(_oxm, decoder)
+	case 2147486468:
+		return DecodeOxmEthTypeMasked(_oxm, decoder)
+	case 204552:
+		return DecodeOxmBsnUdf7Masked(_oxm, decoder)
+	case 91128:
+		return DecodeNxmTunMetadata9Masked(_oxm, decoder)
+	case 83720:
+		return DecodeNxmDpHashMasked(_oxm, decoder)
+	case 2147495942:
+		return DecodeOxmArpSha(_oxm, decoder)
+	case 2147497988:
+		return DecodeOxmIpv6Flabel(_oxm, decoder)
+	case 78603:
+		return DecodeNxmNdTllMasked(_oxm, decoder)
+	case 208652:
+		return DecodeOxmBsnInnerEthSrcMasked(_oxm, decoder)
+	case 2147503376:
+		return DecodeOxmTunnelIdMasked(_oxm, decoder)
+	case 96380:
+		return DecodeNxmTunMetadata20(_oxm, decoder)
+	case 92152:
+		return DecodeNxmTunMetadata11Masked(_oxm, decoder)
+	case 129796:
+		return DecodeOxmConnTrackingTpDstMasked(_oxm, decoder)
+	case 80897:
+		return DecodeNxmMplsTtl(_oxm, decoder)
+	case 2147489544:
+		return DecodeOxmIpv4SrcMasked(_oxm, decoder)
+	case 97404:
+		return DecodeNxmTunMetadata22(_oxm, decoder)
+	case 93176:
+		return DecodeNxmTunMetadata13Masked(_oxm, decoder)
+	case 94844:
+		return DecodeNxmTunMetadata17(_oxm, decoder)
+	case 81924:
+		return DecodeOxmTunnelIpv4Dst(_oxm, decoder)
+	case 127752:
+		return DecodeOxmConnTrackingNwDstMasked(_oxm, decoder)
+	case 98428:
+		return DecodeNxmTunMetadata24(_oxm, decoder)
+	case 94200:
+		return DecodeNxmTunMetadata15Masked(_oxm, decoder)
+	case 2147489026:
+		return DecodeOxmIpProtoMasked(_oxm, decoder)
+	case 2147501060:
+		return DecodeOxmMplsLabel(_oxm, decoder)
+	case 84994:
+		return DecodeNxmTunGbpId(_oxm, decoder)
+	case 99452:
+		return DecodeNxmTunMetadata26(_oxm, decoder)
+	case 95224:
+		return DecodeNxmTunMetadata17Masked(_oxm, decoder)
+	case 2147500038:
+		return DecodeOxmIpv6NdSll(_oxm, decoder)
+	case 83972:
+		return DecodeNxmRecircId(_oxm, decoder)
+	case 128800:
+		return DecodeOxmConnTrackingIpv6DstMasked(_oxm, decoder)
+	case 72196:
+		return DecodeNxmReg13(_oxm, decoder)
+	case 100476:
+		return DecodeNxmTunMetadata28(_oxm, decoder)
+	case 96248:
+		return DecodeNxmTunMetadata19Masked(_oxm, decoder)
+	case 2147488514:
+		return DecodeOxmIpEcnMasked(_oxm, decoder)
+	case 112764:
+		return DecodeNxmTunMetadata52(_oxm, decoder)
+	case 101500:
+		return DecodeNxmTunMetadata30(_oxm, decoder)
+	case 97272:
+		return DecodeNxmTunMetadata21Masked(_oxm, decoder)
+	case 2147483912:
+		return DecodeOxmInPortMasked(_oxm, decoder)
+	case 2147498754:
+		return DecodeOxmIcmpv6TypeMasked(_oxm, decoder)
+	case 209668:
+		return DecodeOxmBsnVfiMasked(_oxm, decoder)
+	case 70408:
+		return DecodeNxmReg9Masked(_oxm, decoder)
+	case 74507:
+		return DecodeNxmArpShaMasked(_oxm, decoder)
+	case 2147496716:
+		return DecodeOxmArpThaMasked(_oxm, decoder)
+	case 197384:
+		return DecodeOxmBsnLagIdMasked(_oxm, decoder)
+	case 76064:
+		return DecodeNxmIpv6DstMasked(_oxm, decoder)
+	case 102524:
+		return DecodeNxmTunMetadata32(_oxm, decoder)
+	case 98296:
+		return DecodeNxmTunMetadata23Masked(_oxm, decoder)
+	case 4868:
+		return DecodeNxmTcpSrcMasked(_oxm, decoder)
+	case 121632:
+		return DecodeNxmTunIpv6SrcMasked(_oxm, decoder)
+	case 75792:
+		return DecodeNxmIpv6Dst(_oxm, decoder)
+	case 202504:
+		return DecodeOxmBsnUdf3Masked(_oxm, decoder)
+	case 120324:
+		return DecodeOxmConnTrackingMark(_oxm, decoder)
+	case 99320:
+		return DecodeNxmTunMetadata25Masked(_oxm, decoder)
+	case 66824:
+		return DecodeNxmReg2Masked(_oxm, decoder)
+	case 72456:
+		return DecodeNxmReg13Masked(_oxm, decoder)
+	case 68360:
+		return DecodeNxmReg5Masked(_oxm, decoder)
+	case 104572:
+		return DecodeNxmTunMetadata36(_oxm, decoder)
+	case 95356:
+		return DecodeNxmTunMetadata18(_oxm, decoder)
+	case 100344:
+		return DecodeNxmTunMetadata27Masked(_oxm, decoder)
+	case 2147490564:
+		return DecodeOxmTcpSrcMasked(_oxm, decoder)
+	case 4294923270:
+		return DecodeOxmOvsTcpFlags(_oxm, decoder)
+	case 779:
+		return DecodeNxmEthDstMasked(_oxm, decoder)
+	case 69384:
+		return DecodeNxmReg7Masked(_oxm, decoder)
+	case 2147497248:
+		return DecodeOxmIpv6SrcMasked(_oxm, decoder)
+	case 105596:
+		return DecodeNxmTunMetadata38(_oxm, decoder)
+	case 101368:
+		return DecodeNxmTunMetadata29Masked(_oxm, decoder)
+	case 2147491588:
+		return DecodeOxmUdpSrcMasked(_oxm, decoder)
+	case 108668:
+		return DecodeNxmTunMetadata44(_oxm, decoder)
+	case 2147496976:
+		return DecodeOxmIpv6Src(_oxm, decoder)
+	case 201480:
+		return DecodeOxmBsnUdf1Masked(_oxm, decoder)
+	case 106620:
+		return DecodeNxmTunMetadata40(_oxm, decoder)
+	case 102392:
+		return DecodeNxmTunMetadata31Masked(_oxm, decoder)
+	case 2147492612:
+		return DecodeOxmSctpSrcMasked(_oxm, decoder)
+	case 204292:
+		return DecodeOxmBsnUdf7(_oxm, decoder)
+	case 71432:
+		return DecodeNxmReg11Masked(_oxm, decoder)
+	case 107644:
+		return DecodeNxmTunMetadata42(_oxm, decoder)
+	case 103416:
+		return DecodeNxmTunMetadata33Masked(_oxm, decoder)
+	case 2147498248:
+		return DecodeOxmIpv6FlabelMasked(_oxm, decoder)
+	case 203528:
+		return DecodeOxmBsnUdf5Masked(_oxm, decoder)
+	case 89592:
+		return DecodeNxmTunMetadata6Masked(_oxm, decoder)
+	case 104440:
+		return DecodeNxmTunMetadata35Masked(_oxm, decoder)
+	case 2147494660:
+		return DecodeOxmArpOpMasked(_oxm, decoder)
+	case 197636:
+		return DecodeOxmBsnVrf(_oxm, decoder)
+	case 73480:
+		return DecodeNxmReg15Masked(_oxm, decoder)
+	case 109692:
+		return DecodeNxmTunMetadata46(_oxm, decoder)
+	case 105464:
+		return DecodeNxmTunMetadata37Masked(_oxm, decoder)
+	case 89080:
+		return DecodeNxmTunMetadata5Masked(_oxm, decoder)
+	case 67588:
+		return DecodeNxmReg4(_oxm, decoder)
+	case 7169:
+		return DecodeNxmIcmpCode(_oxm, decoder)
+	case 82946:
+		return DecodeNxmTcpFlags(_oxm, decoder)
+	case 199684:
+		return DecodeOxmBsnL3DstClassId(_oxm, decoder)
+	case 207878:
+		return DecodeOxmBsnInnerEthDst(_oxm, decoder)
+	case 198145:
+		return DecodeOxmBsnGlobalVrfAllowed(_oxm, decoder)
+	case 2147484680:
+		return DecodeOxmMetadata(_oxm, decoder)
+	case 1538:
+		return DecodeNxmEthType(_oxm, decoder)
+	case 8968:
+		return DecodeNxmArpTpaMasked(_oxm, decoder)
+	case 128016:
+		return DecodeOxmConnTrackingIpv6Src(_oxm, decoder)
+	case 110716:
+		return DecodeNxmTunMetadata48(_oxm, decoder)
+	case 127492:
+		return DecodeOxmConnTrackingNwDst(_oxm, decoder)
+	case 2147502081:
+		return DecodeOxmMplsBos(_oxm, decoder)
+	case 78342:
+		return DecodeNxmNdTll(_oxm, decoder)
+	case 111740:
+		return DecodeNxmTunMetadata50(_oxm, decoder)
+	case 107512:
+		return DecodeNxmTunMetadata41Masked(_oxm, decoder)
+	case 207624:
+		return DecodeOxmBsnVxlanNetworkIdMasked(_oxm, decoder)
+	case 121360:
+		return DecodeNxmTunIpv6Src(_oxm, decoder)
+	case 2147495688:
+		return DecodeOxmArpTpaMasked(_oxm, decoder)
+	case 113788:
+		return DecodeNxmTunMetadata54(_oxm, decoder)
+	case 109560:
+		return DecodeNxmTunMetadata45Masked(_oxm, decoder)
+	case 2147501826:
+		return DecodeOxmMplsTcMasked(_oxm, decoder)
+	case 103548:
+		return DecodeNxmTunMetadata34(_oxm, decoder)
+	case 66052:
+		return DecodeNxmReg1(_oxm, decoder)
+	case 205316:
+		return DecodeOxmBsnVlanXlatePortGroupId(_oxm, decoder)
+	case 114812:
+		return DecodeNxmTunMetadata56(_oxm, decoder)
+	case 2147486210:
+		return DecodeOxmEthType(_oxm, decoder)
+	case 2147487233:
+		return DecodeOxmVlanPcp(_oxm, decoder)
+	case 110584:
+		return DecodeNxmTunMetadata47Masked(_oxm, decoder)
+	case 79624:
+		return DecodeNxmIpv6LabelMasked(_oxm, decoder)
+	case 115836:
+		return DecodeNxmTunMetadata58(_oxm, decoder)
+	case 2147488257:
+		return DecodeOxmIpEcn(_oxm, decoder)
+	case 111608:
+		return DecodeNxmTunMetadata49Masked(_oxm, decoder)
+	case 85762:
+		return DecodeNxmTunGbpFlagsMasked(_oxm, decoder)
+	case 518:
+		return DecodeNxmEthDst(_oxm, decoder)
+	case 68100:
+		return DecodeNxmReg5(_oxm, decoder)
+	case 116860:
+		return DecodeNxmTunMetadata60(_oxm, decoder)
+	case 4610:
+		return DecodeNxmTcpSrc(_oxm, decoder)
+	case 112632:
+		return DecodeNxmTunMetadata51Masked(_oxm, decoder)
+	case 122384:
+		return DecodeNxmXxreg0(_oxm, decoder)
+	case 123680:
+		return DecodeNxmXxreg2Masked(_oxm, decoder)
+	case 2147485190:
+		return DecodeOxmEthDst(_oxm, decoder)
+	case 69124:
+		return DecodeNxmReg7(_oxm, decoder)
+	case 117884:
+		return DecodeNxmTunMetadata62(_oxm, decoder)
+	case 5634:
+		return DecodeNxmUdpSrc(_oxm, decoder)
+	case 6657:
+		return DecodeNxmIcmpType(_oxm, decoder)
+	case 113656:
+		return DecodeNxmTunMetadata53Masked(_oxm, decoder)
+	case 2147503876:
+		return DecodeOxmIpv6ExthdrMasked(_oxm, decoder)
+	case 198920:
+		return DecodeOxmBsnL3InterfaceClassIdMasked(_oxm, decoder)
+	case 210178:
+		return DecodeOxmBsnIpFragmentationMasked(_oxm, decoder)
+	case 120068:
+		return DecodeOxmConnTrackingZoneMasked(_oxm, decoder)
+	case 1286:
+		return DecodeNxmEthSrcMasked(_oxm, decoder)
+	case 204040:
+		return DecodeOxmBsnUdf6Masked(_oxm, decoder)
+	case 75019:
+		return DecodeNxmArpThaMasked(_oxm, decoder)
+	case 208140:
+		return DecodeOxmBsnInnerEthDstMasked(_oxm, decoder)
+	case 201220:
+		return DecodeOxmBsnUdf1(_oxm, decoder)
+	case 205576:
+		return DecodeOxmBsnVlanXlatePortGroupIdMasked(_oxm, decoder)
+	case 2147484944:
+		return DecodeOxmMetadataMasked(_oxm, decoder)
+	case 6146:
+		return DecodeNxmUdpDst(_oxm, decoder)
+	case 2147490306:
+		return DecodeOxmTcpSrc(_oxm, decoder)
+	case 114680:
+		return DecodeNxmTunMetadata55Masked(_oxm, decoder)
+	case 122144:
+		return DecodeNxmTunIpv6DstMasked(_oxm, decoder)
+	case 86652:
+		return DecodeNxmTunMetadata1(_oxm, decoder)
+	case 202244:
+		return DecodeOxmBsnUdf3(_oxm, decoder)
+	case 2147491330:
+		return DecodeOxmUdpSrc(_oxm, decoder)
+	case 115704:
+		return DecodeNxmTunMetadata57Masked(_oxm, decoder)
+	case 69636:
+		return DecodeNxmReg8(_oxm, decoder)
+	case 87676:
+		return DecodeNxmTunMetadata3(_oxm, decoder)
+	case 82184:
+		return DecodeOxmTunnelIpv4DstMasked(_oxm, decoder)
+	case 203268:
+		return DecodeOxmBsnUdf5(_oxm, decoder)
+	case 2147492354:
+		return DecodeOxmSctpSrc(_oxm, decoder)
+	case 2147493377:
+		return DecodeOxmIcmpv4Type(_oxm, decoder)
+	case 116728:
+		return DecodeNxmTunMetadata59Masked(_oxm, decoder)
+	case 88700:
+		return DecodeNxmTunMetadata5(_oxm, decoder)
+	case 73220:
+		return DecodeNxmReg15(_oxm, decoder)
+	case 76289:
+		return DecodeNxmIcmpv6Type(_oxm, decoder)
+	case 117752:
+		return DecodeNxmTunMetadata61Masked(_oxm, decoder)
+	case 4360:
+		return DecodeNxmIpDstMasked(_oxm, decoder)
+	case 89724:
+		return DecodeNxmTunMetadata7(_oxm, decoder)
+	case 2147500812:
+		return DecodeOxmIpv6NdTllMasked(_oxm, decoder)
+	case 8708:
+		return DecodeNxmArpTpa(_oxm, decoder)
+	case 2147494402:
+		return DecodeOxmArpOp(_oxm, decoder)
+	case 118776:
+		return DecodeNxmTunMetadata63Masked(_oxm, decoder)
+	case 199944:
+		return DecodeOxmBsnL3DstClassIdMasked(_oxm, decoder)
+	case 90748:
+		return DecodeNxmTunMetadata9(_oxm, decoder)
+	case 86520:
+		return DecodeNxmTunMetadata0Masked(_oxm, decoder)
+	case 2147487490:
+		return DecodeOxmVlanPcpMasked(_oxm, decoder)
+	case 2147492100:
+		return DecodeOxmUdpDstMasked(_oxm, decoder)
+	case 2147501320:
+		return DecodeOxmMplsLabelMasked(_oxm, decoder)
+	case 197124:
+		return DecodeOxmBsnLagId(_oxm, decoder)
+	case 78849:
+		return DecodeNxmIpFrag(_oxm, decoder)
+	case 2147490818:
+		return DecodeOxmTcpDst(_oxm, decoder)
+	case 200708:
+		return DecodeOxmBsnUdf0(_oxm, decoder)
+	case 91772:
+		return DecodeNxmTunMetadata11(_oxm, decoder)
+	case 87544:
+		return DecodeNxmTunMetadata2Masked(_oxm, decoder)
+	case 207364:
+		return DecodeOxmBsnVxlanNetworkId(_oxm, decoder)
+	case 209410:
+		return DecodeOxmBsnVfi(_oxm, decoder)
+	case 2147498497:
+		return DecodeOxmIcmpv6Type(_oxm, decoder)
+	case 92796:
+		return DecodeNxmTunMetadata13(_oxm, decoder)
+	case 88568:
+		return DecodeNxmTunMetadata4Masked(_oxm, decoder)
+	case 2147495428:
+		return DecodeOxmArpTpa(_oxm, decoder)
+	case 80385:
+		return DecodeNxmNwTtl(_oxm, decoder)
+	case 105976:
+		return DecodeNxmTunMetadata38Masked(_oxm, decoder)
+	case 126465:
+		return DecodeOxmConnTrackingNwProto(_oxm, decoder)
+	case 7682:
+		return DecodeNxmArpOp(_oxm, decoder)
+	case 71172:
+		return DecodeNxmReg11(_oxm, decoder)
+	case 208390:
+		return DecodeOxmBsnInnerEthSrc(_oxm, decoder)
+	case 2147499266:
+		return DecodeOxmIcmpv6CodeMasked(_oxm, decoder)
+	case 128528:
+		return DecodeOxmConnTrackingIpv6Dst(_oxm, decoder)
+	case 85252:
+		return DecodeNxmTunGbpIdMasked(_oxm, decoder)
+	case 90616:
+		return DecodeNxmTunMetadata8Masked(_oxm, decoder)
+	case 79364:
+		return DecodeNxmIpv6Label(_oxm, decoder)
+	case 207112:
+		return DecodeOxmBsnIngressPortGroupIdMasked(_oxm, decoder)
+	case 2147489796:
+		return DecodeOxmIpv4Dst(_oxm, decoder)
+	case 206400:
+		return DecodeOxmBsnInPorts512(_oxm, decoder)
+	case 95868:
+		return DecodeNxmTunMetadata19(_oxm, decoder)
+	case 91640:
+		return DecodeNxmTunMetadata10Masked(_oxm, decoder)
+	case 2147485964:
+		return DecodeOxmEthSrcMasked(_oxm, decoder)
+	case 2147496454:
+		return DecodeOxmArpTha(_oxm, decoder)
+	case 2147491842:
+		return DecodeOxmUdpDst(_oxm, decoder)
+	case 2147501569:
+		return DecodeOxmMplsTc(_oxm, decoder)
+	case 70920:
+		return DecodeNxmReg10Masked(_oxm, decoder)
+	case 96892:
+		return DecodeNxmTunMetadata21(_oxm, decoder)
+	case 92664:
+		return DecodeNxmTunMetadata12Masked(_oxm, decoder)
+	case 205060:
+		return DecodeOxmBsnTcpFlagsMasked(_oxm, decoder)
+	case 81412:
+		return DecodeOxmTunnelIpv4Src(_oxm, decoder)
+	case 99964:
+		return DecodeNxmTunMetadata27(_oxm, decoder)
+	case 71684:
+		return DecodeNxmReg12(_oxm, decoder)
+	case 127240:
+		return DecodeOxmConnTrackingNwSrcMasked(_oxm, decoder)
+	case 97916:
+		return DecodeNxmTunMetadata23(_oxm, decoder)
+	case 93688:
+		return DecodeNxmTunMetadata14Masked(_oxm, decoder)
+	case 82436:
+		return DecodeNxmPktMark(_oxm, decoder)
+	case 85505:
+		return DecodeNxmTunGbpFlags(_oxm, decoder)
+	case 98940:
+		return DecodeNxmTunMetadata25(_oxm, decoder)
+	case 94712:
+		return DecodeNxmTunMetadata16Masked(_oxm, decoder)
+	case 83460:
+		return DecodeNxmDpHash(_oxm, decoder)
+	case 2147503618:
+		return DecodeOxmIpv6Exthdr(_oxm, decoder)
+	case 2147490056:
+		return DecodeOxmIpv4DstMasked(_oxm, decoder)
+	case 123168:
+		return DecodeNxmXxreg1Masked(_oxm, decoder)
+	case 118786:
+		return DecodeNxmTunFlags(_oxm, decoder)
+	case 95736:
+		return DecodeNxmTunMetadata18Masked(_oxm, decoder)
+	case 2308:
+		return DecodeNxmVlanTciMasked(_oxm, decoder)
+	case 2147484164:
+		return DecodeOxmInPhyPort(_oxm, decoder)
+	case 2147488002:
+		return DecodeOxmIpDscpMasked(_oxm, decoder)
+	case 100988:
+		return DecodeNxmTunMetadata29(_oxm, decoder)
+	case 119810:
+		return DecodeOxmConnTrackingZone(_oxm, decoder)
+	case 96760:
+		return DecodeNxmTunMetadata20Masked(_oxm, decoder)
+	case 2147486980:
+		return DecodeOxmVlanVidMasked(_oxm, decoder)
+	case 116348:
+		return DecodeNxmTunMetadata59(_oxm, decoder)
+	case 5378:
+		return DecodeNxmTcpDstMasked(_oxm, decoder)
+	case 71944:
+		return DecodeNxmReg12Masked(_oxm, decoder)
+	case 65800:
+		return DecodeNxmReg0Masked(_oxm, decoder)
+	case 75552:
+		return DecodeNxmIpv6SrcMasked(_oxm, decoder)
+	case 102012:
+		return DecodeNxmTunMetadata31(_oxm, decoder)
+	case 2147493634:
+		return DecodeOxmIcmpv4TypeMasked(_oxm, decoder)
+	case 5892:
+		return DecodeNxmUdpSrcMasked(_oxm, decoder)
+	case 97784:
+		return DecodeNxmTunMetadata22Masked(_oxm, decoder)
+	case 67336:
+		return DecodeNxmReg3Masked(_oxm, decoder)
+	case 2147485452:
+		return DecodeOxmEthDstMasked(_oxm, decoder)
+	case 75280:
+		return DecodeNxmIpv6Src(_oxm, decoder)
+	case 197896:
+		return DecodeOxmBsnVrfMasked(_oxm, decoder)
+	case 122656:
+		return DecodeNxmXxreg0Masked(_oxm, decoder)
+	case 103036:
+		return DecodeNxmTunMetadata33(_oxm, decoder)
+	case 98808:
+		return DecodeNxmTunMetadata24Masked(_oxm, decoder)
+	case 67848:
+		return DecodeNxmReg4Masked(_oxm, decoder)
+	case 77600:
+		return DecodeNxmNdTargetMasked(_oxm, decoder)
+	case 104060:
+		return DecodeNxmTunMetadata35(_oxm, decoder)
+	case 99832:
+		return DecodeNxmTunMetadata26Masked(_oxm, decoder)
+	case 6404:
+		return DecodeNxmUdpDstMasked(_oxm, decoder)
+	case 2147484424:
+		return DecodeOxmInPhyPortMasked(_oxm, decoder)
+	case 77328:
+		return DecodeNxmNdTarget(_oxm, decoder)
+	case 68872:
+		return DecodeNxmReg6Masked(_oxm, decoder)
+	case 105084:
+		return DecodeNxmTunMetadata37(_oxm, decoder)
+	case 100856:
+		return DecodeNxmTunMetadata28Masked(_oxm, decoder)
+	case 2147491076:
+		return DecodeOxmTcpDstMasked(_oxm, decoder)
+	case 206082:
+		return DecodeOxmBsnL2CacheHitMasked(_oxm, decoder)
+	case 69896:
+		return DecodeNxmReg8Masked(_oxm, decoder)
+	case 2147497760:
+		return DecodeOxmIpv6DstMasked(_oxm, decoder)
+	case 206720:
+		return DecodeOxmBsnInPorts512Masked(_oxm, decoder)
+	case 106108:
+		return DecodeNxmTunMetadata39(_oxm, decoder)
+	case 101880:
+		return DecodeNxmTunMetadata30Masked(_oxm, decoder)
+	case 8452:
+		return DecodeNxmArpSpaMasked(_oxm, decoder)
+	case 66312:
+		return DecodeNxmReg1Masked(_oxm, decoder)
+	case 2147497488:
+		return DecodeOxmIpv6Dst(_oxm, decoder)
+	case 201992:
+		return DecodeOxmBsnUdf2Masked(_oxm, decoder)
+	case 107132:
+		return DecodeNxmTunMetadata41(_oxm, decoder)
+	case 102904:
+		return DecodeNxmTunMetadata32Masked(_oxm, decoder)
+	case 2147493124:
+		return DecodeOxmSctpDstMasked(_oxm, decoder)
+	case 67076:
+		return DecodeNxmReg3(_oxm, decoder)
+	case 119300:
+		return DecodeOxmConnTrackingState(_oxm, decoder)
+	case 203016:
+		return DecodeOxmBsnUdf4Masked(_oxm, decoder)
+	case 2147499808:
+		return DecodeOxmIpv6NdTargetMasked(_oxm, decoder)
+	case 108156:
+		return DecodeNxmTunMetadata43(_oxm, decoder)
+	case 103928:
+		return DecodeNxmTunMetadata34Masked(_oxm, decoder)
+	case 106488:
+		return DecodeNxmTunMetadata39Masked(_oxm, decoder)
+	case 201732:
+		return DecodeOxmBsnUdf2(_oxm, decoder)
+	case 2147499536:
+		return DecodeOxmIpv6NdTarget(_oxm, decoder)
+	case 72968:
+		return DecodeNxmReg14Masked(_oxm, decoder)
+	case 109180:
+		return DecodeNxmTunMetadata45(_oxm, decoder)
+	case 104952:
+		return DecodeNxmTunMetadata36Masked(_oxm, decoder)
+	case 93820:
+		return DecodeNxmTunMetadata15(_oxm, decoder)
+	case 79106:
+		return DecodeNxmIpFragMasked(_oxm, decoder)
+	case 108536:
+		return DecodeNxmTunMetadata43Masked(_oxm, decoder)
+	case 126980:
+		return DecodeOxmConnTrackingNwSrc(_oxm, decoder)
+	default:
+		return nil, nil
+	}
+}
+
+func NewOxm(_type_len uint32) *Oxm {
+	obj := &Oxm{}
+	obj.TypeLen = _type_len
+	return obj
+}
+
+type NxmArpOp struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmArpOp interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmArpOp) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmArpOp) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmArpOp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmArpOp(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpOp, error) {
+	_nxmarpop := &NxmArpOp{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmArpOp packet too short: %d < 2", decoder.Length())
+	}
+	_nxmarpop.Value = uint16(decoder.ReadUint16())
+	return _nxmarpop, nil
+}
+
+func NewNxmArpOp() *NxmArpOp {
+	obj := &NxmArpOp{
+		Oxm: NewOxm(7682),
+	}
+	return obj
+}
+func (self *NxmArpOp) GetOXMName() string {
+	return "arp_op"
+}
+
+func (self *NxmArpOp) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpOp) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmArpSha struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type INxmArpSha interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *NxmArpSha) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmArpSha) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmArpSha) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmArpSha(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpSha, error) {
+	_nxmarpsha := &NxmArpSha{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("NxmArpSha packet too short: %d < 6", decoder.Length())
+	}
+	_nxmarpsha.Value = net.HardwareAddr(decoder.Read(6))
+	return _nxmarpsha, nil
+}
+
+func NewNxmArpSha() *NxmArpSha {
+	obj := &NxmArpSha{
+		Oxm: NewOxm(74246),
+	}
+	return obj
+}
+func (self *NxmArpSha) GetOXMName() string {
+	return "arp_sha"
+}
+
+func (self *NxmArpSha) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpSha) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmArpShaMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type INxmArpShaMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *NxmArpShaMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmArpShaMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmArpShaMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *NxmArpShaMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *NxmArpShaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmArpShaMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpShaMasked, error) {
+	_nxmarpshamasked := &NxmArpShaMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("NxmArpShaMasked packet too short: %d < 12", decoder.Length())
+	}
+	_nxmarpshamasked.Value = net.HardwareAddr(decoder.Read(6))
+	_nxmarpshamasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _nxmarpshamasked, nil
+}
+
+func NewNxmArpShaMasked() *NxmArpShaMasked {
+	obj := &NxmArpShaMasked{
+		Oxm: NewOxm(74507),
+	}
+	return obj
+}
+func (self *NxmArpShaMasked) GetOXMName() string {
+	return "arp_sha_masked"
+}
+
+func (self *NxmArpShaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpShaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmArpShaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmArpSpa struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmArpSpa interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmArpSpa) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmArpSpa) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmArpSpa) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmArpSpa(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpSpa, error) {
+	_nxmarpspa := &NxmArpSpa{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmArpSpa packet too short: %d < 4", decoder.Length())
+	}
+	_nxmarpspa.Value = net.IP(decoder.Read(4))
+	return _nxmarpspa, nil
+}
+
+func NewNxmArpSpa() *NxmArpSpa {
+	obj := &NxmArpSpa{
+		Oxm: NewOxm(8196),
+	}
+	return obj
+}
+func (self *NxmArpSpa) GetOXMName() string {
+	return "arp_spa"
+}
+
+func (self *NxmArpSpa) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpSpa) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmArpSpaMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmArpSpaMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmArpSpaMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmArpSpaMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmArpSpaMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmArpSpaMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmArpSpaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmArpSpaMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpSpaMasked, error) {
+	_nxmarpspamasked := &NxmArpSpaMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmArpSpaMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmarpspamasked.Value = net.IP(decoder.Read(4))
+	_nxmarpspamasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmarpspamasked, nil
+}
+
+func NewNxmArpSpaMasked() *NxmArpSpaMasked {
+	obj := &NxmArpSpaMasked{
+		Oxm: NewOxm(8452),
+	}
+	return obj
+}
+func (self *NxmArpSpaMasked) GetOXMName() string {
+	return "arp_spa_masked"
+}
+
+func (self *NxmArpSpaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpSpaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmArpSpaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmArpTha struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type INxmArpTha interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *NxmArpTha) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmArpTha) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmArpTha) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmArpTha(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpTha, error) {
+	_nxmarptha := &NxmArpTha{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("NxmArpTha packet too short: %d < 6", decoder.Length())
+	}
+	_nxmarptha.Value = net.HardwareAddr(decoder.Read(6))
+	return _nxmarptha, nil
+}
+
+func NewNxmArpTha() *NxmArpTha {
+	obj := &NxmArpTha{
+		Oxm: NewOxm(74758),
+	}
+	return obj
+}
+func (self *NxmArpTha) GetOXMName() string {
+	return "arp_tha"
+}
+
+func (self *NxmArpTha) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpTha) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmArpThaMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type INxmArpThaMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *NxmArpThaMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmArpThaMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmArpThaMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *NxmArpThaMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *NxmArpThaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmArpThaMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpThaMasked, error) {
+	_nxmarpthamasked := &NxmArpThaMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("NxmArpThaMasked packet too short: %d < 12", decoder.Length())
+	}
+	_nxmarpthamasked.Value = net.HardwareAddr(decoder.Read(6))
+	_nxmarpthamasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _nxmarpthamasked, nil
+}
+
+func NewNxmArpThaMasked() *NxmArpThaMasked {
+	obj := &NxmArpThaMasked{
+		Oxm: NewOxm(75019),
+	}
+	return obj
+}
+func (self *NxmArpThaMasked) GetOXMName() string {
+	return "arp_tha_masked"
+}
+
+func (self *NxmArpThaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpThaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmArpThaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmArpTpa struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmArpTpa interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmArpTpa) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmArpTpa) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmArpTpa) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmArpTpa(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpTpa, error) {
+	_nxmarptpa := &NxmArpTpa{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmArpTpa packet too short: %d < 4", decoder.Length())
+	}
+	_nxmarptpa.Value = net.IP(decoder.Read(4))
+	return _nxmarptpa, nil
+}
+
+func NewNxmArpTpa() *NxmArpTpa {
+	obj := &NxmArpTpa{
+		Oxm: NewOxm(8708),
+	}
+	return obj
+}
+func (self *NxmArpTpa) GetOXMName() string {
+	return "arp_tpa"
+}
+
+func (self *NxmArpTpa) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpTpa) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmArpTpaMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmArpTpaMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmArpTpaMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmArpTpaMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmArpTpaMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmArpTpaMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmArpTpaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmArpTpaMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmArpTpaMasked, error) {
+	_nxmarptpamasked := &NxmArpTpaMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmArpTpaMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmarptpamasked.Value = net.IP(decoder.Read(4))
+	_nxmarptpamasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmarptpamasked, nil
+}
+
+func NewNxmArpTpaMasked() *NxmArpTpaMasked {
+	obj := &NxmArpTpaMasked{
+		Oxm: NewOxm(8968),
+	}
+	return obj
+}
+func (self *NxmArpTpaMasked) GetOXMName() string {
+	return "arp_tpa_masked"
+}
+
+func (self *NxmArpTpaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmArpTpaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmArpTpaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmConjId struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmConjId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmConjId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmConjId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmConjId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmConjId(parent *Oxm, decoder *goloxi.Decoder) (*NxmConjId, error) {
+	_nxmconjid := &NxmConjId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmConjId packet too short: %d < 4", decoder.Length())
+	}
+	_nxmconjid.Value = uint32(decoder.ReadUint32())
+	return _nxmconjid, nil
+}
+
+func NewNxmConjId() *NxmConjId {
+	obj := &NxmConjId{
+		Oxm: NewOxm(84484),
+	}
+	return obj
+}
+func (self *NxmConjId) GetOXMName() string {
+	return "conj_id"
+}
+
+func (self *NxmConjId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmConjId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtIpv6Dst struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmCtIpv6Dst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmCtIpv6Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtIpv6Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeNxmCtIpv6Dst(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtIpv6Dst, error) {
+	_nxmctipv6dst := &NxmCtIpv6Dst{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmCtIpv6Dst packet too short: %d < 16", decoder.Length())
+	}
+	_nxmctipv6dst.Value = net.IP(decoder.Read(16))
+	return _nxmctipv6dst, nil
+}
+
+func NewNxmCtIpv6Dst() *NxmCtIpv6Dst {
+	obj := &NxmCtIpv6Dst{
+		Oxm: NewOxm(128528),
+	}
+	return obj
+}
+func (self *NxmCtIpv6Dst) GetOXMName() string {
+	return "ct_ipv6_dst"
+}
+
+func (self *NxmCtIpv6Dst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtIpv6Dst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtIpv6DstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmCtIpv6DstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmCtIpv6DstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtIpv6DstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtIpv6DstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmCtIpv6DstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeNxmCtIpv6DstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtIpv6DstMasked, error) {
+	_nxmctipv6dstmasked := &NxmCtIpv6DstMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmCtIpv6DstMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmctipv6dstmasked.Value = net.IP(decoder.Read(16))
+	_nxmctipv6dstmasked.ValueMask = net.IP(decoder.Read(16))
+	return _nxmctipv6dstmasked, nil
+}
+
+func NewNxmCtIpv6DstMasked() *NxmCtIpv6DstMasked {
+	obj := &NxmCtIpv6DstMasked{
+		Oxm: NewOxm(128800),
+	}
+	return obj
+}
+func (self *NxmCtIpv6DstMasked) GetOXMName() string {
+	return "ct_ipv6_dst_masked"
+}
+
+func (self *NxmCtIpv6DstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtIpv6DstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtIpv6Src struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmCtIpv6Src interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmCtIpv6Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtIpv6Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeNxmCtIpv6Src(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtIpv6Src, error) {
+	_nxmctipv6src := &NxmCtIpv6Src{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmCtIpv6Src packet too short: %d < 16", decoder.Length())
+	}
+	_nxmctipv6src.Value = net.IP(decoder.Read(16))
+	return _nxmctipv6src, nil
+}
+
+func NewNxmCtIpv6Src() *NxmCtIpv6Src {
+	obj := &NxmCtIpv6Src{
+		Oxm: NewOxm(128016),
+	}
+	return obj
+}
+func (self *NxmCtIpv6Src) GetOXMName() string {
+	return "ct_ipv6_src"
+}
+
+func (self *NxmCtIpv6Src) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtIpv6Src) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtIpv6SrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmCtIpv6SrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmCtIpv6SrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtIpv6SrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtIpv6SrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmCtIpv6SrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeNxmCtIpv6SrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtIpv6SrcMasked, error) {
+	_nxmctipv6srcmasked := &NxmCtIpv6SrcMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmCtIpv6SrcMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmctipv6srcmasked.Value = net.IP(decoder.Read(16))
+	_nxmctipv6srcmasked.ValueMask = net.IP(decoder.Read(16))
+	return _nxmctipv6srcmasked, nil
+}
+
+func NewNxmCtIpv6SrcMasked() *NxmCtIpv6SrcMasked {
+	obj := &NxmCtIpv6SrcMasked{
+		Oxm: NewOxm(128288),
+	}
+	return obj
+}
+func (self *NxmCtIpv6SrcMasked) GetOXMName() string {
+	return "ct_ipv6_src_masked"
+}
+
+func (self *NxmCtIpv6SrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtIpv6SrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtLabel struct {
+	*Oxm
+	Value uint128
+}
+
+type INxmCtLabel interface {
+	goloxi.IOxm
+	GetValue() uint128
+}
+
+func (self *NxmCtLabel) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmCtLabel) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmCtLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+
+	return nil
+}
+
+func DecodeNxmCtLabel(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtLabel, error) {
+	_nxmctlabel := &NxmCtLabel{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmCtLabel packet too short: %d < 16", decoder.Length())
+	}
+	_nxmctlabel.Value = uint128(decoder.ReadUint128())
+	return _nxmctlabel, nil
+}
+
+func NewNxmCtLabel() *NxmCtLabel {
+	obj := &NxmCtLabel{
+		Oxm: NewOxm(120848),
+	}
+	return obj
+}
+func (self *NxmCtLabel) GetOXMName() string {
+	return "ct_label"
+}
+
+func (self *NxmCtLabel) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtLabel) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtLabelMasked struct {
+	*Oxm
+	Value     uint128
+	ValueMask uint128
+}
+
+type INxmCtLabelMasked interface {
+	goloxi.IOxm
+	GetValue() uint128
+	GetValueMask() uint128
+}
+
+func (self *NxmCtLabelMasked) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmCtLabelMasked) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmCtLabelMasked) GetValueMask() uint128 {
+	return self.ValueMask
+}
+
+func (self *NxmCtLabelMasked) SetValueMask(v uint128) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtLabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+	encoder.PutUint128(uint128(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmCtLabelMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtLabelMasked, error) {
+	_nxmctlabelmasked := &NxmCtLabelMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmCtLabelMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmctlabelmasked.Value = uint128(decoder.ReadUint128())
+	_nxmctlabelmasked.ValueMask = uint128(decoder.ReadUint128())
+	return _nxmctlabelmasked, nil
+}
+
+func NewNxmCtLabelMasked() *NxmCtLabelMasked {
+	obj := &NxmCtLabelMasked{
+		Oxm: NewOxm(121120),
+	}
+	return obj
+}
+func (self *NxmCtLabelMasked) GetOXMName() string {
+	return "ct_label_masked"
+}
+
+func (self *NxmCtLabelMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtLabelMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtLabelMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtMark struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmCtMark interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmCtMark) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmCtMark) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmCtMark) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmCtMark(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtMark, error) {
+	_nxmctmark := &NxmCtMark{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmCtMark packet too short: %d < 4", decoder.Length())
+	}
+	_nxmctmark.Value = uint32(decoder.ReadUint32())
+	return _nxmctmark, nil
+}
+
+func NewNxmCtMark() *NxmCtMark {
+	obj := &NxmCtMark{
+		Oxm: NewOxm(120324),
+	}
+	return obj
+}
+func (self *NxmCtMark) GetOXMName() string {
+	return "ct_mark"
+}
+
+func (self *NxmCtMark) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtMark) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtMarkMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmCtMarkMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmCtMarkMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmCtMarkMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmCtMarkMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmCtMarkMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtMarkMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmCtMarkMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtMarkMasked, error) {
+	_nxmctmarkmasked := &NxmCtMarkMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmCtMarkMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmctmarkmasked.Value = uint32(decoder.ReadUint32())
+	_nxmctmarkmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmctmarkmasked, nil
+}
+
+func NewNxmCtMarkMasked() *NxmCtMarkMasked {
+	obj := &NxmCtMarkMasked{
+		Oxm: NewOxm(120584),
+	}
+	return obj
+}
+func (self *NxmCtMarkMasked) GetOXMName() string {
+	return "ct_mark_masked"
+}
+
+func (self *NxmCtMarkMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtMarkMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtMarkMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtNwDst struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmCtNwDst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmCtNwDst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtNwDst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtNwDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmCtNwDst(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtNwDst, error) {
+	_nxmctnwdst := &NxmCtNwDst{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmCtNwDst packet too short: %d < 4", decoder.Length())
+	}
+	_nxmctnwdst.Value = net.IP(decoder.Read(4))
+	return _nxmctnwdst, nil
+}
+
+func NewNxmCtNwDst() *NxmCtNwDst {
+	obj := &NxmCtNwDst{
+		Oxm: NewOxm(127492),
+	}
+	return obj
+}
+func (self *NxmCtNwDst) GetOXMName() string {
+	return "ct_nw_dst"
+}
+
+func (self *NxmCtNwDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtNwDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtNwDstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmCtNwDstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmCtNwDstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtNwDstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtNwDstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmCtNwDstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtNwDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmCtNwDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtNwDstMasked, error) {
+	_nxmctnwdstmasked := &NxmCtNwDstMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmCtNwDstMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmctnwdstmasked.Value = net.IP(decoder.Read(4))
+	_nxmctnwdstmasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmctnwdstmasked, nil
+}
+
+func NewNxmCtNwDstMasked() *NxmCtNwDstMasked {
+	obj := &NxmCtNwDstMasked{
+		Oxm: NewOxm(127752),
+	}
+	return obj
+}
+func (self *NxmCtNwDstMasked) GetOXMName() string {
+	return "ct_nw_dst_masked"
+}
+
+func (self *NxmCtNwDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtNwDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtNwDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtNwProto struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmCtNwProto interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmCtNwProto) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmCtNwProto) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmCtNwProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmCtNwProto(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtNwProto, error) {
+	_nxmctnwproto := &NxmCtNwProto{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmCtNwProto packet too short: %d < 1", decoder.Length())
+	}
+	_nxmctnwproto.Value = uint8(decoder.ReadByte())
+	return _nxmctnwproto, nil
+}
+
+func NewNxmCtNwProto() *NxmCtNwProto {
+	obj := &NxmCtNwProto{
+		Oxm: NewOxm(126465),
+	}
+	return obj
+}
+func (self *NxmCtNwProto) GetOXMName() string {
+	return "ct_nw_proto"
+}
+
+func (self *NxmCtNwProto) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtNwProto) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtNwSrc struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmCtNwSrc interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmCtNwSrc) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtNwSrc) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtNwSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmCtNwSrc(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtNwSrc, error) {
+	_nxmctnwsrc := &NxmCtNwSrc{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmCtNwSrc packet too short: %d < 4", decoder.Length())
+	}
+	_nxmctnwsrc.Value = net.IP(decoder.Read(4))
+	return _nxmctnwsrc, nil
+}
+
+func NewNxmCtNwSrc() *NxmCtNwSrc {
+	obj := &NxmCtNwSrc{
+		Oxm: NewOxm(126980),
+	}
+	return obj
+}
+func (self *NxmCtNwSrc) GetOXMName() string {
+	return "ct_nw_src"
+}
+
+func (self *NxmCtNwSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtNwSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtNwSrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmCtNwSrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmCtNwSrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmCtNwSrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmCtNwSrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmCtNwSrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtNwSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmCtNwSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtNwSrcMasked, error) {
+	_nxmctnwsrcmasked := &NxmCtNwSrcMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmCtNwSrcMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmctnwsrcmasked.Value = net.IP(decoder.Read(4))
+	_nxmctnwsrcmasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmctnwsrcmasked, nil
+}
+
+func NewNxmCtNwSrcMasked() *NxmCtNwSrcMasked {
+	obj := &NxmCtNwSrcMasked{
+		Oxm: NewOxm(127240),
+	}
+	return obj
+}
+func (self *NxmCtNwSrcMasked) GetOXMName() string {
+	return "ct_nw_src_masked"
+}
+
+func (self *NxmCtNwSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtNwSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtNwSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtState struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmCtState interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmCtState) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmCtState) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmCtState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmCtState(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtState, error) {
+	_nxmctstate := &NxmCtState{Oxm: parent}
+	_nxmctstate.Value = decoder.Read(int(_nxmctstate.TypeLen & 0xFF))
+	return _nxmctstate, nil
+}
+
+func NewNxmCtState() *NxmCtState {
+	obj := &NxmCtState{
+		Oxm: NewOxm(119300),
+	}
+	return obj
+}
+func (self *NxmCtState) GetOXMName() string {
+	return "ct_state"
+}
+
+func (self *NxmCtState) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtState) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtStateMasked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmCtStateMasked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmCtStateMasked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmCtStateMasked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmCtStateMasked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmCtStateMasked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtStateMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmCtStateMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtStateMasked, error) {
+	_nxmctstatemasked := &NxmCtStateMasked{Oxm: parent}
+	_nxmctstatemasked.Value = decoder.Read(int(_nxmctstatemasked.TypeLen & 0xFF))
+	_nxmctstatemasked.ValueMask = decoder.Read(int(_nxmctstatemasked.TypeLen & 0xFF))
+	return _nxmctstatemasked, nil
+}
+
+func NewNxmCtStateMasked() *NxmCtStateMasked {
+	obj := &NxmCtStateMasked{
+		Oxm: NewOxm(119560),
+	}
+	return obj
+}
+func (self *NxmCtStateMasked) GetOXMName() string {
+	return "ct_state_masked"
+}
+
+func (self *NxmCtStateMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtStateMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtStateMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtTpDst struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmCtTpDst interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmCtTpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmCtTpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmCtTpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmCtTpDst(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtTpDst, error) {
+	_nxmcttpdst := &NxmCtTpDst{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmCtTpDst packet too short: %d < 2", decoder.Length())
+	}
+	_nxmcttpdst.Value = uint16(decoder.ReadUint16())
+	return _nxmcttpdst, nil
+}
+
+func NewNxmCtTpDst() *NxmCtTpDst {
+	obj := &NxmCtTpDst{
+		Oxm: NewOxm(129538),
+	}
+	return obj
+}
+func (self *NxmCtTpDst) GetOXMName() string {
+	return "ct_tp_dst"
+}
+
+func (self *NxmCtTpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtTpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtTpDstMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmCtTpDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmCtTpDstMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmCtTpDstMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmCtTpDstMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmCtTpDstMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtTpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmCtTpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtTpDstMasked, error) {
+	_nxmcttpdstmasked := &NxmCtTpDstMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmCtTpDstMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmcttpdstmasked.Value = uint16(decoder.ReadUint16())
+	_nxmcttpdstmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmcttpdstmasked, nil
+}
+
+func NewNxmCtTpDstMasked() *NxmCtTpDstMasked {
+	obj := &NxmCtTpDstMasked{
+		Oxm: NewOxm(129796),
+	}
+	return obj
+}
+func (self *NxmCtTpDstMasked) GetOXMName() string {
+	return "ct_tp_dst_masked"
+}
+
+func (self *NxmCtTpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtTpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtTpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtTpSrc struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmCtTpSrc interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmCtTpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmCtTpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmCtTpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmCtTpSrc(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtTpSrc, error) {
+	_nxmcttpsrc := &NxmCtTpSrc{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmCtTpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_nxmcttpsrc.Value = uint16(decoder.ReadUint16())
+	return _nxmcttpsrc, nil
+}
+
+func NewNxmCtTpSrc() *NxmCtTpSrc {
+	obj := &NxmCtTpSrc{
+		Oxm: NewOxm(129026),
+	}
+	return obj
+}
+func (self *NxmCtTpSrc) GetOXMName() string {
+	return "ct_tp_src"
+}
+
+func (self *NxmCtTpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtTpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmCtTpSrcMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmCtTpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmCtTpSrcMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmCtTpSrcMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmCtTpSrcMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmCtTpSrcMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmCtTpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmCtTpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtTpSrcMasked, error) {
+	_nxmcttpsrcmasked := &NxmCtTpSrcMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmCtTpSrcMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmcttpsrcmasked.Value = uint16(decoder.ReadUint16())
+	_nxmcttpsrcmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmcttpsrcmasked, nil
+}
+
+func NewNxmCtTpSrcMasked() *NxmCtTpSrcMasked {
+	obj := &NxmCtTpSrcMasked{
+		Oxm: NewOxm(129284),
+	}
+	return obj
+}
+func (self *NxmCtTpSrcMasked) GetOXMName() string {
+	return "ct_tp_src_masked"
+}
+
+func (self *NxmCtTpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtTpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmCtTpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmCtZone struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmCtZone interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmCtZone) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmCtZone) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmCtZone) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmCtZone(parent *Oxm, decoder *goloxi.Decoder) (*NxmCtZone, error) {
+	_nxmctzone := &NxmCtZone{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmCtZone packet too short: %d < 2", decoder.Length())
+	}
+	_nxmctzone.Value = uint16(decoder.ReadUint16())
+	return _nxmctzone, nil
+}
+
+func NewNxmCtZone() *NxmCtZone {
+	obj := &NxmCtZone{
+		Oxm: NewOxm(119810),
+	}
+	return obj
+}
+func (self *NxmCtZone) GetOXMName() string {
+	return "ct_zone"
+}
+
+func (self *NxmCtZone) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmCtZone) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmDpHash struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmDpHash interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmDpHash) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmDpHash) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmDpHash) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmDpHash(parent *Oxm, decoder *goloxi.Decoder) (*NxmDpHash, error) {
+	_nxmdphash := &NxmDpHash{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmDpHash packet too short: %d < 4", decoder.Length())
+	}
+	_nxmdphash.Value = uint32(decoder.ReadUint32())
+	return _nxmdphash, nil
+}
+
+func NewNxmDpHash() *NxmDpHash {
+	obj := &NxmDpHash{
+		Oxm: NewOxm(83460),
+	}
+	return obj
+}
+func (self *NxmDpHash) GetOXMName() string {
+	return "dp_hash"
+}
+
+func (self *NxmDpHash) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmDpHash) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmDpHashMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmDpHashMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmDpHashMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmDpHashMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmDpHashMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmDpHashMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmDpHashMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmDpHashMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmDpHashMasked, error) {
+	_nxmdphashmasked := &NxmDpHashMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmDpHashMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmdphashmasked.Value = uint32(decoder.ReadUint32())
+	_nxmdphashmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmdphashmasked, nil
+}
+
+func NewNxmDpHashMasked() *NxmDpHashMasked {
+	obj := &NxmDpHashMasked{
+		Oxm: NewOxm(83720),
+	}
+	return obj
+}
+func (self *NxmDpHashMasked) GetOXMName() string {
+	return "dp_hash_masked"
+}
+
+func (self *NxmDpHashMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmDpHashMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmDpHashMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmEthDst struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type INxmEthDst interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *NxmEthDst) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmEthDst) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmEthDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmEthDst(parent *Oxm, decoder *goloxi.Decoder) (*NxmEthDst, error) {
+	_nxmethdst := &NxmEthDst{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("NxmEthDst packet too short: %d < 6", decoder.Length())
+	}
+	_nxmethdst.Value = net.HardwareAddr(decoder.Read(6))
+	return _nxmethdst, nil
+}
+
+func NewNxmEthDst() *NxmEthDst {
+	obj := &NxmEthDst{
+		Oxm: NewOxm(518),
+	}
+	return obj
+}
+func (self *NxmEthDst) GetOXMName() string {
+	return "eth_dst"
+}
+
+func (self *NxmEthDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmEthDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmEthDstMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type INxmEthDstMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *NxmEthDstMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmEthDstMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmEthDstMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *NxmEthDstMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *NxmEthDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmEthDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmEthDstMasked, error) {
+	_nxmethdstmasked := &NxmEthDstMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("NxmEthDstMasked packet too short: %d < 12", decoder.Length())
+	}
+	_nxmethdstmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_nxmethdstmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _nxmethdstmasked, nil
+}
+
+func NewNxmEthDstMasked() *NxmEthDstMasked {
+	obj := &NxmEthDstMasked{
+		Oxm: NewOxm(779),
+	}
+	return obj
+}
+func (self *NxmEthDstMasked) GetOXMName() string {
+	return "eth_dst_masked"
+}
+
+func (self *NxmEthDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmEthDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmEthDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmEthSrc struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type INxmEthSrc interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *NxmEthSrc) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmEthSrc) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmEthSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmEthSrc(parent *Oxm, decoder *goloxi.Decoder) (*NxmEthSrc, error) {
+	_nxmethsrc := &NxmEthSrc{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("NxmEthSrc packet too short: %d < 6", decoder.Length())
+	}
+	_nxmethsrc.Value = net.HardwareAddr(decoder.Read(6))
+	return _nxmethsrc, nil
+}
+
+func NewNxmEthSrc() *NxmEthSrc {
+	obj := &NxmEthSrc{
+		Oxm: NewOxm(1030),
+	}
+	return obj
+}
+func (self *NxmEthSrc) GetOXMName() string {
+	return "eth_src"
+}
+
+func (self *NxmEthSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmEthSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmEthSrcMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type INxmEthSrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *NxmEthSrcMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmEthSrcMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmEthSrcMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *NxmEthSrcMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *NxmEthSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmEthSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmEthSrcMasked, error) {
+	_nxmethsrcmasked := &NxmEthSrcMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("NxmEthSrcMasked packet too short: %d < 12", decoder.Length())
+	}
+	_nxmethsrcmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_nxmethsrcmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _nxmethsrcmasked, nil
+}
+
+func NewNxmEthSrcMasked() *NxmEthSrcMasked {
+	obj := &NxmEthSrcMasked{
+		Oxm: NewOxm(1286),
+	}
+	return obj
+}
+func (self *NxmEthSrcMasked) GetOXMName() string {
+	return "eth_src_masked"
+}
+
+func (self *NxmEthSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmEthSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmEthSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmEthType struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmEthType interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmEthType) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmEthType) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmEthType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmEthType(parent *Oxm, decoder *goloxi.Decoder) (*NxmEthType, error) {
+	_nxmethtype := &NxmEthType{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmEthType packet too short: %d < 2", decoder.Length())
+	}
+	_nxmethtype.Value = uint16(decoder.ReadUint16())
+	return _nxmethtype, nil
+}
+
+func NewNxmEthType() *NxmEthType {
+	obj := &NxmEthType{
+		Oxm: NewOxm(1538),
+	}
+	return obj
+}
+func (self *NxmEthType) GetOXMName() string {
+	return "eth_type"
+}
+
+func (self *NxmEthType) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmEthType) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIcmpCode struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmIcmpCode interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmIcmpCode) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmIcmpCode) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmIcmpCode) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmIcmpCode(parent *Oxm, decoder *goloxi.Decoder) (*NxmIcmpCode, error) {
+	_nxmicmpcode := &NxmIcmpCode{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmIcmpCode packet too short: %d < 1", decoder.Length())
+	}
+	_nxmicmpcode.Value = uint8(decoder.ReadByte())
+	return _nxmicmpcode, nil
+}
+
+func NewNxmIcmpCode() *NxmIcmpCode {
+	obj := &NxmIcmpCode{
+		Oxm: NewOxm(7169),
+	}
+	return obj
+}
+func (self *NxmIcmpCode) GetOXMName() string {
+	return "icmp_code"
+}
+
+func (self *NxmIcmpCode) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIcmpCode) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIcmpType struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmIcmpType interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmIcmpType) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmIcmpType) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmIcmpType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmIcmpType(parent *Oxm, decoder *goloxi.Decoder) (*NxmIcmpType, error) {
+	_nxmicmptype := &NxmIcmpType{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmIcmpType packet too short: %d < 1", decoder.Length())
+	}
+	_nxmicmptype.Value = uint8(decoder.ReadByte())
+	return _nxmicmptype, nil
+}
+
+func NewNxmIcmpType() *NxmIcmpType {
+	obj := &NxmIcmpType{
+		Oxm: NewOxm(6657),
+	}
+	return obj
+}
+func (self *NxmIcmpType) GetOXMName() string {
+	return "icmp_type"
+}
+
+func (self *NxmIcmpType) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIcmpType) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIcmpv6Code struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmIcmpv6Code interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmIcmpv6Code) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmIcmpv6Code) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmIcmpv6Code) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmIcmpv6Code(parent *Oxm, decoder *goloxi.Decoder) (*NxmIcmpv6Code, error) {
+	_nxmicmpv6code := &NxmIcmpv6Code{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmIcmpv6Code packet too short: %d < 1", decoder.Length())
+	}
+	_nxmicmpv6code.Value = uint8(decoder.ReadByte())
+	return _nxmicmpv6code, nil
+}
+
+func NewNxmIcmpv6Code() *NxmIcmpv6Code {
+	obj := &NxmIcmpv6Code{
+		Oxm: NewOxm(76801),
+	}
+	return obj
+}
+func (self *NxmIcmpv6Code) GetOXMName() string {
+	return "icmpv6_code"
+}
+
+func (self *NxmIcmpv6Code) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIcmpv6Code) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIcmpv6Type struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmIcmpv6Type interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmIcmpv6Type) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmIcmpv6Type) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmIcmpv6Type) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmIcmpv6Type(parent *Oxm, decoder *goloxi.Decoder) (*NxmIcmpv6Type, error) {
+	_nxmicmpv6type := &NxmIcmpv6Type{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmIcmpv6Type packet too short: %d < 1", decoder.Length())
+	}
+	_nxmicmpv6type.Value = uint8(decoder.ReadByte())
+	return _nxmicmpv6type, nil
+}
+
+func NewNxmIcmpv6Type() *NxmIcmpv6Type {
+	obj := &NxmIcmpv6Type{
+		Oxm: NewOxm(76289),
+	}
+	return obj
+}
+func (self *NxmIcmpv6Type) GetOXMName() string {
+	return "icmpv6_type"
+}
+
+func (self *NxmIcmpv6Type) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIcmpv6Type) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmInPort struct {
+	*Oxm
+	Value Port
+}
+
+type INxmInPort interface {
+	goloxi.IOxm
+	GetValue() Port
+}
+
+func (self *NxmInPort) GetValue() Port {
+	return self.Value
+}
+
+func (self *NxmInPort) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *NxmInPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeNxmInPort(parent *Oxm, decoder *goloxi.Decoder) (*NxmInPort, error) {
+	_nxminport := &NxmInPort{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmInPort packet too short: %d < 4", decoder.Length())
+	}
+	_nxminport.Value.Decode(decoder)
+	return _nxminport, nil
+}
+
+func NewNxmInPort() *NxmInPort {
+	obj := &NxmInPort{
+		Oxm: NewOxm(2),
+	}
+	return obj
+}
+func (self *NxmInPort) GetOXMName() string {
+	return "in_port"
+}
+
+func (self *NxmInPort) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmInPort) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIpDst struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmIpDst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmIpDst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpDst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmIpDst(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpDst, error) {
+	_nxmipdst := &NxmIpDst{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmIpDst packet too short: %d < 4", decoder.Length())
+	}
+	_nxmipdst.Value = net.IP(decoder.Read(4))
+	return _nxmipdst, nil
+}
+
+func NewNxmIpDst() *NxmIpDst {
+	obj := &NxmIpDst{
+		Oxm: NewOxm(4100),
+	}
+	return obj
+}
+func (self *NxmIpDst) GetOXMName() string {
+	return "ip_dst"
+}
+
+func (self *NxmIpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIpDstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmIpDstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmIpDstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpDstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpDstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmIpDstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmIpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmIpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpDstMasked, error) {
+	_nxmipdstmasked := &NxmIpDstMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmIpDstMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmipdstmasked.Value = net.IP(decoder.Read(4))
+	_nxmipdstmasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmipdstmasked, nil
+}
+
+func NewNxmIpDstMasked() *NxmIpDstMasked {
+	obj := &NxmIpDstMasked{
+		Oxm: NewOxm(4360),
+	}
+	return obj
+}
+func (self *NxmIpDstMasked) GetOXMName() string {
+	return "ip_dst_masked"
+}
+
+func (self *NxmIpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmIpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmIpFrag struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmIpFrag interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmIpFrag) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmIpFrag) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmIpFrag) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmIpFrag(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpFrag, error) {
+	_nxmipfrag := &NxmIpFrag{Oxm: parent}
+	_nxmipfrag.Value = decoder.Read(int(_nxmipfrag.TypeLen & 0xFF))
+	return _nxmipfrag, nil
+}
+
+func NewNxmIpFrag() *NxmIpFrag {
+	obj := &NxmIpFrag{
+		Oxm: NewOxm(78849),
+	}
+	return obj
+}
+func (self *NxmIpFrag) GetOXMName() string {
+	return "ip_frag"
+}
+
+func (self *NxmIpFrag) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpFrag) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIpFragMasked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmIpFragMasked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmIpFragMasked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmIpFragMasked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmIpFragMasked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmIpFragMasked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmIpFragMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmIpFragMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpFragMasked, error) {
+	_nxmipfragmasked := &NxmIpFragMasked{Oxm: parent}
+	_nxmipfragmasked.Value = decoder.Read(int(_nxmipfragmasked.TypeLen & 0xFF))
+	_nxmipfragmasked.ValueMask = decoder.Read(int(_nxmipfragmasked.TypeLen & 0xFF))
+	return _nxmipfragmasked, nil
+}
+
+func NewNxmIpFragMasked() *NxmIpFragMasked {
+	obj := &NxmIpFragMasked{
+		Oxm: NewOxm(79106),
+	}
+	return obj
+}
+func (self *NxmIpFragMasked) GetOXMName() string {
+	return "ip_frag_masked"
+}
+
+func (self *NxmIpFragMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpFragMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmIpFragMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmIpSrc struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmIpSrc interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmIpSrc) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpSrc) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmIpSrc(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpSrc, error) {
+	_nxmipsrc := &NxmIpSrc{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmIpSrc packet too short: %d < 4", decoder.Length())
+	}
+	_nxmipsrc.Value = net.IP(decoder.Read(4))
+	return _nxmipsrc, nil
+}
+
+func NewNxmIpSrc() *NxmIpSrc {
+	obj := &NxmIpSrc{
+		Oxm: NewOxm(3588),
+	}
+	return obj
+}
+func (self *NxmIpSrc) GetOXMName() string {
+	return "ip_src"
+}
+
+func (self *NxmIpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIpSrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmIpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmIpSrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpSrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpSrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmIpSrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmIpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmIpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpSrcMasked, error) {
+	_nxmipsrcmasked := &NxmIpSrcMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmIpSrcMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmipsrcmasked.Value = net.IP(decoder.Read(4))
+	_nxmipsrcmasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmipsrcmasked, nil
+}
+
+func NewNxmIpSrcMasked() *NxmIpSrcMasked {
+	obj := &NxmIpSrcMasked{
+		Oxm: NewOxm(3848),
+	}
+	return obj
+}
+func (self *NxmIpSrcMasked) GetOXMName() string {
+	return "ip_src_masked"
+}
+
+func (self *NxmIpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmIpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmIpv6Dst struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmIpv6Dst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmIpv6Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpv6Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeNxmIpv6Dst(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpv6Dst, error) {
+	_nxmipv6dst := &NxmIpv6Dst{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmIpv6Dst packet too short: %d < 16", decoder.Length())
+	}
+	_nxmipv6dst.Value = net.IP(decoder.Read(16))
+	return _nxmipv6dst, nil
+}
+
+func NewNxmIpv6Dst() *NxmIpv6Dst {
+	obj := &NxmIpv6Dst{
+		Oxm: NewOxm(75792),
+	}
+	return obj
+}
+func (self *NxmIpv6Dst) GetOXMName() string {
+	return "ipv6_dst"
+}
+
+func (self *NxmIpv6Dst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpv6Dst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIpv6DstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmIpv6DstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmIpv6DstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpv6DstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpv6DstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmIpv6DstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeNxmIpv6DstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpv6DstMasked, error) {
+	_nxmipv6dstmasked := &NxmIpv6DstMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmIpv6DstMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmipv6dstmasked.Value = net.IP(decoder.Read(16))
+	_nxmipv6dstmasked.ValueMask = net.IP(decoder.Read(16))
+	return _nxmipv6dstmasked, nil
+}
+
+func NewNxmIpv6DstMasked() *NxmIpv6DstMasked {
+	obj := &NxmIpv6DstMasked{
+		Oxm: NewOxm(76064),
+	}
+	return obj
+}
+func (self *NxmIpv6DstMasked) GetOXMName() string {
+	return "ipv6_dst_masked"
+}
+
+func (self *NxmIpv6DstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpv6DstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmIpv6Label struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmIpv6Label interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmIpv6Label) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmIpv6Label) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmIpv6Label) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmIpv6Label(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpv6Label, error) {
+	_nxmipv6label := &NxmIpv6Label{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmIpv6Label packet too short: %d < 4", decoder.Length())
+	}
+	_nxmipv6label.Value = uint32(decoder.ReadUint32())
+	return _nxmipv6label, nil
+}
+
+func NewNxmIpv6Label() *NxmIpv6Label {
+	obj := &NxmIpv6Label{
+		Oxm: NewOxm(79364),
+	}
+	return obj
+}
+func (self *NxmIpv6Label) GetOXMName() string {
+	return "ipv6_label"
+}
+
+func (self *NxmIpv6Label) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpv6Label) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIpv6LabelMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmIpv6LabelMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmIpv6LabelMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmIpv6LabelMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmIpv6LabelMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmIpv6LabelMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmIpv6LabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmIpv6LabelMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpv6LabelMasked, error) {
+	_nxmipv6labelmasked := &NxmIpv6LabelMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmIpv6LabelMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmipv6labelmasked.Value = uint32(decoder.ReadUint32())
+	_nxmipv6labelmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmipv6labelmasked, nil
+}
+
+func NewNxmIpv6LabelMasked() *NxmIpv6LabelMasked {
+	obj := &NxmIpv6LabelMasked{
+		Oxm: NewOxm(79624),
+	}
+	return obj
+}
+func (self *NxmIpv6LabelMasked) GetOXMName() string {
+	return "ipv6_label_masked"
+}
+
+func (self *NxmIpv6LabelMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpv6LabelMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmIpv6LabelMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmIpv6Src struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmIpv6Src interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmIpv6Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpv6Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeNxmIpv6Src(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpv6Src, error) {
+	_nxmipv6src := &NxmIpv6Src{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmIpv6Src packet too short: %d < 16", decoder.Length())
+	}
+	_nxmipv6src.Value = net.IP(decoder.Read(16))
+	return _nxmipv6src, nil
+}
+
+func NewNxmIpv6Src() *NxmIpv6Src {
+	obj := &NxmIpv6Src{
+		Oxm: NewOxm(75280),
+	}
+	return obj
+}
+func (self *NxmIpv6Src) GetOXMName() string {
+	return "ipv6_src"
+}
+
+func (self *NxmIpv6Src) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpv6Src) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmIpv6SrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmIpv6SrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmIpv6SrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmIpv6SrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmIpv6SrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmIpv6SrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeNxmIpv6SrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmIpv6SrcMasked, error) {
+	_nxmipv6srcmasked := &NxmIpv6SrcMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmIpv6SrcMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmipv6srcmasked.Value = net.IP(decoder.Read(16))
+	_nxmipv6srcmasked.ValueMask = net.IP(decoder.Read(16))
+	return _nxmipv6srcmasked, nil
+}
+
+func NewNxmIpv6SrcMasked() *NxmIpv6SrcMasked {
+	obj := &NxmIpv6SrcMasked{
+		Oxm: NewOxm(75552),
+	}
+	return obj
+}
+func (self *NxmIpv6SrcMasked) GetOXMName() string {
+	return "ipv6_src_masked"
+}
+
+func (self *NxmIpv6SrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmIpv6SrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmMplsTtl struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmMplsTtl interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmMplsTtl) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmMplsTtl) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmMplsTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmMplsTtl(parent *Oxm, decoder *goloxi.Decoder) (*NxmMplsTtl, error) {
+	_nxmmplsttl := &NxmMplsTtl{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmMplsTtl packet too short: %d < 1", decoder.Length())
+	}
+	_nxmmplsttl.Value = uint8(decoder.ReadByte())
+	return _nxmmplsttl, nil
+}
+
+func NewNxmMplsTtl() *NxmMplsTtl {
+	obj := &NxmMplsTtl{
+		Oxm: NewOxm(80897),
+	}
+	return obj
+}
+func (self *NxmMplsTtl) GetOXMName() string {
+	return "mpls_ttl"
+}
+
+func (self *NxmMplsTtl) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmMplsTtl) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmNdSll struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type INxmNdSll interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *NxmNdSll) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmNdSll) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmNdSll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmNdSll(parent *Oxm, decoder *goloxi.Decoder) (*NxmNdSll, error) {
+	_nxmndsll := &NxmNdSll{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("NxmNdSll packet too short: %d < 6", decoder.Length())
+	}
+	_nxmndsll.Value = net.HardwareAddr(decoder.Read(6))
+	return _nxmndsll, nil
+}
+
+func NewNxmNdSll() *NxmNdSll {
+	obj := &NxmNdSll{
+		Oxm: NewOxm(77830),
+	}
+	return obj
+}
+func (self *NxmNdSll) GetOXMName() string {
+	return "nd_sll"
+}
+
+func (self *NxmNdSll) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNdSll) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmNdSllMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type INxmNdSllMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *NxmNdSllMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmNdSllMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmNdSllMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *NxmNdSllMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *NxmNdSllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmNdSllMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmNdSllMasked, error) {
+	_nxmndsllmasked := &NxmNdSllMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("NxmNdSllMasked packet too short: %d < 12", decoder.Length())
+	}
+	_nxmndsllmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_nxmndsllmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _nxmndsllmasked, nil
+}
+
+func NewNxmNdSllMasked() *NxmNdSllMasked {
+	obj := &NxmNdSllMasked{
+		Oxm: NewOxm(78091),
+	}
+	return obj
+}
+func (self *NxmNdSllMasked) GetOXMName() string {
+	return "nd_sll_masked"
+}
+
+func (self *NxmNdSllMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNdSllMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmNdSllMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmNdTarget struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmNdTarget interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmNdTarget) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmNdTarget) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmNdTarget) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeNxmNdTarget(parent *Oxm, decoder *goloxi.Decoder) (*NxmNdTarget, error) {
+	_nxmndtarget := &NxmNdTarget{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmNdTarget packet too short: %d < 16", decoder.Length())
+	}
+	_nxmndtarget.Value = net.IP(decoder.Read(16))
+	return _nxmndtarget, nil
+}
+
+func NewNxmNdTarget() *NxmNdTarget {
+	obj := &NxmNdTarget{
+		Oxm: NewOxm(77328),
+	}
+	return obj
+}
+func (self *NxmNdTarget) GetOXMName() string {
+	return "nd_target"
+}
+
+func (self *NxmNdTarget) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNdTarget) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmNdTargetMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmNdTargetMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmNdTargetMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmNdTargetMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmNdTargetMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmNdTargetMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmNdTargetMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeNxmNdTargetMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmNdTargetMasked, error) {
+	_nxmndtargetmasked := &NxmNdTargetMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmNdTargetMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmndtargetmasked.Value = net.IP(decoder.Read(16))
+	_nxmndtargetmasked.ValueMask = net.IP(decoder.Read(16))
+	return _nxmndtargetmasked, nil
+}
+
+func NewNxmNdTargetMasked() *NxmNdTargetMasked {
+	obj := &NxmNdTargetMasked{
+		Oxm: NewOxm(77600),
+	}
+	return obj
+}
+func (self *NxmNdTargetMasked) GetOXMName() string {
+	return "nd_target_masked"
+}
+
+func (self *NxmNdTargetMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNdTargetMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmNdTargetMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmNdTll struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type INxmNdTll interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *NxmNdTll) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmNdTll) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmNdTll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmNdTll(parent *Oxm, decoder *goloxi.Decoder) (*NxmNdTll, error) {
+	_nxmndtll := &NxmNdTll{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("NxmNdTll packet too short: %d < 6", decoder.Length())
+	}
+	_nxmndtll.Value = net.HardwareAddr(decoder.Read(6))
+	return _nxmndtll, nil
+}
+
+func NewNxmNdTll() *NxmNdTll {
+	obj := &NxmNdTll{
+		Oxm: NewOxm(78342),
+	}
+	return obj
+}
+func (self *NxmNdTll) GetOXMName() string {
+	return "nd_tll"
+}
+
+func (self *NxmNdTll) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNdTll) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmNdTllMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type INxmNdTllMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *NxmNdTllMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *NxmNdTllMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *NxmNdTllMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *NxmNdTllMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *NxmNdTllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmNdTllMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmNdTllMasked, error) {
+	_nxmndtllmasked := &NxmNdTllMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("NxmNdTllMasked packet too short: %d < 12", decoder.Length())
+	}
+	_nxmndtllmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_nxmndtllmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _nxmndtllmasked, nil
+}
+
+func NewNxmNdTllMasked() *NxmNdTllMasked {
+	obj := &NxmNdTllMasked{
+		Oxm: NewOxm(78603),
+	}
+	return obj
+}
+func (self *NxmNdTllMasked) GetOXMName() string {
+	return "nd_tll_masked"
+}
+
+func (self *NxmNdTllMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNdTllMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmNdTllMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmNwEcn struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmNwEcn interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmNwEcn) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmNwEcn) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmNwEcn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmNwEcn(parent *Oxm, decoder *goloxi.Decoder) (*NxmNwEcn, error) {
+	_nxmnwecn := &NxmNwEcn{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmNwEcn packet too short: %d < 1", decoder.Length())
+	}
+	_nxmnwecn.Value = uint8(decoder.ReadByte())
+	return _nxmnwecn, nil
+}
+
+func NewNxmNwEcn() *NxmNwEcn {
+	obj := &NxmNwEcn{
+		Oxm: NewOxm(79873),
+	}
+	return obj
+}
+func (self *NxmNwEcn) GetOXMName() string {
+	return "nw_ecn"
+}
+
+func (self *NxmNwEcn) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNwEcn) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmNwProto struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmNwProto interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmNwProto) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmNwProto) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmNwProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmNwProto(parent *Oxm, decoder *goloxi.Decoder) (*NxmNwProto, error) {
+	_nxmnwproto := &NxmNwProto{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmNwProto packet too short: %d < 1", decoder.Length())
+	}
+	_nxmnwproto.Value = uint8(decoder.ReadByte())
+	return _nxmnwproto, nil
+}
+
+func NewNxmNwProto() *NxmNwProto {
+	obj := &NxmNwProto{
+		Oxm: NewOxm(3073),
+	}
+	return obj
+}
+func (self *NxmNwProto) GetOXMName() string {
+	return "nw_proto"
+}
+
+func (self *NxmNwProto) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNwProto) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmNwTos struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmNwTos interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmNwTos) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmNwTos) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmNwTos) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmNwTos(parent *Oxm, decoder *goloxi.Decoder) (*NxmNwTos, error) {
+	_nxmnwtos := &NxmNwTos{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmNwTos packet too short: %d < 1", decoder.Length())
+	}
+	_nxmnwtos.Value = uint8(decoder.ReadByte())
+	return _nxmnwtos, nil
+}
+
+func NewNxmNwTos() *NxmNwTos {
+	obj := &NxmNwTos{
+		Oxm: NewOxm(2561),
+	}
+	return obj
+}
+func (self *NxmNwTos) GetOXMName() string {
+	return "nw_tos"
+}
+
+func (self *NxmNwTos) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNwTos) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmNwTtl struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmNwTtl interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmNwTtl) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmNwTtl) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmNwTtl) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmNwTtl(parent *Oxm, decoder *goloxi.Decoder) (*NxmNwTtl, error) {
+	_nxmnwttl := &NxmNwTtl{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmNwTtl packet too short: %d < 1", decoder.Length())
+	}
+	_nxmnwttl.Value = uint8(decoder.ReadByte())
+	return _nxmnwttl, nil
+}
+
+func NewNxmNwTtl() *NxmNwTtl {
+	obj := &NxmNwTtl{
+		Oxm: NewOxm(80385),
+	}
+	return obj
+}
+func (self *NxmNwTtl) GetOXMName() string {
+	return "nw_ttl"
+}
+
+func (self *NxmNwTtl) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmNwTtl) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmPktMark struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmPktMark interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmPktMark) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmPktMark) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmPktMark) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmPktMark(parent *Oxm, decoder *goloxi.Decoder) (*NxmPktMark, error) {
+	_nxmpktmark := &NxmPktMark{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmPktMark packet too short: %d < 4", decoder.Length())
+	}
+	_nxmpktmark.Value = uint32(decoder.ReadUint32())
+	return _nxmpktmark, nil
+}
+
+func NewNxmPktMark() *NxmPktMark {
+	obj := &NxmPktMark{
+		Oxm: NewOxm(82436),
+	}
+	return obj
+}
+func (self *NxmPktMark) GetOXMName() string {
+	return "pkt_mark"
+}
+
+func (self *NxmPktMark) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmPktMark) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmPktMarkMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmPktMarkMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmPktMarkMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmPktMarkMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmPktMarkMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmPktMarkMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmPktMarkMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmPktMarkMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmPktMarkMasked, error) {
+	_nxmpktmarkmasked := &NxmPktMarkMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmPktMarkMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmpktmarkmasked.Value = uint32(decoder.ReadUint32())
+	_nxmpktmarkmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmpktmarkmasked, nil
+}
+
+func NewNxmPktMarkMasked() *NxmPktMarkMasked {
+	obj := &NxmPktMarkMasked{
+		Oxm: NewOxm(82696),
+	}
+	return obj
+}
+func (self *NxmPktMarkMasked) GetOXMName() string {
+	return "pkt_mark_masked"
+}
+
+func (self *NxmPktMarkMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmPktMarkMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmPktMarkMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmRecircId struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmRecircId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmRecircId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmRecircId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmRecircId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmRecircId(parent *Oxm, decoder *goloxi.Decoder) (*NxmRecircId, error) {
+	_nxmrecircid := &NxmRecircId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmRecircId packet too short: %d < 4", decoder.Length())
+	}
+	_nxmrecircid.Value = uint32(decoder.ReadUint32())
+	return _nxmrecircid, nil
+}
+
+func NewNxmRecircId() *NxmRecircId {
+	obj := &NxmRecircId{
+		Oxm: NewOxm(83972),
+	}
+	return obj
+}
+func (self *NxmRecircId) GetOXMName() string {
+	return "recirc_id"
+}
+
+func (self *NxmRecircId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmRecircId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg0 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg0 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg0) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg0) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg0(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg0, error) {
+	_nxmreg0 := &NxmReg0{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg0 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg0.Value = uint32(decoder.ReadUint32())
+	return _nxmreg0, nil
+}
+
+func NewNxmReg0() *NxmReg0 {
+	obj := &NxmReg0{
+		Oxm: NewOxm(65540),
+	}
+	return obj
+}
+func (self *NxmReg0) GetOXMName() string {
+	return "reg0"
+}
+
+func (self *NxmReg0) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg0) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg0Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg0Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg0Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg0Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg0Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg0Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg0Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg0Masked, error) {
+	_nxmreg0masked := &NxmReg0Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg0Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg0masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg0masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg0masked, nil
+}
+
+func NewNxmReg0Masked() *NxmReg0Masked {
+	obj := &NxmReg0Masked{
+		Oxm: NewOxm(65800),
+	}
+	return obj
+}
+func (self *NxmReg0Masked) GetOXMName() string {
+	return "reg0_masked"
+}
+
+func (self *NxmReg0Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg0Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg0Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg1 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg1 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg1) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg1) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg1(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg1, error) {
+	_nxmreg1 := &NxmReg1{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg1 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg1.Value = uint32(decoder.ReadUint32())
+	return _nxmreg1, nil
+}
+
+func NewNxmReg1() *NxmReg1 {
+	obj := &NxmReg1{
+		Oxm: NewOxm(66052),
+	}
+	return obj
+}
+func (self *NxmReg1) GetOXMName() string {
+	return "reg1"
+}
+
+func (self *NxmReg1) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg1) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg10 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg10 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg10) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg10) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg10) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg10(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg10, error) {
+	_nxmreg10 := &NxmReg10{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg10 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg10.Value = uint32(decoder.ReadUint32())
+	return _nxmreg10, nil
+}
+
+func NewNxmReg10() *NxmReg10 {
+	obj := &NxmReg10{
+		Oxm: NewOxm(70660),
+	}
+	return obj
+}
+func (self *NxmReg10) GetOXMName() string {
+	return "reg10"
+}
+
+func (self *NxmReg10) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg10) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg10Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg10Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg10Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg10Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg10Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg10Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg10Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg10Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg10Masked, error) {
+	_nxmreg10masked := &NxmReg10Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg10Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg10masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg10masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg10masked, nil
+}
+
+func NewNxmReg10Masked() *NxmReg10Masked {
+	obj := &NxmReg10Masked{
+		Oxm: NewOxm(70920),
+	}
+	return obj
+}
+func (self *NxmReg10Masked) GetOXMName() string {
+	return "reg10_masked"
+}
+
+func (self *NxmReg10Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg10Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg10Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg11 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg11 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg11) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg11) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg11) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg11(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg11, error) {
+	_nxmreg11 := &NxmReg11{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg11 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg11.Value = uint32(decoder.ReadUint32())
+	return _nxmreg11, nil
+}
+
+func NewNxmReg11() *NxmReg11 {
+	obj := &NxmReg11{
+		Oxm: NewOxm(71172),
+	}
+	return obj
+}
+func (self *NxmReg11) GetOXMName() string {
+	return "reg11"
+}
+
+func (self *NxmReg11) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg11) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg11Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg11Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg11Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg11Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg11Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg11Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg11Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg11Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg11Masked, error) {
+	_nxmreg11masked := &NxmReg11Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg11Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg11masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg11masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg11masked, nil
+}
+
+func NewNxmReg11Masked() *NxmReg11Masked {
+	obj := &NxmReg11Masked{
+		Oxm: NewOxm(71432),
+	}
+	return obj
+}
+func (self *NxmReg11Masked) GetOXMName() string {
+	return "reg11_masked"
+}
+
+func (self *NxmReg11Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg11Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg11Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg12 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg12 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg12) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg12) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg12) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg12(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg12, error) {
+	_nxmreg12 := &NxmReg12{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg12 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg12.Value = uint32(decoder.ReadUint32())
+	return _nxmreg12, nil
+}
+
+func NewNxmReg12() *NxmReg12 {
+	obj := &NxmReg12{
+		Oxm: NewOxm(71684),
+	}
+	return obj
+}
+func (self *NxmReg12) GetOXMName() string {
+	return "reg12"
+}
+
+func (self *NxmReg12) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg12) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg12Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg12Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg12Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg12Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg12Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg12Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg12Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg12Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg12Masked, error) {
+	_nxmreg12masked := &NxmReg12Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg12Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg12masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg12masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg12masked, nil
+}
+
+func NewNxmReg12Masked() *NxmReg12Masked {
+	obj := &NxmReg12Masked{
+		Oxm: NewOxm(71944),
+	}
+	return obj
+}
+func (self *NxmReg12Masked) GetOXMName() string {
+	return "reg12_masked"
+}
+
+func (self *NxmReg12Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg12Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg12Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg13 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg13 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg13) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg13) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg13) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg13(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg13, error) {
+	_nxmreg13 := &NxmReg13{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg13 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg13.Value = uint32(decoder.ReadUint32())
+	return _nxmreg13, nil
+}
+
+func NewNxmReg13() *NxmReg13 {
+	obj := &NxmReg13{
+		Oxm: NewOxm(72196),
+	}
+	return obj
+}
+func (self *NxmReg13) GetOXMName() string {
+	return "reg13"
+}
+
+func (self *NxmReg13) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg13) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg13Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg13Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg13Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg13Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg13Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg13Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg13Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg13Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg13Masked, error) {
+	_nxmreg13masked := &NxmReg13Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg13Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg13masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg13masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg13masked, nil
+}
+
+func NewNxmReg13Masked() *NxmReg13Masked {
+	obj := &NxmReg13Masked{
+		Oxm: NewOxm(72456),
+	}
+	return obj
+}
+func (self *NxmReg13Masked) GetOXMName() string {
+	return "reg13_masked"
+}
+
+func (self *NxmReg13Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg13Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg13Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg14 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg14 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg14) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg14) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg14) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg14(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg14, error) {
+	_nxmreg14 := &NxmReg14{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg14 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg14.Value = uint32(decoder.ReadUint32())
+	return _nxmreg14, nil
+}
+
+func NewNxmReg14() *NxmReg14 {
+	obj := &NxmReg14{
+		Oxm: NewOxm(72708),
+	}
+	return obj
+}
+func (self *NxmReg14) GetOXMName() string {
+	return "reg14"
+}
+
+func (self *NxmReg14) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg14) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg14Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg14Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg14Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg14Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg14Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg14Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg14Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg14Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg14Masked, error) {
+	_nxmreg14masked := &NxmReg14Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg14Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg14masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg14masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg14masked, nil
+}
+
+func NewNxmReg14Masked() *NxmReg14Masked {
+	obj := &NxmReg14Masked{
+		Oxm: NewOxm(72968),
+	}
+	return obj
+}
+func (self *NxmReg14Masked) GetOXMName() string {
+	return "reg14_masked"
+}
+
+func (self *NxmReg14Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg14Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg14Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg15 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg15 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg15) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg15) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg15) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg15(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg15, error) {
+	_nxmreg15 := &NxmReg15{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg15 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg15.Value = uint32(decoder.ReadUint32())
+	return _nxmreg15, nil
+}
+
+func NewNxmReg15() *NxmReg15 {
+	obj := &NxmReg15{
+		Oxm: NewOxm(73220),
+	}
+	return obj
+}
+func (self *NxmReg15) GetOXMName() string {
+	return "reg15"
+}
+
+func (self *NxmReg15) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg15) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg15Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg15Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg15Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg15Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg15Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg15Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg15Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg15Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg15Masked, error) {
+	_nxmreg15masked := &NxmReg15Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg15Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg15masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg15masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg15masked, nil
+}
+
+func NewNxmReg15Masked() *NxmReg15Masked {
+	obj := &NxmReg15Masked{
+		Oxm: NewOxm(73480),
+	}
+	return obj
+}
+func (self *NxmReg15Masked) GetOXMName() string {
+	return "reg15_masked"
+}
+
+func (self *NxmReg15Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg15Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg15Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg1Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg1Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg1Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg1Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg1Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg1Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg1Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg1Masked, error) {
+	_nxmreg1masked := &NxmReg1Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg1Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg1masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg1masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg1masked, nil
+}
+
+func NewNxmReg1Masked() *NxmReg1Masked {
+	obj := &NxmReg1Masked{
+		Oxm: NewOxm(66312),
+	}
+	return obj
+}
+func (self *NxmReg1Masked) GetOXMName() string {
+	return "reg1_masked"
+}
+
+func (self *NxmReg1Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg1Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg1Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg2 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg2 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg2) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg2) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg2(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg2, error) {
+	_nxmreg2 := &NxmReg2{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg2 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg2.Value = uint32(decoder.ReadUint32())
+	return _nxmreg2, nil
+}
+
+func NewNxmReg2() *NxmReg2 {
+	obj := &NxmReg2{
+		Oxm: NewOxm(66564),
+	}
+	return obj
+}
+func (self *NxmReg2) GetOXMName() string {
+	return "reg2"
+}
+
+func (self *NxmReg2) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg2) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg2Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg2Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg2Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg2Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg2Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg2Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg2Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg2Masked, error) {
+	_nxmreg2masked := &NxmReg2Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg2Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg2masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg2masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg2masked, nil
+}
+
+func NewNxmReg2Masked() *NxmReg2Masked {
+	obj := &NxmReg2Masked{
+		Oxm: NewOxm(66824),
+	}
+	return obj
+}
+func (self *NxmReg2Masked) GetOXMName() string {
+	return "reg2_masked"
+}
+
+func (self *NxmReg2Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg2Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg2Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg3 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg3 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg3) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg3) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg3(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg3, error) {
+	_nxmreg3 := &NxmReg3{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg3 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg3.Value = uint32(decoder.ReadUint32())
+	return _nxmreg3, nil
+}
+
+func NewNxmReg3() *NxmReg3 {
+	obj := &NxmReg3{
+		Oxm: NewOxm(67076),
+	}
+	return obj
+}
+func (self *NxmReg3) GetOXMName() string {
+	return "reg3"
+}
+
+func (self *NxmReg3) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg3) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg3Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg3Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg3Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg3Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg3Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg3Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg3Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg3Masked, error) {
+	_nxmreg3masked := &NxmReg3Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg3Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg3masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg3masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg3masked, nil
+}
+
+func NewNxmReg3Masked() *NxmReg3Masked {
+	obj := &NxmReg3Masked{
+		Oxm: NewOxm(67336),
+	}
+	return obj
+}
+func (self *NxmReg3Masked) GetOXMName() string {
+	return "reg3_masked"
+}
+
+func (self *NxmReg3Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg3Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg3Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg4 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg4 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg4) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg4) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg4(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg4, error) {
+	_nxmreg4 := &NxmReg4{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg4 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg4.Value = uint32(decoder.ReadUint32())
+	return _nxmreg4, nil
+}
+
+func NewNxmReg4() *NxmReg4 {
+	obj := &NxmReg4{
+		Oxm: NewOxm(67588),
+	}
+	return obj
+}
+func (self *NxmReg4) GetOXMName() string {
+	return "reg4"
+}
+
+func (self *NxmReg4) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg4) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg4Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg4Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg4Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg4Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg4Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg4Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg4Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg4Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg4Masked, error) {
+	_nxmreg4masked := &NxmReg4Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg4Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg4masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg4masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg4masked, nil
+}
+
+func NewNxmReg4Masked() *NxmReg4Masked {
+	obj := &NxmReg4Masked{
+		Oxm: NewOxm(67848),
+	}
+	return obj
+}
+func (self *NxmReg4Masked) GetOXMName() string {
+	return "reg4_masked"
+}
+
+func (self *NxmReg4Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg4Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg4Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg5 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg5 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg5) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg5) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg5) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg5(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg5, error) {
+	_nxmreg5 := &NxmReg5{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg5 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg5.Value = uint32(decoder.ReadUint32())
+	return _nxmreg5, nil
+}
+
+func NewNxmReg5() *NxmReg5 {
+	obj := &NxmReg5{
+		Oxm: NewOxm(68100),
+	}
+	return obj
+}
+func (self *NxmReg5) GetOXMName() string {
+	return "reg5"
+}
+
+func (self *NxmReg5) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg5) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg5Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg5Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg5Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg5Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg5Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg5Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg5Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg5Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg5Masked, error) {
+	_nxmreg5masked := &NxmReg5Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg5Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg5masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg5masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg5masked, nil
+}
+
+func NewNxmReg5Masked() *NxmReg5Masked {
+	obj := &NxmReg5Masked{
+		Oxm: NewOxm(68360),
+	}
+	return obj
+}
+func (self *NxmReg5Masked) GetOXMName() string {
+	return "reg5_masked"
+}
+
+func (self *NxmReg5Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg5Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg5Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg6 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg6 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg6) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg6) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg6) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg6(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg6, error) {
+	_nxmreg6 := &NxmReg6{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg6 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg6.Value = uint32(decoder.ReadUint32())
+	return _nxmreg6, nil
+}
+
+func NewNxmReg6() *NxmReg6 {
+	obj := &NxmReg6{
+		Oxm: NewOxm(68612),
+	}
+	return obj
+}
+func (self *NxmReg6) GetOXMName() string {
+	return "reg6"
+}
+
+func (self *NxmReg6) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg6) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg6Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg6Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg6Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg6Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg6Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg6Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg6Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg6Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg6Masked, error) {
+	_nxmreg6masked := &NxmReg6Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg6Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg6masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg6masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg6masked, nil
+}
+
+func NewNxmReg6Masked() *NxmReg6Masked {
+	obj := &NxmReg6Masked{
+		Oxm: NewOxm(68872),
+	}
+	return obj
+}
+func (self *NxmReg6Masked) GetOXMName() string {
+	return "reg6_masked"
+}
+
+func (self *NxmReg6Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg6Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg6Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg7 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg7 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg7) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg7) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg7) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg7(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg7, error) {
+	_nxmreg7 := &NxmReg7{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg7 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg7.Value = uint32(decoder.ReadUint32())
+	return _nxmreg7, nil
+}
+
+func NewNxmReg7() *NxmReg7 {
+	obj := &NxmReg7{
+		Oxm: NewOxm(69124),
+	}
+	return obj
+}
+func (self *NxmReg7) GetOXMName() string {
+	return "reg7"
+}
+
+func (self *NxmReg7) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg7) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg7Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg7Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg7Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg7Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg7Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg7Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg7Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg7Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg7Masked, error) {
+	_nxmreg7masked := &NxmReg7Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg7Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg7masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg7masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg7masked, nil
+}
+
+func NewNxmReg7Masked() *NxmReg7Masked {
+	obj := &NxmReg7Masked{
+		Oxm: NewOxm(69384),
+	}
+	return obj
+}
+func (self *NxmReg7Masked) GetOXMName() string {
+	return "reg7_masked"
+}
+
+func (self *NxmReg7Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg7Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg7Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg8 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg8 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg8) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg8) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg8) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg8(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg8, error) {
+	_nxmreg8 := &NxmReg8{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg8 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg8.Value = uint32(decoder.ReadUint32())
+	return _nxmreg8, nil
+}
+
+func NewNxmReg8() *NxmReg8 {
+	obj := &NxmReg8{
+		Oxm: NewOxm(69636),
+	}
+	return obj
+}
+func (self *NxmReg8) GetOXMName() string {
+	return "reg8"
+}
+
+func (self *NxmReg8) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg8) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg8Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg8Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg8Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg8Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg8Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg8Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg8Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg8Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg8Masked, error) {
+	_nxmreg8masked := &NxmReg8Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg8Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg8masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg8masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg8masked, nil
+}
+
+func NewNxmReg8Masked() *NxmReg8Masked {
+	obj := &NxmReg8Masked{
+		Oxm: NewOxm(69896),
+	}
+	return obj
+}
+func (self *NxmReg8Masked) GetOXMName() string {
+	return "reg8_masked"
+}
+
+func (self *NxmReg8Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg8Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg8Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmReg9 struct {
+	*Oxm
+	Value uint32
+}
+
+type INxmReg9 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *NxmReg9) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg9) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg9) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeNxmReg9(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg9, error) {
+	_nxmreg9 := &NxmReg9{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmReg9 packet too short: %d < 4", decoder.Length())
+	}
+	_nxmreg9.Value = uint32(decoder.ReadUint32())
+	return _nxmreg9, nil
+}
+
+func NewNxmReg9() *NxmReg9 {
+	obj := &NxmReg9{
+		Oxm: NewOxm(70148),
+	}
+	return obj
+}
+func (self *NxmReg9) GetOXMName() string {
+	return "reg9"
+}
+
+func (self *NxmReg9) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg9) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmReg9Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type INxmReg9Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *NxmReg9Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *NxmReg9Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *NxmReg9Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *NxmReg9Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *NxmReg9Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmReg9Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmReg9Masked, error) {
+	_nxmreg9masked := &NxmReg9Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmReg9Masked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmreg9masked.Value = uint32(decoder.ReadUint32())
+	_nxmreg9masked.ValueMask = uint32(decoder.ReadUint32())
+	return _nxmreg9masked, nil
+}
+
+func NewNxmReg9Masked() *NxmReg9Masked {
+	obj := &NxmReg9Masked{
+		Oxm: NewOxm(70408),
+	}
+	return obj
+}
+func (self *NxmReg9Masked) GetOXMName() string {
+	return "reg9_masked"
+}
+
+func (self *NxmReg9Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmReg9Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmReg9Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTcpDst struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmTcpDst interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmTcpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTcpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTcpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmTcpDst(parent *Oxm, decoder *goloxi.Decoder) (*NxmTcpDst, error) {
+	_nxmtcpdst := &NxmTcpDst{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmTcpDst packet too short: %d < 2", decoder.Length())
+	}
+	_nxmtcpdst.Value = uint16(decoder.ReadUint16())
+	return _nxmtcpdst, nil
+}
+
+func NewNxmTcpDst() *NxmTcpDst {
+	obj := &NxmTcpDst{
+		Oxm: NewOxm(5122),
+	}
+	return obj
+}
+func (self *NxmTcpDst) GetOXMName() string {
+	return "tcp_dst"
+}
+
+func (self *NxmTcpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTcpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTcpDstMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmTcpDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmTcpDstMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTcpDstMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTcpDstMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmTcpDstMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmTcpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmTcpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTcpDstMasked, error) {
+	_nxmtcpdstmasked := &NxmTcpDstMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmTcpDstMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmtcpdstmasked.Value = uint16(decoder.ReadUint16())
+	_nxmtcpdstmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmtcpdstmasked, nil
+}
+
+func NewNxmTcpDstMasked() *NxmTcpDstMasked {
+	obj := &NxmTcpDstMasked{
+		Oxm: NewOxm(5378),
+	}
+	return obj
+}
+func (self *NxmTcpDstMasked) GetOXMName() string {
+	return "tcp_dst_masked"
+}
+
+func (self *NxmTcpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTcpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTcpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTcpFlags struct {
+	*Oxm
+	Value TcpFlags
+}
+
+type INxmTcpFlags interface {
+	goloxi.IOxm
+	GetValue() TcpFlags
+}
+
+func (self *NxmTcpFlags) GetValue() TcpFlags {
+	return self.Value
+}
+
+func (self *NxmTcpFlags) SetValue(v TcpFlags) {
+	self.Value = v
+}
+
+func (self *NxmTcpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmTcpFlags(parent *Oxm, decoder *goloxi.Decoder) (*NxmTcpFlags, error) {
+	_nxmtcpflags := &NxmTcpFlags{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmTcpFlags packet too short: %d < 2", decoder.Length())
+	}
+	_nxmtcpflags.Value = TcpFlags(decoder.ReadUint16())
+	return _nxmtcpflags, nil
+}
+
+func NewNxmTcpFlags() *NxmTcpFlags {
+	obj := &NxmTcpFlags{
+		Oxm: NewOxm(82946),
+	}
+	return obj
+}
+func (self *NxmTcpFlags) GetOXMName() string {
+	return "tcp_flags"
+}
+
+func (self *NxmTcpFlags) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTcpFlags) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTcpFlagsMasked struct {
+	*Oxm
+	Value     TcpFlags
+	ValueMask uint16
+}
+
+type INxmTcpFlagsMasked interface {
+	goloxi.IOxm
+	GetValue() TcpFlags
+	GetValueMask() uint16
+}
+
+func (self *NxmTcpFlagsMasked) GetValue() TcpFlags {
+	return self.Value
+}
+
+func (self *NxmTcpFlagsMasked) SetValue(v TcpFlags) {
+	self.Value = v
+}
+
+func (self *NxmTcpFlagsMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmTcpFlagsMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmTcpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmTcpFlagsMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTcpFlagsMasked, error) {
+	_nxmtcpflagsmasked := &NxmTcpFlagsMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmTcpFlagsMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmtcpflagsmasked.Value = TcpFlags(decoder.ReadUint16())
+	_nxmtcpflagsmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmtcpflagsmasked, nil
+}
+
+func NewNxmTcpFlagsMasked() *NxmTcpFlagsMasked {
+	obj := &NxmTcpFlagsMasked{
+		Oxm: NewOxm(83204),
+	}
+	return obj
+}
+func (self *NxmTcpFlagsMasked) GetOXMName() string {
+	return "tcp_flags_masked"
+}
+
+func (self *NxmTcpFlagsMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTcpFlagsMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTcpFlagsMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTcpSrc struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmTcpSrc interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmTcpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTcpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTcpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmTcpSrc(parent *Oxm, decoder *goloxi.Decoder) (*NxmTcpSrc, error) {
+	_nxmtcpsrc := &NxmTcpSrc{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmTcpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_nxmtcpsrc.Value = uint16(decoder.ReadUint16())
+	return _nxmtcpsrc, nil
+}
+
+func NewNxmTcpSrc() *NxmTcpSrc {
+	obj := &NxmTcpSrc{
+		Oxm: NewOxm(4610),
+	}
+	return obj
+}
+func (self *NxmTcpSrc) GetOXMName() string {
+	return "tcp_src"
+}
+
+func (self *NxmTcpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTcpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTcpSrcMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmTcpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmTcpSrcMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTcpSrcMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTcpSrcMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmTcpSrcMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmTcpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmTcpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTcpSrcMasked, error) {
+	_nxmtcpsrcmasked := &NxmTcpSrcMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmTcpSrcMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmtcpsrcmasked.Value = uint16(decoder.ReadUint16())
+	_nxmtcpsrcmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmtcpsrcmasked, nil
+}
+
+func NewNxmTcpSrcMasked() *NxmTcpSrcMasked {
+	obj := &NxmTcpSrcMasked{
+		Oxm: NewOxm(4868),
+	}
+	return obj
+}
+func (self *NxmTcpSrcMasked) GetOXMName() string {
+	return "tcp_src_masked"
+}
+
+func (self *NxmTcpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTcpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTcpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunDst struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmTunDst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmTunDst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunDst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmTunDst(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunDst, error) {
+	_nxmtundst := &NxmTunDst{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmTunDst packet too short: %d < 4", decoder.Length())
+	}
+	_nxmtundst.Value = net.IP(decoder.Read(4))
+	return _nxmtundst, nil
+}
+
+func NewNxmTunDst() *NxmTunDst {
+	obj := &NxmTunDst{
+		Oxm: NewOxm(81924),
+	}
+	return obj
+}
+func (self *NxmTunDst) GetOXMName() string {
+	return "tun_dst"
+}
+
+func (self *NxmTunDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunDstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmTunDstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmTunDstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunDstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunDstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmTunDstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmTunDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunDstMasked, error) {
+	_nxmtundstmasked := &NxmTunDstMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmTunDstMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmtundstmasked.Value = net.IP(decoder.Read(4))
+	_nxmtundstmasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmtundstmasked, nil
+}
+
+func NewNxmTunDstMasked() *NxmTunDstMasked {
+	obj := &NxmTunDstMasked{
+		Oxm: NewOxm(82184),
+	}
+	return obj
+}
+func (self *NxmTunDstMasked) GetOXMName() string {
+	return "tun_dst_masked"
+}
+
+func (self *NxmTunDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunFlags struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmTunFlags interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmTunFlags) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTunFlags) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTunFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmTunFlags(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunFlags, error) {
+	_nxmtunflags := &NxmTunFlags{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmTunFlags packet too short: %d < 2", decoder.Length())
+	}
+	_nxmtunflags.Value = uint16(decoder.ReadUint16())
+	return _nxmtunflags, nil
+}
+
+func NewNxmTunFlags() *NxmTunFlags {
+	obj := &NxmTunFlags{
+		Oxm: NewOxm(118786),
+	}
+	return obj
+}
+func (self *NxmTunFlags) GetOXMName() string {
+	return "tun_flags"
+}
+
+func (self *NxmTunFlags) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunFlags) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunFlagsMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmTunFlagsMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmTunFlagsMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTunFlagsMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTunFlagsMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmTunFlagsMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmTunFlagsMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunFlagsMasked, error) {
+	_nxmtunflagsmasked := &NxmTunFlagsMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmTunFlagsMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmtunflagsmasked.Value = uint16(decoder.ReadUint16())
+	_nxmtunflagsmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmtunflagsmasked, nil
+}
+
+func NewNxmTunFlagsMasked() *NxmTunFlagsMasked {
+	obj := &NxmTunFlagsMasked{
+		Oxm: NewOxm(119044),
+	}
+	return obj
+}
+func (self *NxmTunFlagsMasked) GetOXMName() string {
+	return "tun_flags_masked"
+}
+
+func (self *NxmTunFlagsMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunFlagsMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunFlagsMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunGbpFlags struct {
+	*Oxm
+	Value uint8
+}
+
+type INxmTunGbpFlags interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *NxmTunGbpFlags) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmTunGbpFlags) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmTunGbpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeNxmTunGbpFlags(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunGbpFlags, error) {
+	_nxmtungbpflags := &NxmTunGbpFlags{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("NxmTunGbpFlags packet too short: %d < 1", decoder.Length())
+	}
+	_nxmtungbpflags.Value = uint8(decoder.ReadByte())
+	return _nxmtungbpflags, nil
+}
+
+func NewNxmTunGbpFlags() *NxmTunGbpFlags {
+	obj := &NxmTunGbpFlags{
+		Oxm: NewOxm(85505),
+	}
+	return obj
+}
+func (self *NxmTunGbpFlags) GetOXMName() string {
+	return "tun_gbp_flags"
+}
+
+func (self *NxmTunGbpFlags) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunGbpFlags) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunGbpFlagsMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type INxmTunGbpFlagsMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *NxmTunGbpFlagsMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *NxmTunGbpFlagsMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *NxmTunGbpFlagsMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *NxmTunGbpFlagsMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunGbpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmTunGbpFlagsMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunGbpFlagsMasked, error) {
+	_nxmtungbpflagsmasked := &NxmTunGbpFlagsMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmTunGbpFlagsMasked packet too short: %d < 2", decoder.Length())
+	}
+	_nxmtungbpflagsmasked.Value = uint8(decoder.ReadByte())
+	_nxmtungbpflagsmasked.ValueMask = uint8(decoder.ReadByte())
+	return _nxmtungbpflagsmasked, nil
+}
+
+func NewNxmTunGbpFlagsMasked() *NxmTunGbpFlagsMasked {
+	obj := &NxmTunGbpFlagsMasked{
+		Oxm: NewOxm(85762),
+	}
+	return obj
+}
+func (self *NxmTunGbpFlagsMasked) GetOXMName() string {
+	return "tun_gbp_flags_masked"
+}
+
+func (self *NxmTunGbpFlagsMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunGbpFlagsMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunGbpFlagsMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunGbpId struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmTunGbpId interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmTunGbpId) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTunGbpId) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTunGbpId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmTunGbpId(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunGbpId, error) {
+	_nxmtungbpid := &NxmTunGbpId{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmTunGbpId packet too short: %d < 2", decoder.Length())
+	}
+	_nxmtungbpid.Value = uint16(decoder.ReadUint16())
+	return _nxmtungbpid, nil
+}
+
+func NewNxmTunGbpId() *NxmTunGbpId {
+	obj := &NxmTunGbpId{
+		Oxm: NewOxm(84994),
+	}
+	return obj
+}
+func (self *NxmTunGbpId) GetOXMName() string {
+	return "tun_gbp_id"
+}
+
+func (self *NxmTunGbpId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunGbpId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunGbpIdMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmTunGbpIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmTunGbpIdMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmTunGbpIdMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmTunGbpIdMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmTunGbpIdMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunGbpIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmTunGbpIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunGbpIdMasked, error) {
+	_nxmtungbpidmasked := &NxmTunGbpIdMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmTunGbpIdMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmtungbpidmasked.Value = uint16(decoder.ReadUint16())
+	_nxmtungbpidmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmtungbpidmasked, nil
+}
+
+func NewNxmTunGbpIdMasked() *NxmTunGbpIdMasked {
+	obj := &NxmTunGbpIdMasked{
+		Oxm: NewOxm(85252),
+	}
+	return obj
+}
+func (self *NxmTunGbpIdMasked) GetOXMName() string {
+	return "tun_gbp_id_masked"
+}
+
+func (self *NxmTunGbpIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunGbpIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunGbpIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunId struct {
+	*Oxm
+	Value uint64
+}
+
+type INxmTunId interface {
+	goloxi.IOxm
+	GetValue() uint64
+}
+
+func (self *NxmTunId) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *NxmTunId) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *NxmTunId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	return nil
+}
+
+func DecodeNxmTunId(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunId, error) {
+	_nxmtunid := &NxmTunId{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmTunId packet too short: %d < 8", decoder.Length())
+	}
+	_nxmtunid.Value = uint64(decoder.ReadUint64())
+	return _nxmtunid, nil
+}
+
+func NewNxmTunId() *NxmTunId {
+	obj := &NxmTunId{
+		Oxm: NewOxm(73736),
+	}
+	return obj
+}
+func (self *NxmTunId) GetOXMName() string {
+	return "tun_id"
+}
+
+func (self *NxmTunId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunIdMasked struct {
+	*Oxm
+	Value     uint64
+	ValueMask uint64
+}
+
+type INxmTunIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint64
+	GetValueMask() uint64
+}
+
+func (self *NxmTunIdMasked) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *NxmTunIdMasked) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *NxmTunIdMasked) GetValueMask() uint64 {
+	return self.ValueMask
+}
+
+func (self *NxmTunIdMasked) SetValueMask(v uint64) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+	encoder.PutUint64(uint64(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmTunIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunIdMasked, error) {
+	_nxmtunidmasked := &NxmTunIdMasked{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmTunIdMasked packet too short: %d < 16", decoder.Length())
+	}
+	_nxmtunidmasked.Value = uint64(decoder.ReadUint64())
+	_nxmtunidmasked.ValueMask = uint64(decoder.ReadUint64())
+	return _nxmtunidmasked, nil
+}
+
+func NewNxmTunIdMasked() *NxmTunIdMasked {
+	obj := &NxmTunIdMasked{
+		Oxm: NewOxm(74000),
+	}
+	return obj
+}
+func (self *NxmTunIdMasked) GetOXMName() string {
+	return "tun_id_masked"
+}
+
+func (self *NxmTunIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunIpv6Dst struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmTunIpv6Dst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmTunIpv6Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunIpv6Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeNxmTunIpv6Dst(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunIpv6Dst, error) {
+	_nxmtunipv6dst := &NxmTunIpv6Dst{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmTunIpv6Dst packet too short: %d < 16", decoder.Length())
+	}
+	_nxmtunipv6dst.Value = net.IP(decoder.Read(16))
+	return _nxmtunipv6dst, nil
+}
+
+func NewNxmTunIpv6Dst() *NxmTunIpv6Dst {
+	obj := &NxmTunIpv6Dst{
+		Oxm: NewOxm(121872),
+	}
+	return obj
+}
+func (self *NxmTunIpv6Dst) GetOXMName() string {
+	return "tun_ipv6_dst"
+}
+
+func (self *NxmTunIpv6Dst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunIpv6Dst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunIpv6DstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmTunIpv6DstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmTunIpv6DstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunIpv6DstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunIpv6DstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmTunIpv6DstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeNxmTunIpv6DstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunIpv6DstMasked, error) {
+	_nxmtunipv6dstmasked := &NxmTunIpv6DstMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmTunIpv6DstMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmtunipv6dstmasked.Value = net.IP(decoder.Read(16))
+	_nxmtunipv6dstmasked.ValueMask = net.IP(decoder.Read(16))
+	return _nxmtunipv6dstmasked, nil
+}
+
+func NewNxmTunIpv6DstMasked() *NxmTunIpv6DstMasked {
+	obj := &NxmTunIpv6DstMasked{
+		Oxm: NewOxm(122144),
+	}
+	return obj
+}
+func (self *NxmTunIpv6DstMasked) GetOXMName() string {
+	return "tun_ipv6_dst_masked"
+}
+
+func (self *NxmTunIpv6DstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunIpv6DstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunIpv6Src struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmTunIpv6Src interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmTunIpv6Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunIpv6Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeNxmTunIpv6Src(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunIpv6Src, error) {
+	_nxmtunipv6src := &NxmTunIpv6Src{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmTunIpv6Src packet too short: %d < 16", decoder.Length())
+	}
+	_nxmtunipv6src.Value = net.IP(decoder.Read(16))
+	return _nxmtunipv6src, nil
+}
+
+func NewNxmTunIpv6Src() *NxmTunIpv6Src {
+	obj := &NxmTunIpv6Src{
+		Oxm: NewOxm(121360),
+	}
+	return obj
+}
+func (self *NxmTunIpv6Src) GetOXMName() string {
+	return "tun_ipv6_src"
+}
+
+func (self *NxmTunIpv6Src) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunIpv6Src) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunIpv6SrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmTunIpv6SrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmTunIpv6SrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunIpv6SrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunIpv6SrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmTunIpv6SrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeNxmTunIpv6SrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunIpv6SrcMasked, error) {
+	_nxmtunipv6srcmasked := &NxmTunIpv6SrcMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmTunIpv6SrcMasked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmtunipv6srcmasked.Value = net.IP(decoder.Read(16))
+	_nxmtunipv6srcmasked.ValueMask = net.IP(decoder.Read(16))
+	return _nxmtunipv6srcmasked, nil
+}
+
+func NewNxmTunIpv6SrcMasked() *NxmTunIpv6SrcMasked {
+	obj := &NxmTunIpv6SrcMasked{
+		Oxm: NewOxm(121632),
+	}
+	return obj
+}
+func (self *NxmTunIpv6SrcMasked) GetOXMName() string {
+	return "tun_ipv6_src_masked"
+}
+
+func (self *NxmTunIpv6SrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunIpv6SrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata0 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata0 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata0) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata0) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata0(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata0, error) {
+	_nxmtunmetadata0 := &NxmTunMetadata0{Oxm: parent}
+	_nxmtunmetadata0.Value = decoder.Read(int(_nxmtunmetadata0.TypeLen & 0xFF))
+	return _nxmtunmetadata0, nil
+}
+
+func NewNxmTunMetadata0() *NxmTunMetadata0 {
+	obj := &NxmTunMetadata0{
+		Oxm: NewOxm(86140),
+	}
+	return obj
+}
+func (self *NxmTunMetadata0) GetOXMName() string {
+	return "tun_metadata0"
+}
+
+func (self *NxmTunMetadata0) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata0) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata0Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata0Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata0Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata0Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata0Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata0Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata0Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata0Masked, error) {
+	_nxmtunmetadata0masked := &NxmTunMetadata0Masked{Oxm: parent}
+	_nxmtunmetadata0masked.Value = decoder.Read(int(_nxmtunmetadata0masked.TypeLen & 0xFF))
+	_nxmtunmetadata0masked.ValueMask = decoder.Read(int(_nxmtunmetadata0masked.TypeLen & 0xFF))
+	return _nxmtunmetadata0masked, nil
+}
+
+func NewNxmTunMetadata0Masked() *NxmTunMetadata0Masked {
+	obj := &NxmTunMetadata0Masked{
+		Oxm: NewOxm(86520),
+	}
+	return obj
+}
+func (self *NxmTunMetadata0Masked) GetOXMName() string {
+	return "tun_metadata0_masked"
+}
+
+func (self *NxmTunMetadata0Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata0Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata0Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata1 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata1 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata1) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata1) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata1(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata1, error) {
+	_nxmtunmetadata1 := &NxmTunMetadata1{Oxm: parent}
+	_nxmtunmetadata1.Value = decoder.Read(int(_nxmtunmetadata1.TypeLen & 0xFF))
+	return _nxmtunmetadata1, nil
+}
+
+func NewNxmTunMetadata1() *NxmTunMetadata1 {
+	obj := &NxmTunMetadata1{
+		Oxm: NewOxm(86652),
+	}
+	return obj
+}
+func (self *NxmTunMetadata1) GetOXMName() string {
+	return "tun_metadata1"
+}
+
+func (self *NxmTunMetadata1) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata1) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata10 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata10 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata10) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata10) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata10) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata10(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata10, error) {
+	_nxmtunmetadata10 := &NxmTunMetadata10{Oxm: parent}
+	_nxmtunmetadata10.Value = decoder.Read(int(_nxmtunmetadata10.TypeLen & 0xFF))
+	return _nxmtunmetadata10, nil
+}
+
+func NewNxmTunMetadata10() *NxmTunMetadata10 {
+	obj := &NxmTunMetadata10{
+		Oxm: NewOxm(91260),
+	}
+	return obj
+}
+func (self *NxmTunMetadata10) GetOXMName() string {
+	return "tun_metadata10"
+}
+
+func (self *NxmTunMetadata10) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata10) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata10Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata10Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata10Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata10Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata10Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata10Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata10Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata10Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata10Masked, error) {
+	_nxmtunmetadata10masked := &NxmTunMetadata10Masked{Oxm: parent}
+	_nxmtunmetadata10masked.Value = decoder.Read(int(_nxmtunmetadata10masked.TypeLen & 0xFF))
+	_nxmtunmetadata10masked.ValueMask = decoder.Read(int(_nxmtunmetadata10masked.TypeLen & 0xFF))
+	return _nxmtunmetadata10masked, nil
+}
+
+func NewNxmTunMetadata10Masked() *NxmTunMetadata10Masked {
+	obj := &NxmTunMetadata10Masked{
+		Oxm: NewOxm(91640),
+	}
+	return obj
+}
+func (self *NxmTunMetadata10Masked) GetOXMName() string {
+	return "tun_metadata10_masked"
+}
+
+func (self *NxmTunMetadata10Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata10Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata10Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata11 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata11 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata11) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata11) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata11) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata11(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata11, error) {
+	_nxmtunmetadata11 := &NxmTunMetadata11{Oxm: parent}
+	_nxmtunmetadata11.Value = decoder.Read(int(_nxmtunmetadata11.TypeLen & 0xFF))
+	return _nxmtunmetadata11, nil
+}
+
+func NewNxmTunMetadata11() *NxmTunMetadata11 {
+	obj := &NxmTunMetadata11{
+		Oxm: NewOxm(91772),
+	}
+	return obj
+}
+func (self *NxmTunMetadata11) GetOXMName() string {
+	return "tun_metadata11"
+}
+
+func (self *NxmTunMetadata11) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata11) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata11Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata11Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata11Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata11Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata11Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata11Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata11Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata11Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata11Masked, error) {
+	_nxmtunmetadata11masked := &NxmTunMetadata11Masked{Oxm: parent}
+	_nxmtunmetadata11masked.Value = decoder.Read(int(_nxmtunmetadata11masked.TypeLen & 0xFF))
+	_nxmtunmetadata11masked.ValueMask = decoder.Read(int(_nxmtunmetadata11masked.TypeLen & 0xFF))
+	return _nxmtunmetadata11masked, nil
+}
+
+func NewNxmTunMetadata11Masked() *NxmTunMetadata11Masked {
+	obj := &NxmTunMetadata11Masked{
+		Oxm: NewOxm(92152),
+	}
+	return obj
+}
+func (self *NxmTunMetadata11Masked) GetOXMName() string {
+	return "tun_metadata11_masked"
+}
+
+func (self *NxmTunMetadata11Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata11Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata11Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata12 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata12 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata12) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata12) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata12) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata12(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata12, error) {
+	_nxmtunmetadata12 := &NxmTunMetadata12{Oxm: parent}
+	_nxmtunmetadata12.Value = decoder.Read(int(_nxmtunmetadata12.TypeLen & 0xFF))
+	return _nxmtunmetadata12, nil
+}
+
+func NewNxmTunMetadata12() *NxmTunMetadata12 {
+	obj := &NxmTunMetadata12{
+		Oxm: NewOxm(92284),
+	}
+	return obj
+}
+func (self *NxmTunMetadata12) GetOXMName() string {
+	return "tun_metadata12"
+}
+
+func (self *NxmTunMetadata12) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata12) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata12Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata12Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata12Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata12Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata12Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata12Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata12Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata12Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata12Masked, error) {
+	_nxmtunmetadata12masked := &NxmTunMetadata12Masked{Oxm: parent}
+	_nxmtunmetadata12masked.Value = decoder.Read(int(_nxmtunmetadata12masked.TypeLen & 0xFF))
+	_nxmtunmetadata12masked.ValueMask = decoder.Read(int(_nxmtunmetadata12masked.TypeLen & 0xFF))
+	return _nxmtunmetadata12masked, nil
+}
+
+func NewNxmTunMetadata12Masked() *NxmTunMetadata12Masked {
+	obj := &NxmTunMetadata12Masked{
+		Oxm: NewOxm(92664),
+	}
+	return obj
+}
+func (self *NxmTunMetadata12Masked) GetOXMName() string {
+	return "tun_metadata12_masked"
+}
+
+func (self *NxmTunMetadata12Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata12Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata12Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata13 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata13 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata13) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata13) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata13) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata13(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata13, error) {
+	_nxmtunmetadata13 := &NxmTunMetadata13{Oxm: parent}
+	_nxmtunmetadata13.Value = decoder.Read(int(_nxmtunmetadata13.TypeLen & 0xFF))
+	return _nxmtunmetadata13, nil
+}
+
+func NewNxmTunMetadata13() *NxmTunMetadata13 {
+	obj := &NxmTunMetadata13{
+		Oxm: NewOxm(92796),
+	}
+	return obj
+}
+func (self *NxmTunMetadata13) GetOXMName() string {
+	return "tun_metadata13"
+}
+
+func (self *NxmTunMetadata13) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata13) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata13Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata13Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata13Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata13Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata13Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata13Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata13Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata13Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata13Masked, error) {
+	_nxmtunmetadata13masked := &NxmTunMetadata13Masked{Oxm: parent}
+	_nxmtunmetadata13masked.Value = decoder.Read(int(_nxmtunmetadata13masked.TypeLen & 0xFF))
+	_nxmtunmetadata13masked.ValueMask = decoder.Read(int(_nxmtunmetadata13masked.TypeLen & 0xFF))
+	return _nxmtunmetadata13masked, nil
+}
+
+func NewNxmTunMetadata13Masked() *NxmTunMetadata13Masked {
+	obj := &NxmTunMetadata13Masked{
+		Oxm: NewOxm(93176),
+	}
+	return obj
+}
+func (self *NxmTunMetadata13Masked) GetOXMName() string {
+	return "tun_metadata13_masked"
+}
+
+func (self *NxmTunMetadata13Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata13Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata13Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata14 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata14 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata14) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata14) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata14) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata14(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata14, error) {
+	_nxmtunmetadata14 := &NxmTunMetadata14{Oxm: parent}
+	_nxmtunmetadata14.Value = decoder.Read(int(_nxmtunmetadata14.TypeLen & 0xFF))
+	return _nxmtunmetadata14, nil
+}
+
+func NewNxmTunMetadata14() *NxmTunMetadata14 {
+	obj := &NxmTunMetadata14{
+		Oxm: NewOxm(93308),
+	}
+	return obj
+}
+func (self *NxmTunMetadata14) GetOXMName() string {
+	return "tun_metadata14"
+}
+
+func (self *NxmTunMetadata14) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata14) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata14Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata14Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata14Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata14Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata14Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata14Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata14Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata14Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata14Masked, error) {
+	_nxmtunmetadata14masked := &NxmTunMetadata14Masked{Oxm: parent}
+	_nxmtunmetadata14masked.Value = decoder.Read(int(_nxmtunmetadata14masked.TypeLen & 0xFF))
+	_nxmtunmetadata14masked.ValueMask = decoder.Read(int(_nxmtunmetadata14masked.TypeLen & 0xFF))
+	return _nxmtunmetadata14masked, nil
+}
+
+func NewNxmTunMetadata14Masked() *NxmTunMetadata14Masked {
+	obj := &NxmTunMetadata14Masked{
+		Oxm: NewOxm(93688),
+	}
+	return obj
+}
+func (self *NxmTunMetadata14Masked) GetOXMName() string {
+	return "tun_metadata14_masked"
+}
+
+func (self *NxmTunMetadata14Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata14Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata14Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata15 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata15 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata15) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata15) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata15) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata15(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata15, error) {
+	_nxmtunmetadata15 := &NxmTunMetadata15{Oxm: parent}
+	_nxmtunmetadata15.Value = decoder.Read(int(_nxmtunmetadata15.TypeLen & 0xFF))
+	return _nxmtunmetadata15, nil
+}
+
+func NewNxmTunMetadata15() *NxmTunMetadata15 {
+	obj := &NxmTunMetadata15{
+		Oxm: NewOxm(93820),
+	}
+	return obj
+}
+func (self *NxmTunMetadata15) GetOXMName() string {
+	return "tun_metadata15"
+}
+
+func (self *NxmTunMetadata15) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata15) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata15Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata15Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata15Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata15Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata15Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata15Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata15Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata15Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata15Masked, error) {
+	_nxmtunmetadata15masked := &NxmTunMetadata15Masked{Oxm: parent}
+	_nxmtunmetadata15masked.Value = decoder.Read(int(_nxmtunmetadata15masked.TypeLen & 0xFF))
+	_nxmtunmetadata15masked.ValueMask = decoder.Read(int(_nxmtunmetadata15masked.TypeLen & 0xFF))
+	return _nxmtunmetadata15masked, nil
+}
+
+func NewNxmTunMetadata15Masked() *NxmTunMetadata15Masked {
+	obj := &NxmTunMetadata15Masked{
+		Oxm: NewOxm(94200),
+	}
+	return obj
+}
+func (self *NxmTunMetadata15Masked) GetOXMName() string {
+	return "tun_metadata15_masked"
+}
+
+func (self *NxmTunMetadata15Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata15Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata15Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata16 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata16 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata16) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata16) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata16) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata16(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata16, error) {
+	_nxmtunmetadata16 := &NxmTunMetadata16{Oxm: parent}
+	_nxmtunmetadata16.Value = decoder.Read(int(_nxmtunmetadata16.TypeLen & 0xFF))
+	return _nxmtunmetadata16, nil
+}
+
+func NewNxmTunMetadata16() *NxmTunMetadata16 {
+	obj := &NxmTunMetadata16{
+		Oxm: NewOxm(94332),
+	}
+	return obj
+}
+func (self *NxmTunMetadata16) GetOXMName() string {
+	return "tun_metadata16"
+}
+
+func (self *NxmTunMetadata16) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata16) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata16Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata16Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata16Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata16Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata16Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata16Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata16Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata16Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata16Masked, error) {
+	_nxmtunmetadata16masked := &NxmTunMetadata16Masked{Oxm: parent}
+	_nxmtunmetadata16masked.Value = decoder.Read(int(_nxmtunmetadata16masked.TypeLen & 0xFF))
+	_nxmtunmetadata16masked.ValueMask = decoder.Read(int(_nxmtunmetadata16masked.TypeLen & 0xFF))
+	return _nxmtunmetadata16masked, nil
+}
+
+func NewNxmTunMetadata16Masked() *NxmTunMetadata16Masked {
+	obj := &NxmTunMetadata16Masked{
+		Oxm: NewOxm(94712),
+	}
+	return obj
+}
+func (self *NxmTunMetadata16Masked) GetOXMName() string {
+	return "tun_metadata16_masked"
+}
+
+func (self *NxmTunMetadata16Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata16Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata16Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata17 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata17 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata17) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata17) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata17) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata17(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata17, error) {
+	_nxmtunmetadata17 := &NxmTunMetadata17{Oxm: parent}
+	_nxmtunmetadata17.Value = decoder.Read(int(_nxmtunmetadata17.TypeLen & 0xFF))
+	return _nxmtunmetadata17, nil
+}
+
+func NewNxmTunMetadata17() *NxmTunMetadata17 {
+	obj := &NxmTunMetadata17{
+		Oxm: NewOxm(94844),
+	}
+	return obj
+}
+func (self *NxmTunMetadata17) GetOXMName() string {
+	return "tun_metadata17"
+}
+
+func (self *NxmTunMetadata17) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata17) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata17Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata17Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata17Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata17Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata17Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata17Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata17Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata17Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata17Masked, error) {
+	_nxmtunmetadata17masked := &NxmTunMetadata17Masked{Oxm: parent}
+	_nxmtunmetadata17masked.Value = decoder.Read(int(_nxmtunmetadata17masked.TypeLen & 0xFF))
+	_nxmtunmetadata17masked.ValueMask = decoder.Read(int(_nxmtunmetadata17masked.TypeLen & 0xFF))
+	return _nxmtunmetadata17masked, nil
+}
+
+func NewNxmTunMetadata17Masked() *NxmTunMetadata17Masked {
+	obj := &NxmTunMetadata17Masked{
+		Oxm: NewOxm(95224),
+	}
+	return obj
+}
+func (self *NxmTunMetadata17Masked) GetOXMName() string {
+	return "tun_metadata17_masked"
+}
+
+func (self *NxmTunMetadata17Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata17Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata17Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata18 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata18 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata18) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata18) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata18) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata18(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata18, error) {
+	_nxmtunmetadata18 := &NxmTunMetadata18{Oxm: parent}
+	_nxmtunmetadata18.Value = decoder.Read(int(_nxmtunmetadata18.TypeLen & 0xFF))
+	return _nxmtunmetadata18, nil
+}
+
+func NewNxmTunMetadata18() *NxmTunMetadata18 {
+	obj := &NxmTunMetadata18{
+		Oxm: NewOxm(95356),
+	}
+	return obj
+}
+func (self *NxmTunMetadata18) GetOXMName() string {
+	return "tun_metadata18"
+}
+
+func (self *NxmTunMetadata18) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata18) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata18Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata18Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata18Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata18Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata18Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata18Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata18Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata18Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata18Masked, error) {
+	_nxmtunmetadata18masked := &NxmTunMetadata18Masked{Oxm: parent}
+	_nxmtunmetadata18masked.Value = decoder.Read(int(_nxmtunmetadata18masked.TypeLen & 0xFF))
+	_nxmtunmetadata18masked.ValueMask = decoder.Read(int(_nxmtunmetadata18masked.TypeLen & 0xFF))
+	return _nxmtunmetadata18masked, nil
+}
+
+func NewNxmTunMetadata18Masked() *NxmTunMetadata18Masked {
+	obj := &NxmTunMetadata18Masked{
+		Oxm: NewOxm(95736),
+	}
+	return obj
+}
+func (self *NxmTunMetadata18Masked) GetOXMName() string {
+	return "tun_metadata18_masked"
+}
+
+func (self *NxmTunMetadata18Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata18Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata18Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata19 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata19 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata19) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata19) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata19) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata19(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata19, error) {
+	_nxmtunmetadata19 := &NxmTunMetadata19{Oxm: parent}
+	_nxmtunmetadata19.Value = decoder.Read(int(_nxmtunmetadata19.TypeLen & 0xFF))
+	return _nxmtunmetadata19, nil
+}
+
+func NewNxmTunMetadata19() *NxmTunMetadata19 {
+	obj := &NxmTunMetadata19{
+		Oxm: NewOxm(95868),
+	}
+	return obj
+}
+func (self *NxmTunMetadata19) GetOXMName() string {
+	return "tun_metadata19"
+}
+
+func (self *NxmTunMetadata19) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata19) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata19Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata19Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata19Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata19Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata19Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata19Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata19Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata19Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata19Masked, error) {
+	_nxmtunmetadata19masked := &NxmTunMetadata19Masked{Oxm: parent}
+	_nxmtunmetadata19masked.Value = decoder.Read(int(_nxmtunmetadata19masked.TypeLen & 0xFF))
+	_nxmtunmetadata19masked.ValueMask = decoder.Read(int(_nxmtunmetadata19masked.TypeLen & 0xFF))
+	return _nxmtunmetadata19masked, nil
+}
+
+func NewNxmTunMetadata19Masked() *NxmTunMetadata19Masked {
+	obj := &NxmTunMetadata19Masked{
+		Oxm: NewOxm(96248),
+	}
+	return obj
+}
+func (self *NxmTunMetadata19Masked) GetOXMName() string {
+	return "tun_metadata19_masked"
+}
+
+func (self *NxmTunMetadata19Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata19Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata19Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata1Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata1Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata1Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata1Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata1Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata1Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata1Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata1Masked, error) {
+	_nxmtunmetadata1masked := &NxmTunMetadata1Masked{Oxm: parent}
+	_nxmtunmetadata1masked.Value = decoder.Read(int(_nxmtunmetadata1masked.TypeLen & 0xFF))
+	_nxmtunmetadata1masked.ValueMask = decoder.Read(int(_nxmtunmetadata1masked.TypeLen & 0xFF))
+	return _nxmtunmetadata1masked, nil
+}
+
+func NewNxmTunMetadata1Masked() *NxmTunMetadata1Masked {
+	obj := &NxmTunMetadata1Masked{
+		Oxm: NewOxm(87032),
+	}
+	return obj
+}
+func (self *NxmTunMetadata1Masked) GetOXMName() string {
+	return "tun_metadata1_masked"
+}
+
+func (self *NxmTunMetadata1Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata1Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata1Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata2 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata2 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata2) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata2) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata2(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata2, error) {
+	_nxmtunmetadata2 := &NxmTunMetadata2{Oxm: parent}
+	_nxmtunmetadata2.Value = decoder.Read(int(_nxmtunmetadata2.TypeLen & 0xFF))
+	return _nxmtunmetadata2, nil
+}
+
+func NewNxmTunMetadata2() *NxmTunMetadata2 {
+	obj := &NxmTunMetadata2{
+		Oxm: NewOxm(87164),
+	}
+	return obj
+}
+func (self *NxmTunMetadata2) GetOXMName() string {
+	return "tun_metadata2"
+}
+
+func (self *NxmTunMetadata2) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata2) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata20 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata20 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata20) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata20) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata20) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata20(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata20, error) {
+	_nxmtunmetadata20 := &NxmTunMetadata20{Oxm: parent}
+	_nxmtunmetadata20.Value = decoder.Read(int(_nxmtunmetadata20.TypeLen & 0xFF))
+	return _nxmtunmetadata20, nil
+}
+
+func NewNxmTunMetadata20() *NxmTunMetadata20 {
+	obj := &NxmTunMetadata20{
+		Oxm: NewOxm(96380),
+	}
+	return obj
+}
+func (self *NxmTunMetadata20) GetOXMName() string {
+	return "tun_metadata20"
+}
+
+func (self *NxmTunMetadata20) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata20) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata20Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata20Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata20Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata20Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata20Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata20Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata20Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata20Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata20Masked, error) {
+	_nxmtunmetadata20masked := &NxmTunMetadata20Masked{Oxm: parent}
+	_nxmtunmetadata20masked.Value = decoder.Read(int(_nxmtunmetadata20masked.TypeLen & 0xFF))
+	_nxmtunmetadata20masked.ValueMask = decoder.Read(int(_nxmtunmetadata20masked.TypeLen & 0xFF))
+	return _nxmtunmetadata20masked, nil
+}
+
+func NewNxmTunMetadata20Masked() *NxmTunMetadata20Masked {
+	obj := &NxmTunMetadata20Masked{
+		Oxm: NewOxm(96760),
+	}
+	return obj
+}
+func (self *NxmTunMetadata20Masked) GetOXMName() string {
+	return "tun_metadata20_masked"
+}
+
+func (self *NxmTunMetadata20Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata20Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata20Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata21 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata21 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata21) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata21) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata21) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata21(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata21, error) {
+	_nxmtunmetadata21 := &NxmTunMetadata21{Oxm: parent}
+	_nxmtunmetadata21.Value = decoder.Read(int(_nxmtunmetadata21.TypeLen & 0xFF))
+	return _nxmtunmetadata21, nil
+}
+
+func NewNxmTunMetadata21() *NxmTunMetadata21 {
+	obj := &NxmTunMetadata21{
+		Oxm: NewOxm(96892),
+	}
+	return obj
+}
+func (self *NxmTunMetadata21) GetOXMName() string {
+	return "tun_metadata21"
+}
+
+func (self *NxmTunMetadata21) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata21) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata21Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata21Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata21Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata21Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata21Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata21Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata21Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata21Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata21Masked, error) {
+	_nxmtunmetadata21masked := &NxmTunMetadata21Masked{Oxm: parent}
+	_nxmtunmetadata21masked.Value = decoder.Read(int(_nxmtunmetadata21masked.TypeLen & 0xFF))
+	_nxmtunmetadata21masked.ValueMask = decoder.Read(int(_nxmtunmetadata21masked.TypeLen & 0xFF))
+	return _nxmtunmetadata21masked, nil
+}
+
+func NewNxmTunMetadata21Masked() *NxmTunMetadata21Masked {
+	obj := &NxmTunMetadata21Masked{
+		Oxm: NewOxm(97272),
+	}
+	return obj
+}
+func (self *NxmTunMetadata21Masked) GetOXMName() string {
+	return "tun_metadata21_masked"
+}
+
+func (self *NxmTunMetadata21Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata21Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata21Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata22 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata22 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata22) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata22) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata22) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata22(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata22, error) {
+	_nxmtunmetadata22 := &NxmTunMetadata22{Oxm: parent}
+	_nxmtunmetadata22.Value = decoder.Read(int(_nxmtunmetadata22.TypeLen & 0xFF))
+	return _nxmtunmetadata22, nil
+}
+
+func NewNxmTunMetadata22() *NxmTunMetadata22 {
+	obj := &NxmTunMetadata22{
+		Oxm: NewOxm(97404),
+	}
+	return obj
+}
+func (self *NxmTunMetadata22) GetOXMName() string {
+	return "tun_metadata22"
+}
+
+func (self *NxmTunMetadata22) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata22) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata22Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata22Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata22Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata22Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata22Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata22Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata22Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata22Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata22Masked, error) {
+	_nxmtunmetadata22masked := &NxmTunMetadata22Masked{Oxm: parent}
+	_nxmtunmetadata22masked.Value = decoder.Read(int(_nxmtunmetadata22masked.TypeLen & 0xFF))
+	_nxmtunmetadata22masked.ValueMask = decoder.Read(int(_nxmtunmetadata22masked.TypeLen & 0xFF))
+	return _nxmtunmetadata22masked, nil
+}
+
+func NewNxmTunMetadata22Masked() *NxmTunMetadata22Masked {
+	obj := &NxmTunMetadata22Masked{
+		Oxm: NewOxm(97784),
+	}
+	return obj
+}
+func (self *NxmTunMetadata22Masked) GetOXMName() string {
+	return "tun_metadata22_masked"
+}
+
+func (self *NxmTunMetadata22Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata22Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata22Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata23 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata23 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata23) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata23) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata23) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata23(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata23, error) {
+	_nxmtunmetadata23 := &NxmTunMetadata23{Oxm: parent}
+	_nxmtunmetadata23.Value = decoder.Read(int(_nxmtunmetadata23.TypeLen & 0xFF))
+	return _nxmtunmetadata23, nil
+}
+
+func NewNxmTunMetadata23() *NxmTunMetadata23 {
+	obj := &NxmTunMetadata23{
+		Oxm: NewOxm(97916),
+	}
+	return obj
+}
+func (self *NxmTunMetadata23) GetOXMName() string {
+	return "tun_metadata23"
+}
+
+func (self *NxmTunMetadata23) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata23) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata23Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata23Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata23Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata23Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata23Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata23Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata23Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata23Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata23Masked, error) {
+	_nxmtunmetadata23masked := &NxmTunMetadata23Masked{Oxm: parent}
+	_nxmtunmetadata23masked.Value = decoder.Read(int(_nxmtunmetadata23masked.TypeLen & 0xFF))
+	_nxmtunmetadata23masked.ValueMask = decoder.Read(int(_nxmtunmetadata23masked.TypeLen & 0xFF))
+	return _nxmtunmetadata23masked, nil
+}
+
+func NewNxmTunMetadata23Masked() *NxmTunMetadata23Masked {
+	obj := &NxmTunMetadata23Masked{
+		Oxm: NewOxm(98296),
+	}
+	return obj
+}
+func (self *NxmTunMetadata23Masked) GetOXMName() string {
+	return "tun_metadata23_masked"
+}
+
+func (self *NxmTunMetadata23Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata23Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata23Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata24 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata24 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata24) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata24) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata24) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata24(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata24, error) {
+	_nxmtunmetadata24 := &NxmTunMetadata24{Oxm: parent}
+	_nxmtunmetadata24.Value = decoder.Read(int(_nxmtunmetadata24.TypeLen & 0xFF))
+	return _nxmtunmetadata24, nil
+}
+
+func NewNxmTunMetadata24() *NxmTunMetadata24 {
+	obj := &NxmTunMetadata24{
+		Oxm: NewOxm(98428),
+	}
+	return obj
+}
+func (self *NxmTunMetadata24) GetOXMName() string {
+	return "tun_metadata24"
+}
+
+func (self *NxmTunMetadata24) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata24) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata24Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata24Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata24Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata24Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata24Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata24Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata24Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata24Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata24Masked, error) {
+	_nxmtunmetadata24masked := &NxmTunMetadata24Masked{Oxm: parent}
+	_nxmtunmetadata24masked.Value = decoder.Read(int(_nxmtunmetadata24masked.TypeLen & 0xFF))
+	_nxmtunmetadata24masked.ValueMask = decoder.Read(int(_nxmtunmetadata24masked.TypeLen & 0xFF))
+	return _nxmtunmetadata24masked, nil
+}
+
+func NewNxmTunMetadata24Masked() *NxmTunMetadata24Masked {
+	obj := &NxmTunMetadata24Masked{
+		Oxm: NewOxm(98808),
+	}
+	return obj
+}
+func (self *NxmTunMetadata24Masked) GetOXMName() string {
+	return "tun_metadata24_masked"
+}
+
+func (self *NxmTunMetadata24Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata24Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata24Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata25 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata25 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata25) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata25) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata25) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata25(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata25, error) {
+	_nxmtunmetadata25 := &NxmTunMetadata25{Oxm: parent}
+	_nxmtunmetadata25.Value = decoder.Read(int(_nxmtunmetadata25.TypeLen & 0xFF))
+	return _nxmtunmetadata25, nil
+}
+
+func NewNxmTunMetadata25() *NxmTunMetadata25 {
+	obj := &NxmTunMetadata25{
+		Oxm: NewOxm(98940),
+	}
+	return obj
+}
+func (self *NxmTunMetadata25) GetOXMName() string {
+	return "tun_metadata25"
+}
+
+func (self *NxmTunMetadata25) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata25) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata25Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata25Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata25Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata25Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata25Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata25Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata25Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata25Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata25Masked, error) {
+	_nxmtunmetadata25masked := &NxmTunMetadata25Masked{Oxm: parent}
+	_nxmtunmetadata25masked.Value = decoder.Read(int(_nxmtunmetadata25masked.TypeLen & 0xFF))
+	_nxmtunmetadata25masked.ValueMask = decoder.Read(int(_nxmtunmetadata25masked.TypeLen & 0xFF))
+	return _nxmtunmetadata25masked, nil
+}
+
+func NewNxmTunMetadata25Masked() *NxmTunMetadata25Masked {
+	obj := &NxmTunMetadata25Masked{
+		Oxm: NewOxm(99320),
+	}
+	return obj
+}
+func (self *NxmTunMetadata25Masked) GetOXMName() string {
+	return "tun_metadata25_masked"
+}
+
+func (self *NxmTunMetadata25Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata25Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata25Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata26 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata26 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata26) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata26) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata26) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata26(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata26, error) {
+	_nxmtunmetadata26 := &NxmTunMetadata26{Oxm: parent}
+	_nxmtunmetadata26.Value = decoder.Read(int(_nxmtunmetadata26.TypeLen & 0xFF))
+	return _nxmtunmetadata26, nil
+}
+
+func NewNxmTunMetadata26() *NxmTunMetadata26 {
+	obj := &NxmTunMetadata26{
+		Oxm: NewOxm(99452),
+	}
+	return obj
+}
+func (self *NxmTunMetadata26) GetOXMName() string {
+	return "tun_metadata26"
+}
+
+func (self *NxmTunMetadata26) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata26) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata26Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata26Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata26Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata26Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata26Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata26Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata26Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata26Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata26Masked, error) {
+	_nxmtunmetadata26masked := &NxmTunMetadata26Masked{Oxm: parent}
+	_nxmtunmetadata26masked.Value = decoder.Read(int(_nxmtunmetadata26masked.TypeLen & 0xFF))
+	_nxmtunmetadata26masked.ValueMask = decoder.Read(int(_nxmtunmetadata26masked.TypeLen & 0xFF))
+	return _nxmtunmetadata26masked, nil
+}
+
+func NewNxmTunMetadata26Masked() *NxmTunMetadata26Masked {
+	obj := &NxmTunMetadata26Masked{
+		Oxm: NewOxm(99832),
+	}
+	return obj
+}
+func (self *NxmTunMetadata26Masked) GetOXMName() string {
+	return "tun_metadata26_masked"
+}
+
+func (self *NxmTunMetadata26Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata26Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata26Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata27 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata27 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata27) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata27) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata27) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata27(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata27, error) {
+	_nxmtunmetadata27 := &NxmTunMetadata27{Oxm: parent}
+	_nxmtunmetadata27.Value = decoder.Read(int(_nxmtunmetadata27.TypeLen & 0xFF))
+	return _nxmtunmetadata27, nil
+}
+
+func NewNxmTunMetadata27() *NxmTunMetadata27 {
+	obj := &NxmTunMetadata27{
+		Oxm: NewOxm(99964),
+	}
+	return obj
+}
+func (self *NxmTunMetadata27) GetOXMName() string {
+	return "tun_metadata27"
+}
+
+func (self *NxmTunMetadata27) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata27) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata27Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata27Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata27Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata27Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata27Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata27Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata27Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata27Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata27Masked, error) {
+	_nxmtunmetadata27masked := &NxmTunMetadata27Masked{Oxm: parent}
+	_nxmtunmetadata27masked.Value = decoder.Read(int(_nxmtunmetadata27masked.TypeLen & 0xFF))
+	_nxmtunmetadata27masked.ValueMask = decoder.Read(int(_nxmtunmetadata27masked.TypeLen & 0xFF))
+	return _nxmtunmetadata27masked, nil
+}
+
+func NewNxmTunMetadata27Masked() *NxmTunMetadata27Masked {
+	obj := &NxmTunMetadata27Masked{
+		Oxm: NewOxm(100344),
+	}
+	return obj
+}
+func (self *NxmTunMetadata27Masked) GetOXMName() string {
+	return "tun_metadata27_masked"
+}
+
+func (self *NxmTunMetadata27Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata27Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata27Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata28 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata28 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata28) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata28) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata28) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata28(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata28, error) {
+	_nxmtunmetadata28 := &NxmTunMetadata28{Oxm: parent}
+	_nxmtunmetadata28.Value = decoder.Read(int(_nxmtunmetadata28.TypeLen & 0xFF))
+	return _nxmtunmetadata28, nil
+}
+
+func NewNxmTunMetadata28() *NxmTunMetadata28 {
+	obj := &NxmTunMetadata28{
+		Oxm: NewOxm(100476),
+	}
+	return obj
+}
+func (self *NxmTunMetadata28) GetOXMName() string {
+	return "tun_metadata28"
+}
+
+func (self *NxmTunMetadata28) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata28) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata28Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata28Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata28Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata28Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata28Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata28Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata28Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata28Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata28Masked, error) {
+	_nxmtunmetadata28masked := &NxmTunMetadata28Masked{Oxm: parent}
+	_nxmtunmetadata28masked.Value = decoder.Read(int(_nxmtunmetadata28masked.TypeLen & 0xFF))
+	_nxmtunmetadata28masked.ValueMask = decoder.Read(int(_nxmtunmetadata28masked.TypeLen & 0xFF))
+	return _nxmtunmetadata28masked, nil
+}
+
+func NewNxmTunMetadata28Masked() *NxmTunMetadata28Masked {
+	obj := &NxmTunMetadata28Masked{
+		Oxm: NewOxm(100856),
+	}
+	return obj
+}
+func (self *NxmTunMetadata28Masked) GetOXMName() string {
+	return "tun_metadata28_masked"
+}
+
+func (self *NxmTunMetadata28Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata28Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata28Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata29 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata29 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata29) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata29) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata29) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata29(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata29, error) {
+	_nxmtunmetadata29 := &NxmTunMetadata29{Oxm: parent}
+	_nxmtunmetadata29.Value = decoder.Read(int(_nxmtunmetadata29.TypeLen & 0xFF))
+	return _nxmtunmetadata29, nil
+}
+
+func NewNxmTunMetadata29() *NxmTunMetadata29 {
+	obj := &NxmTunMetadata29{
+		Oxm: NewOxm(100988),
+	}
+	return obj
+}
+func (self *NxmTunMetadata29) GetOXMName() string {
+	return "tun_metadata29"
+}
+
+func (self *NxmTunMetadata29) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata29) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata29Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata29Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata29Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata29Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata29Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata29Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata29Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata29Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata29Masked, error) {
+	_nxmtunmetadata29masked := &NxmTunMetadata29Masked{Oxm: parent}
+	_nxmtunmetadata29masked.Value = decoder.Read(int(_nxmtunmetadata29masked.TypeLen & 0xFF))
+	_nxmtunmetadata29masked.ValueMask = decoder.Read(int(_nxmtunmetadata29masked.TypeLen & 0xFF))
+	return _nxmtunmetadata29masked, nil
+}
+
+func NewNxmTunMetadata29Masked() *NxmTunMetadata29Masked {
+	obj := &NxmTunMetadata29Masked{
+		Oxm: NewOxm(101368),
+	}
+	return obj
+}
+func (self *NxmTunMetadata29Masked) GetOXMName() string {
+	return "tun_metadata29_masked"
+}
+
+func (self *NxmTunMetadata29Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata29Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata29Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata2Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata2Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata2Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata2Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata2Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata2Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata2Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata2Masked, error) {
+	_nxmtunmetadata2masked := &NxmTunMetadata2Masked{Oxm: parent}
+	_nxmtunmetadata2masked.Value = decoder.Read(int(_nxmtunmetadata2masked.TypeLen & 0xFF))
+	_nxmtunmetadata2masked.ValueMask = decoder.Read(int(_nxmtunmetadata2masked.TypeLen & 0xFF))
+	return _nxmtunmetadata2masked, nil
+}
+
+func NewNxmTunMetadata2Masked() *NxmTunMetadata2Masked {
+	obj := &NxmTunMetadata2Masked{
+		Oxm: NewOxm(87544),
+	}
+	return obj
+}
+func (self *NxmTunMetadata2Masked) GetOXMName() string {
+	return "tun_metadata2_masked"
+}
+
+func (self *NxmTunMetadata2Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata2Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata2Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata3 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata3 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata3) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata3) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata3(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata3, error) {
+	_nxmtunmetadata3 := &NxmTunMetadata3{Oxm: parent}
+	_nxmtunmetadata3.Value = decoder.Read(int(_nxmtunmetadata3.TypeLen & 0xFF))
+	return _nxmtunmetadata3, nil
+}
+
+func NewNxmTunMetadata3() *NxmTunMetadata3 {
+	obj := &NxmTunMetadata3{
+		Oxm: NewOxm(87676),
+	}
+	return obj
+}
+func (self *NxmTunMetadata3) GetOXMName() string {
+	return "tun_metadata3"
+}
+
+func (self *NxmTunMetadata3) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata3) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata30 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata30 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata30) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata30) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata30) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata30(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata30, error) {
+	_nxmtunmetadata30 := &NxmTunMetadata30{Oxm: parent}
+	_nxmtunmetadata30.Value = decoder.Read(int(_nxmtunmetadata30.TypeLen & 0xFF))
+	return _nxmtunmetadata30, nil
+}
+
+func NewNxmTunMetadata30() *NxmTunMetadata30 {
+	obj := &NxmTunMetadata30{
+		Oxm: NewOxm(101500),
+	}
+	return obj
+}
+func (self *NxmTunMetadata30) GetOXMName() string {
+	return "tun_metadata30"
+}
+
+func (self *NxmTunMetadata30) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata30) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata30Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata30Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata30Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata30Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata30Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata30Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata30Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata30Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata30Masked, error) {
+	_nxmtunmetadata30masked := &NxmTunMetadata30Masked{Oxm: parent}
+	_nxmtunmetadata30masked.Value = decoder.Read(int(_nxmtunmetadata30masked.TypeLen & 0xFF))
+	_nxmtunmetadata30masked.ValueMask = decoder.Read(int(_nxmtunmetadata30masked.TypeLen & 0xFF))
+	return _nxmtunmetadata30masked, nil
+}
+
+func NewNxmTunMetadata30Masked() *NxmTunMetadata30Masked {
+	obj := &NxmTunMetadata30Masked{
+		Oxm: NewOxm(101880),
+	}
+	return obj
+}
+func (self *NxmTunMetadata30Masked) GetOXMName() string {
+	return "tun_metadata30_masked"
+}
+
+func (self *NxmTunMetadata30Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata30Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata30Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata31 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata31 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata31) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata31) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata31) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata31(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata31, error) {
+	_nxmtunmetadata31 := &NxmTunMetadata31{Oxm: parent}
+	_nxmtunmetadata31.Value = decoder.Read(int(_nxmtunmetadata31.TypeLen & 0xFF))
+	return _nxmtunmetadata31, nil
+}
+
+func NewNxmTunMetadata31() *NxmTunMetadata31 {
+	obj := &NxmTunMetadata31{
+		Oxm: NewOxm(102012),
+	}
+	return obj
+}
+func (self *NxmTunMetadata31) GetOXMName() string {
+	return "tun_metadata31"
+}
+
+func (self *NxmTunMetadata31) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata31) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata31Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata31Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata31Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata31Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata31Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata31Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata31Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata31Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata31Masked, error) {
+	_nxmtunmetadata31masked := &NxmTunMetadata31Masked{Oxm: parent}
+	_nxmtunmetadata31masked.Value = decoder.Read(int(_nxmtunmetadata31masked.TypeLen & 0xFF))
+	_nxmtunmetadata31masked.ValueMask = decoder.Read(int(_nxmtunmetadata31masked.TypeLen & 0xFF))
+	return _nxmtunmetadata31masked, nil
+}
+
+func NewNxmTunMetadata31Masked() *NxmTunMetadata31Masked {
+	obj := &NxmTunMetadata31Masked{
+		Oxm: NewOxm(102392),
+	}
+	return obj
+}
+func (self *NxmTunMetadata31Masked) GetOXMName() string {
+	return "tun_metadata31_masked"
+}
+
+func (self *NxmTunMetadata31Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata31Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata31Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata32 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata32 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata32) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata32) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata32) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata32(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata32, error) {
+	_nxmtunmetadata32 := &NxmTunMetadata32{Oxm: parent}
+	_nxmtunmetadata32.Value = decoder.Read(int(_nxmtunmetadata32.TypeLen & 0xFF))
+	return _nxmtunmetadata32, nil
+}
+
+func NewNxmTunMetadata32() *NxmTunMetadata32 {
+	obj := &NxmTunMetadata32{
+		Oxm: NewOxm(102524),
+	}
+	return obj
+}
+func (self *NxmTunMetadata32) GetOXMName() string {
+	return "tun_metadata32"
+}
+
+func (self *NxmTunMetadata32) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata32) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata32Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata32Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata32Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata32Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata32Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata32Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata32Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata32Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata32Masked, error) {
+	_nxmtunmetadata32masked := &NxmTunMetadata32Masked{Oxm: parent}
+	_nxmtunmetadata32masked.Value = decoder.Read(int(_nxmtunmetadata32masked.TypeLen & 0xFF))
+	_nxmtunmetadata32masked.ValueMask = decoder.Read(int(_nxmtunmetadata32masked.TypeLen & 0xFF))
+	return _nxmtunmetadata32masked, nil
+}
+
+func NewNxmTunMetadata32Masked() *NxmTunMetadata32Masked {
+	obj := &NxmTunMetadata32Masked{
+		Oxm: NewOxm(102904),
+	}
+	return obj
+}
+func (self *NxmTunMetadata32Masked) GetOXMName() string {
+	return "tun_metadata32_masked"
+}
+
+func (self *NxmTunMetadata32Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata32Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata32Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata33 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata33 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata33) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata33) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata33) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata33(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata33, error) {
+	_nxmtunmetadata33 := &NxmTunMetadata33{Oxm: parent}
+	_nxmtunmetadata33.Value = decoder.Read(int(_nxmtunmetadata33.TypeLen & 0xFF))
+	return _nxmtunmetadata33, nil
+}
+
+func NewNxmTunMetadata33() *NxmTunMetadata33 {
+	obj := &NxmTunMetadata33{
+		Oxm: NewOxm(103036),
+	}
+	return obj
+}
+func (self *NxmTunMetadata33) GetOXMName() string {
+	return "tun_metadata33"
+}
+
+func (self *NxmTunMetadata33) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata33) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata33Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata33Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata33Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata33Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata33Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata33Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata33Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata33Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata33Masked, error) {
+	_nxmtunmetadata33masked := &NxmTunMetadata33Masked{Oxm: parent}
+	_nxmtunmetadata33masked.Value = decoder.Read(int(_nxmtunmetadata33masked.TypeLen & 0xFF))
+	_nxmtunmetadata33masked.ValueMask = decoder.Read(int(_nxmtunmetadata33masked.TypeLen & 0xFF))
+	return _nxmtunmetadata33masked, nil
+}
+
+func NewNxmTunMetadata33Masked() *NxmTunMetadata33Masked {
+	obj := &NxmTunMetadata33Masked{
+		Oxm: NewOxm(103416),
+	}
+	return obj
+}
+func (self *NxmTunMetadata33Masked) GetOXMName() string {
+	return "tun_metadata33_masked"
+}
+
+func (self *NxmTunMetadata33Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata33Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata33Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata34 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata34 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata34) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata34) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata34) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata34(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata34, error) {
+	_nxmtunmetadata34 := &NxmTunMetadata34{Oxm: parent}
+	_nxmtunmetadata34.Value = decoder.Read(int(_nxmtunmetadata34.TypeLen & 0xFF))
+	return _nxmtunmetadata34, nil
+}
+
+func NewNxmTunMetadata34() *NxmTunMetadata34 {
+	obj := &NxmTunMetadata34{
+		Oxm: NewOxm(103548),
+	}
+	return obj
+}
+func (self *NxmTunMetadata34) GetOXMName() string {
+	return "tun_metadata34"
+}
+
+func (self *NxmTunMetadata34) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata34) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata34Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata34Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata34Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata34Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata34Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata34Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata34Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata34Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata34Masked, error) {
+	_nxmtunmetadata34masked := &NxmTunMetadata34Masked{Oxm: parent}
+	_nxmtunmetadata34masked.Value = decoder.Read(int(_nxmtunmetadata34masked.TypeLen & 0xFF))
+	_nxmtunmetadata34masked.ValueMask = decoder.Read(int(_nxmtunmetadata34masked.TypeLen & 0xFF))
+	return _nxmtunmetadata34masked, nil
+}
+
+func NewNxmTunMetadata34Masked() *NxmTunMetadata34Masked {
+	obj := &NxmTunMetadata34Masked{
+		Oxm: NewOxm(103928),
+	}
+	return obj
+}
+func (self *NxmTunMetadata34Masked) GetOXMName() string {
+	return "tun_metadata34_masked"
+}
+
+func (self *NxmTunMetadata34Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata34Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata34Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata35 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata35 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata35) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata35) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata35) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata35(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata35, error) {
+	_nxmtunmetadata35 := &NxmTunMetadata35{Oxm: parent}
+	_nxmtunmetadata35.Value = decoder.Read(int(_nxmtunmetadata35.TypeLen & 0xFF))
+	return _nxmtunmetadata35, nil
+}
+
+func NewNxmTunMetadata35() *NxmTunMetadata35 {
+	obj := &NxmTunMetadata35{
+		Oxm: NewOxm(104060),
+	}
+	return obj
+}
+func (self *NxmTunMetadata35) GetOXMName() string {
+	return "tun_metadata35"
+}
+
+func (self *NxmTunMetadata35) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata35) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata35Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata35Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata35Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata35Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata35Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata35Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata35Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata35Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata35Masked, error) {
+	_nxmtunmetadata35masked := &NxmTunMetadata35Masked{Oxm: parent}
+	_nxmtunmetadata35masked.Value = decoder.Read(int(_nxmtunmetadata35masked.TypeLen & 0xFF))
+	_nxmtunmetadata35masked.ValueMask = decoder.Read(int(_nxmtunmetadata35masked.TypeLen & 0xFF))
+	return _nxmtunmetadata35masked, nil
+}
+
+func NewNxmTunMetadata35Masked() *NxmTunMetadata35Masked {
+	obj := &NxmTunMetadata35Masked{
+		Oxm: NewOxm(104440),
+	}
+	return obj
+}
+func (self *NxmTunMetadata35Masked) GetOXMName() string {
+	return "tun_metadata35_masked"
+}
+
+func (self *NxmTunMetadata35Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata35Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata35Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata36 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata36 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata36) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata36) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata36) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata36(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata36, error) {
+	_nxmtunmetadata36 := &NxmTunMetadata36{Oxm: parent}
+	_nxmtunmetadata36.Value = decoder.Read(int(_nxmtunmetadata36.TypeLen & 0xFF))
+	return _nxmtunmetadata36, nil
+}
+
+func NewNxmTunMetadata36() *NxmTunMetadata36 {
+	obj := &NxmTunMetadata36{
+		Oxm: NewOxm(104572),
+	}
+	return obj
+}
+func (self *NxmTunMetadata36) GetOXMName() string {
+	return "tun_metadata36"
+}
+
+func (self *NxmTunMetadata36) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata36) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata36Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata36Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata36Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata36Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata36Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata36Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata36Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata36Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata36Masked, error) {
+	_nxmtunmetadata36masked := &NxmTunMetadata36Masked{Oxm: parent}
+	_nxmtunmetadata36masked.Value = decoder.Read(int(_nxmtunmetadata36masked.TypeLen & 0xFF))
+	_nxmtunmetadata36masked.ValueMask = decoder.Read(int(_nxmtunmetadata36masked.TypeLen & 0xFF))
+	return _nxmtunmetadata36masked, nil
+}
+
+func NewNxmTunMetadata36Masked() *NxmTunMetadata36Masked {
+	obj := &NxmTunMetadata36Masked{
+		Oxm: NewOxm(104952),
+	}
+	return obj
+}
+func (self *NxmTunMetadata36Masked) GetOXMName() string {
+	return "tun_metadata36_masked"
+}
+
+func (self *NxmTunMetadata36Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata36Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata36Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata37 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata37 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata37) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata37) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata37) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata37(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata37, error) {
+	_nxmtunmetadata37 := &NxmTunMetadata37{Oxm: parent}
+	_nxmtunmetadata37.Value = decoder.Read(int(_nxmtunmetadata37.TypeLen & 0xFF))
+	return _nxmtunmetadata37, nil
+}
+
+func NewNxmTunMetadata37() *NxmTunMetadata37 {
+	obj := &NxmTunMetadata37{
+		Oxm: NewOxm(105084),
+	}
+	return obj
+}
+func (self *NxmTunMetadata37) GetOXMName() string {
+	return "tun_metadata37"
+}
+
+func (self *NxmTunMetadata37) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata37) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata37Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata37Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata37Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata37Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata37Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata37Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata37Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata37Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata37Masked, error) {
+	_nxmtunmetadata37masked := &NxmTunMetadata37Masked{Oxm: parent}
+	_nxmtunmetadata37masked.Value = decoder.Read(int(_nxmtunmetadata37masked.TypeLen & 0xFF))
+	_nxmtunmetadata37masked.ValueMask = decoder.Read(int(_nxmtunmetadata37masked.TypeLen & 0xFF))
+	return _nxmtunmetadata37masked, nil
+}
+
+func NewNxmTunMetadata37Masked() *NxmTunMetadata37Masked {
+	obj := &NxmTunMetadata37Masked{
+		Oxm: NewOxm(105464),
+	}
+	return obj
+}
+func (self *NxmTunMetadata37Masked) GetOXMName() string {
+	return "tun_metadata37_masked"
+}
+
+func (self *NxmTunMetadata37Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata37Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata37Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata38 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata38 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata38) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata38) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata38) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata38(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata38, error) {
+	_nxmtunmetadata38 := &NxmTunMetadata38{Oxm: parent}
+	_nxmtunmetadata38.Value = decoder.Read(int(_nxmtunmetadata38.TypeLen & 0xFF))
+	return _nxmtunmetadata38, nil
+}
+
+func NewNxmTunMetadata38() *NxmTunMetadata38 {
+	obj := &NxmTunMetadata38{
+		Oxm: NewOxm(105596),
+	}
+	return obj
+}
+func (self *NxmTunMetadata38) GetOXMName() string {
+	return "tun_metadata38"
+}
+
+func (self *NxmTunMetadata38) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata38) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata38Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata38Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata38Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata38Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata38Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata38Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata38Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata38Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata38Masked, error) {
+	_nxmtunmetadata38masked := &NxmTunMetadata38Masked{Oxm: parent}
+	_nxmtunmetadata38masked.Value = decoder.Read(int(_nxmtunmetadata38masked.TypeLen & 0xFF))
+	_nxmtunmetadata38masked.ValueMask = decoder.Read(int(_nxmtunmetadata38masked.TypeLen & 0xFF))
+	return _nxmtunmetadata38masked, nil
+}
+
+func NewNxmTunMetadata38Masked() *NxmTunMetadata38Masked {
+	obj := &NxmTunMetadata38Masked{
+		Oxm: NewOxm(105976),
+	}
+	return obj
+}
+func (self *NxmTunMetadata38Masked) GetOXMName() string {
+	return "tun_metadata38_masked"
+}
+
+func (self *NxmTunMetadata38Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata38Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata38Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata39 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata39 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata39) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata39) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata39) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata39(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata39, error) {
+	_nxmtunmetadata39 := &NxmTunMetadata39{Oxm: parent}
+	_nxmtunmetadata39.Value = decoder.Read(int(_nxmtunmetadata39.TypeLen & 0xFF))
+	return _nxmtunmetadata39, nil
+}
+
+func NewNxmTunMetadata39() *NxmTunMetadata39 {
+	obj := &NxmTunMetadata39{
+		Oxm: NewOxm(106108),
+	}
+	return obj
+}
+func (self *NxmTunMetadata39) GetOXMName() string {
+	return "tun_metadata39"
+}
+
+func (self *NxmTunMetadata39) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata39) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata39Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata39Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata39Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata39Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata39Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata39Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata39Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata39Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata39Masked, error) {
+	_nxmtunmetadata39masked := &NxmTunMetadata39Masked{Oxm: parent}
+	_nxmtunmetadata39masked.Value = decoder.Read(int(_nxmtunmetadata39masked.TypeLen & 0xFF))
+	_nxmtunmetadata39masked.ValueMask = decoder.Read(int(_nxmtunmetadata39masked.TypeLen & 0xFF))
+	return _nxmtunmetadata39masked, nil
+}
+
+func NewNxmTunMetadata39Masked() *NxmTunMetadata39Masked {
+	obj := &NxmTunMetadata39Masked{
+		Oxm: NewOxm(106488),
+	}
+	return obj
+}
+func (self *NxmTunMetadata39Masked) GetOXMName() string {
+	return "tun_metadata39_masked"
+}
+
+func (self *NxmTunMetadata39Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata39Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata39Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata3Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata3Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata3Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata3Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata3Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata3Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata3Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata3Masked, error) {
+	_nxmtunmetadata3masked := &NxmTunMetadata3Masked{Oxm: parent}
+	_nxmtunmetadata3masked.Value = decoder.Read(int(_nxmtunmetadata3masked.TypeLen & 0xFF))
+	_nxmtunmetadata3masked.ValueMask = decoder.Read(int(_nxmtunmetadata3masked.TypeLen & 0xFF))
+	return _nxmtunmetadata3masked, nil
+}
+
+func NewNxmTunMetadata3Masked() *NxmTunMetadata3Masked {
+	obj := &NxmTunMetadata3Masked{
+		Oxm: NewOxm(88056),
+	}
+	return obj
+}
+func (self *NxmTunMetadata3Masked) GetOXMName() string {
+	return "tun_metadata3_masked"
+}
+
+func (self *NxmTunMetadata3Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata3Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata3Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata4 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata4 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata4) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata4) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata4(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata4, error) {
+	_nxmtunmetadata4 := &NxmTunMetadata4{Oxm: parent}
+	_nxmtunmetadata4.Value = decoder.Read(int(_nxmtunmetadata4.TypeLen & 0xFF))
+	return _nxmtunmetadata4, nil
+}
+
+func NewNxmTunMetadata4() *NxmTunMetadata4 {
+	obj := &NxmTunMetadata4{
+		Oxm: NewOxm(88188),
+	}
+	return obj
+}
+func (self *NxmTunMetadata4) GetOXMName() string {
+	return "tun_metadata4"
+}
+
+func (self *NxmTunMetadata4) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata4) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata40 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata40 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata40) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata40) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata40) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata40(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata40, error) {
+	_nxmtunmetadata40 := &NxmTunMetadata40{Oxm: parent}
+	_nxmtunmetadata40.Value = decoder.Read(int(_nxmtunmetadata40.TypeLen & 0xFF))
+	return _nxmtunmetadata40, nil
+}
+
+func NewNxmTunMetadata40() *NxmTunMetadata40 {
+	obj := &NxmTunMetadata40{
+		Oxm: NewOxm(106620),
+	}
+	return obj
+}
+func (self *NxmTunMetadata40) GetOXMName() string {
+	return "tun_metadata40"
+}
+
+func (self *NxmTunMetadata40) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata40) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata40Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata40Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata40Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata40Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata40Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata40Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata40Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata40Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata40Masked, error) {
+	_nxmtunmetadata40masked := &NxmTunMetadata40Masked{Oxm: parent}
+	_nxmtunmetadata40masked.Value = decoder.Read(int(_nxmtunmetadata40masked.TypeLen & 0xFF))
+	_nxmtunmetadata40masked.ValueMask = decoder.Read(int(_nxmtunmetadata40masked.TypeLen & 0xFF))
+	return _nxmtunmetadata40masked, nil
+}
+
+func NewNxmTunMetadata40Masked() *NxmTunMetadata40Masked {
+	obj := &NxmTunMetadata40Masked{
+		Oxm: NewOxm(107000),
+	}
+	return obj
+}
+func (self *NxmTunMetadata40Masked) GetOXMName() string {
+	return "tun_metadata40_masked"
+}
+
+func (self *NxmTunMetadata40Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata40Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata40Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata41 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata41 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata41) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata41) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata41) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata41(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata41, error) {
+	_nxmtunmetadata41 := &NxmTunMetadata41{Oxm: parent}
+	_nxmtunmetadata41.Value = decoder.Read(int(_nxmtunmetadata41.TypeLen & 0xFF))
+	return _nxmtunmetadata41, nil
+}
+
+func NewNxmTunMetadata41() *NxmTunMetadata41 {
+	obj := &NxmTunMetadata41{
+		Oxm: NewOxm(107132),
+	}
+	return obj
+}
+func (self *NxmTunMetadata41) GetOXMName() string {
+	return "tun_metadata41"
+}
+
+func (self *NxmTunMetadata41) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata41) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata41Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata41Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata41Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata41Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata41Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata41Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata41Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata41Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata41Masked, error) {
+	_nxmtunmetadata41masked := &NxmTunMetadata41Masked{Oxm: parent}
+	_nxmtunmetadata41masked.Value = decoder.Read(int(_nxmtunmetadata41masked.TypeLen & 0xFF))
+	_nxmtunmetadata41masked.ValueMask = decoder.Read(int(_nxmtunmetadata41masked.TypeLen & 0xFF))
+	return _nxmtunmetadata41masked, nil
+}
+
+func NewNxmTunMetadata41Masked() *NxmTunMetadata41Masked {
+	obj := &NxmTunMetadata41Masked{
+		Oxm: NewOxm(107512),
+	}
+	return obj
+}
+func (self *NxmTunMetadata41Masked) GetOXMName() string {
+	return "tun_metadata41_masked"
+}
+
+func (self *NxmTunMetadata41Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata41Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata41Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata42 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata42 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata42) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata42) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata42) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata42(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata42, error) {
+	_nxmtunmetadata42 := &NxmTunMetadata42{Oxm: parent}
+	_nxmtunmetadata42.Value = decoder.Read(int(_nxmtunmetadata42.TypeLen & 0xFF))
+	return _nxmtunmetadata42, nil
+}
+
+func NewNxmTunMetadata42() *NxmTunMetadata42 {
+	obj := &NxmTunMetadata42{
+		Oxm: NewOxm(107644),
+	}
+	return obj
+}
+func (self *NxmTunMetadata42) GetOXMName() string {
+	return "tun_metadata42"
+}
+
+func (self *NxmTunMetadata42) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata42) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata42Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata42Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata42Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata42Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata42Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata42Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata42Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata42Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata42Masked, error) {
+	_nxmtunmetadata42masked := &NxmTunMetadata42Masked{Oxm: parent}
+	_nxmtunmetadata42masked.Value = decoder.Read(int(_nxmtunmetadata42masked.TypeLen & 0xFF))
+	_nxmtunmetadata42masked.ValueMask = decoder.Read(int(_nxmtunmetadata42masked.TypeLen & 0xFF))
+	return _nxmtunmetadata42masked, nil
+}
+
+func NewNxmTunMetadata42Masked() *NxmTunMetadata42Masked {
+	obj := &NxmTunMetadata42Masked{
+		Oxm: NewOxm(108024),
+	}
+	return obj
+}
+func (self *NxmTunMetadata42Masked) GetOXMName() string {
+	return "tun_metadata42_masked"
+}
+
+func (self *NxmTunMetadata42Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata42Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata42Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata43 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata43 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata43) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata43) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata43) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata43(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata43, error) {
+	_nxmtunmetadata43 := &NxmTunMetadata43{Oxm: parent}
+	_nxmtunmetadata43.Value = decoder.Read(int(_nxmtunmetadata43.TypeLen & 0xFF))
+	return _nxmtunmetadata43, nil
+}
+
+func NewNxmTunMetadata43() *NxmTunMetadata43 {
+	obj := &NxmTunMetadata43{
+		Oxm: NewOxm(108156),
+	}
+	return obj
+}
+func (self *NxmTunMetadata43) GetOXMName() string {
+	return "tun_metadata43"
+}
+
+func (self *NxmTunMetadata43) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata43) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata43Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata43Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata43Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata43Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata43Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata43Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata43Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata43Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata43Masked, error) {
+	_nxmtunmetadata43masked := &NxmTunMetadata43Masked{Oxm: parent}
+	_nxmtunmetadata43masked.Value = decoder.Read(int(_nxmtunmetadata43masked.TypeLen & 0xFF))
+	_nxmtunmetadata43masked.ValueMask = decoder.Read(int(_nxmtunmetadata43masked.TypeLen & 0xFF))
+	return _nxmtunmetadata43masked, nil
+}
+
+func NewNxmTunMetadata43Masked() *NxmTunMetadata43Masked {
+	obj := &NxmTunMetadata43Masked{
+		Oxm: NewOxm(108536),
+	}
+	return obj
+}
+func (self *NxmTunMetadata43Masked) GetOXMName() string {
+	return "tun_metadata43_masked"
+}
+
+func (self *NxmTunMetadata43Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata43Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata43Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata44 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata44 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata44) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata44) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata44) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata44(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata44, error) {
+	_nxmtunmetadata44 := &NxmTunMetadata44{Oxm: parent}
+	_nxmtunmetadata44.Value = decoder.Read(int(_nxmtunmetadata44.TypeLen & 0xFF))
+	return _nxmtunmetadata44, nil
+}
+
+func NewNxmTunMetadata44() *NxmTunMetadata44 {
+	obj := &NxmTunMetadata44{
+		Oxm: NewOxm(108668),
+	}
+	return obj
+}
+func (self *NxmTunMetadata44) GetOXMName() string {
+	return "tun_metadata44"
+}
+
+func (self *NxmTunMetadata44) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata44) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata44Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata44Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata44Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata44Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata44Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata44Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata44Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata44Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata44Masked, error) {
+	_nxmtunmetadata44masked := &NxmTunMetadata44Masked{Oxm: parent}
+	_nxmtunmetadata44masked.Value = decoder.Read(int(_nxmtunmetadata44masked.TypeLen & 0xFF))
+	_nxmtunmetadata44masked.ValueMask = decoder.Read(int(_nxmtunmetadata44masked.TypeLen & 0xFF))
+	return _nxmtunmetadata44masked, nil
+}
+
+func NewNxmTunMetadata44Masked() *NxmTunMetadata44Masked {
+	obj := &NxmTunMetadata44Masked{
+		Oxm: NewOxm(109048),
+	}
+	return obj
+}
+func (self *NxmTunMetadata44Masked) GetOXMName() string {
+	return "tun_metadata44_masked"
+}
+
+func (self *NxmTunMetadata44Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata44Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata44Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata45 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata45 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata45) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata45) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata45) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata45(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata45, error) {
+	_nxmtunmetadata45 := &NxmTunMetadata45{Oxm: parent}
+	_nxmtunmetadata45.Value = decoder.Read(int(_nxmtunmetadata45.TypeLen & 0xFF))
+	return _nxmtunmetadata45, nil
+}
+
+func NewNxmTunMetadata45() *NxmTunMetadata45 {
+	obj := &NxmTunMetadata45{
+		Oxm: NewOxm(109180),
+	}
+	return obj
+}
+func (self *NxmTunMetadata45) GetOXMName() string {
+	return "tun_metadata45"
+}
+
+func (self *NxmTunMetadata45) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata45) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata45Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata45Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata45Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata45Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata45Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata45Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata45Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata45Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata45Masked, error) {
+	_nxmtunmetadata45masked := &NxmTunMetadata45Masked{Oxm: parent}
+	_nxmtunmetadata45masked.Value = decoder.Read(int(_nxmtunmetadata45masked.TypeLen & 0xFF))
+	_nxmtunmetadata45masked.ValueMask = decoder.Read(int(_nxmtunmetadata45masked.TypeLen & 0xFF))
+	return _nxmtunmetadata45masked, nil
+}
+
+func NewNxmTunMetadata45Masked() *NxmTunMetadata45Masked {
+	obj := &NxmTunMetadata45Masked{
+		Oxm: NewOxm(109560),
+	}
+	return obj
+}
+func (self *NxmTunMetadata45Masked) GetOXMName() string {
+	return "tun_metadata45_masked"
+}
+
+func (self *NxmTunMetadata45Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata45Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata45Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata46 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata46 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata46) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata46) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata46) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata46(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata46, error) {
+	_nxmtunmetadata46 := &NxmTunMetadata46{Oxm: parent}
+	_nxmtunmetadata46.Value = decoder.Read(int(_nxmtunmetadata46.TypeLen & 0xFF))
+	return _nxmtunmetadata46, nil
+}
+
+func NewNxmTunMetadata46() *NxmTunMetadata46 {
+	obj := &NxmTunMetadata46{
+		Oxm: NewOxm(109692),
+	}
+	return obj
+}
+func (self *NxmTunMetadata46) GetOXMName() string {
+	return "tun_metadata46"
+}
+
+func (self *NxmTunMetadata46) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata46) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata46Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata46Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata46Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata46Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata46Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata46Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata46Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata46Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata46Masked, error) {
+	_nxmtunmetadata46masked := &NxmTunMetadata46Masked{Oxm: parent}
+	_nxmtunmetadata46masked.Value = decoder.Read(int(_nxmtunmetadata46masked.TypeLen & 0xFF))
+	_nxmtunmetadata46masked.ValueMask = decoder.Read(int(_nxmtunmetadata46masked.TypeLen & 0xFF))
+	return _nxmtunmetadata46masked, nil
+}
+
+func NewNxmTunMetadata46Masked() *NxmTunMetadata46Masked {
+	obj := &NxmTunMetadata46Masked{
+		Oxm: NewOxm(110072),
+	}
+	return obj
+}
+func (self *NxmTunMetadata46Masked) GetOXMName() string {
+	return "tun_metadata46_masked"
+}
+
+func (self *NxmTunMetadata46Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata46Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata46Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata47 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata47 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata47) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata47) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata47) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata47(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata47, error) {
+	_nxmtunmetadata47 := &NxmTunMetadata47{Oxm: parent}
+	_nxmtunmetadata47.Value = decoder.Read(int(_nxmtunmetadata47.TypeLen & 0xFF))
+	return _nxmtunmetadata47, nil
+}
+
+func NewNxmTunMetadata47() *NxmTunMetadata47 {
+	obj := &NxmTunMetadata47{
+		Oxm: NewOxm(110204),
+	}
+	return obj
+}
+func (self *NxmTunMetadata47) GetOXMName() string {
+	return "tun_metadata47"
+}
+
+func (self *NxmTunMetadata47) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata47) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata47Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata47Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata47Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata47Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata47Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata47Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata47Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata47Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata47Masked, error) {
+	_nxmtunmetadata47masked := &NxmTunMetadata47Masked{Oxm: parent}
+	_nxmtunmetadata47masked.Value = decoder.Read(int(_nxmtunmetadata47masked.TypeLen & 0xFF))
+	_nxmtunmetadata47masked.ValueMask = decoder.Read(int(_nxmtunmetadata47masked.TypeLen & 0xFF))
+	return _nxmtunmetadata47masked, nil
+}
+
+func NewNxmTunMetadata47Masked() *NxmTunMetadata47Masked {
+	obj := &NxmTunMetadata47Masked{
+		Oxm: NewOxm(110584),
+	}
+	return obj
+}
+func (self *NxmTunMetadata47Masked) GetOXMName() string {
+	return "tun_metadata47_masked"
+}
+
+func (self *NxmTunMetadata47Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata47Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata47Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata48 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata48 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata48) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata48) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata48) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata48(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata48, error) {
+	_nxmtunmetadata48 := &NxmTunMetadata48{Oxm: parent}
+	_nxmtunmetadata48.Value = decoder.Read(int(_nxmtunmetadata48.TypeLen & 0xFF))
+	return _nxmtunmetadata48, nil
+}
+
+func NewNxmTunMetadata48() *NxmTunMetadata48 {
+	obj := &NxmTunMetadata48{
+		Oxm: NewOxm(110716),
+	}
+	return obj
+}
+func (self *NxmTunMetadata48) GetOXMName() string {
+	return "tun_metadata48"
+}
+
+func (self *NxmTunMetadata48) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata48) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata48Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata48Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata48Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata48Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata48Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata48Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata48Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata48Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata48Masked, error) {
+	_nxmtunmetadata48masked := &NxmTunMetadata48Masked{Oxm: parent}
+	_nxmtunmetadata48masked.Value = decoder.Read(int(_nxmtunmetadata48masked.TypeLen & 0xFF))
+	_nxmtunmetadata48masked.ValueMask = decoder.Read(int(_nxmtunmetadata48masked.TypeLen & 0xFF))
+	return _nxmtunmetadata48masked, nil
+}
+
+func NewNxmTunMetadata48Masked() *NxmTunMetadata48Masked {
+	obj := &NxmTunMetadata48Masked{
+		Oxm: NewOxm(111096),
+	}
+	return obj
+}
+func (self *NxmTunMetadata48Masked) GetOXMName() string {
+	return "tun_metadata48_masked"
+}
+
+func (self *NxmTunMetadata48Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata48Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata48Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata49 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata49 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata49) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata49) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata49) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata49(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata49, error) {
+	_nxmtunmetadata49 := &NxmTunMetadata49{Oxm: parent}
+	_nxmtunmetadata49.Value = decoder.Read(int(_nxmtunmetadata49.TypeLen & 0xFF))
+	return _nxmtunmetadata49, nil
+}
+
+func NewNxmTunMetadata49() *NxmTunMetadata49 {
+	obj := &NxmTunMetadata49{
+		Oxm: NewOxm(111228),
+	}
+	return obj
+}
+func (self *NxmTunMetadata49) GetOXMName() string {
+	return "tun_metadata49"
+}
+
+func (self *NxmTunMetadata49) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata49) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata49Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata49Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata49Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata49Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata49Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata49Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata49Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata49Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata49Masked, error) {
+	_nxmtunmetadata49masked := &NxmTunMetadata49Masked{Oxm: parent}
+	_nxmtunmetadata49masked.Value = decoder.Read(int(_nxmtunmetadata49masked.TypeLen & 0xFF))
+	_nxmtunmetadata49masked.ValueMask = decoder.Read(int(_nxmtunmetadata49masked.TypeLen & 0xFF))
+	return _nxmtunmetadata49masked, nil
+}
+
+func NewNxmTunMetadata49Masked() *NxmTunMetadata49Masked {
+	obj := &NxmTunMetadata49Masked{
+		Oxm: NewOxm(111608),
+	}
+	return obj
+}
+func (self *NxmTunMetadata49Masked) GetOXMName() string {
+	return "tun_metadata49_masked"
+}
+
+func (self *NxmTunMetadata49Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata49Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata49Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata4Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata4Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata4Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata4Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata4Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata4Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata4Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata4Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata4Masked, error) {
+	_nxmtunmetadata4masked := &NxmTunMetadata4Masked{Oxm: parent}
+	_nxmtunmetadata4masked.Value = decoder.Read(int(_nxmtunmetadata4masked.TypeLen & 0xFF))
+	_nxmtunmetadata4masked.ValueMask = decoder.Read(int(_nxmtunmetadata4masked.TypeLen & 0xFF))
+	return _nxmtunmetadata4masked, nil
+}
+
+func NewNxmTunMetadata4Masked() *NxmTunMetadata4Masked {
+	obj := &NxmTunMetadata4Masked{
+		Oxm: NewOxm(88568),
+	}
+	return obj
+}
+func (self *NxmTunMetadata4Masked) GetOXMName() string {
+	return "tun_metadata4_masked"
+}
+
+func (self *NxmTunMetadata4Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata4Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata4Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata5 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata5 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata5) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata5) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata5) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata5(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata5, error) {
+	_nxmtunmetadata5 := &NxmTunMetadata5{Oxm: parent}
+	_nxmtunmetadata5.Value = decoder.Read(int(_nxmtunmetadata5.TypeLen & 0xFF))
+	return _nxmtunmetadata5, nil
+}
+
+func NewNxmTunMetadata5() *NxmTunMetadata5 {
+	obj := &NxmTunMetadata5{
+		Oxm: NewOxm(88700),
+	}
+	return obj
+}
+func (self *NxmTunMetadata5) GetOXMName() string {
+	return "tun_metadata5"
+}
+
+func (self *NxmTunMetadata5) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata5) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata50 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata50 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata50) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata50) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata50) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata50(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata50, error) {
+	_nxmtunmetadata50 := &NxmTunMetadata50{Oxm: parent}
+	_nxmtunmetadata50.Value = decoder.Read(int(_nxmtunmetadata50.TypeLen & 0xFF))
+	return _nxmtunmetadata50, nil
+}
+
+func NewNxmTunMetadata50() *NxmTunMetadata50 {
+	obj := &NxmTunMetadata50{
+		Oxm: NewOxm(111740),
+	}
+	return obj
+}
+func (self *NxmTunMetadata50) GetOXMName() string {
+	return "tun_metadata50"
+}
+
+func (self *NxmTunMetadata50) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata50) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata50Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata50Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata50Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata50Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata50Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata50Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata50Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata50Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata50Masked, error) {
+	_nxmtunmetadata50masked := &NxmTunMetadata50Masked{Oxm: parent}
+	_nxmtunmetadata50masked.Value = decoder.Read(int(_nxmtunmetadata50masked.TypeLen & 0xFF))
+	_nxmtunmetadata50masked.ValueMask = decoder.Read(int(_nxmtunmetadata50masked.TypeLen & 0xFF))
+	return _nxmtunmetadata50masked, nil
+}
+
+func NewNxmTunMetadata50Masked() *NxmTunMetadata50Masked {
+	obj := &NxmTunMetadata50Masked{
+		Oxm: NewOxm(112120),
+	}
+	return obj
+}
+func (self *NxmTunMetadata50Masked) GetOXMName() string {
+	return "tun_metadata50_masked"
+}
+
+func (self *NxmTunMetadata50Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata50Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata50Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata51 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata51 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata51) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata51) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata51) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata51(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata51, error) {
+	_nxmtunmetadata51 := &NxmTunMetadata51{Oxm: parent}
+	_nxmtunmetadata51.Value = decoder.Read(int(_nxmtunmetadata51.TypeLen & 0xFF))
+	return _nxmtunmetadata51, nil
+}
+
+func NewNxmTunMetadata51() *NxmTunMetadata51 {
+	obj := &NxmTunMetadata51{
+		Oxm: NewOxm(112252),
+	}
+	return obj
+}
+func (self *NxmTunMetadata51) GetOXMName() string {
+	return "tun_metadata51"
+}
+
+func (self *NxmTunMetadata51) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata51) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata51Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata51Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata51Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata51Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata51Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata51Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata51Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata51Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata51Masked, error) {
+	_nxmtunmetadata51masked := &NxmTunMetadata51Masked{Oxm: parent}
+	_nxmtunmetadata51masked.Value = decoder.Read(int(_nxmtunmetadata51masked.TypeLen & 0xFF))
+	_nxmtunmetadata51masked.ValueMask = decoder.Read(int(_nxmtunmetadata51masked.TypeLen & 0xFF))
+	return _nxmtunmetadata51masked, nil
+}
+
+func NewNxmTunMetadata51Masked() *NxmTunMetadata51Masked {
+	obj := &NxmTunMetadata51Masked{
+		Oxm: NewOxm(112632),
+	}
+	return obj
+}
+func (self *NxmTunMetadata51Masked) GetOXMName() string {
+	return "tun_metadata51_masked"
+}
+
+func (self *NxmTunMetadata51Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata51Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata51Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata52 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata52 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata52) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata52) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata52) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata52(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata52, error) {
+	_nxmtunmetadata52 := &NxmTunMetadata52{Oxm: parent}
+	_nxmtunmetadata52.Value = decoder.Read(int(_nxmtunmetadata52.TypeLen & 0xFF))
+	return _nxmtunmetadata52, nil
+}
+
+func NewNxmTunMetadata52() *NxmTunMetadata52 {
+	obj := &NxmTunMetadata52{
+		Oxm: NewOxm(112764),
+	}
+	return obj
+}
+func (self *NxmTunMetadata52) GetOXMName() string {
+	return "tun_metadata52"
+}
+
+func (self *NxmTunMetadata52) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata52) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata52Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata52Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata52Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata52Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata52Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata52Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata52Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata52Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata52Masked, error) {
+	_nxmtunmetadata52masked := &NxmTunMetadata52Masked{Oxm: parent}
+	_nxmtunmetadata52masked.Value = decoder.Read(int(_nxmtunmetadata52masked.TypeLen & 0xFF))
+	_nxmtunmetadata52masked.ValueMask = decoder.Read(int(_nxmtunmetadata52masked.TypeLen & 0xFF))
+	return _nxmtunmetadata52masked, nil
+}
+
+func NewNxmTunMetadata52Masked() *NxmTunMetadata52Masked {
+	obj := &NxmTunMetadata52Masked{
+		Oxm: NewOxm(113144),
+	}
+	return obj
+}
+func (self *NxmTunMetadata52Masked) GetOXMName() string {
+	return "tun_metadata52_masked"
+}
+
+func (self *NxmTunMetadata52Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata52Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata52Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata53 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata53 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata53) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata53) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata53) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata53(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata53, error) {
+	_nxmtunmetadata53 := &NxmTunMetadata53{Oxm: parent}
+	_nxmtunmetadata53.Value = decoder.Read(int(_nxmtunmetadata53.TypeLen & 0xFF))
+	return _nxmtunmetadata53, nil
+}
+
+func NewNxmTunMetadata53() *NxmTunMetadata53 {
+	obj := &NxmTunMetadata53{
+		Oxm: NewOxm(113276),
+	}
+	return obj
+}
+func (self *NxmTunMetadata53) GetOXMName() string {
+	return "tun_metadata53"
+}
+
+func (self *NxmTunMetadata53) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata53) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata53Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata53Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata53Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata53Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata53Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata53Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata53Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata53Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata53Masked, error) {
+	_nxmtunmetadata53masked := &NxmTunMetadata53Masked{Oxm: parent}
+	_nxmtunmetadata53masked.Value = decoder.Read(int(_nxmtunmetadata53masked.TypeLen & 0xFF))
+	_nxmtunmetadata53masked.ValueMask = decoder.Read(int(_nxmtunmetadata53masked.TypeLen & 0xFF))
+	return _nxmtunmetadata53masked, nil
+}
+
+func NewNxmTunMetadata53Masked() *NxmTunMetadata53Masked {
+	obj := &NxmTunMetadata53Masked{
+		Oxm: NewOxm(113656),
+	}
+	return obj
+}
+func (self *NxmTunMetadata53Masked) GetOXMName() string {
+	return "tun_metadata53_masked"
+}
+
+func (self *NxmTunMetadata53Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata53Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata53Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata54 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata54 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata54) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata54) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata54) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata54(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata54, error) {
+	_nxmtunmetadata54 := &NxmTunMetadata54{Oxm: parent}
+	_nxmtunmetadata54.Value = decoder.Read(int(_nxmtunmetadata54.TypeLen & 0xFF))
+	return _nxmtunmetadata54, nil
+}
+
+func NewNxmTunMetadata54() *NxmTunMetadata54 {
+	obj := &NxmTunMetadata54{
+		Oxm: NewOxm(113788),
+	}
+	return obj
+}
+func (self *NxmTunMetadata54) GetOXMName() string {
+	return "tun_metadata54"
+}
+
+func (self *NxmTunMetadata54) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata54) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata54Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata54Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata54Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata54Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata54Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata54Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata54Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata54Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata54Masked, error) {
+	_nxmtunmetadata54masked := &NxmTunMetadata54Masked{Oxm: parent}
+	_nxmtunmetadata54masked.Value = decoder.Read(int(_nxmtunmetadata54masked.TypeLen & 0xFF))
+	_nxmtunmetadata54masked.ValueMask = decoder.Read(int(_nxmtunmetadata54masked.TypeLen & 0xFF))
+	return _nxmtunmetadata54masked, nil
+}
+
+func NewNxmTunMetadata54Masked() *NxmTunMetadata54Masked {
+	obj := &NxmTunMetadata54Masked{
+		Oxm: NewOxm(114168),
+	}
+	return obj
+}
+func (self *NxmTunMetadata54Masked) GetOXMName() string {
+	return "tun_metadata54_masked"
+}
+
+func (self *NxmTunMetadata54Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata54Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata54Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata55 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata55 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata55) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata55) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata55) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata55(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata55, error) {
+	_nxmtunmetadata55 := &NxmTunMetadata55{Oxm: parent}
+	_nxmtunmetadata55.Value = decoder.Read(int(_nxmtunmetadata55.TypeLen & 0xFF))
+	return _nxmtunmetadata55, nil
+}
+
+func NewNxmTunMetadata55() *NxmTunMetadata55 {
+	obj := &NxmTunMetadata55{
+		Oxm: NewOxm(114300),
+	}
+	return obj
+}
+func (self *NxmTunMetadata55) GetOXMName() string {
+	return "tun_metadata55"
+}
+
+func (self *NxmTunMetadata55) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata55) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata55Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata55Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata55Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata55Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata55Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata55Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata55Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata55Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata55Masked, error) {
+	_nxmtunmetadata55masked := &NxmTunMetadata55Masked{Oxm: parent}
+	_nxmtunmetadata55masked.Value = decoder.Read(int(_nxmtunmetadata55masked.TypeLen & 0xFF))
+	_nxmtunmetadata55masked.ValueMask = decoder.Read(int(_nxmtunmetadata55masked.TypeLen & 0xFF))
+	return _nxmtunmetadata55masked, nil
+}
+
+func NewNxmTunMetadata55Masked() *NxmTunMetadata55Masked {
+	obj := &NxmTunMetadata55Masked{
+		Oxm: NewOxm(114680),
+	}
+	return obj
+}
+func (self *NxmTunMetadata55Masked) GetOXMName() string {
+	return "tun_metadata55_masked"
+}
+
+func (self *NxmTunMetadata55Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata55Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata55Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata56 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata56 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata56) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata56) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata56) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata56(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata56, error) {
+	_nxmtunmetadata56 := &NxmTunMetadata56{Oxm: parent}
+	_nxmtunmetadata56.Value = decoder.Read(int(_nxmtunmetadata56.TypeLen & 0xFF))
+	return _nxmtunmetadata56, nil
+}
+
+func NewNxmTunMetadata56() *NxmTunMetadata56 {
+	obj := &NxmTunMetadata56{
+		Oxm: NewOxm(114812),
+	}
+	return obj
+}
+func (self *NxmTunMetadata56) GetOXMName() string {
+	return "tun_metadata56"
+}
+
+func (self *NxmTunMetadata56) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata56) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata56Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata56Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata56Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata56Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata56Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata56Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata56Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata56Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata56Masked, error) {
+	_nxmtunmetadata56masked := &NxmTunMetadata56Masked{Oxm: parent}
+	_nxmtunmetadata56masked.Value = decoder.Read(int(_nxmtunmetadata56masked.TypeLen & 0xFF))
+	_nxmtunmetadata56masked.ValueMask = decoder.Read(int(_nxmtunmetadata56masked.TypeLen & 0xFF))
+	return _nxmtunmetadata56masked, nil
+}
+
+func NewNxmTunMetadata56Masked() *NxmTunMetadata56Masked {
+	obj := &NxmTunMetadata56Masked{
+		Oxm: NewOxm(115192),
+	}
+	return obj
+}
+func (self *NxmTunMetadata56Masked) GetOXMName() string {
+	return "tun_metadata56_masked"
+}
+
+func (self *NxmTunMetadata56Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata56Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata56Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata57 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata57 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata57) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata57) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata57) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata57(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata57, error) {
+	_nxmtunmetadata57 := &NxmTunMetadata57{Oxm: parent}
+	_nxmtunmetadata57.Value = decoder.Read(int(_nxmtunmetadata57.TypeLen & 0xFF))
+	return _nxmtunmetadata57, nil
+}
+
+func NewNxmTunMetadata57() *NxmTunMetadata57 {
+	obj := &NxmTunMetadata57{
+		Oxm: NewOxm(115324),
+	}
+	return obj
+}
+func (self *NxmTunMetadata57) GetOXMName() string {
+	return "tun_metadata57"
+}
+
+func (self *NxmTunMetadata57) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata57) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata57Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata57Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata57Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata57Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata57Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata57Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata57Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata57Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata57Masked, error) {
+	_nxmtunmetadata57masked := &NxmTunMetadata57Masked{Oxm: parent}
+	_nxmtunmetadata57masked.Value = decoder.Read(int(_nxmtunmetadata57masked.TypeLen & 0xFF))
+	_nxmtunmetadata57masked.ValueMask = decoder.Read(int(_nxmtunmetadata57masked.TypeLen & 0xFF))
+	return _nxmtunmetadata57masked, nil
+}
+
+func NewNxmTunMetadata57Masked() *NxmTunMetadata57Masked {
+	obj := &NxmTunMetadata57Masked{
+		Oxm: NewOxm(115704),
+	}
+	return obj
+}
+func (self *NxmTunMetadata57Masked) GetOXMName() string {
+	return "tun_metadata57_masked"
+}
+
+func (self *NxmTunMetadata57Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata57Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata57Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata58 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata58 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata58) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata58) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata58) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata58(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata58, error) {
+	_nxmtunmetadata58 := &NxmTunMetadata58{Oxm: parent}
+	_nxmtunmetadata58.Value = decoder.Read(int(_nxmtunmetadata58.TypeLen & 0xFF))
+	return _nxmtunmetadata58, nil
+}
+
+func NewNxmTunMetadata58() *NxmTunMetadata58 {
+	obj := &NxmTunMetadata58{
+		Oxm: NewOxm(115836),
+	}
+	return obj
+}
+func (self *NxmTunMetadata58) GetOXMName() string {
+	return "tun_metadata58"
+}
+
+func (self *NxmTunMetadata58) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata58) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata58Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata58Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata58Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata58Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata58Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata58Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata58Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata58Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata58Masked, error) {
+	_nxmtunmetadata58masked := &NxmTunMetadata58Masked{Oxm: parent}
+	_nxmtunmetadata58masked.Value = decoder.Read(int(_nxmtunmetadata58masked.TypeLen & 0xFF))
+	_nxmtunmetadata58masked.ValueMask = decoder.Read(int(_nxmtunmetadata58masked.TypeLen & 0xFF))
+	return _nxmtunmetadata58masked, nil
+}
+
+func NewNxmTunMetadata58Masked() *NxmTunMetadata58Masked {
+	obj := &NxmTunMetadata58Masked{
+		Oxm: NewOxm(116216),
+	}
+	return obj
+}
+func (self *NxmTunMetadata58Masked) GetOXMName() string {
+	return "tun_metadata58_masked"
+}
+
+func (self *NxmTunMetadata58Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata58Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata58Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata59 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata59 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata59) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata59) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata59) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata59(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata59, error) {
+	_nxmtunmetadata59 := &NxmTunMetadata59{Oxm: parent}
+	_nxmtunmetadata59.Value = decoder.Read(int(_nxmtunmetadata59.TypeLen & 0xFF))
+	return _nxmtunmetadata59, nil
+}
+
+func NewNxmTunMetadata59() *NxmTunMetadata59 {
+	obj := &NxmTunMetadata59{
+		Oxm: NewOxm(116348),
+	}
+	return obj
+}
+func (self *NxmTunMetadata59) GetOXMName() string {
+	return "tun_metadata59"
+}
+
+func (self *NxmTunMetadata59) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata59) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata59Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata59Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata59Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata59Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata59Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata59Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata59Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata59Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata59Masked, error) {
+	_nxmtunmetadata59masked := &NxmTunMetadata59Masked{Oxm: parent}
+	_nxmtunmetadata59masked.Value = decoder.Read(int(_nxmtunmetadata59masked.TypeLen & 0xFF))
+	_nxmtunmetadata59masked.ValueMask = decoder.Read(int(_nxmtunmetadata59masked.TypeLen & 0xFF))
+	return _nxmtunmetadata59masked, nil
+}
+
+func NewNxmTunMetadata59Masked() *NxmTunMetadata59Masked {
+	obj := &NxmTunMetadata59Masked{
+		Oxm: NewOxm(116728),
+	}
+	return obj
+}
+func (self *NxmTunMetadata59Masked) GetOXMName() string {
+	return "tun_metadata59_masked"
+}
+
+func (self *NxmTunMetadata59Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata59Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata59Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata5Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata5Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata5Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata5Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata5Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata5Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata5Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata5Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata5Masked, error) {
+	_nxmtunmetadata5masked := &NxmTunMetadata5Masked{Oxm: parent}
+	_nxmtunmetadata5masked.Value = decoder.Read(int(_nxmtunmetadata5masked.TypeLen & 0xFF))
+	_nxmtunmetadata5masked.ValueMask = decoder.Read(int(_nxmtunmetadata5masked.TypeLen & 0xFF))
+	return _nxmtunmetadata5masked, nil
+}
+
+func NewNxmTunMetadata5Masked() *NxmTunMetadata5Masked {
+	obj := &NxmTunMetadata5Masked{
+		Oxm: NewOxm(89080),
+	}
+	return obj
+}
+func (self *NxmTunMetadata5Masked) GetOXMName() string {
+	return "tun_metadata5_masked"
+}
+
+func (self *NxmTunMetadata5Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata5Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata5Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata6 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata6 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata6) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata6) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata6) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata6(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata6, error) {
+	_nxmtunmetadata6 := &NxmTunMetadata6{Oxm: parent}
+	_nxmtunmetadata6.Value = decoder.Read(int(_nxmtunmetadata6.TypeLen & 0xFF))
+	return _nxmtunmetadata6, nil
+}
+
+func NewNxmTunMetadata6() *NxmTunMetadata6 {
+	obj := &NxmTunMetadata6{
+		Oxm: NewOxm(89212),
+	}
+	return obj
+}
+func (self *NxmTunMetadata6) GetOXMName() string {
+	return "tun_metadata6"
+}
+
+func (self *NxmTunMetadata6) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata6) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata60 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata60 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata60) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata60) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata60) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata60(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata60, error) {
+	_nxmtunmetadata60 := &NxmTunMetadata60{Oxm: parent}
+	_nxmtunmetadata60.Value = decoder.Read(int(_nxmtunmetadata60.TypeLen & 0xFF))
+	return _nxmtunmetadata60, nil
+}
+
+func NewNxmTunMetadata60() *NxmTunMetadata60 {
+	obj := &NxmTunMetadata60{
+		Oxm: NewOxm(116860),
+	}
+	return obj
+}
+func (self *NxmTunMetadata60) GetOXMName() string {
+	return "tun_metadata60"
+}
+
+func (self *NxmTunMetadata60) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata60) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata60Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata60Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata60Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata60Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata60Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata60Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata60Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata60Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata60Masked, error) {
+	_nxmtunmetadata60masked := &NxmTunMetadata60Masked{Oxm: parent}
+	_nxmtunmetadata60masked.Value = decoder.Read(int(_nxmtunmetadata60masked.TypeLen & 0xFF))
+	_nxmtunmetadata60masked.ValueMask = decoder.Read(int(_nxmtunmetadata60masked.TypeLen & 0xFF))
+	return _nxmtunmetadata60masked, nil
+}
+
+func NewNxmTunMetadata60Masked() *NxmTunMetadata60Masked {
+	obj := &NxmTunMetadata60Masked{
+		Oxm: NewOxm(117240),
+	}
+	return obj
+}
+func (self *NxmTunMetadata60Masked) GetOXMName() string {
+	return "tun_metadata60_masked"
+}
+
+func (self *NxmTunMetadata60Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata60Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata60Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata61 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata61 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata61) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata61) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata61) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata61(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata61, error) {
+	_nxmtunmetadata61 := &NxmTunMetadata61{Oxm: parent}
+	_nxmtunmetadata61.Value = decoder.Read(int(_nxmtunmetadata61.TypeLen & 0xFF))
+	return _nxmtunmetadata61, nil
+}
+
+func NewNxmTunMetadata61() *NxmTunMetadata61 {
+	obj := &NxmTunMetadata61{
+		Oxm: NewOxm(117372),
+	}
+	return obj
+}
+func (self *NxmTunMetadata61) GetOXMName() string {
+	return "tun_metadata61"
+}
+
+func (self *NxmTunMetadata61) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata61) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata61Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata61Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata61Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata61Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata61Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata61Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata61Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata61Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata61Masked, error) {
+	_nxmtunmetadata61masked := &NxmTunMetadata61Masked{Oxm: parent}
+	_nxmtunmetadata61masked.Value = decoder.Read(int(_nxmtunmetadata61masked.TypeLen & 0xFF))
+	_nxmtunmetadata61masked.ValueMask = decoder.Read(int(_nxmtunmetadata61masked.TypeLen & 0xFF))
+	return _nxmtunmetadata61masked, nil
+}
+
+func NewNxmTunMetadata61Masked() *NxmTunMetadata61Masked {
+	obj := &NxmTunMetadata61Masked{
+		Oxm: NewOxm(117752),
+	}
+	return obj
+}
+func (self *NxmTunMetadata61Masked) GetOXMName() string {
+	return "tun_metadata61_masked"
+}
+
+func (self *NxmTunMetadata61Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata61Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata61Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata62 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata62 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata62) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata62) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata62) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata62(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata62, error) {
+	_nxmtunmetadata62 := &NxmTunMetadata62{Oxm: parent}
+	_nxmtunmetadata62.Value = decoder.Read(int(_nxmtunmetadata62.TypeLen & 0xFF))
+	return _nxmtunmetadata62, nil
+}
+
+func NewNxmTunMetadata62() *NxmTunMetadata62 {
+	obj := &NxmTunMetadata62{
+		Oxm: NewOxm(117884),
+	}
+	return obj
+}
+func (self *NxmTunMetadata62) GetOXMName() string {
+	return "tun_metadata62"
+}
+
+func (self *NxmTunMetadata62) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata62) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata62Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata62Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata62Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata62Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata62Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata62Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata62Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata62Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata62Masked, error) {
+	_nxmtunmetadata62masked := &NxmTunMetadata62Masked{Oxm: parent}
+	_nxmtunmetadata62masked.Value = decoder.Read(int(_nxmtunmetadata62masked.TypeLen & 0xFF))
+	_nxmtunmetadata62masked.ValueMask = decoder.Read(int(_nxmtunmetadata62masked.TypeLen & 0xFF))
+	return _nxmtunmetadata62masked, nil
+}
+
+func NewNxmTunMetadata62Masked() *NxmTunMetadata62Masked {
+	obj := &NxmTunMetadata62Masked{
+		Oxm: NewOxm(118264),
+	}
+	return obj
+}
+func (self *NxmTunMetadata62Masked) GetOXMName() string {
+	return "tun_metadata62_masked"
+}
+
+func (self *NxmTunMetadata62Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata62Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata62Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata63 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata63 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata63) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata63) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata63) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata63(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata63, error) {
+	_nxmtunmetadata63 := &NxmTunMetadata63{Oxm: parent}
+	_nxmtunmetadata63.Value = decoder.Read(int(_nxmtunmetadata63.TypeLen & 0xFF))
+	return _nxmtunmetadata63, nil
+}
+
+func NewNxmTunMetadata63() *NxmTunMetadata63 {
+	obj := &NxmTunMetadata63{
+		Oxm: NewOxm(118396),
+	}
+	return obj
+}
+func (self *NxmTunMetadata63) GetOXMName() string {
+	return "tun_metadata63"
+}
+
+func (self *NxmTunMetadata63) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata63) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata63Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata63Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata63Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata63Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata63Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata63Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata63Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata63Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata63Masked, error) {
+	_nxmtunmetadata63masked := &NxmTunMetadata63Masked{Oxm: parent}
+	_nxmtunmetadata63masked.Value = decoder.Read(int(_nxmtunmetadata63masked.TypeLen & 0xFF))
+	_nxmtunmetadata63masked.ValueMask = decoder.Read(int(_nxmtunmetadata63masked.TypeLen & 0xFF))
+	return _nxmtunmetadata63masked, nil
+}
+
+func NewNxmTunMetadata63Masked() *NxmTunMetadata63Masked {
+	obj := &NxmTunMetadata63Masked{
+		Oxm: NewOxm(118776),
+	}
+	return obj
+}
+func (self *NxmTunMetadata63Masked) GetOXMName() string {
+	return "tun_metadata63_masked"
+}
+
+func (self *NxmTunMetadata63Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata63Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata63Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata6Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata6Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata6Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata6Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata6Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata6Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata6Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata6Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata6Masked, error) {
+	_nxmtunmetadata6masked := &NxmTunMetadata6Masked{Oxm: parent}
+	_nxmtunmetadata6masked.Value = decoder.Read(int(_nxmtunmetadata6masked.TypeLen & 0xFF))
+	_nxmtunmetadata6masked.ValueMask = decoder.Read(int(_nxmtunmetadata6masked.TypeLen & 0xFF))
+	return _nxmtunmetadata6masked, nil
+}
+
+func NewNxmTunMetadata6Masked() *NxmTunMetadata6Masked {
+	obj := &NxmTunMetadata6Masked{
+		Oxm: NewOxm(89592),
+	}
+	return obj
+}
+func (self *NxmTunMetadata6Masked) GetOXMName() string {
+	return "tun_metadata6_masked"
+}
+
+func (self *NxmTunMetadata6Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata6Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata6Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata7 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata7 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata7) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata7) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata7) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata7(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata7, error) {
+	_nxmtunmetadata7 := &NxmTunMetadata7{Oxm: parent}
+	_nxmtunmetadata7.Value = decoder.Read(int(_nxmtunmetadata7.TypeLen & 0xFF))
+	return _nxmtunmetadata7, nil
+}
+
+func NewNxmTunMetadata7() *NxmTunMetadata7 {
+	obj := &NxmTunMetadata7{
+		Oxm: NewOxm(89724),
+	}
+	return obj
+}
+func (self *NxmTunMetadata7) GetOXMName() string {
+	return "tun_metadata7"
+}
+
+func (self *NxmTunMetadata7) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata7) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata7Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata7Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata7Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata7Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata7Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata7Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata7Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata7Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata7Masked, error) {
+	_nxmtunmetadata7masked := &NxmTunMetadata7Masked{Oxm: parent}
+	_nxmtunmetadata7masked.Value = decoder.Read(int(_nxmtunmetadata7masked.TypeLen & 0xFF))
+	_nxmtunmetadata7masked.ValueMask = decoder.Read(int(_nxmtunmetadata7masked.TypeLen & 0xFF))
+	return _nxmtunmetadata7masked, nil
+}
+
+func NewNxmTunMetadata7Masked() *NxmTunMetadata7Masked {
+	obj := &NxmTunMetadata7Masked{
+		Oxm: NewOxm(90104),
+	}
+	return obj
+}
+func (self *NxmTunMetadata7Masked) GetOXMName() string {
+	return "tun_metadata7_masked"
+}
+
+func (self *NxmTunMetadata7Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata7Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata7Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata8 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata8 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata8) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata8) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata8) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata8(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata8, error) {
+	_nxmtunmetadata8 := &NxmTunMetadata8{Oxm: parent}
+	_nxmtunmetadata8.Value = decoder.Read(int(_nxmtunmetadata8.TypeLen & 0xFF))
+	return _nxmtunmetadata8, nil
+}
+
+func NewNxmTunMetadata8() *NxmTunMetadata8 {
+	obj := &NxmTunMetadata8{
+		Oxm: NewOxm(90236),
+	}
+	return obj
+}
+func (self *NxmTunMetadata8) GetOXMName() string {
+	return "tun_metadata8"
+}
+
+func (self *NxmTunMetadata8) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata8) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata8Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata8Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata8Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata8Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata8Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata8Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata8Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata8Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata8Masked, error) {
+	_nxmtunmetadata8masked := &NxmTunMetadata8Masked{Oxm: parent}
+	_nxmtunmetadata8masked.Value = decoder.Read(int(_nxmtunmetadata8masked.TypeLen & 0xFF))
+	_nxmtunmetadata8masked.ValueMask = decoder.Read(int(_nxmtunmetadata8masked.TypeLen & 0xFF))
+	return _nxmtunmetadata8masked, nil
+}
+
+func NewNxmTunMetadata8Masked() *NxmTunMetadata8Masked {
+	obj := &NxmTunMetadata8Masked{
+		Oxm: NewOxm(90616),
+	}
+	return obj
+}
+func (self *NxmTunMetadata8Masked) GetOXMName() string {
+	return "tun_metadata8_masked"
+}
+
+func (self *NxmTunMetadata8Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata8Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata8Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunMetadata9 struct {
+	*Oxm
+	Value []byte
+}
+
+type INxmTunMetadata9 interface {
+	goloxi.IOxm
+	GetValue() []byte
+}
+
+func (self *NxmTunMetadata9) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata9) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata9) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata9(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata9, error) {
+	_nxmtunmetadata9 := &NxmTunMetadata9{Oxm: parent}
+	_nxmtunmetadata9.Value = decoder.Read(int(_nxmtunmetadata9.TypeLen & 0xFF))
+	return _nxmtunmetadata9, nil
+}
+
+func NewNxmTunMetadata9() *NxmTunMetadata9 {
+	obj := &NxmTunMetadata9{
+		Oxm: NewOxm(90748),
+	}
+	return obj
+}
+func (self *NxmTunMetadata9) GetOXMName() string {
+	return "tun_metadata9"
+}
+
+func (self *NxmTunMetadata9) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata9) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunMetadata9Masked struct {
+	*Oxm
+	Value     []byte
+	ValueMask []byte
+}
+
+type INxmTunMetadata9Masked interface {
+	goloxi.IOxm
+	GetValue() []byte
+	GetValueMask() []byte
+}
+
+func (self *NxmTunMetadata9Masked) GetValue() []byte {
+	return self.Value
+}
+
+func (self *NxmTunMetadata9Masked) SetValue(v []byte) {
+	self.Value = v
+}
+
+func (self *NxmTunMetadata9Masked) GetValueMask() []byte {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata9Masked) SetValueMask(v []byte) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunMetadata9Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeNxmTunMetadata9Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunMetadata9Masked, error) {
+	_nxmtunmetadata9masked := &NxmTunMetadata9Masked{Oxm: parent}
+	_nxmtunmetadata9masked.Value = decoder.Read(int(_nxmtunmetadata9masked.TypeLen & 0xFF))
+	_nxmtunmetadata9masked.ValueMask = decoder.Read(int(_nxmtunmetadata9masked.TypeLen & 0xFF))
+	return _nxmtunmetadata9masked, nil
+}
+
+func NewNxmTunMetadata9Masked() *NxmTunMetadata9Masked {
+	obj := &NxmTunMetadata9Masked{
+		Oxm: NewOxm(91128),
+	}
+	return obj
+}
+func (self *NxmTunMetadata9Masked) GetOXMName() string {
+	return "tun_metadata9_masked"
+}
+
+func (self *NxmTunMetadata9Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunMetadata9Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunMetadata9Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmTunSrc struct {
+	*Oxm
+	Value net.IP
+}
+
+type INxmTunSrc interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *NxmTunSrc) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunSrc) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeNxmTunSrc(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunSrc, error) {
+	_nxmtunsrc := &NxmTunSrc{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmTunSrc packet too short: %d < 4", decoder.Length())
+	}
+	_nxmtunsrc.Value = net.IP(decoder.Read(4))
+	return _nxmtunsrc, nil
+}
+
+func NewNxmTunSrc() *NxmTunSrc {
+	obj := &NxmTunSrc{
+		Oxm: NewOxm(81412),
+	}
+	return obj
+}
+func (self *NxmTunSrc) GetOXMName() string {
+	return "tun_src"
+}
+
+func (self *NxmTunSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmTunSrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type INxmTunSrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *NxmTunSrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *NxmTunSrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *NxmTunSrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *NxmTunSrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *NxmTunSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeNxmTunSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmTunSrcMasked, error) {
+	_nxmtunsrcmasked := &NxmTunSrcMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("NxmTunSrcMasked packet too short: %d < 8", decoder.Length())
+	}
+	_nxmtunsrcmasked.Value = net.IP(decoder.Read(4))
+	_nxmtunsrcmasked.ValueMask = net.IP(decoder.Read(4))
+	return _nxmtunsrcmasked, nil
+}
+
+func NewNxmTunSrcMasked() *NxmTunSrcMasked {
+	obj := &NxmTunSrcMasked{
+		Oxm: NewOxm(81672),
+	}
+	return obj
+}
+func (self *NxmTunSrcMasked) GetOXMName() string {
+	return "tun_src_masked"
+}
+
+func (self *NxmTunSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmTunSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmTunSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmUdpDst struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmUdpDst interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmUdpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmUdpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmUdpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmUdpDst(parent *Oxm, decoder *goloxi.Decoder) (*NxmUdpDst, error) {
+	_nxmudpdst := &NxmUdpDst{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmUdpDst packet too short: %d < 2", decoder.Length())
+	}
+	_nxmudpdst.Value = uint16(decoder.ReadUint16())
+	return _nxmudpdst, nil
+}
+
+func NewNxmUdpDst() *NxmUdpDst {
+	obj := &NxmUdpDst{
+		Oxm: NewOxm(6146),
+	}
+	return obj
+}
+func (self *NxmUdpDst) GetOXMName() string {
+	return "udp_dst"
+}
+
+func (self *NxmUdpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmUdpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmUdpDstMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmUdpDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmUdpDstMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmUdpDstMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmUdpDstMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmUdpDstMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmUdpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmUdpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmUdpDstMasked, error) {
+	_nxmudpdstmasked := &NxmUdpDstMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmUdpDstMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmudpdstmasked.Value = uint16(decoder.ReadUint16())
+	_nxmudpdstmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmudpdstmasked, nil
+}
+
+func NewNxmUdpDstMasked() *NxmUdpDstMasked {
+	obj := &NxmUdpDstMasked{
+		Oxm: NewOxm(6404),
+	}
+	return obj
+}
+func (self *NxmUdpDstMasked) GetOXMName() string {
+	return "udp_dst_masked"
+}
+
+func (self *NxmUdpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmUdpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmUdpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmUdpSrc struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmUdpSrc interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmUdpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmUdpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmUdpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmUdpSrc(parent *Oxm, decoder *goloxi.Decoder) (*NxmUdpSrc, error) {
+	_nxmudpsrc := &NxmUdpSrc{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmUdpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_nxmudpsrc.Value = uint16(decoder.ReadUint16())
+	return _nxmudpsrc, nil
+}
+
+func NewNxmUdpSrc() *NxmUdpSrc {
+	obj := &NxmUdpSrc{
+		Oxm: NewOxm(5634),
+	}
+	return obj
+}
+func (self *NxmUdpSrc) GetOXMName() string {
+	return "udp_src"
+}
+
+func (self *NxmUdpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmUdpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmUdpSrcMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmUdpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmUdpSrcMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmUdpSrcMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmUdpSrcMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmUdpSrcMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmUdpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmUdpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmUdpSrcMasked, error) {
+	_nxmudpsrcmasked := &NxmUdpSrcMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmUdpSrcMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmudpsrcmasked.Value = uint16(decoder.ReadUint16())
+	_nxmudpsrcmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmudpsrcmasked, nil
+}
+
+func NewNxmUdpSrcMasked() *NxmUdpSrcMasked {
+	obj := &NxmUdpSrcMasked{
+		Oxm: NewOxm(5892),
+	}
+	return obj
+}
+func (self *NxmUdpSrcMasked) GetOXMName() string {
+	return "udp_src_masked"
+}
+
+func (self *NxmUdpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmUdpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmUdpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmVlanTci struct {
+	*Oxm
+	Value uint16
+}
+
+type INxmVlanTci interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *NxmVlanTci) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmVlanTci) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmVlanTci) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeNxmVlanTci(parent *Oxm, decoder *goloxi.Decoder) (*NxmVlanTci, error) {
+	_nxmvlantci := &NxmVlanTci{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("NxmVlanTci packet too short: %d < 2", decoder.Length())
+	}
+	_nxmvlantci.Value = uint16(decoder.ReadUint16())
+	return _nxmvlantci, nil
+}
+
+func NewNxmVlanTci() *NxmVlanTci {
+	obj := &NxmVlanTci{
+		Oxm: NewOxm(2050),
+	}
+	return obj
+}
+func (self *NxmVlanTci) GetOXMName() string {
+	return "vlan_tci"
+}
+
+func (self *NxmVlanTci) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmVlanTci) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmVlanTciMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type INxmVlanTciMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *NxmVlanTciMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *NxmVlanTciMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *NxmVlanTciMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *NxmVlanTciMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *NxmVlanTciMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmVlanTciMasked(parent *Oxm, decoder *goloxi.Decoder) (*NxmVlanTciMasked, error) {
+	_nxmvlantcimasked := &NxmVlanTciMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("NxmVlanTciMasked packet too short: %d < 4", decoder.Length())
+	}
+	_nxmvlantcimasked.Value = uint16(decoder.ReadUint16())
+	_nxmvlantcimasked.ValueMask = uint16(decoder.ReadUint16())
+	return _nxmvlantcimasked, nil
+}
+
+func NewNxmVlanTciMasked() *NxmVlanTciMasked {
+	obj := &NxmVlanTciMasked{
+		Oxm: NewOxm(2308),
+	}
+	return obj
+}
+func (self *NxmVlanTciMasked) GetOXMName() string {
+	return "vlan_tci_masked"
+}
+
+func (self *NxmVlanTciMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmVlanTciMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmVlanTciMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmXxreg0 struct {
+	*Oxm
+	Value uint128
+}
+
+type INxmXxreg0 interface {
+	goloxi.IOxm
+	GetValue() uint128
+}
+
+func (self *NxmXxreg0) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg0) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+
+	return nil
+}
+
+func DecodeNxmXxreg0(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg0, error) {
+	_nxmxxreg0 := &NxmXxreg0{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmXxreg0 packet too short: %d < 16", decoder.Length())
+	}
+	_nxmxxreg0.Value = uint128(decoder.ReadUint128())
+	return _nxmxxreg0, nil
+}
+
+func NewNxmXxreg0() *NxmXxreg0 {
+	obj := &NxmXxreg0{
+		Oxm: NewOxm(122384),
+	}
+	return obj
+}
+func (self *NxmXxreg0) GetOXMName() string {
+	return "xxreg0"
+}
+
+func (self *NxmXxreg0) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg0) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmXxreg0Masked struct {
+	*Oxm
+	Value     uint128
+	ValueMask uint128
+}
+
+type INxmXxreg0Masked interface {
+	goloxi.IOxm
+	GetValue() uint128
+	GetValueMask() uint128
+}
+
+func (self *NxmXxreg0Masked) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg0Masked) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg0Masked) GetValueMask() uint128 {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg0Masked) SetValueMask(v uint128) {
+	self.ValueMask = v
+}
+
+func (self *NxmXxreg0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+	encoder.PutUint128(uint128(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmXxreg0Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg0Masked, error) {
+	_nxmxxreg0masked := &NxmXxreg0Masked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmXxreg0Masked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmxxreg0masked.Value = uint128(decoder.ReadUint128())
+	_nxmxxreg0masked.ValueMask = uint128(decoder.ReadUint128())
+	return _nxmxxreg0masked, nil
+}
+
+func NewNxmXxreg0Masked() *NxmXxreg0Masked {
+	obj := &NxmXxreg0Masked{
+		Oxm: NewOxm(122656),
+	}
+	return obj
+}
+func (self *NxmXxreg0Masked) GetOXMName() string {
+	return "xxreg0_masked"
+}
+
+func (self *NxmXxreg0Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg0Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg0Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmXxreg1 struct {
+	*Oxm
+	Value uint128
+}
+
+type INxmXxreg1 interface {
+	goloxi.IOxm
+	GetValue() uint128
+}
+
+func (self *NxmXxreg1) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg1) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+
+	return nil
+}
+
+func DecodeNxmXxreg1(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg1, error) {
+	_nxmxxreg1 := &NxmXxreg1{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmXxreg1 packet too short: %d < 16", decoder.Length())
+	}
+	_nxmxxreg1.Value = uint128(decoder.ReadUint128())
+	return _nxmxxreg1, nil
+}
+
+func NewNxmXxreg1() *NxmXxreg1 {
+	obj := &NxmXxreg1{
+		Oxm: NewOxm(122896),
+	}
+	return obj
+}
+func (self *NxmXxreg1) GetOXMName() string {
+	return "xxreg1"
+}
+
+func (self *NxmXxreg1) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg1) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmXxreg1Masked struct {
+	*Oxm
+	Value     uint128
+	ValueMask uint128
+}
+
+type INxmXxreg1Masked interface {
+	goloxi.IOxm
+	GetValue() uint128
+	GetValueMask() uint128
+}
+
+func (self *NxmXxreg1Masked) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg1Masked) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg1Masked) GetValueMask() uint128 {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg1Masked) SetValueMask(v uint128) {
+	self.ValueMask = v
+}
+
+func (self *NxmXxreg1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+	encoder.PutUint128(uint128(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmXxreg1Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg1Masked, error) {
+	_nxmxxreg1masked := &NxmXxreg1Masked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmXxreg1Masked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmxxreg1masked.Value = uint128(decoder.ReadUint128())
+	_nxmxxreg1masked.ValueMask = uint128(decoder.ReadUint128())
+	return _nxmxxreg1masked, nil
+}
+
+func NewNxmXxreg1Masked() *NxmXxreg1Masked {
+	obj := &NxmXxreg1Masked{
+		Oxm: NewOxm(123168),
+	}
+	return obj
+}
+func (self *NxmXxreg1Masked) GetOXMName() string {
+	return "xxreg1_masked"
+}
+
+func (self *NxmXxreg1Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg1Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg1Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmXxreg2 struct {
+	*Oxm
+	Value uint128
+}
+
+type INxmXxreg2 interface {
+	goloxi.IOxm
+	GetValue() uint128
+}
+
+func (self *NxmXxreg2) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg2) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+
+	return nil
+}
+
+func DecodeNxmXxreg2(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg2, error) {
+	_nxmxxreg2 := &NxmXxreg2{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmXxreg2 packet too short: %d < 16", decoder.Length())
+	}
+	_nxmxxreg2.Value = uint128(decoder.ReadUint128())
+	return _nxmxxreg2, nil
+}
+
+func NewNxmXxreg2() *NxmXxreg2 {
+	obj := &NxmXxreg2{
+		Oxm: NewOxm(123408),
+	}
+	return obj
+}
+func (self *NxmXxreg2) GetOXMName() string {
+	return "xxreg2"
+}
+
+func (self *NxmXxreg2) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg2) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmXxreg2Masked struct {
+	*Oxm
+	Value     uint128
+	ValueMask uint128
+}
+
+type INxmXxreg2Masked interface {
+	goloxi.IOxm
+	GetValue() uint128
+	GetValueMask() uint128
+}
+
+func (self *NxmXxreg2Masked) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg2Masked) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg2Masked) GetValueMask() uint128 {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg2Masked) SetValueMask(v uint128) {
+	self.ValueMask = v
+}
+
+func (self *NxmXxreg2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+	encoder.PutUint128(uint128(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmXxreg2Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg2Masked, error) {
+	_nxmxxreg2masked := &NxmXxreg2Masked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmXxreg2Masked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmxxreg2masked.Value = uint128(decoder.ReadUint128())
+	_nxmxxreg2masked.ValueMask = uint128(decoder.ReadUint128())
+	return _nxmxxreg2masked, nil
+}
+
+func NewNxmXxreg2Masked() *NxmXxreg2Masked {
+	obj := &NxmXxreg2Masked{
+		Oxm: NewOxm(123680),
+	}
+	return obj
+}
+func (self *NxmXxreg2Masked) GetOXMName() string {
+	return "xxreg2_masked"
+}
+
+func (self *NxmXxreg2Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg2Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg2Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type NxmXxreg3 struct {
+	*Oxm
+	Value uint128
+}
+
+type INxmXxreg3 interface {
+	goloxi.IOxm
+	GetValue() uint128
+}
+
+func (self *NxmXxreg3) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg3) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+
+	return nil
+}
+
+func DecodeNxmXxreg3(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg3, error) {
+	_nxmxxreg3 := &NxmXxreg3{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("NxmXxreg3 packet too short: %d < 16", decoder.Length())
+	}
+	_nxmxxreg3.Value = uint128(decoder.ReadUint128())
+	return _nxmxxreg3, nil
+}
+
+func NewNxmXxreg3() *NxmXxreg3 {
+	obj := &NxmXxreg3{
+		Oxm: NewOxm(123920),
+	}
+	return obj
+}
+func (self *NxmXxreg3) GetOXMName() string {
+	return "xxreg3"
+}
+
+func (self *NxmXxreg3) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg3) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type NxmXxreg3Masked struct {
+	*Oxm
+	Value     uint128
+	ValueMask uint128
+}
+
+type INxmXxreg3Masked interface {
+	goloxi.IOxm
+	GetValue() uint128
+	GetValueMask() uint128
+}
+
+func (self *NxmXxreg3Masked) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *NxmXxreg3Masked) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *NxmXxreg3Masked) GetValueMask() uint128 {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg3Masked) SetValueMask(v uint128) {
+	self.ValueMask = v
+}
+
+func (self *NxmXxreg3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+	encoder.PutUint128(uint128(self.ValueMask))
+
+	return nil
+}
+
+func DecodeNxmXxreg3Masked(parent *Oxm, decoder *goloxi.Decoder) (*NxmXxreg3Masked, error) {
+	_nxmxxreg3masked := &NxmXxreg3Masked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("NxmXxreg3Masked packet too short: %d < 32", decoder.Length())
+	}
+	_nxmxxreg3masked.Value = uint128(decoder.ReadUint128())
+	_nxmxxreg3masked.ValueMask = uint128(decoder.ReadUint128())
+	return _nxmxxreg3masked, nil
+}
+
+func NewNxmXxreg3Masked() *NxmXxreg3Masked {
+	obj := &NxmXxreg3Masked{
+		Oxm: NewOxm(124192),
+	}
+	return obj
+}
+func (self *NxmXxreg3Masked) GetOXMName() string {
+	return "xxreg3_masked"
+}
+
+func (self *NxmXxreg3Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *NxmXxreg3Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *NxmXxreg3Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmArpOp struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmArpOp interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmArpOp) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmArpOp) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmArpOp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmArpOp(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpOp, error) {
+	_oxmarpop := &OxmArpOp{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmArpOp packet too short: %d < 2", decoder.Length())
+	}
+	_oxmarpop.Value = uint16(decoder.ReadUint16())
+	return _oxmarpop, nil
+}
+
+func NewOxmArpOp() *OxmArpOp {
+	obj := &OxmArpOp{
+		Oxm: NewOxm(2147494402),
+	}
+	return obj
+}
+func (self *OxmArpOp) GetOXMName() string {
+	return "arp_op"
+}
+
+func (self *OxmArpOp) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpOp) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmArpOpMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmArpOpMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmArpOpMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmArpOpMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmArpOpMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmArpOpMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmArpOpMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmArpOpMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpOpMasked, error) {
+	_oxmarpopmasked := &OxmArpOpMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmArpOpMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmarpopmasked.Value = uint16(decoder.ReadUint16())
+	_oxmarpopmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmarpopmasked, nil
+}
+
+func NewOxmArpOpMasked() *OxmArpOpMasked {
+	obj := &OxmArpOpMasked{
+		Oxm: NewOxm(2147494660),
+	}
+	return obj
+}
+func (self *OxmArpOpMasked) GetOXMName() string {
+	return "arp_op_masked"
+}
+
+func (self *OxmArpOpMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpOpMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmArpOpMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmArpSha struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmArpSha interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmArpSha) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmArpSha) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmArpSha) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmArpSha(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpSha, error) {
+	_oxmarpsha := &OxmArpSha{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmArpSha packet too short: %d < 6", decoder.Length())
+	}
+	_oxmarpsha.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmarpsha, nil
+}
+
+func NewOxmArpSha() *OxmArpSha {
+	obj := &OxmArpSha{
+		Oxm: NewOxm(2147495942),
+	}
+	return obj
+}
+func (self *OxmArpSha) GetOXMName() string {
+	return "arp_sha"
+}
+
+func (self *OxmArpSha) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpSha) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmArpShaMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmArpShaMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmArpShaMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmArpShaMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmArpShaMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmArpShaMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmArpShaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmArpShaMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpShaMasked, error) {
+	_oxmarpshamasked := &OxmArpShaMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmArpShaMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmarpshamasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmarpshamasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmarpshamasked, nil
+}
+
+func NewOxmArpShaMasked() *OxmArpShaMasked {
+	obj := &OxmArpShaMasked{
+		Oxm: NewOxm(2147496204),
+	}
+	return obj
+}
+func (self *OxmArpShaMasked) GetOXMName() string {
+	return "arp_sha_masked"
+}
+
+func (self *OxmArpShaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpShaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmArpShaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmArpSpa struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmArpSpa interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmArpSpa) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmArpSpa) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmArpSpa) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmArpSpa(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpSpa, error) {
+	_oxmarpspa := &OxmArpSpa{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmArpSpa packet too short: %d < 4", decoder.Length())
+	}
+	_oxmarpspa.Value = uint32(decoder.ReadUint32())
+	return _oxmarpspa, nil
+}
+
+func NewOxmArpSpa() *OxmArpSpa {
+	obj := &OxmArpSpa{
+		Oxm: NewOxm(2147494916),
+	}
+	return obj
+}
+func (self *OxmArpSpa) GetOXMName() string {
+	return "arp_spa"
+}
+
+func (self *OxmArpSpa) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpSpa) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmArpSpaMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmArpSpaMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmArpSpaMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmArpSpaMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmArpSpaMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmArpSpaMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmArpSpaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmArpSpaMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpSpaMasked, error) {
+	_oxmarpspamasked := &OxmArpSpaMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmArpSpaMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmarpspamasked.Value = uint32(decoder.ReadUint32())
+	_oxmarpspamasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmarpspamasked, nil
+}
+
+func NewOxmArpSpaMasked() *OxmArpSpaMasked {
+	obj := &OxmArpSpaMasked{
+		Oxm: NewOxm(2147495176),
+	}
+	return obj
+}
+func (self *OxmArpSpaMasked) GetOXMName() string {
+	return "arp_spa_masked"
+}
+
+func (self *OxmArpSpaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpSpaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmArpSpaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmArpTha struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmArpTha interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmArpTha) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmArpTha) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmArpTha) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmArpTha(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpTha, error) {
+	_oxmarptha := &OxmArpTha{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmArpTha packet too short: %d < 6", decoder.Length())
+	}
+	_oxmarptha.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmarptha, nil
+}
+
+func NewOxmArpTha() *OxmArpTha {
+	obj := &OxmArpTha{
+		Oxm: NewOxm(2147496454),
+	}
+	return obj
+}
+func (self *OxmArpTha) GetOXMName() string {
+	return "arp_tha"
+}
+
+func (self *OxmArpTha) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpTha) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmArpThaMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmArpThaMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmArpThaMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmArpThaMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmArpThaMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmArpThaMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmArpThaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmArpThaMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpThaMasked, error) {
+	_oxmarpthamasked := &OxmArpThaMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmArpThaMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmarpthamasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmarpthamasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmarpthamasked, nil
+}
+
+func NewOxmArpThaMasked() *OxmArpThaMasked {
+	obj := &OxmArpThaMasked{
+		Oxm: NewOxm(2147496716),
+	}
+	return obj
+}
+func (self *OxmArpThaMasked) GetOXMName() string {
+	return "arp_tha_masked"
+}
+
+func (self *OxmArpThaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpThaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmArpThaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmArpTpa struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmArpTpa interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmArpTpa) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmArpTpa) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmArpTpa) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmArpTpa(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpTpa, error) {
+	_oxmarptpa := &OxmArpTpa{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmArpTpa packet too short: %d < 4", decoder.Length())
+	}
+	_oxmarptpa.Value = uint32(decoder.ReadUint32())
+	return _oxmarptpa, nil
+}
+
+func NewOxmArpTpa() *OxmArpTpa {
+	obj := &OxmArpTpa{
+		Oxm: NewOxm(2147495428),
+	}
+	return obj
+}
+func (self *OxmArpTpa) GetOXMName() string {
+	return "arp_tpa"
+}
+
+func (self *OxmArpTpa) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpTpa) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmArpTpaMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmArpTpaMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmArpTpaMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmArpTpaMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmArpTpaMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmArpTpaMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmArpTpaMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmArpTpaMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmArpTpaMasked, error) {
+	_oxmarptpamasked := &OxmArpTpaMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmArpTpaMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmarptpamasked.Value = uint32(decoder.ReadUint32())
+	_oxmarptpamasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmarptpamasked, nil
+}
+
+func NewOxmArpTpaMasked() *OxmArpTpaMasked {
+	obj := &OxmArpTpaMasked{
+		Oxm: NewOxm(2147495688),
+	}
+	return obj
+}
+func (self *OxmArpTpaMasked) GetOXMName() string {
+	return "arp_tpa_masked"
+}
+
+func (self *OxmArpTpaMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmArpTpaMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmArpTpaMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnEgrPortGroupId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnEgrPortGroupId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnEgrPortGroupId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnEgrPortGroupId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnEgrPortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnEgrPortGroupId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnEgrPortGroupId, error) {
+	_oxmbsnegrportgroupid := &OxmBsnEgrPortGroupId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnEgrPortGroupId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnegrportgroupid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnegrportgroupid, nil
+}
+
+func NewOxmBsnEgrPortGroupId() *OxmBsnEgrPortGroupId {
+	obj := &OxmBsnEgrPortGroupId{
+		Oxm: NewOxm(200196),
+	}
+	return obj
+}
+func (self *OxmBsnEgrPortGroupId) GetOXMName() string {
+	return "bsn_egr_port_group_id"
+}
+
+func (self *OxmBsnEgrPortGroupId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnEgrPortGroupId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnEgrPortGroupIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnEgrPortGroupIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnEgrPortGroupIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnEgrPortGroupIdMasked, error) {
+	_oxmbsnegrportgroupidmasked := &OxmBsnEgrPortGroupIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnEgrPortGroupIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnegrportgroupidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnegrportgroupidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnegrportgroupidmasked, nil
+}
+
+func NewOxmBsnEgrPortGroupIdMasked() *OxmBsnEgrPortGroupIdMasked {
+	obj := &OxmBsnEgrPortGroupIdMasked{
+		Oxm: NewOxm(200456),
+	}
+	return obj
+}
+func (self *OxmBsnEgrPortGroupIdMasked) GetOXMName() string {
+	return "bsn_egr_port_group_id_masked"
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnEgrPortGroupIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnGlobalVrfAllowed struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmBsnGlobalVrfAllowed interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmBsnGlobalVrfAllowed) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmBsnGlobalVrfAllowed) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmBsnGlobalVrfAllowed) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnGlobalVrfAllowed(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnGlobalVrfAllowed, error) {
+	_oxmbsnglobalvrfallowed := &OxmBsnGlobalVrfAllowed{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmBsnGlobalVrfAllowed packet too short: %d < 1", decoder.Length())
+	}
+	_oxmbsnglobalvrfallowed.Value = uint8(decoder.ReadByte())
+	return _oxmbsnglobalvrfallowed, nil
+}
+
+func NewOxmBsnGlobalVrfAllowed() *OxmBsnGlobalVrfAllowed {
+	obj := &OxmBsnGlobalVrfAllowed{
+		Oxm: NewOxm(198145),
+	}
+	return obj
+}
+func (self *OxmBsnGlobalVrfAllowed) GetOXMName() string {
+	return "bsn_global_vrf_allowed"
+}
+
+func (self *OxmBsnGlobalVrfAllowed) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnGlobalVrfAllowed) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnGlobalVrfAllowedMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmBsnGlobalVrfAllowedMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnGlobalVrfAllowedMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnGlobalVrfAllowedMasked, error) {
+	_oxmbsnglobalvrfallowedmasked := &OxmBsnGlobalVrfAllowedMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmBsnGlobalVrfAllowedMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmbsnglobalvrfallowedmasked.Value = uint8(decoder.ReadByte())
+	_oxmbsnglobalvrfallowedmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmbsnglobalvrfallowedmasked, nil
+}
+
+func NewOxmBsnGlobalVrfAllowedMasked() *OxmBsnGlobalVrfAllowedMasked {
+	obj := &OxmBsnGlobalVrfAllowedMasked{
+		Oxm: NewOxm(198402),
+	}
+	return obj
+}
+func (self *OxmBsnGlobalVrfAllowedMasked) GetOXMName() string {
+	return "bsn_global_vrf_allowed_masked"
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnGlobalVrfAllowedMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnInPorts128 struct {
+	*Oxm
+	Value Bitmap128
+}
+
+type IOxmBsnInPorts128 interface {
+	goloxi.IOxm
+	GetValue() Bitmap128
+}
+
+func (self *OxmBsnInPorts128) GetValue() Bitmap128 {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts128) SetValue(v Bitmap128) {
+	self.Value = v
+}
+
+func (self *OxmBsnInPorts128) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmBsnInPorts128(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInPorts128, error) {
+	_oxmbsninports128 := &OxmBsnInPorts128{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmBsnInPorts128 packet too short: %d < 16", decoder.Length())
+	}
+	_oxmbsninports128.Value.Decode(decoder)
+	return _oxmbsninports128, nil
+}
+
+func NewOxmBsnInPorts128() *OxmBsnInPorts128 {
+	obj := &OxmBsnInPorts128{
+		Oxm: NewOxm(196624),
+	}
+	return obj
+}
+func (self *OxmBsnInPorts128) GetOXMName() string {
+	return "bsn_in_ports_128"
+}
+
+func (self *OxmBsnInPorts128) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts128) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnInPorts128Masked struct {
+	*Oxm
+	Value     Bitmap128
+	ValueMask Bitmap128
+}
+
+type IOxmBsnInPorts128Masked interface {
+	goloxi.IOxm
+	GetValue() Bitmap128
+	GetValueMask() Bitmap128
+}
+
+func (self *OxmBsnInPorts128Masked) GetValue() Bitmap128 {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts128Masked) SetValue(v Bitmap128) {
+	self.Value = v
+}
+
+func (self *OxmBsnInPorts128Masked) GetValueMask() Bitmap128 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInPorts128Masked) SetValueMask(v Bitmap128) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnInPorts128Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+	self.ValueMask.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmBsnInPorts128Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInPorts128Masked, error) {
+	_oxmbsninports128masked := &OxmBsnInPorts128Masked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("OxmBsnInPorts128Masked packet too short: %d < 32", decoder.Length())
+	}
+	_oxmbsninports128masked.Value.Decode(decoder)
+	_oxmbsninports128masked.ValueMask.Decode(decoder)
+	return _oxmbsninports128masked, nil
+}
+
+func NewOxmBsnInPorts128Masked() *OxmBsnInPorts128Masked {
+	obj := &OxmBsnInPorts128Masked{
+		Oxm: NewOxm(196896),
+	}
+	return obj
+}
+func (self *OxmBsnInPorts128Masked) GetOXMName() string {
+	return "bsn_in_ports_128_masked"
+}
+
+func (self *OxmBsnInPorts128Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts128Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInPorts128Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnInPorts512 struct {
+	*Oxm
+	Value Bitmap512
+}
+
+type IOxmBsnInPorts512 interface {
+	goloxi.IOxm
+	GetValue() Bitmap512
+}
+
+func (self *OxmBsnInPorts512) GetValue() Bitmap512 {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts512) SetValue(v Bitmap512) {
+	self.Value = v
+}
+
+func (self *OxmBsnInPorts512) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmBsnInPorts512(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInPorts512, error) {
+	_oxmbsninports512 := &OxmBsnInPorts512{Oxm: parent}
+	if decoder.Length() < 64 {
+		return nil, fmt.Errorf("OxmBsnInPorts512 packet too short: %d < 64", decoder.Length())
+	}
+	_oxmbsninports512.Value.Decode(decoder)
+	return _oxmbsninports512, nil
+}
+
+func NewOxmBsnInPorts512() *OxmBsnInPorts512 {
+	obj := &OxmBsnInPorts512{
+		Oxm: NewOxm(206400),
+	}
+	return obj
+}
+func (self *OxmBsnInPorts512) GetOXMName() string {
+	return "bsn_in_ports_512"
+}
+
+func (self *OxmBsnInPorts512) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts512) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnInPorts512Masked struct {
+	*Oxm
+	Value     Bitmap512
+	ValueMask Bitmap512
+}
+
+type IOxmBsnInPorts512Masked interface {
+	goloxi.IOxm
+	GetValue() Bitmap512
+	GetValueMask() Bitmap512
+}
+
+func (self *OxmBsnInPorts512Masked) GetValue() Bitmap512 {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts512Masked) SetValue(v Bitmap512) {
+	self.Value = v
+}
+
+func (self *OxmBsnInPorts512Masked) GetValueMask() Bitmap512 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInPorts512Masked) SetValueMask(v Bitmap512) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnInPorts512Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+	self.ValueMask.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmBsnInPorts512Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInPorts512Masked, error) {
+	_oxmbsninports512masked := &OxmBsnInPorts512Masked{Oxm: parent}
+	if decoder.Length() < 128 {
+		return nil, fmt.Errorf("OxmBsnInPorts512Masked packet too short: %d < 128", decoder.Length())
+	}
+	_oxmbsninports512masked.Value.Decode(decoder)
+	_oxmbsninports512masked.ValueMask.Decode(decoder)
+	return _oxmbsninports512masked, nil
+}
+
+func NewOxmBsnInPorts512Masked() *OxmBsnInPorts512Masked {
+	obj := &OxmBsnInPorts512Masked{
+		Oxm: NewOxm(206720),
+	}
+	return obj
+}
+func (self *OxmBsnInPorts512Masked) GetOXMName() string {
+	return "bsn_in_ports_512_masked"
+}
+
+func (self *OxmBsnInPorts512Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInPorts512Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInPorts512Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnIngressPortGroupId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnIngressPortGroupId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnIngressPortGroupId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnIngressPortGroupId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnIngressPortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnIngressPortGroupId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnIngressPortGroupId, error) {
+	_oxmbsningressportgroupid := &OxmBsnIngressPortGroupId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnIngressPortGroupId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsningressportgroupid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsningressportgroupid, nil
+}
+
+func NewOxmBsnIngressPortGroupId() *OxmBsnIngressPortGroupId {
+	obj := &OxmBsnIngressPortGroupId{
+		Oxm: NewOxm(206852),
+	}
+	return obj
+}
+func (self *OxmBsnIngressPortGroupId) GetOXMName() string {
+	return "bsn_ingress_port_group_id"
+}
+
+func (self *OxmBsnIngressPortGroupId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnIngressPortGroupId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnIngressPortGroupIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnIngressPortGroupIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnIngressPortGroupIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnIngressPortGroupIdMasked, error) {
+	_oxmbsningressportgroupidmasked := &OxmBsnIngressPortGroupIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnIngressPortGroupIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsningressportgroupidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsningressportgroupidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsningressportgroupidmasked, nil
+}
+
+func NewOxmBsnIngressPortGroupIdMasked() *OxmBsnIngressPortGroupIdMasked {
+	obj := &OxmBsnIngressPortGroupIdMasked{
+		Oxm: NewOxm(207112),
+	}
+	return obj
+}
+func (self *OxmBsnIngressPortGroupIdMasked) GetOXMName() string {
+	return "bsn_ingress_port_group_id_masked"
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnIngressPortGroupIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnInnerEthDst struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmBsnInnerEthDst interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmBsnInnerEthDst) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthDst) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmBsnInnerEthDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmBsnInnerEthDst(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInnerEthDst, error) {
+	_oxmbsninnerethdst := &OxmBsnInnerEthDst{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmBsnInnerEthDst packet too short: %d < 6", decoder.Length())
+	}
+	_oxmbsninnerethdst.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmbsninnerethdst, nil
+}
+
+func NewOxmBsnInnerEthDst() *OxmBsnInnerEthDst {
+	obj := &OxmBsnInnerEthDst{
+		Oxm: NewOxm(207878),
+	}
+	return obj
+}
+func (self *OxmBsnInnerEthDst) GetOXMName() string {
+	return "bsn_inner_eth_dst"
+}
+
+func (self *OxmBsnInnerEthDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnInnerEthDstMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmBsnInnerEthDstMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmBsnInnerEthDstMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthDstMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmBsnInnerEthDstMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInnerEthDstMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnInnerEthDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmBsnInnerEthDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInnerEthDstMasked, error) {
+	_oxmbsninnerethdstmasked := &OxmBsnInnerEthDstMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmBsnInnerEthDstMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmbsninnerethdstmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmbsninnerethdstmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmbsninnerethdstmasked, nil
+}
+
+func NewOxmBsnInnerEthDstMasked() *OxmBsnInnerEthDstMasked {
+	obj := &OxmBsnInnerEthDstMasked{
+		Oxm: NewOxm(208140),
+	}
+	return obj
+}
+func (self *OxmBsnInnerEthDstMasked) GetOXMName() string {
+	return "bsn_inner_eth_dst_masked"
+}
+
+func (self *OxmBsnInnerEthDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInnerEthDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnInnerEthSrc struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmBsnInnerEthSrc interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmBsnInnerEthSrc) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthSrc) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmBsnInnerEthSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmBsnInnerEthSrc(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInnerEthSrc, error) {
+	_oxmbsninnerethsrc := &OxmBsnInnerEthSrc{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmBsnInnerEthSrc packet too short: %d < 6", decoder.Length())
+	}
+	_oxmbsninnerethsrc.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmbsninnerethsrc, nil
+}
+
+func NewOxmBsnInnerEthSrc() *OxmBsnInnerEthSrc {
+	obj := &OxmBsnInnerEthSrc{
+		Oxm: NewOxm(208390),
+	}
+	return obj
+}
+func (self *OxmBsnInnerEthSrc) GetOXMName() string {
+	return "bsn_inner_eth_src"
+}
+
+func (self *OxmBsnInnerEthSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnInnerEthSrcMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmBsnInnerEthSrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmBsnInnerEthSrcMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthSrcMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmBsnInnerEthSrcMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInnerEthSrcMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnInnerEthSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmBsnInnerEthSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInnerEthSrcMasked, error) {
+	_oxmbsninnerethsrcmasked := &OxmBsnInnerEthSrcMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmBsnInnerEthSrcMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmbsninnerethsrcmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmbsninnerethsrcmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmbsninnerethsrcmasked, nil
+}
+
+func NewOxmBsnInnerEthSrcMasked() *OxmBsnInnerEthSrcMasked {
+	obj := &OxmBsnInnerEthSrcMasked{
+		Oxm: NewOxm(208652),
+	}
+	return obj
+}
+func (self *OxmBsnInnerEthSrcMasked) GetOXMName() string {
+	return "bsn_inner_eth_src_masked"
+}
+
+func (self *OxmBsnInnerEthSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInnerEthSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInnerEthSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnInnerVlanVid struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmBsnInnerVlanVid interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmBsnInnerVlanVid) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmBsnInnerVlanVid) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmBsnInnerVlanVid) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnInnerVlanVid(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInnerVlanVid, error) {
+	_oxmbsninnervlanvid := &OxmBsnInnerVlanVid{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmBsnInnerVlanVid packet too short: %d < 2", decoder.Length())
+	}
+	_oxmbsninnervlanvid.Value = uint16(decoder.ReadUint16())
+	return _oxmbsninnervlanvid, nil
+}
+
+func NewOxmBsnInnerVlanVid() *OxmBsnInnerVlanVid {
+	obj := &OxmBsnInnerVlanVid{
+		Oxm: NewOxm(208898),
+	}
+	return obj
+}
+func (self *OxmBsnInnerVlanVid) GetOXMName() string {
+	return "bsn_inner_vlan_vid"
+}
+
+func (self *OxmBsnInnerVlanVid) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInnerVlanVid) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnInnerVlanVidMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmBsnInnerVlanVidMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmBsnInnerVlanVidMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmBsnInnerVlanVidMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmBsnInnerVlanVidMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInnerVlanVidMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnInnerVlanVidMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnInnerVlanVidMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnInnerVlanVidMasked, error) {
+	_oxmbsninnervlanvidmasked := &OxmBsnInnerVlanVidMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnInnerVlanVidMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsninnervlanvidmasked.Value = uint16(decoder.ReadUint16())
+	_oxmbsninnervlanvidmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmbsninnervlanvidmasked, nil
+}
+
+func NewOxmBsnInnerVlanVidMasked() *OxmBsnInnerVlanVidMasked {
+	obj := &OxmBsnInnerVlanVidMasked{
+		Oxm: NewOxm(209156),
+	}
+	return obj
+}
+func (self *OxmBsnInnerVlanVidMasked) GetOXMName() string {
+	return "bsn_inner_vlan_vid_masked"
+}
+
+func (self *OxmBsnInnerVlanVidMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnInnerVlanVidMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnInnerVlanVidMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnIpFragmentation struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmBsnIpFragmentation interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmBsnIpFragmentation) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmBsnIpFragmentation) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmBsnIpFragmentation) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnIpFragmentation(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnIpFragmentation, error) {
+	_oxmbsnipfragmentation := &OxmBsnIpFragmentation{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmBsnIpFragmentation packet too short: %d < 1", decoder.Length())
+	}
+	_oxmbsnipfragmentation.Value = uint8(decoder.ReadByte())
+	return _oxmbsnipfragmentation, nil
+}
+
+func NewOxmBsnIpFragmentation() *OxmBsnIpFragmentation {
+	obj := &OxmBsnIpFragmentation{
+		Oxm: NewOxm(209921),
+	}
+	return obj
+}
+func (self *OxmBsnIpFragmentation) GetOXMName() string {
+	return "bsn_ip_fragmentation"
+}
+
+func (self *OxmBsnIpFragmentation) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnIpFragmentation) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnIpFragmentationMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmBsnIpFragmentationMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmBsnIpFragmentationMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmBsnIpFragmentationMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmBsnIpFragmentationMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnIpFragmentationMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnIpFragmentationMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnIpFragmentationMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnIpFragmentationMasked, error) {
+	_oxmbsnipfragmentationmasked := &OxmBsnIpFragmentationMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmBsnIpFragmentationMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmbsnipfragmentationmasked.Value = uint8(decoder.ReadByte())
+	_oxmbsnipfragmentationmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmbsnipfragmentationmasked, nil
+}
+
+func NewOxmBsnIpFragmentationMasked() *OxmBsnIpFragmentationMasked {
+	obj := &OxmBsnIpFragmentationMasked{
+		Oxm: NewOxm(210178),
+	}
+	return obj
+}
+func (self *OxmBsnIpFragmentationMasked) GetOXMName() string {
+	return "bsn_ip_fragmentation_masked"
+}
+
+func (self *OxmBsnIpFragmentationMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnIpFragmentationMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnIpFragmentationMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnL2CacheHit struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmBsnL2CacheHit interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmBsnL2CacheHit) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmBsnL2CacheHit) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmBsnL2CacheHit) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnL2CacheHit(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL2CacheHit, error) {
+	_oxmbsnl2cachehit := &OxmBsnL2CacheHit{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmBsnL2CacheHit packet too short: %d < 1", decoder.Length())
+	}
+	_oxmbsnl2cachehit.Value = uint8(decoder.ReadByte())
+	return _oxmbsnl2cachehit, nil
+}
+
+func NewOxmBsnL2CacheHit() *OxmBsnL2CacheHit {
+	obj := &OxmBsnL2CacheHit{
+		Oxm: NewOxm(205825),
+	}
+	return obj
+}
+func (self *OxmBsnL2CacheHit) GetOXMName() string {
+	return "bsn_l2_cache_hit"
+}
+
+func (self *OxmBsnL2CacheHit) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL2CacheHit) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnL2CacheHitMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmBsnL2CacheHitMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmBsnL2CacheHitMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmBsnL2CacheHitMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmBsnL2CacheHitMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL2CacheHitMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnL2CacheHitMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnL2CacheHitMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL2CacheHitMasked, error) {
+	_oxmbsnl2cachehitmasked := &OxmBsnL2CacheHitMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmBsnL2CacheHitMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmbsnl2cachehitmasked.Value = uint8(decoder.ReadByte())
+	_oxmbsnl2cachehitmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmbsnl2cachehitmasked, nil
+}
+
+func NewOxmBsnL2CacheHitMasked() *OxmBsnL2CacheHitMasked {
+	obj := &OxmBsnL2CacheHitMasked{
+		Oxm: NewOxm(206082),
+	}
+	return obj
+}
+func (self *OxmBsnL2CacheHitMasked) GetOXMName() string {
+	return "bsn_l2_cache_hit_masked"
+}
+
+func (self *OxmBsnL2CacheHitMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL2CacheHitMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL2CacheHitMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnL3DstClassId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnL3DstClassId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnL3DstClassId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnL3DstClassId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnL3DstClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnL3DstClassId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL3DstClassId, error) {
+	_oxmbsnl3dstclassid := &OxmBsnL3DstClassId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnL3DstClassId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnl3dstclassid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnl3dstclassid, nil
+}
+
+func NewOxmBsnL3DstClassId() *OxmBsnL3DstClassId {
+	obj := &OxmBsnL3DstClassId{
+		Oxm: NewOxm(199684),
+	}
+	return obj
+}
+func (self *OxmBsnL3DstClassId) GetOXMName() string {
+	return "bsn_l3_dst_class_id"
+}
+
+func (self *OxmBsnL3DstClassId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL3DstClassId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnL3DstClassIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnL3DstClassIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnL3DstClassIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnL3DstClassIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnL3DstClassIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL3DstClassIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnL3DstClassIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnL3DstClassIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL3DstClassIdMasked, error) {
+	_oxmbsnl3dstclassidmasked := &OxmBsnL3DstClassIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnL3DstClassIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnl3dstclassidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnl3dstclassidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnl3dstclassidmasked, nil
+}
+
+func NewOxmBsnL3DstClassIdMasked() *OxmBsnL3DstClassIdMasked {
+	obj := &OxmBsnL3DstClassIdMasked{
+		Oxm: NewOxm(199944),
+	}
+	return obj
+}
+func (self *OxmBsnL3DstClassIdMasked) GetOXMName() string {
+	return "bsn_l3_dst_class_id_masked"
+}
+
+func (self *OxmBsnL3DstClassIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL3DstClassIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL3DstClassIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnL3InterfaceClassId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnL3InterfaceClassId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnL3InterfaceClassId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnL3InterfaceClassId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnL3InterfaceClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnL3InterfaceClassId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL3InterfaceClassId, error) {
+	_oxmbsnl3interfaceclassid := &OxmBsnL3InterfaceClassId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnL3InterfaceClassId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnl3interfaceclassid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnl3interfaceclassid, nil
+}
+
+func NewOxmBsnL3InterfaceClassId() *OxmBsnL3InterfaceClassId {
+	obj := &OxmBsnL3InterfaceClassId{
+		Oxm: NewOxm(198660),
+	}
+	return obj
+}
+func (self *OxmBsnL3InterfaceClassId) GetOXMName() string {
+	return "bsn_l3_interface_class_id"
+}
+
+func (self *OxmBsnL3InterfaceClassId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL3InterfaceClassId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnL3InterfaceClassIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnL3InterfaceClassIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnL3InterfaceClassIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL3InterfaceClassIdMasked, error) {
+	_oxmbsnl3interfaceclassidmasked := &OxmBsnL3InterfaceClassIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnL3InterfaceClassIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnl3interfaceclassidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnl3interfaceclassidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnl3interfaceclassidmasked, nil
+}
+
+func NewOxmBsnL3InterfaceClassIdMasked() *OxmBsnL3InterfaceClassIdMasked {
+	obj := &OxmBsnL3InterfaceClassIdMasked{
+		Oxm: NewOxm(198920),
+	}
+	return obj
+}
+func (self *OxmBsnL3InterfaceClassIdMasked) GetOXMName() string {
+	return "bsn_l3_interface_class_id_masked"
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL3InterfaceClassIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnL3SrcClassId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnL3SrcClassId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnL3SrcClassId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnL3SrcClassId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnL3SrcClassId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnL3SrcClassId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL3SrcClassId, error) {
+	_oxmbsnl3srcclassid := &OxmBsnL3SrcClassId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnL3SrcClassId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnl3srcclassid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnl3srcclassid, nil
+}
+
+func NewOxmBsnL3SrcClassId() *OxmBsnL3SrcClassId {
+	obj := &OxmBsnL3SrcClassId{
+		Oxm: NewOxm(199172),
+	}
+	return obj
+}
+func (self *OxmBsnL3SrcClassId) GetOXMName() string {
+	return "bsn_l3_src_class_id"
+}
+
+func (self *OxmBsnL3SrcClassId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL3SrcClassId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnL3SrcClassIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnL3SrcClassIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnL3SrcClassIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnL3SrcClassIdMasked, error) {
+	_oxmbsnl3srcclassidmasked := &OxmBsnL3SrcClassIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnL3SrcClassIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnl3srcclassidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnl3srcclassidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnl3srcclassidmasked, nil
+}
+
+func NewOxmBsnL3SrcClassIdMasked() *OxmBsnL3SrcClassIdMasked {
+	obj := &OxmBsnL3SrcClassIdMasked{
+		Oxm: NewOxm(199432),
+	}
+	return obj
+}
+func (self *OxmBsnL3SrcClassIdMasked) GetOXMName() string {
+	return "bsn_l3_src_class_id_masked"
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnL3SrcClassIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnLagId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnLagId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnLagId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnLagId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnLagId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnLagId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnLagId, error) {
+	_oxmbsnlagid := &OxmBsnLagId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnLagId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnlagid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnlagid, nil
+}
+
+func NewOxmBsnLagId() *OxmBsnLagId {
+	obj := &OxmBsnLagId{
+		Oxm: NewOxm(197124),
+	}
+	return obj
+}
+func (self *OxmBsnLagId) GetOXMName() string {
+	return "bsn_lag_id"
+}
+
+func (self *OxmBsnLagId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnLagId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnLagIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnLagIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnLagIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnLagIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnLagIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnLagIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnLagIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnLagIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnLagIdMasked, error) {
+	_oxmbsnlagidmasked := &OxmBsnLagIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnLagIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnlagidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnlagidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnlagidmasked, nil
+}
+
+func NewOxmBsnLagIdMasked() *OxmBsnLagIdMasked {
+	obj := &OxmBsnLagIdMasked{
+		Oxm: NewOxm(197384),
+	}
+	return obj
+}
+func (self *OxmBsnLagIdMasked) GetOXMName() string {
+	return "bsn_lag_id_masked"
+}
+
+func (self *OxmBsnLagIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnLagIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnLagIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnTcpFlags struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmBsnTcpFlags interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmBsnTcpFlags) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmBsnTcpFlags) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmBsnTcpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnTcpFlags(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnTcpFlags, error) {
+	_oxmbsntcpflags := &OxmBsnTcpFlags{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmBsnTcpFlags packet too short: %d < 2", decoder.Length())
+	}
+	_oxmbsntcpflags.Value = uint16(decoder.ReadUint16())
+	return _oxmbsntcpflags, nil
+}
+
+func NewOxmBsnTcpFlags() *OxmBsnTcpFlags {
+	obj := &OxmBsnTcpFlags{
+		Oxm: NewOxm(204802),
+	}
+	return obj
+}
+func (self *OxmBsnTcpFlags) GetOXMName() string {
+	return "bsn_tcp_flags"
+}
+
+func (self *OxmBsnTcpFlags) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnTcpFlags) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnTcpFlagsMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmBsnTcpFlagsMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmBsnTcpFlagsMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmBsnTcpFlagsMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmBsnTcpFlagsMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnTcpFlagsMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnTcpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnTcpFlagsMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnTcpFlagsMasked, error) {
+	_oxmbsntcpflagsmasked := &OxmBsnTcpFlagsMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnTcpFlagsMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsntcpflagsmasked.Value = uint16(decoder.ReadUint16())
+	_oxmbsntcpflagsmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmbsntcpflagsmasked, nil
+}
+
+func NewOxmBsnTcpFlagsMasked() *OxmBsnTcpFlagsMasked {
+	obj := &OxmBsnTcpFlagsMasked{
+		Oxm: NewOxm(205060),
+	}
+	return obj
+}
+func (self *OxmBsnTcpFlagsMasked) GetOXMName() string {
+	return "bsn_tcp_flags_masked"
+}
+
+func (self *OxmBsnTcpFlagsMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnTcpFlagsMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnTcpFlagsMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf0 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf0 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf0) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf0) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf0) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf0(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf0, error) {
+	_oxmbsnudf0 := &OxmBsnUdf0{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf0 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf0.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf0, nil
+}
+
+func NewOxmBsnUdf0() *OxmBsnUdf0 {
+	obj := &OxmBsnUdf0{
+		Oxm: NewOxm(200708),
+	}
+	return obj
+}
+func (self *OxmBsnUdf0) GetOXMName() string {
+	return "bsn_udf0"
+}
+
+func (self *OxmBsnUdf0) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf0) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf0Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf0Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf0Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf0Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf0Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf0Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf0Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf0Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf0Masked, error) {
+	_oxmbsnudf0masked := &OxmBsnUdf0Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf0Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf0masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf0masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf0masked, nil
+}
+
+func NewOxmBsnUdf0Masked() *OxmBsnUdf0Masked {
+	obj := &OxmBsnUdf0Masked{
+		Oxm: NewOxm(200968),
+	}
+	return obj
+}
+func (self *OxmBsnUdf0Masked) GetOXMName() string {
+	return "bsn_udf0_masked"
+}
+
+func (self *OxmBsnUdf0Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf0Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf0Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf1 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf1 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf1) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf1) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf1) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf1(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf1, error) {
+	_oxmbsnudf1 := &OxmBsnUdf1{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf1 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf1.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf1, nil
+}
+
+func NewOxmBsnUdf1() *OxmBsnUdf1 {
+	obj := &OxmBsnUdf1{
+		Oxm: NewOxm(201220),
+	}
+	return obj
+}
+func (self *OxmBsnUdf1) GetOXMName() string {
+	return "bsn_udf1"
+}
+
+func (self *OxmBsnUdf1) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf1) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf1Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf1Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf1Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf1Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf1Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf1Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf1Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf1Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf1Masked, error) {
+	_oxmbsnudf1masked := &OxmBsnUdf1Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf1Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf1masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf1masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf1masked, nil
+}
+
+func NewOxmBsnUdf1Masked() *OxmBsnUdf1Masked {
+	obj := &OxmBsnUdf1Masked{
+		Oxm: NewOxm(201480),
+	}
+	return obj
+}
+func (self *OxmBsnUdf1Masked) GetOXMName() string {
+	return "bsn_udf1_masked"
+}
+
+func (self *OxmBsnUdf1Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf1Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf1Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf2 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf2 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf2) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf2) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf2) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf2(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf2, error) {
+	_oxmbsnudf2 := &OxmBsnUdf2{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf2 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf2.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf2, nil
+}
+
+func NewOxmBsnUdf2() *OxmBsnUdf2 {
+	obj := &OxmBsnUdf2{
+		Oxm: NewOxm(201732),
+	}
+	return obj
+}
+func (self *OxmBsnUdf2) GetOXMName() string {
+	return "bsn_udf2"
+}
+
+func (self *OxmBsnUdf2) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf2) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf2Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf2Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf2Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf2Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf2Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf2Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf2Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf2Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf2Masked, error) {
+	_oxmbsnudf2masked := &OxmBsnUdf2Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf2Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf2masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf2masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf2masked, nil
+}
+
+func NewOxmBsnUdf2Masked() *OxmBsnUdf2Masked {
+	obj := &OxmBsnUdf2Masked{
+		Oxm: NewOxm(201992),
+	}
+	return obj
+}
+func (self *OxmBsnUdf2Masked) GetOXMName() string {
+	return "bsn_udf2_masked"
+}
+
+func (self *OxmBsnUdf2Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf2Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf2Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf3 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf3 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf3) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf3) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf3) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf3(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf3, error) {
+	_oxmbsnudf3 := &OxmBsnUdf3{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf3 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf3.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf3, nil
+}
+
+func NewOxmBsnUdf3() *OxmBsnUdf3 {
+	obj := &OxmBsnUdf3{
+		Oxm: NewOxm(202244),
+	}
+	return obj
+}
+func (self *OxmBsnUdf3) GetOXMName() string {
+	return "bsn_udf3"
+}
+
+func (self *OxmBsnUdf3) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf3) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf3Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf3Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf3Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf3Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf3Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf3Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf3Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf3Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf3Masked, error) {
+	_oxmbsnudf3masked := &OxmBsnUdf3Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf3Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf3masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf3masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf3masked, nil
+}
+
+func NewOxmBsnUdf3Masked() *OxmBsnUdf3Masked {
+	obj := &OxmBsnUdf3Masked{
+		Oxm: NewOxm(202504),
+	}
+	return obj
+}
+func (self *OxmBsnUdf3Masked) GetOXMName() string {
+	return "bsn_udf3_masked"
+}
+
+func (self *OxmBsnUdf3Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf3Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf3Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf4 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf4 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf4) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf4) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf4) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf4(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf4, error) {
+	_oxmbsnudf4 := &OxmBsnUdf4{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf4 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf4.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf4, nil
+}
+
+func NewOxmBsnUdf4() *OxmBsnUdf4 {
+	obj := &OxmBsnUdf4{
+		Oxm: NewOxm(202756),
+	}
+	return obj
+}
+func (self *OxmBsnUdf4) GetOXMName() string {
+	return "bsn_udf4"
+}
+
+func (self *OxmBsnUdf4) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf4) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf4Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf4Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf4Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf4Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf4Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf4Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf4Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf4Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf4Masked, error) {
+	_oxmbsnudf4masked := &OxmBsnUdf4Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf4Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf4masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf4masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf4masked, nil
+}
+
+func NewOxmBsnUdf4Masked() *OxmBsnUdf4Masked {
+	obj := &OxmBsnUdf4Masked{
+		Oxm: NewOxm(203016),
+	}
+	return obj
+}
+func (self *OxmBsnUdf4Masked) GetOXMName() string {
+	return "bsn_udf4_masked"
+}
+
+func (self *OxmBsnUdf4Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf4Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf4Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf5 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf5 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf5) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf5) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf5) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf5(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf5, error) {
+	_oxmbsnudf5 := &OxmBsnUdf5{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf5 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf5.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf5, nil
+}
+
+func NewOxmBsnUdf5() *OxmBsnUdf5 {
+	obj := &OxmBsnUdf5{
+		Oxm: NewOxm(203268),
+	}
+	return obj
+}
+func (self *OxmBsnUdf5) GetOXMName() string {
+	return "bsn_udf5"
+}
+
+func (self *OxmBsnUdf5) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf5) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf5Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf5Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf5Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf5Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf5Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf5Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf5Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf5Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf5Masked, error) {
+	_oxmbsnudf5masked := &OxmBsnUdf5Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf5Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf5masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf5masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf5masked, nil
+}
+
+func NewOxmBsnUdf5Masked() *OxmBsnUdf5Masked {
+	obj := &OxmBsnUdf5Masked{
+		Oxm: NewOxm(203528),
+	}
+	return obj
+}
+func (self *OxmBsnUdf5Masked) GetOXMName() string {
+	return "bsn_udf5_masked"
+}
+
+func (self *OxmBsnUdf5Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf5Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf5Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf6 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf6 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf6) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf6) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf6) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf6(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf6, error) {
+	_oxmbsnudf6 := &OxmBsnUdf6{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf6 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf6.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf6, nil
+}
+
+func NewOxmBsnUdf6() *OxmBsnUdf6 {
+	obj := &OxmBsnUdf6{
+		Oxm: NewOxm(203780),
+	}
+	return obj
+}
+func (self *OxmBsnUdf6) GetOXMName() string {
+	return "bsn_udf6"
+}
+
+func (self *OxmBsnUdf6) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf6) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf6Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf6Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf6Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf6Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf6Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf6Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf6Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf6Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf6Masked, error) {
+	_oxmbsnudf6masked := &OxmBsnUdf6Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf6Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf6masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf6masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf6masked, nil
+}
+
+func NewOxmBsnUdf6Masked() *OxmBsnUdf6Masked {
+	obj := &OxmBsnUdf6Masked{
+		Oxm: NewOxm(204040),
+	}
+	return obj
+}
+func (self *OxmBsnUdf6Masked) GetOXMName() string {
+	return "bsn_udf6_masked"
+}
+
+func (self *OxmBsnUdf6Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf6Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf6Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnUdf7 struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnUdf7 interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnUdf7) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf7) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf7) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf7(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf7, error) {
+	_oxmbsnudf7 := &OxmBsnUdf7{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnUdf7 packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnudf7.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnudf7, nil
+}
+
+func NewOxmBsnUdf7() *OxmBsnUdf7 {
+	obj := &OxmBsnUdf7{
+		Oxm: NewOxm(204292),
+	}
+	return obj
+}
+func (self *OxmBsnUdf7) GetOXMName() string {
+	return "bsn_udf7"
+}
+
+func (self *OxmBsnUdf7) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf7) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnUdf7Masked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnUdf7Masked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnUdf7Masked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnUdf7Masked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnUdf7Masked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf7Masked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnUdf7Masked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnUdf7Masked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnUdf7Masked, error) {
+	_oxmbsnudf7masked := &OxmBsnUdf7Masked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnUdf7Masked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnudf7masked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnudf7masked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnudf7masked, nil
+}
+
+func NewOxmBsnUdf7Masked() *OxmBsnUdf7Masked {
+	obj := &OxmBsnUdf7Masked{
+		Oxm: NewOxm(204552),
+	}
+	return obj
+}
+func (self *OxmBsnUdf7Masked) GetOXMName() string {
+	return "bsn_udf7_masked"
+}
+
+func (self *OxmBsnUdf7Masked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnUdf7Masked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnUdf7Masked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnVfi struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmBsnVfi interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmBsnVfi) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmBsnVfi) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmBsnVfi) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnVfi(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVfi, error) {
+	_oxmbsnvfi := &OxmBsnVfi{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmBsnVfi packet too short: %d < 2", decoder.Length())
+	}
+	_oxmbsnvfi.Value = uint16(decoder.ReadUint16())
+	return _oxmbsnvfi, nil
+}
+
+func NewOxmBsnVfi() *OxmBsnVfi {
+	obj := &OxmBsnVfi{
+		Oxm: NewOxm(209410),
+	}
+	return obj
+}
+func (self *OxmBsnVfi) GetOXMName() string {
+	return "bsn_vfi"
+}
+
+func (self *OxmBsnVfi) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVfi) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnVfiMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmBsnVfiMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmBsnVfiMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmBsnVfiMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmBsnVfiMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVfiMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnVfiMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnVfiMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVfiMasked, error) {
+	_oxmbsnvfimasked := &OxmBsnVfiMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnVfiMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnvfimasked.Value = uint16(decoder.ReadUint16())
+	_oxmbsnvfimasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmbsnvfimasked, nil
+}
+
+func NewOxmBsnVfiMasked() *OxmBsnVfiMasked {
+	obj := &OxmBsnVfiMasked{
+		Oxm: NewOxm(209668),
+	}
+	return obj
+}
+func (self *OxmBsnVfiMasked) GetOXMName() string {
+	return "bsn_vfi_masked"
+}
+
+func (self *OxmBsnVfiMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVfiMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVfiMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnVlanXlatePortGroupId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnVlanXlatePortGroupId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnVlanXlatePortGroupId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnVlanXlatePortGroupId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnVlanXlatePortGroupId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnVlanXlatePortGroupId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVlanXlatePortGroupId, error) {
+	_oxmbsnvlanxlateportgroupid := &OxmBsnVlanXlatePortGroupId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnVlanXlatePortGroupId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnvlanxlateportgroupid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnvlanxlateportgroupid, nil
+}
+
+func NewOxmBsnVlanXlatePortGroupId() *OxmBsnVlanXlatePortGroupId {
+	obj := &OxmBsnVlanXlatePortGroupId{
+		Oxm: NewOxm(205316),
+	}
+	return obj
+}
+func (self *OxmBsnVlanXlatePortGroupId) GetOXMName() string {
+	return "bsn_vlan_xlate_port_group_id"
+}
+
+func (self *OxmBsnVlanXlatePortGroupId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVlanXlatePortGroupId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnVlanXlatePortGroupIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnVlanXlatePortGroupIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnVlanXlatePortGroupIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVlanXlatePortGroupIdMasked, error) {
+	_oxmbsnvlanxlateportgroupidmasked := &OxmBsnVlanXlatePortGroupIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnVlanXlatePortGroupIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnvlanxlateportgroupidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnvlanxlateportgroupidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnvlanxlateportgroupidmasked, nil
+}
+
+func NewOxmBsnVlanXlatePortGroupIdMasked() *OxmBsnVlanXlatePortGroupIdMasked {
+	obj := &OxmBsnVlanXlatePortGroupIdMasked{
+		Oxm: NewOxm(205576),
+	}
+	return obj
+}
+func (self *OxmBsnVlanXlatePortGroupIdMasked) GetOXMName() string {
+	return "bsn_vlan_xlate_port_group_id_masked"
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVlanXlatePortGroupIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnVrf struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnVrf interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnVrf) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnVrf) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnVrf) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnVrf(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVrf, error) {
+	_oxmbsnvrf := &OxmBsnVrf{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnVrf packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnvrf.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnvrf, nil
+}
+
+func NewOxmBsnVrf() *OxmBsnVrf {
+	obj := &OxmBsnVrf{
+		Oxm: NewOxm(197636),
+	}
+	return obj
+}
+func (self *OxmBsnVrf) GetOXMName() string {
+	return "bsn_vrf"
+}
+
+func (self *OxmBsnVrf) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVrf) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnVrfMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnVrfMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnVrfMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnVrfMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnVrfMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVrfMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnVrfMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnVrfMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVrfMasked, error) {
+	_oxmbsnvrfmasked := &OxmBsnVrfMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnVrfMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnvrfmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnvrfmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnvrfmasked, nil
+}
+
+func NewOxmBsnVrfMasked() *OxmBsnVrfMasked {
+	obj := &OxmBsnVrfMasked{
+		Oxm: NewOxm(197896),
+	}
+	return obj
+}
+func (self *OxmBsnVrfMasked) GetOXMName() string {
+	return "bsn_vrf_masked"
+}
+
+func (self *OxmBsnVrfMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVrfMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVrfMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmBsnVxlanNetworkId struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmBsnVxlanNetworkId interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmBsnVxlanNetworkId) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnVxlanNetworkId) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnVxlanNetworkId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmBsnVxlanNetworkId(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVxlanNetworkId, error) {
+	_oxmbsnvxlannetworkid := &OxmBsnVxlanNetworkId{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmBsnVxlanNetworkId packet too short: %d < 4", decoder.Length())
+	}
+	_oxmbsnvxlannetworkid.Value = uint32(decoder.ReadUint32())
+	return _oxmbsnvxlannetworkid, nil
+}
+
+func NewOxmBsnVxlanNetworkId() *OxmBsnVxlanNetworkId {
+	obj := &OxmBsnVxlanNetworkId{
+		Oxm: NewOxm(207364),
+	}
+	return obj
+}
+func (self *OxmBsnVxlanNetworkId) GetOXMName() string {
+	return "bsn_vxlan_network_id"
+}
+
+func (self *OxmBsnVxlanNetworkId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVxlanNetworkId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmBsnVxlanNetworkIdMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmBsnVxlanNetworkIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmBsnVxlanNetworkIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmBsnVxlanNetworkIdMasked, error) {
+	_oxmbsnvxlannetworkidmasked := &OxmBsnVxlanNetworkIdMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmBsnVxlanNetworkIdMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmbsnvxlannetworkidmasked.Value = uint32(decoder.ReadUint32())
+	_oxmbsnvxlannetworkidmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmbsnvxlannetworkidmasked, nil
+}
+
+func NewOxmBsnVxlanNetworkIdMasked() *OxmBsnVxlanNetworkIdMasked {
+	obj := &OxmBsnVxlanNetworkIdMasked{
+		Oxm: NewOxm(207624),
+	}
+	return obj
+}
+func (self *OxmBsnVxlanNetworkIdMasked) GetOXMName() string {
+	return "bsn_vxlan_network_id_masked"
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmBsnVxlanNetworkIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingIpv6Dst struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmConnTrackingIpv6Dst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmConnTrackingIpv6Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeOxmConnTrackingIpv6Dst(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingIpv6Dst, error) {
+	_oxmconntrackingipv6dst := &OxmConnTrackingIpv6Dst{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmConnTrackingIpv6Dst packet too short: %d < 16", decoder.Length())
+	}
+	_oxmconntrackingipv6dst.Value = net.IP(decoder.Read(16))
+	return _oxmconntrackingipv6dst, nil
+}
+
+func NewOxmConnTrackingIpv6Dst() *OxmConnTrackingIpv6Dst {
+	obj := &OxmConnTrackingIpv6Dst{
+		Oxm: NewOxm(128528),
+	}
+	return obj
+}
+func (self *OxmConnTrackingIpv6Dst) GetOXMName() string {
+	return "conn_tracking_ipv6_dst"
+}
+
+func (self *OxmConnTrackingIpv6Dst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6Dst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingIpv6DstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmConnTrackingIpv6DstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeOxmConnTrackingIpv6DstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingIpv6DstMasked, error) {
+	_oxmconntrackingipv6dstmasked := &OxmConnTrackingIpv6DstMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("OxmConnTrackingIpv6DstMasked packet too short: %d < 32", decoder.Length())
+	}
+	_oxmconntrackingipv6dstmasked.Value = net.IP(decoder.Read(16))
+	_oxmconntrackingipv6dstmasked.ValueMask = net.IP(decoder.Read(16))
+	return _oxmconntrackingipv6dstmasked, nil
+}
+
+func NewOxmConnTrackingIpv6DstMasked() *OxmConnTrackingIpv6DstMasked {
+	obj := &OxmConnTrackingIpv6DstMasked{
+		Oxm: NewOxm(128800),
+	}
+	return obj
+}
+func (self *OxmConnTrackingIpv6DstMasked) GetOXMName() string {
+	return "conn_tracking_ipv6_dst_masked"
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingIpv6Src struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmConnTrackingIpv6Src interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmConnTrackingIpv6Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeOxmConnTrackingIpv6Src(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingIpv6Src, error) {
+	_oxmconntrackingipv6src := &OxmConnTrackingIpv6Src{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmConnTrackingIpv6Src packet too short: %d < 16", decoder.Length())
+	}
+	_oxmconntrackingipv6src.Value = net.IP(decoder.Read(16))
+	return _oxmconntrackingipv6src, nil
+}
+
+func NewOxmConnTrackingIpv6Src() *OxmConnTrackingIpv6Src {
+	obj := &OxmConnTrackingIpv6Src{
+		Oxm: NewOxm(128016),
+	}
+	return obj
+}
+func (self *OxmConnTrackingIpv6Src) GetOXMName() string {
+	return "conn_tracking_ipv6_src"
+}
+
+func (self *OxmConnTrackingIpv6Src) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6Src) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingIpv6SrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmConnTrackingIpv6SrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeOxmConnTrackingIpv6SrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingIpv6SrcMasked, error) {
+	_oxmconntrackingipv6srcmasked := &OxmConnTrackingIpv6SrcMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("OxmConnTrackingIpv6SrcMasked packet too short: %d < 32", decoder.Length())
+	}
+	_oxmconntrackingipv6srcmasked.Value = net.IP(decoder.Read(16))
+	_oxmconntrackingipv6srcmasked.ValueMask = net.IP(decoder.Read(16))
+	return _oxmconntrackingipv6srcmasked, nil
+}
+
+func NewOxmConnTrackingIpv6SrcMasked() *OxmConnTrackingIpv6SrcMasked {
+	obj := &OxmConnTrackingIpv6SrcMasked{
+		Oxm: NewOxm(128288),
+	}
+	return obj
+}
+func (self *OxmConnTrackingIpv6SrcMasked) GetOXMName() string {
+	return "conn_tracking_ipv6_src_masked"
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingLabel struct {
+	*Oxm
+	Value uint128
+}
+
+type IOxmConnTrackingLabel interface {
+	goloxi.IOxm
+	GetValue() uint128
+}
+
+func (self *OxmConnTrackingLabel) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingLabel) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingLabel(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingLabel, error) {
+	_oxmconntrackinglabel := &OxmConnTrackingLabel{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmConnTrackingLabel packet too short: %d < 16", decoder.Length())
+	}
+	_oxmconntrackinglabel.Value = uint128(decoder.ReadUint128())
+	return _oxmconntrackinglabel, nil
+}
+
+func NewOxmConnTrackingLabel() *OxmConnTrackingLabel {
+	obj := &OxmConnTrackingLabel{
+		Oxm: NewOxm(120848),
+	}
+	return obj
+}
+func (self *OxmConnTrackingLabel) GetOXMName() string {
+	return "conn_tracking_label"
+}
+
+func (self *OxmConnTrackingLabel) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingLabel) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingLabelMasked struct {
+	*Oxm
+	Value     uint128
+	ValueMask uint128
+}
+
+type IOxmConnTrackingLabelMasked interface {
+	goloxi.IOxm
+	GetValue() uint128
+	GetValueMask() uint128
+}
+
+func (self *OxmConnTrackingLabelMasked) GetValue() uint128 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingLabelMasked) SetValue(v uint128) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingLabelMasked) GetValueMask() uint128 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingLabelMasked) SetValueMask(v uint128) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingLabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint128(uint128(self.Value))
+	encoder.PutUint128(uint128(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingLabelMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingLabelMasked, error) {
+	_oxmconntrackinglabelmasked := &OxmConnTrackingLabelMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("OxmConnTrackingLabelMasked packet too short: %d < 32", decoder.Length())
+	}
+	_oxmconntrackinglabelmasked.Value = uint128(decoder.ReadUint128())
+	_oxmconntrackinglabelmasked.ValueMask = uint128(decoder.ReadUint128())
+	return _oxmconntrackinglabelmasked, nil
+}
+
+func NewOxmConnTrackingLabelMasked() *OxmConnTrackingLabelMasked {
+	obj := &OxmConnTrackingLabelMasked{
+		Oxm: NewOxm(121120),
+	}
+	return obj
+}
+func (self *OxmConnTrackingLabelMasked) GetOXMName() string {
+	return "conn_tracking_label_masked"
+}
+
+func (self *OxmConnTrackingLabelMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingLabelMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingLabelMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingMark struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmConnTrackingMark interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmConnTrackingMark) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingMark) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingMark) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingMark(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingMark, error) {
+	_oxmconntrackingmark := &OxmConnTrackingMark{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmConnTrackingMark packet too short: %d < 4", decoder.Length())
+	}
+	_oxmconntrackingmark.Value = uint32(decoder.ReadUint32())
+	return _oxmconntrackingmark, nil
+}
+
+func NewOxmConnTrackingMark() *OxmConnTrackingMark {
+	obj := &OxmConnTrackingMark{
+		Oxm: NewOxm(120324),
+	}
+	return obj
+}
+func (self *OxmConnTrackingMark) GetOXMName() string {
+	return "conn_tracking_mark"
+}
+
+func (self *OxmConnTrackingMark) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingMark) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingMarkMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmConnTrackingMarkMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmConnTrackingMarkMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingMarkMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingMarkMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingMarkMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingMarkMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingMarkMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingMarkMasked, error) {
+	_oxmconntrackingmarkmasked := &OxmConnTrackingMarkMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmConnTrackingMarkMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmconntrackingmarkmasked.Value = uint32(decoder.ReadUint32())
+	_oxmconntrackingmarkmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmconntrackingmarkmasked, nil
+}
+
+func NewOxmConnTrackingMarkMasked() *OxmConnTrackingMarkMasked {
+	obj := &OxmConnTrackingMarkMasked{
+		Oxm: NewOxm(120584),
+	}
+	return obj
+}
+func (self *OxmConnTrackingMarkMasked) GetOXMName() string {
+	return "conn_tracking_mark_masked"
+}
+
+func (self *OxmConnTrackingMarkMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingMarkMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingMarkMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingNwDst struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmConnTrackingNwDst interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmConnTrackingNwDst) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwDst) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingNwDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingNwDst(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingNwDst, error) {
+	_oxmconntrackingnwdst := &OxmConnTrackingNwDst{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmConnTrackingNwDst packet too short: %d < 4", decoder.Length())
+	}
+	_oxmconntrackingnwdst.Value = uint32(decoder.ReadUint32())
+	return _oxmconntrackingnwdst, nil
+}
+
+func NewOxmConnTrackingNwDst() *OxmConnTrackingNwDst {
+	obj := &OxmConnTrackingNwDst{
+		Oxm: NewOxm(127492),
+	}
+	return obj
+}
+func (self *OxmConnTrackingNwDst) GetOXMName() string {
+	return "conn_tracking_nw_dst"
+}
+
+func (self *OxmConnTrackingNwDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingNwDstMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmConnTrackingNwDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmConnTrackingNwDstMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwDstMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingNwDstMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingNwDstMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingNwDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingNwDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingNwDstMasked, error) {
+	_oxmconntrackingnwdstmasked := &OxmConnTrackingNwDstMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmConnTrackingNwDstMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmconntrackingnwdstmasked.Value = uint32(decoder.ReadUint32())
+	_oxmconntrackingnwdstmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmconntrackingnwdstmasked, nil
+}
+
+func NewOxmConnTrackingNwDstMasked() *OxmConnTrackingNwDstMasked {
+	obj := &OxmConnTrackingNwDstMasked{
+		Oxm: NewOxm(127752),
+	}
+	return obj
+}
+func (self *OxmConnTrackingNwDstMasked) GetOXMName() string {
+	return "conn_tracking_nw_dst_masked"
+}
+
+func (self *OxmConnTrackingNwDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingNwDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingNwProto struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmConnTrackingNwProto interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmConnTrackingNwProto) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwProto) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingNwProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingNwProto(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingNwProto, error) {
+	_oxmconntrackingnwproto := &OxmConnTrackingNwProto{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmConnTrackingNwProto packet too short: %d < 1", decoder.Length())
+	}
+	_oxmconntrackingnwproto.Value = uint8(decoder.ReadByte())
+	return _oxmconntrackingnwproto, nil
+}
+
+func NewOxmConnTrackingNwProto() *OxmConnTrackingNwProto {
+	obj := &OxmConnTrackingNwProto{
+		Oxm: NewOxm(126465),
+	}
+	return obj
+}
+func (self *OxmConnTrackingNwProto) GetOXMName() string {
+	return "conn_tracking_nw_proto"
+}
+
+func (self *OxmConnTrackingNwProto) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwProto) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingNwProtoMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmConnTrackingNwProtoMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmConnTrackingNwProtoMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwProtoMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingNwProtoMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingNwProtoMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingNwProtoMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingNwProtoMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingNwProtoMasked, error) {
+	_oxmconntrackingnwprotomasked := &OxmConnTrackingNwProtoMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmConnTrackingNwProtoMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmconntrackingnwprotomasked.Value = uint8(decoder.ReadByte())
+	_oxmconntrackingnwprotomasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmconntrackingnwprotomasked, nil
+}
+
+func NewOxmConnTrackingNwProtoMasked() *OxmConnTrackingNwProtoMasked {
+	obj := &OxmConnTrackingNwProtoMasked{
+		Oxm: NewOxm(126722),
+	}
+	return obj
+}
+func (self *OxmConnTrackingNwProtoMasked) GetOXMName() string {
+	return "conn_tracking_nw_proto_masked"
+}
+
+func (self *OxmConnTrackingNwProtoMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwProtoMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingNwProtoMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingNwSrc struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmConnTrackingNwSrc interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmConnTrackingNwSrc) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwSrc) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingNwSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingNwSrc(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingNwSrc, error) {
+	_oxmconntrackingnwsrc := &OxmConnTrackingNwSrc{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmConnTrackingNwSrc packet too short: %d < 4", decoder.Length())
+	}
+	_oxmconntrackingnwsrc.Value = uint32(decoder.ReadUint32())
+	return _oxmconntrackingnwsrc, nil
+}
+
+func NewOxmConnTrackingNwSrc() *OxmConnTrackingNwSrc {
+	obj := &OxmConnTrackingNwSrc{
+		Oxm: NewOxm(126980),
+	}
+	return obj
+}
+func (self *OxmConnTrackingNwSrc) GetOXMName() string {
+	return "conn_tracking_nw_src"
+}
+
+func (self *OxmConnTrackingNwSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingNwSrcMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmConnTrackingNwSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmConnTrackingNwSrcMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwSrcMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingNwSrcMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingNwSrcMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingNwSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingNwSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingNwSrcMasked, error) {
+	_oxmconntrackingnwsrcmasked := &OxmConnTrackingNwSrcMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmConnTrackingNwSrcMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmconntrackingnwsrcmasked.Value = uint32(decoder.ReadUint32())
+	_oxmconntrackingnwsrcmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmconntrackingnwsrcmasked, nil
+}
+
+func NewOxmConnTrackingNwSrcMasked() *OxmConnTrackingNwSrcMasked {
+	obj := &OxmConnTrackingNwSrcMasked{
+		Oxm: NewOxm(127240),
+	}
+	return obj
+}
+func (self *OxmConnTrackingNwSrcMasked) GetOXMName() string {
+	return "conn_tracking_nw_src_masked"
+}
+
+func (self *OxmConnTrackingNwSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingNwSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingNwSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingState struct {
+	*Oxm
+	Value CsStates
+}
+
+type IOxmConnTrackingState interface {
+	goloxi.IOxm
+	GetValue() CsStates
+}
+
+func (self *OxmConnTrackingState) GetValue() CsStates {
+	return self.Value
+}
+
+func (self *OxmConnTrackingState) SetValue(v CsStates) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingState) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingState(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingState, error) {
+	_oxmconntrackingstate := &OxmConnTrackingState{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmConnTrackingState packet too short: %d < 4", decoder.Length())
+	}
+	_oxmconntrackingstate.Value = CsStates(decoder.ReadUint32())
+	return _oxmconntrackingstate, nil
+}
+
+func NewOxmConnTrackingState() *OxmConnTrackingState {
+	obj := &OxmConnTrackingState{
+		Oxm: NewOxm(119300),
+	}
+	return obj
+}
+func (self *OxmConnTrackingState) GetOXMName() string {
+	return "conn_tracking_state"
+}
+
+func (self *OxmConnTrackingState) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingState) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingStateMasked struct {
+	*Oxm
+	Value     CsStates
+	ValueMask CsStates
+}
+
+type IOxmConnTrackingStateMasked interface {
+	goloxi.IOxm
+	GetValue() CsStates
+	GetValueMask() CsStates
+}
+
+func (self *OxmConnTrackingStateMasked) GetValue() CsStates {
+	return self.Value
+}
+
+func (self *OxmConnTrackingStateMasked) SetValue(v CsStates) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingStateMasked) GetValueMask() CsStates {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingStateMasked) SetValueMask(v CsStates) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingStateMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingStateMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingStateMasked, error) {
+	_oxmconntrackingstatemasked := &OxmConnTrackingStateMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmConnTrackingStateMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmconntrackingstatemasked.Value = CsStates(decoder.ReadUint32())
+	_oxmconntrackingstatemasked.ValueMask = CsStates(decoder.ReadUint32())
+	return _oxmconntrackingstatemasked, nil
+}
+
+func NewOxmConnTrackingStateMasked() *OxmConnTrackingStateMasked {
+	obj := &OxmConnTrackingStateMasked{
+		Oxm: NewOxm(119560),
+	}
+	return obj
+}
+func (self *OxmConnTrackingStateMasked) GetOXMName() string {
+	return "conn_tracking_state_masked"
+}
+
+func (self *OxmConnTrackingStateMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingStateMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingStateMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingTpDst struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmConnTrackingTpDst interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmConnTrackingTpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingTpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingTpDst(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingTpDst, error) {
+	_oxmconntrackingtpdst := &OxmConnTrackingTpDst{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmConnTrackingTpDst packet too short: %d < 2", decoder.Length())
+	}
+	_oxmconntrackingtpdst.Value = uint16(decoder.ReadUint16())
+	return _oxmconntrackingtpdst, nil
+}
+
+func NewOxmConnTrackingTpDst() *OxmConnTrackingTpDst {
+	obj := &OxmConnTrackingTpDst{
+		Oxm: NewOxm(129538),
+	}
+	return obj
+}
+func (self *OxmConnTrackingTpDst) GetOXMName() string {
+	return "conn_tracking_tp_dst"
+}
+
+func (self *OxmConnTrackingTpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingTpDstMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmConnTrackingTpDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmConnTrackingTpDstMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpDstMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingTpDstMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingTpDstMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingTpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingTpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingTpDstMasked, error) {
+	_oxmconntrackingtpdstmasked := &OxmConnTrackingTpDstMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmConnTrackingTpDstMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmconntrackingtpdstmasked.Value = uint16(decoder.ReadUint16())
+	_oxmconntrackingtpdstmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmconntrackingtpdstmasked, nil
+}
+
+func NewOxmConnTrackingTpDstMasked() *OxmConnTrackingTpDstMasked {
+	obj := &OxmConnTrackingTpDstMasked{
+		Oxm: NewOxm(129796),
+	}
+	return obj
+}
+func (self *OxmConnTrackingTpDstMasked) GetOXMName() string {
+	return "conn_tracking_tp_dst_masked"
+}
+
+func (self *OxmConnTrackingTpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingTpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingTpSrc struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmConnTrackingTpSrc interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmConnTrackingTpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingTpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingTpSrc(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingTpSrc, error) {
+	_oxmconntrackingtpsrc := &OxmConnTrackingTpSrc{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmConnTrackingTpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_oxmconntrackingtpsrc.Value = uint16(decoder.ReadUint16())
+	return _oxmconntrackingtpsrc, nil
+}
+
+func NewOxmConnTrackingTpSrc() *OxmConnTrackingTpSrc {
+	obj := &OxmConnTrackingTpSrc{
+		Oxm: NewOxm(129026),
+	}
+	return obj
+}
+func (self *OxmConnTrackingTpSrc) GetOXMName() string {
+	return "conn_tracking_tp_src"
+}
+
+func (self *OxmConnTrackingTpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingTpSrcMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmConnTrackingTpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmConnTrackingTpSrcMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpSrcMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingTpSrcMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingTpSrcMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingTpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingTpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingTpSrcMasked, error) {
+	_oxmconntrackingtpsrcmasked := &OxmConnTrackingTpSrcMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmConnTrackingTpSrcMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmconntrackingtpsrcmasked.Value = uint16(decoder.ReadUint16())
+	_oxmconntrackingtpsrcmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmconntrackingtpsrcmasked, nil
+}
+
+func NewOxmConnTrackingTpSrcMasked() *OxmConnTrackingTpSrcMasked {
+	obj := &OxmConnTrackingTpSrcMasked{
+		Oxm: NewOxm(129284),
+	}
+	return obj
+}
+func (self *OxmConnTrackingTpSrcMasked) GetOXMName() string {
+	return "conn_tracking_tp_src_masked"
+}
+
+func (self *OxmConnTrackingTpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingTpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingTpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmConnTrackingZone struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmConnTrackingZone interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmConnTrackingZone) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingZone) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingZone) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingZone(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingZone, error) {
+	_oxmconntrackingzone := &OxmConnTrackingZone{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmConnTrackingZone packet too short: %d < 2", decoder.Length())
+	}
+	_oxmconntrackingzone.Value = uint16(decoder.ReadUint16())
+	return _oxmconntrackingzone, nil
+}
+
+func NewOxmConnTrackingZone() *OxmConnTrackingZone {
+	obj := &OxmConnTrackingZone{
+		Oxm: NewOxm(119810),
+	}
+	return obj
+}
+func (self *OxmConnTrackingZone) GetOXMName() string {
+	return "conn_tracking_zone"
+}
+
+func (self *OxmConnTrackingZone) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingZone) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmConnTrackingZoneMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmConnTrackingZoneMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmConnTrackingZoneMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmConnTrackingZoneMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmConnTrackingZoneMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingZoneMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmConnTrackingZoneMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmConnTrackingZoneMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmConnTrackingZoneMasked, error) {
+	_oxmconntrackingzonemasked := &OxmConnTrackingZoneMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmConnTrackingZoneMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmconntrackingzonemasked.Value = uint16(decoder.ReadUint16())
+	_oxmconntrackingzonemasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmconntrackingzonemasked, nil
+}
+
+func NewOxmConnTrackingZoneMasked() *OxmConnTrackingZoneMasked {
+	obj := &OxmConnTrackingZoneMasked{
+		Oxm: NewOxm(120068),
+	}
+	return obj
+}
+func (self *OxmConnTrackingZoneMasked) GetOXMName() string {
+	return "conn_tracking_zone_masked"
+}
+
+func (self *OxmConnTrackingZoneMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmConnTrackingZoneMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmConnTrackingZoneMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmEthDst struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmEthDst interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmEthDst) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmEthDst) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmEthDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmEthDst(parent *Oxm, decoder *goloxi.Decoder) (*OxmEthDst, error) {
+	_oxmethdst := &OxmEthDst{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmEthDst packet too short: %d < 6", decoder.Length())
+	}
+	_oxmethdst.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmethdst, nil
+}
+
+func NewOxmEthDst() *OxmEthDst {
+	obj := &OxmEthDst{
+		Oxm: NewOxm(2147485190),
+	}
+	return obj
+}
+func (self *OxmEthDst) GetOXMName() string {
+	return "eth_dst"
+}
+
+func (self *OxmEthDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmEthDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmEthDstMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmEthDstMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmEthDstMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmEthDstMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmEthDstMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmEthDstMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmEthDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmEthDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmEthDstMasked, error) {
+	_oxmethdstmasked := &OxmEthDstMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmEthDstMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmethdstmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmethdstmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmethdstmasked, nil
+}
+
+func NewOxmEthDstMasked() *OxmEthDstMasked {
+	obj := &OxmEthDstMasked{
+		Oxm: NewOxm(2147485452),
+	}
+	return obj
+}
+func (self *OxmEthDstMasked) GetOXMName() string {
+	return "eth_dst_masked"
+}
+
+func (self *OxmEthDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmEthDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmEthDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmEthSrc struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmEthSrc interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmEthSrc) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmEthSrc) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmEthSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmEthSrc(parent *Oxm, decoder *goloxi.Decoder) (*OxmEthSrc, error) {
+	_oxmethsrc := &OxmEthSrc{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmEthSrc packet too short: %d < 6", decoder.Length())
+	}
+	_oxmethsrc.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmethsrc, nil
+}
+
+func NewOxmEthSrc() *OxmEthSrc {
+	obj := &OxmEthSrc{
+		Oxm: NewOxm(2147485702),
+	}
+	return obj
+}
+func (self *OxmEthSrc) GetOXMName() string {
+	return "eth_src"
+}
+
+func (self *OxmEthSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmEthSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmEthSrcMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmEthSrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmEthSrcMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmEthSrcMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmEthSrcMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmEthSrcMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmEthSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmEthSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmEthSrcMasked, error) {
+	_oxmethsrcmasked := &OxmEthSrcMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmEthSrcMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmethsrcmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmethsrcmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmethsrcmasked, nil
+}
+
+func NewOxmEthSrcMasked() *OxmEthSrcMasked {
+	obj := &OxmEthSrcMasked{
+		Oxm: NewOxm(2147485964),
+	}
+	return obj
+}
+func (self *OxmEthSrcMasked) GetOXMName() string {
+	return "eth_src_masked"
+}
+
+func (self *OxmEthSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmEthSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmEthSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmEthType struct {
+	*Oxm
+	Value EthernetType
+}
+
+type IOxmEthType interface {
+	goloxi.IOxm
+	GetValue() EthernetType
+}
+
+func (self *OxmEthType) GetValue() EthernetType {
+	return self.Value
+}
+
+func (self *OxmEthType) SetValue(v EthernetType) {
+	self.Value = v
+}
+
+func (self *OxmEthType) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmEthType(parent *Oxm, decoder *goloxi.Decoder) (*OxmEthType, error) {
+	_oxmethtype := &OxmEthType{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmEthType packet too short: %d < 2", decoder.Length())
+	}
+	_oxmethtype.Value = EthernetType(decoder.ReadUint16())
+	return _oxmethtype, nil
+}
+
+func NewOxmEthType() *OxmEthType {
+	obj := &OxmEthType{
+		Oxm: NewOxm(2147486210),
+	}
+	return obj
+}
+func (self *OxmEthType) GetOXMName() string {
+	return "eth_type"
+}
+
+func (self *OxmEthType) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmEthType) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmEthTypeMasked struct {
+	*Oxm
+	Value     EthernetType
+	ValueMask uint16
+}
+
+type IOxmEthTypeMasked interface {
+	goloxi.IOxm
+	GetValue() EthernetType
+	GetValueMask() uint16
+}
+
+func (self *OxmEthTypeMasked) GetValue() EthernetType {
+	return self.Value
+}
+
+func (self *OxmEthTypeMasked) SetValue(v EthernetType) {
+	self.Value = v
+}
+
+func (self *OxmEthTypeMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmEthTypeMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmEthTypeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmEthTypeMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmEthTypeMasked, error) {
+	_oxmethtypemasked := &OxmEthTypeMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmEthTypeMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmethtypemasked.Value = EthernetType(decoder.ReadUint16())
+	_oxmethtypemasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmethtypemasked, nil
+}
+
+func NewOxmEthTypeMasked() *OxmEthTypeMasked {
+	obj := &OxmEthTypeMasked{
+		Oxm: NewOxm(2147486468),
+	}
+	return obj
+}
+func (self *OxmEthTypeMasked) GetOXMName() string {
+	return "eth_type_masked"
+}
+
+func (self *OxmEthTypeMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmEthTypeMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmEthTypeMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIcmpv4Code struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmIcmpv4Code interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmIcmpv4Code) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIcmpv4Code) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv4Code) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIcmpv4Code(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv4Code, error) {
+	_oxmicmpv4code := &OxmIcmpv4Code{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmIcmpv4Code packet too short: %d < 1", decoder.Length())
+	}
+	_oxmicmpv4code.Value = uint8(decoder.ReadByte())
+	return _oxmicmpv4code, nil
+}
+
+func NewOxmIcmpv4Code() *OxmIcmpv4Code {
+	obj := &OxmIcmpv4Code{
+		Oxm: NewOxm(2147493889),
+	}
+	return obj
+}
+func (self *OxmIcmpv4Code) GetOXMName() string {
+	return "icmpv4_code"
+}
+
+func (self *OxmIcmpv4Code) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv4Code) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIcmpv4CodeMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmIcmpv4CodeMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmIcmpv4CodeMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIcmpv4CodeMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv4CodeMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv4CodeMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmIcmpv4CodeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIcmpv4CodeMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv4CodeMasked, error) {
+	_oxmicmpv4codemasked := &OxmIcmpv4CodeMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIcmpv4CodeMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmicmpv4codemasked.Value = uint8(decoder.ReadByte())
+	_oxmicmpv4codemasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmicmpv4codemasked, nil
+}
+
+func NewOxmIcmpv4CodeMasked() *OxmIcmpv4CodeMasked {
+	obj := &OxmIcmpv4CodeMasked{
+		Oxm: NewOxm(2147494146),
+	}
+	return obj
+}
+func (self *OxmIcmpv4CodeMasked) GetOXMName() string {
+	return "icmpv4_code_masked"
+}
+
+func (self *OxmIcmpv4CodeMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv4CodeMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv4CodeMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIcmpv4Type struct {
+	*Oxm
+	Value IcmpType
+}
+
+type IOxmIcmpv4Type interface {
+	goloxi.IOxm
+	GetValue() IcmpType
+}
+
+func (self *OxmIcmpv4Type) GetValue() IcmpType {
+	return self.Value
+}
+
+func (self *OxmIcmpv4Type) SetValue(v IcmpType) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv4Type) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIcmpv4Type(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv4Type, error) {
+	_oxmicmpv4type := &OxmIcmpv4Type{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmIcmpv4Type packet too short: %d < 1", decoder.Length())
+	}
+	_oxmicmpv4type.Value = IcmpType(decoder.ReadByte())
+	return _oxmicmpv4type, nil
+}
+
+func NewOxmIcmpv4Type() *OxmIcmpv4Type {
+	obj := &OxmIcmpv4Type{
+		Oxm: NewOxm(2147493377),
+	}
+	return obj
+}
+func (self *OxmIcmpv4Type) GetOXMName() string {
+	return "icmpv4_type"
+}
+
+func (self *OxmIcmpv4Type) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv4Type) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIcmpv4TypeMasked struct {
+	*Oxm
+	Value     IcmpType
+	ValueMask uint8
+}
+
+type IOxmIcmpv4TypeMasked interface {
+	goloxi.IOxm
+	GetValue() IcmpType
+	GetValueMask() uint8
+}
+
+func (self *OxmIcmpv4TypeMasked) GetValue() IcmpType {
+	return self.Value
+}
+
+func (self *OxmIcmpv4TypeMasked) SetValue(v IcmpType) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv4TypeMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv4TypeMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmIcmpv4TypeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIcmpv4TypeMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv4TypeMasked, error) {
+	_oxmicmpv4typemasked := &OxmIcmpv4TypeMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIcmpv4TypeMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmicmpv4typemasked.Value = IcmpType(decoder.ReadByte())
+	_oxmicmpv4typemasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmicmpv4typemasked, nil
+}
+
+func NewOxmIcmpv4TypeMasked() *OxmIcmpv4TypeMasked {
+	obj := &OxmIcmpv4TypeMasked{
+		Oxm: NewOxm(2147493634),
+	}
+	return obj
+}
+func (self *OxmIcmpv4TypeMasked) GetOXMName() string {
+	return "icmpv4_type_masked"
+}
+
+func (self *OxmIcmpv4TypeMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv4TypeMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv4TypeMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIcmpv6Code struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmIcmpv6Code interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmIcmpv6Code) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIcmpv6Code) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv6Code) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIcmpv6Code(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv6Code, error) {
+	_oxmicmpv6code := &OxmIcmpv6Code{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmIcmpv6Code packet too short: %d < 1", decoder.Length())
+	}
+	_oxmicmpv6code.Value = uint8(decoder.ReadByte())
+	return _oxmicmpv6code, nil
+}
+
+func NewOxmIcmpv6Code() *OxmIcmpv6Code {
+	obj := &OxmIcmpv6Code{
+		Oxm: NewOxm(2147499009),
+	}
+	return obj
+}
+func (self *OxmIcmpv6Code) GetOXMName() string {
+	return "icmpv6_code"
+}
+
+func (self *OxmIcmpv6Code) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv6Code) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIcmpv6CodeMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmIcmpv6CodeMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmIcmpv6CodeMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIcmpv6CodeMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv6CodeMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv6CodeMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmIcmpv6CodeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIcmpv6CodeMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv6CodeMasked, error) {
+	_oxmicmpv6codemasked := &OxmIcmpv6CodeMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIcmpv6CodeMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmicmpv6codemasked.Value = uint8(decoder.ReadByte())
+	_oxmicmpv6codemasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmicmpv6codemasked, nil
+}
+
+func NewOxmIcmpv6CodeMasked() *OxmIcmpv6CodeMasked {
+	obj := &OxmIcmpv6CodeMasked{
+		Oxm: NewOxm(2147499266),
+	}
+	return obj
+}
+func (self *OxmIcmpv6CodeMasked) GetOXMName() string {
+	return "icmpv6_code_masked"
+}
+
+func (self *OxmIcmpv6CodeMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv6CodeMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv6CodeMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIcmpv6Type struct {
+	*Oxm
+	Value Icmpv6Type
+}
+
+type IOxmIcmpv6Type interface {
+	goloxi.IOxm
+	GetValue() Icmpv6Type
+}
+
+func (self *OxmIcmpv6Type) GetValue() Icmpv6Type {
+	return self.Value
+}
+
+func (self *OxmIcmpv6Type) SetValue(v Icmpv6Type) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv6Type) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIcmpv6Type(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv6Type, error) {
+	_oxmicmpv6type := &OxmIcmpv6Type{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmIcmpv6Type packet too short: %d < 1", decoder.Length())
+	}
+	_oxmicmpv6type.Value = Icmpv6Type(decoder.ReadByte())
+	return _oxmicmpv6type, nil
+}
+
+func NewOxmIcmpv6Type() *OxmIcmpv6Type {
+	obj := &OxmIcmpv6Type{
+		Oxm: NewOxm(2147498497),
+	}
+	return obj
+}
+func (self *OxmIcmpv6Type) GetOXMName() string {
+	return "icmpv6_type"
+}
+
+func (self *OxmIcmpv6Type) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv6Type) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIcmpv6TypeMasked struct {
+	*Oxm
+	Value     Icmpv6Type
+	ValueMask uint8
+}
+
+type IOxmIcmpv6TypeMasked interface {
+	goloxi.IOxm
+	GetValue() Icmpv6Type
+	GetValueMask() uint8
+}
+
+func (self *OxmIcmpv6TypeMasked) GetValue() Icmpv6Type {
+	return self.Value
+}
+
+func (self *OxmIcmpv6TypeMasked) SetValue(v Icmpv6Type) {
+	self.Value = v
+}
+
+func (self *OxmIcmpv6TypeMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv6TypeMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmIcmpv6TypeMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIcmpv6TypeMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIcmpv6TypeMasked, error) {
+	_oxmicmpv6typemasked := &OxmIcmpv6TypeMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIcmpv6TypeMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmicmpv6typemasked.Value = Icmpv6Type(decoder.ReadByte())
+	_oxmicmpv6typemasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmicmpv6typemasked, nil
+}
+
+func NewOxmIcmpv6TypeMasked() *OxmIcmpv6TypeMasked {
+	obj := &OxmIcmpv6TypeMasked{
+		Oxm: NewOxm(2147498754),
+	}
+	return obj
+}
+func (self *OxmIcmpv6TypeMasked) GetOXMName() string {
+	return "icmpv6_type_masked"
+}
+
+func (self *OxmIcmpv6TypeMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIcmpv6TypeMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIcmpv6TypeMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmInPhyPort struct {
+	*Oxm
+	Value Port
+}
+
+type IOxmInPhyPort interface {
+	goloxi.IOxm
+	GetValue() Port
+}
+
+func (self *OxmInPhyPort) GetValue() Port {
+	return self.Value
+}
+
+func (self *OxmInPhyPort) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *OxmInPhyPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmInPhyPort(parent *Oxm, decoder *goloxi.Decoder) (*OxmInPhyPort, error) {
+	_oxminphyport := &OxmInPhyPort{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmInPhyPort packet too short: %d < 4", decoder.Length())
+	}
+	_oxminphyport.Value.Decode(decoder)
+	return _oxminphyport, nil
+}
+
+func NewOxmInPhyPort() *OxmInPhyPort {
+	obj := &OxmInPhyPort{
+		Oxm: NewOxm(2147484164),
+	}
+	return obj
+}
+func (self *OxmInPhyPort) GetOXMName() string {
+	return "in_phy_port"
+}
+
+func (self *OxmInPhyPort) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmInPhyPort) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmInPhyPortMasked struct {
+	*Oxm
+	Value     Port
+	ValueMask Port
+}
+
+type IOxmInPhyPortMasked interface {
+	goloxi.IOxm
+	GetValue() Port
+	GetValueMask() Port
+}
+
+func (self *OxmInPhyPortMasked) GetValue() Port {
+	return self.Value
+}
+
+func (self *OxmInPhyPortMasked) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *OxmInPhyPortMasked) GetValueMask() Port {
+	return self.ValueMask
+}
+
+func (self *OxmInPhyPortMasked) SetValueMask(v Port) {
+	self.ValueMask = v
+}
+
+func (self *OxmInPhyPortMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+	self.ValueMask.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmInPhyPortMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmInPhyPortMasked, error) {
+	_oxminphyportmasked := &OxmInPhyPortMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmInPhyPortMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxminphyportmasked.Value.Decode(decoder)
+	_oxminphyportmasked.ValueMask.Decode(decoder)
+	return _oxminphyportmasked, nil
+}
+
+func NewOxmInPhyPortMasked() *OxmInPhyPortMasked {
+	obj := &OxmInPhyPortMasked{
+		Oxm: NewOxm(2147484424),
+	}
+	return obj
+}
+func (self *OxmInPhyPortMasked) GetOXMName() string {
+	return "in_phy_port_masked"
+}
+
+func (self *OxmInPhyPortMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmInPhyPortMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmInPhyPortMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmInPort struct {
+	*Oxm
+	Value Port
+}
+
+type IOxmInPort interface {
+	goloxi.IOxm
+	GetValue() Port
+}
+
+func (self *OxmInPort) GetValue() Port {
+	return self.Value
+}
+
+func (self *OxmInPort) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *OxmInPort) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmInPort(parent *Oxm, decoder *goloxi.Decoder) (*OxmInPort, error) {
+	_oxminport := &OxmInPort{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmInPort packet too short: %d < 4", decoder.Length())
+	}
+	_oxminport.Value.Decode(decoder)
+	return _oxminport, nil
+}
+
+func NewOxmInPort() *OxmInPort {
+	obj := &OxmInPort{
+		Oxm: NewOxm(2147483652),
+	}
+	return obj
+}
+func (self *OxmInPort) GetOXMName() string {
+	return "in_port"
+}
+
+func (self *OxmInPort) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmInPort) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmInPortMasked struct {
+	*Oxm
+	Value     Port
+	ValueMask Port
+}
+
+type IOxmInPortMasked interface {
+	goloxi.IOxm
+	GetValue() Port
+	GetValueMask() Port
+}
+
+func (self *OxmInPortMasked) GetValue() Port {
+	return self.Value
+}
+
+func (self *OxmInPortMasked) SetValue(v Port) {
+	self.Value = v
+}
+
+func (self *OxmInPortMasked) GetValueMask() Port {
+	return self.ValueMask
+}
+
+func (self *OxmInPortMasked) SetValueMask(v Port) {
+	self.ValueMask = v
+}
+
+func (self *OxmInPortMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	self.Value.Serialize(encoder)
+	self.ValueMask.Serialize(encoder)
+
+	return nil
+}
+
+func DecodeOxmInPortMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmInPortMasked, error) {
+	_oxminportmasked := &OxmInPortMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmInPortMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxminportmasked.Value.Decode(decoder)
+	_oxminportmasked.ValueMask.Decode(decoder)
+	return _oxminportmasked, nil
+}
+
+func NewOxmInPortMasked() *OxmInPortMasked {
+	obj := &OxmInPortMasked{
+		Oxm: NewOxm(2147483912),
+	}
+	return obj
+}
+func (self *OxmInPortMasked) GetOXMName() string {
+	return "in_port_masked"
+}
+
+func (self *OxmInPortMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmInPortMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmInPortMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpDscp struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmIpDscp interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmIpDscp) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIpDscp) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIpDscp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIpDscp(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpDscp, error) {
+	_oxmipdscp := &OxmIpDscp{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmIpDscp packet too short: %d < 1", decoder.Length())
+	}
+	_oxmipdscp.Value = uint8(decoder.ReadByte())
+	return _oxmipdscp, nil
+}
+
+func NewOxmIpDscp() *OxmIpDscp {
+	obj := &OxmIpDscp{
+		Oxm: NewOxm(2147487745),
+	}
+	return obj
+}
+func (self *OxmIpDscp) GetOXMName() string {
+	return "ip_dscp"
+}
+
+func (self *OxmIpDscp) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpDscp) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpDscpMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmIpDscpMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmIpDscpMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIpDscpMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIpDscpMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmIpDscpMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpDscpMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIpDscpMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpDscpMasked, error) {
+	_oxmipdscpmasked := &OxmIpDscpMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIpDscpMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmipdscpmasked.Value = uint8(decoder.ReadByte())
+	_oxmipdscpmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmipdscpmasked, nil
+}
+
+func NewOxmIpDscpMasked() *OxmIpDscpMasked {
+	obj := &OxmIpDscpMasked{
+		Oxm: NewOxm(2147488002),
+	}
+	return obj
+}
+func (self *OxmIpDscpMasked) GetOXMName() string {
+	return "ip_dscp_masked"
+}
+
+func (self *OxmIpDscpMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpDscpMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpDscpMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpEcn struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmIpEcn interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmIpEcn) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIpEcn) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIpEcn) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIpEcn(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpEcn, error) {
+	_oxmipecn := &OxmIpEcn{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmIpEcn packet too short: %d < 1", decoder.Length())
+	}
+	_oxmipecn.Value = uint8(decoder.ReadByte())
+	return _oxmipecn, nil
+}
+
+func NewOxmIpEcn() *OxmIpEcn {
+	obj := &OxmIpEcn{
+		Oxm: NewOxm(2147488257),
+	}
+	return obj
+}
+func (self *OxmIpEcn) GetOXMName() string {
+	return "ip_ecn"
+}
+
+func (self *OxmIpEcn) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpEcn) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpEcnMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmIpEcnMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmIpEcnMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmIpEcnMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmIpEcnMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmIpEcnMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpEcnMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIpEcnMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpEcnMasked, error) {
+	_oxmipecnmasked := &OxmIpEcnMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIpEcnMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmipecnmasked.Value = uint8(decoder.ReadByte())
+	_oxmipecnmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmipecnmasked, nil
+}
+
+func NewOxmIpEcnMasked() *OxmIpEcnMasked {
+	obj := &OxmIpEcnMasked{
+		Oxm: NewOxm(2147488514),
+	}
+	return obj
+}
+func (self *OxmIpEcnMasked) GetOXMName() string {
+	return "ip_ecn_masked"
+}
+
+func (self *OxmIpEcnMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpEcnMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpEcnMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpProto struct {
+	*Oxm
+	Value IpPrototype
+}
+
+type IOxmIpProto interface {
+	goloxi.IOxm
+	GetValue() IpPrototype
+}
+
+func (self *OxmIpProto) GetValue() IpPrototype {
+	return self.Value
+}
+
+func (self *OxmIpProto) SetValue(v IpPrototype) {
+	self.Value = v
+}
+
+func (self *OxmIpProto) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIpProto(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpProto, error) {
+	_oxmipproto := &OxmIpProto{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmIpProto packet too short: %d < 1", decoder.Length())
+	}
+	_oxmipproto.Value = IpPrototype(decoder.ReadByte())
+	return _oxmipproto, nil
+}
+
+func NewOxmIpProto() *OxmIpProto {
+	obj := &OxmIpProto{
+		Oxm: NewOxm(2147488769),
+	}
+	return obj
+}
+func (self *OxmIpProto) GetOXMName() string {
+	return "ip_proto"
+}
+
+func (self *OxmIpProto) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpProto) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpProtoMasked struct {
+	*Oxm
+	Value     IpPrototype
+	ValueMask uint8
+}
+
+type IOxmIpProtoMasked interface {
+	goloxi.IOxm
+	GetValue() IpPrototype
+	GetValueMask() uint8
+}
+
+func (self *OxmIpProtoMasked) GetValue() IpPrototype {
+	return self.Value
+}
+
+func (self *OxmIpProtoMasked) SetValue(v IpPrototype) {
+	self.Value = v
+}
+
+func (self *OxmIpProtoMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmIpProtoMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpProtoMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIpProtoMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpProtoMasked, error) {
+	_oxmipprotomasked := &OxmIpProtoMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIpProtoMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmipprotomasked.Value = IpPrototype(decoder.ReadByte())
+	_oxmipprotomasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmipprotomasked, nil
+}
+
+func NewOxmIpProtoMasked() *OxmIpProtoMasked {
+	obj := &OxmIpProtoMasked{
+		Oxm: NewOxm(2147489026),
+	}
+	return obj
+}
+func (self *OxmIpProtoMasked) GetOXMName() string {
+	return "ip_proto_masked"
+}
+
+func (self *OxmIpProtoMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpProtoMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpProtoMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv4Dst struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmIpv4Dst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmIpv4Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv4Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv4Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeOxmIpv4Dst(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv4Dst, error) {
+	_oxmipv4dst := &OxmIpv4Dst{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmIpv4Dst packet too short: %d < 4", decoder.Length())
+	}
+	_oxmipv4dst.Value = net.IP(decoder.Read(4))
+	return _oxmipv4dst, nil
+}
+
+func NewOxmIpv4Dst() *OxmIpv4Dst {
+	obj := &OxmIpv4Dst{
+		Oxm: NewOxm(2147489796),
+	}
+	return obj
+}
+func (self *OxmIpv4Dst) GetOXMName() string {
+	return "ipv4_dst"
+}
+
+func (self *OxmIpv4Dst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv4Dst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv4DstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmIpv4DstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmIpv4DstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv4DstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv4DstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmIpv4DstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv4DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeOxmIpv4DstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv4DstMasked, error) {
+	_oxmipv4dstmasked := &OxmIpv4DstMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmIpv4DstMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmipv4dstmasked.Value = net.IP(decoder.Read(4))
+	_oxmipv4dstmasked.ValueMask = net.IP(decoder.Read(4))
+	return _oxmipv4dstmasked, nil
+}
+
+func NewOxmIpv4DstMasked() *OxmIpv4DstMasked {
+	obj := &OxmIpv4DstMasked{
+		Oxm: NewOxm(2147490056),
+	}
+	return obj
+}
+func (self *OxmIpv4DstMasked) GetOXMName() string {
+	return "ipv4_dst_masked"
+}
+
+func (self *OxmIpv4DstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv4DstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv4DstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv4Src struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmIpv4Src interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmIpv4Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv4Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv4Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeOxmIpv4Src(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv4Src, error) {
+	_oxmipv4src := &OxmIpv4Src{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmIpv4Src packet too short: %d < 4", decoder.Length())
+	}
+	_oxmipv4src.Value = net.IP(decoder.Read(4))
+	return _oxmipv4src, nil
+}
+
+func NewOxmIpv4Src() *OxmIpv4Src {
+	obj := &OxmIpv4Src{
+		Oxm: NewOxm(2147489284),
+	}
+	return obj
+}
+func (self *OxmIpv4Src) GetOXMName() string {
+	return "ipv4_src"
+}
+
+func (self *OxmIpv4Src) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv4Src) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv4SrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmIpv4SrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmIpv4SrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv4SrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv4SrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmIpv4SrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv4SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeOxmIpv4SrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv4SrcMasked, error) {
+	_oxmipv4srcmasked := &OxmIpv4SrcMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmIpv4SrcMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmipv4srcmasked.Value = net.IP(decoder.Read(4))
+	_oxmipv4srcmasked.ValueMask = net.IP(decoder.Read(4))
+	return _oxmipv4srcmasked, nil
+}
+
+func NewOxmIpv4SrcMasked() *OxmIpv4SrcMasked {
+	obj := &OxmIpv4SrcMasked{
+		Oxm: NewOxm(2147489544),
+	}
+	return obj
+}
+func (self *OxmIpv4SrcMasked) GetOXMName() string {
+	return "ipv4_src_masked"
+}
+
+func (self *OxmIpv4SrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv4SrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv4SrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv6Dst struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmIpv6Dst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmIpv6Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv6Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv6Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeOxmIpv6Dst(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6Dst, error) {
+	_oxmipv6dst := &OxmIpv6Dst{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmIpv6Dst packet too short: %d < 16", decoder.Length())
+	}
+	_oxmipv6dst.Value = net.IP(decoder.Read(16))
+	return _oxmipv6dst, nil
+}
+
+func NewOxmIpv6Dst() *OxmIpv6Dst {
+	obj := &OxmIpv6Dst{
+		Oxm: NewOxm(2147497488),
+	}
+	return obj
+}
+func (self *OxmIpv6Dst) GetOXMName() string {
+	return "ipv6_dst"
+}
+
+func (self *OxmIpv6Dst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6Dst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv6DstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmIpv6DstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmIpv6DstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv6DstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv6DstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6DstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv6DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeOxmIpv6DstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6DstMasked, error) {
+	_oxmipv6dstmasked := &OxmIpv6DstMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("OxmIpv6DstMasked packet too short: %d < 32", decoder.Length())
+	}
+	_oxmipv6dstmasked.Value = net.IP(decoder.Read(16))
+	_oxmipv6dstmasked.ValueMask = net.IP(decoder.Read(16))
+	return _oxmipv6dstmasked, nil
+}
+
+func NewOxmIpv6DstMasked() *OxmIpv6DstMasked {
+	obj := &OxmIpv6DstMasked{
+		Oxm: NewOxm(2147497760),
+	}
+	return obj
+}
+func (self *OxmIpv6DstMasked) GetOXMName() string {
+	return "ipv6_dst_masked"
+}
+
+func (self *OxmIpv6DstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6DstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6DstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv6Exthdr struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmIpv6Exthdr interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmIpv6Exthdr) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmIpv6Exthdr) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmIpv6Exthdr) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIpv6Exthdr(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6Exthdr, error) {
+	_oxmipv6exthdr := &OxmIpv6Exthdr{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmIpv6Exthdr packet too short: %d < 2", decoder.Length())
+	}
+	_oxmipv6exthdr.Value = uint16(decoder.ReadUint16())
+	return _oxmipv6exthdr, nil
+}
+
+func NewOxmIpv6Exthdr() *OxmIpv6Exthdr {
+	obj := &OxmIpv6Exthdr{
+		Oxm: NewOxm(2147503618),
+	}
+	return obj
+}
+func (self *OxmIpv6Exthdr) GetOXMName() string {
+	return "ipv6_exthdr"
+}
+
+func (self *OxmIpv6Exthdr) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6Exthdr) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv6ExthdrMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmIpv6ExthdrMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmIpv6ExthdrMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmIpv6ExthdrMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmIpv6ExthdrMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6ExthdrMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv6ExthdrMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIpv6ExthdrMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6ExthdrMasked, error) {
+	_oxmipv6exthdrmasked := &OxmIpv6ExthdrMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmIpv6ExthdrMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmipv6exthdrmasked.Value = uint16(decoder.ReadUint16())
+	_oxmipv6exthdrmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmipv6exthdrmasked, nil
+}
+
+func NewOxmIpv6ExthdrMasked() *OxmIpv6ExthdrMasked {
+	obj := &OxmIpv6ExthdrMasked{
+		Oxm: NewOxm(2147503876),
+	}
+	return obj
+}
+func (self *OxmIpv6ExthdrMasked) GetOXMName() string {
+	return "ipv6_exthdr_masked"
+}
+
+func (self *OxmIpv6ExthdrMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6ExthdrMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6ExthdrMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv6Flabel struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmIpv6Flabel interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmIpv6Flabel) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmIpv6Flabel) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmIpv6Flabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmIpv6Flabel(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6Flabel, error) {
+	_oxmipv6flabel := &OxmIpv6Flabel{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmIpv6Flabel packet too short: %d < 4", decoder.Length())
+	}
+	_oxmipv6flabel.Value = uint32(decoder.ReadUint32())
+	return _oxmipv6flabel, nil
+}
+
+func NewOxmIpv6Flabel() *OxmIpv6Flabel {
+	obj := &OxmIpv6Flabel{
+		Oxm: NewOxm(2147497988),
+	}
+	return obj
+}
+func (self *OxmIpv6Flabel) GetOXMName() string {
+	return "ipv6_flabel"
+}
+
+func (self *OxmIpv6Flabel) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6Flabel) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv6FlabelMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmIpv6FlabelMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmIpv6FlabelMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmIpv6FlabelMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmIpv6FlabelMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6FlabelMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv6FlabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmIpv6FlabelMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6FlabelMasked, error) {
+	_oxmipv6flabelmasked := &OxmIpv6FlabelMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmIpv6FlabelMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmipv6flabelmasked.Value = uint32(decoder.ReadUint32())
+	_oxmipv6flabelmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmipv6flabelmasked, nil
+}
+
+func NewOxmIpv6FlabelMasked() *OxmIpv6FlabelMasked {
+	obj := &OxmIpv6FlabelMasked{
+		Oxm: NewOxm(2147498248),
+	}
+	return obj
+}
+func (self *OxmIpv6FlabelMasked) GetOXMName() string {
+	return "ipv6_flabel_masked"
+}
+
+func (self *OxmIpv6FlabelMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6FlabelMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6FlabelMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv6NdSll struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmIpv6NdSll interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmIpv6NdSll) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmIpv6NdSll) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmIpv6NdSll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmIpv6NdSll(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6NdSll, error) {
+	_oxmipv6ndsll := &OxmIpv6NdSll{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmIpv6NdSll packet too short: %d < 6", decoder.Length())
+	}
+	_oxmipv6ndsll.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmipv6ndsll, nil
+}
+
+func NewOxmIpv6NdSll() *OxmIpv6NdSll {
+	obj := &OxmIpv6NdSll{
+		Oxm: NewOxm(2147500038),
+	}
+	return obj
+}
+func (self *OxmIpv6NdSll) GetOXMName() string {
+	return "ipv6_nd_sll"
+}
+
+func (self *OxmIpv6NdSll) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6NdSll) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv6NdSllMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmIpv6NdSllMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmIpv6NdSllMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmIpv6NdSllMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmIpv6NdSllMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6NdSllMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv6NdSllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmIpv6NdSllMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6NdSllMasked, error) {
+	_oxmipv6ndsllmasked := &OxmIpv6NdSllMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmIpv6NdSllMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmipv6ndsllmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmipv6ndsllmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmipv6ndsllmasked, nil
+}
+
+func NewOxmIpv6NdSllMasked() *OxmIpv6NdSllMasked {
+	obj := &OxmIpv6NdSllMasked{
+		Oxm: NewOxm(2147500300),
+	}
+	return obj
+}
+func (self *OxmIpv6NdSllMasked) GetOXMName() string {
+	return "ipv6_nd_sll_masked"
+}
+
+func (self *OxmIpv6NdSllMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6NdSllMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6NdSllMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv6NdTarget struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmIpv6NdTarget interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmIpv6NdTarget) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTarget) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv6NdTarget) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeOxmIpv6NdTarget(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6NdTarget, error) {
+	_oxmipv6ndtarget := &OxmIpv6NdTarget{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmIpv6NdTarget packet too short: %d < 16", decoder.Length())
+	}
+	_oxmipv6ndtarget.Value = net.IP(decoder.Read(16))
+	return _oxmipv6ndtarget, nil
+}
+
+func NewOxmIpv6NdTarget() *OxmIpv6NdTarget {
+	obj := &OxmIpv6NdTarget{
+		Oxm: NewOxm(2147499536),
+	}
+	return obj
+}
+func (self *OxmIpv6NdTarget) GetOXMName() string {
+	return "ipv6_nd_target"
+}
+
+func (self *OxmIpv6NdTarget) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTarget) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv6NdTargetMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmIpv6NdTargetMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmIpv6NdTargetMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTargetMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv6NdTargetMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6NdTargetMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv6NdTargetMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeOxmIpv6NdTargetMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6NdTargetMasked, error) {
+	_oxmipv6ndtargetmasked := &OxmIpv6NdTargetMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("OxmIpv6NdTargetMasked packet too short: %d < 32", decoder.Length())
+	}
+	_oxmipv6ndtargetmasked.Value = net.IP(decoder.Read(16))
+	_oxmipv6ndtargetmasked.ValueMask = net.IP(decoder.Read(16))
+	return _oxmipv6ndtargetmasked, nil
+}
+
+func NewOxmIpv6NdTargetMasked() *OxmIpv6NdTargetMasked {
+	obj := &OxmIpv6NdTargetMasked{
+		Oxm: NewOxm(2147499808),
+	}
+	return obj
+}
+func (self *OxmIpv6NdTargetMasked) GetOXMName() string {
+	return "ipv6_nd_target_masked"
+}
+
+func (self *OxmIpv6NdTargetMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTargetMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6NdTargetMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv6NdTll struct {
+	*Oxm
+	Value net.HardwareAddr
+}
+
+type IOxmIpv6NdTll interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+}
+
+func (self *OxmIpv6NdTll) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTll) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmIpv6NdTll) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+
+	return nil
+}
+
+func DecodeOxmIpv6NdTll(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6NdTll, error) {
+	_oxmipv6ndtll := &OxmIpv6NdTll{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmIpv6NdTll packet too short: %d < 6", decoder.Length())
+	}
+	_oxmipv6ndtll.Value = net.HardwareAddr(decoder.Read(6))
+	return _oxmipv6ndtll, nil
+}
+
+func NewOxmIpv6NdTll() *OxmIpv6NdTll {
+	obj := &OxmIpv6NdTll{
+		Oxm: NewOxm(2147500550),
+	}
+	return obj
+}
+func (self *OxmIpv6NdTll) GetOXMName() string {
+	return "ipv6_nd_tll"
+}
+
+func (self *OxmIpv6NdTll) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTll) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv6NdTllMasked struct {
+	*Oxm
+	Value     net.HardwareAddr
+	ValueMask net.HardwareAddr
+}
+
+type IOxmIpv6NdTllMasked interface {
+	goloxi.IOxm
+	GetValue() net.HardwareAddr
+	GetValueMask() net.HardwareAddr
+}
+
+func (self *OxmIpv6NdTllMasked) GetValue() net.HardwareAddr {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTllMasked) SetValue(v net.HardwareAddr) {
+	self.Value = v
+}
+
+func (self *OxmIpv6NdTllMasked) GetValueMask() net.HardwareAddr {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6NdTllMasked) SetValueMask(v net.HardwareAddr) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv6NdTllMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value)
+	encoder.Write(self.ValueMask)
+
+	return nil
+}
+
+func DecodeOxmIpv6NdTllMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6NdTllMasked, error) {
+	_oxmipv6ndtllmasked := &OxmIpv6NdTllMasked{Oxm: parent}
+	if decoder.Length() < 12 {
+		return nil, fmt.Errorf("OxmIpv6NdTllMasked packet too short: %d < 12", decoder.Length())
+	}
+	_oxmipv6ndtllmasked.Value = net.HardwareAddr(decoder.Read(6))
+	_oxmipv6ndtllmasked.ValueMask = net.HardwareAddr(decoder.Read(6))
+	return _oxmipv6ndtllmasked, nil
+}
+
+func NewOxmIpv6NdTllMasked() *OxmIpv6NdTllMasked {
+	obj := &OxmIpv6NdTllMasked{
+		Oxm: NewOxm(2147500812),
+	}
+	return obj
+}
+func (self *OxmIpv6NdTllMasked) GetOXMName() string {
+	return "ipv6_nd_tll_masked"
+}
+
+func (self *OxmIpv6NdTllMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6NdTllMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6NdTllMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmIpv6Src struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmIpv6Src interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmIpv6Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv6Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv6Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+
+	return nil
+}
+
+func DecodeOxmIpv6Src(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6Src, error) {
+	_oxmipv6src := &OxmIpv6Src{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmIpv6Src packet too short: %d < 16", decoder.Length())
+	}
+	_oxmipv6src.Value = net.IP(decoder.Read(16))
+	return _oxmipv6src, nil
+}
+
+func NewOxmIpv6Src() *OxmIpv6Src {
+	obj := &OxmIpv6Src{
+		Oxm: NewOxm(2147496976),
+	}
+	return obj
+}
+func (self *OxmIpv6Src) GetOXMName() string {
+	return "ipv6_src"
+}
+
+func (self *OxmIpv6Src) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6Src) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmIpv6SrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmIpv6SrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmIpv6SrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmIpv6SrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmIpv6SrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6SrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmIpv6SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To16())
+	encoder.Write(self.ValueMask.To16())
+
+	return nil
+}
+
+func DecodeOxmIpv6SrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmIpv6SrcMasked, error) {
+	_oxmipv6srcmasked := &OxmIpv6SrcMasked{Oxm: parent}
+	if decoder.Length() < 32 {
+		return nil, fmt.Errorf("OxmIpv6SrcMasked packet too short: %d < 32", decoder.Length())
+	}
+	_oxmipv6srcmasked.Value = net.IP(decoder.Read(16))
+	_oxmipv6srcmasked.ValueMask = net.IP(decoder.Read(16))
+	return _oxmipv6srcmasked, nil
+}
+
+func NewOxmIpv6SrcMasked() *OxmIpv6SrcMasked {
+	obj := &OxmIpv6SrcMasked{
+		Oxm: NewOxm(2147497248),
+	}
+	return obj
+}
+func (self *OxmIpv6SrcMasked) GetOXMName() string {
+	return "ipv6_src_masked"
+}
+
+func (self *OxmIpv6SrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmIpv6SrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmIpv6SrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmMetadata struct {
+	*Oxm
+	Value uint64
+}
+
+type IOxmMetadata interface {
+	goloxi.IOxm
+	GetValue() uint64
+}
+
+func (self *OxmMetadata) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *OxmMetadata) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *OxmMetadata) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	return nil
+}
+
+func DecodeOxmMetadata(parent *Oxm, decoder *goloxi.Decoder) (*OxmMetadata, error) {
+	_oxmmetadata := &OxmMetadata{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmMetadata packet too short: %d < 8", decoder.Length())
+	}
+	_oxmmetadata.Value = uint64(decoder.ReadUint64())
+	return _oxmmetadata, nil
+}
+
+func NewOxmMetadata() *OxmMetadata {
+	obj := &OxmMetadata{
+		Oxm: NewOxm(2147484680),
+	}
+	return obj
+}
+func (self *OxmMetadata) GetOXMName() string {
+	return "metadata"
+}
+
+func (self *OxmMetadata) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMetadata) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmMetadataMasked struct {
+	*Oxm
+	Value     uint64
+	ValueMask uint64
+}
+
+type IOxmMetadataMasked interface {
+	goloxi.IOxm
+	GetValue() uint64
+	GetValueMask() uint64
+}
+
+func (self *OxmMetadataMasked) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *OxmMetadataMasked) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *OxmMetadataMasked) GetValueMask() uint64 {
+	return self.ValueMask
+}
+
+func (self *OxmMetadataMasked) SetValueMask(v uint64) {
+	self.ValueMask = v
+}
+
+func (self *OxmMetadataMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+	encoder.PutUint64(uint64(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmMetadataMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmMetadataMasked, error) {
+	_oxmmetadatamasked := &OxmMetadataMasked{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmMetadataMasked packet too short: %d < 16", decoder.Length())
+	}
+	_oxmmetadatamasked.Value = uint64(decoder.ReadUint64())
+	_oxmmetadatamasked.ValueMask = uint64(decoder.ReadUint64())
+	return _oxmmetadatamasked, nil
+}
+
+func NewOxmMetadataMasked() *OxmMetadataMasked {
+	obj := &OxmMetadataMasked{
+		Oxm: NewOxm(2147484944),
+	}
+	return obj
+}
+func (self *OxmMetadataMasked) GetOXMName() string {
+	return "metadata_masked"
+}
+
+func (self *OxmMetadataMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMetadataMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmMetadataMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmMplsBos struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmMplsBos interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmMplsBos) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmMplsBos) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmMplsBos) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmMplsBos(parent *Oxm, decoder *goloxi.Decoder) (*OxmMplsBos, error) {
+	_oxmmplsbos := &OxmMplsBos{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmMplsBos packet too short: %d < 1", decoder.Length())
+	}
+	_oxmmplsbos.Value = uint8(decoder.ReadByte())
+	return _oxmmplsbos, nil
+}
+
+func NewOxmMplsBos() *OxmMplsBos {
+	obj := &OxmMplsBos{
+		Oxm: NewOxm(2147502081),
+	}
+	return obj
+}
+func (self *OxmMplsBos) GetOXMName() string {
+	return "mpls_bos"
+}
+
+func (self *OxmMplsBos) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMplsBos) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmMplsBosMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmMplsBosMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmMplsBosMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmMplsBosMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmMplsBosMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmMplsBosMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmMplsBosMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmMplsBosMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmMplsBosMasked, error) {
+	_oxmmplsbosmasked := &OxmMplsBosMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmMplsBosMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmmplsbosmasked.Value = uint8(decoder.ReadByte())
+	_oxmmplsbosmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmmplsbosmasked, nil
+}
+
+func NewOxmMplsBosMasked() *OxmMplsBosMasked {
+	obj := &OxmMplsBosMasked{
+		Oxm: NewOxm(2147502338),
+	}
+	return obj
+}
+func (self *OxmMplsBosMasked) GetOXMName() string {
+	return "mpls_bos_masked"
+}
+
+func (self *OxmMplsBosMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMplsBosMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmMplsBosMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmMplsLabel struct {
+	*Oxm
+	Value uint32
+}
+
+type IOxmMplsLabel interface {
+	goloxi.IOxm
+	GetValue() uint32
+}
+
+func (self *OxmMplsLabel) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmMplsLabel) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmMplsLabel) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+
+	return nil
+}
+
+func DecodeOxmMplsLabel(parent *Oxm, decoder *goloxi.Decoder) (*OxmMplsLabel, error) {
+	_oxmmplslabel := &OxmMplsLabel{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmMplsLabel packet too short: %d < 4", decoder.Length())
+	}
+	_oxmmplslabel.Value = uint32(decoder.ReadUint32())
+	return _oxmmplslabel, nil
+}
+
+func NewOxmMplsLabel() *OxmMplsLabel {
+	obj := &OxmMplsLabel{
+		Oxm: NewOxm(2147501060),
+	}
+	return obj
+}
+func (self *OxmMplsLabel) GetOXMName() string {
+	return "mpls_label"
+}
+
+func (self *OxmMplsLabel) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMplsLabel) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmMplsLabelMasked struct {
+	*Oxm
+	Value     uint32
+	ValueMask uint32
+}
+
+type IOxmMplsLabelMasked interface {
+	goloxi.IOxm
+	GetValue() uint32
+	GetValueMask() uint32
+}
+
+func (self *OxmMplsLabelMasked) GetValue() uint32 {
+	return self.Value
+}
+
+func (self *OxmMplsLabelMasked) SetValue(v uint32) {
+	self.Value = v
+}
+
+func (self *OxmMplsLabelMasked) GetValueMask() uint32 {
+	return self.ValueMask
+}
+
+func (self *OxmMplsLabelMasked) SetValueMask(v uint32) {
+	self.ValueMask = v
+}
+
+func (self *OxmMplsLabelMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.Value))
+	encoder.PutUint32(uint32(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmMplsLabelMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmMplsLabelMasked, error) {
+	_oxmmplslabelmasked := &OxmMplsLabelMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmMplsLabelMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmmplslabelmasked.Value = uint32(decoder.ReadUint32())
+	_oxmmplslabelmasked.ValueMask = uint32(decoder.ReadUint32())
+	return _oxmmplslabelmasked, nil
+}
+
+func NewOxmMplsLabelMasked() *OxmMplsLabelMasked {
+	obj := &OxmMplsLabelMasked{
+		Oxm: NewOxm(2147501320),
+	}
+	return obj
+}
+func (self *OxmMplsLabelMasked) GetOXMName() string {
+	return "mpls_label_masked"
+}
+
+func (self *OxmMplsLabelMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMplsLabelMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmMplsLabelMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmMplsTc struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmMplsTc interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmMplsTc) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmMplsTc) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmMplsTc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmMplsTc(parent *Oxm, decoder *goloxi.Decoder) (*OxmMplsTc, error) {
+	_oxmmplstc := &OxmMplsTc{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmMplsTc packet too short: %d < 1", decoder.Length())
+	}
+	_oxmmplstc.Value = uint8(decoder.ReadByte())
+	return _oxmmplstc, nil
+}
+
+func NewOxmMplsTc() *OxmMplsTc {
+	obj := &OxmMplsTc{
+		Oxm: NewOxm(2147501569),
+	}
+	return obj
+}
+func (self *OxmMplsTc) GetOXMName() string {
+	return "mpls_tc"
+}
+
+func (self *OxmMplsTc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMplsTc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmMplsTcMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmMplsTcMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmMplsTcMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmMplsTcMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmMplsTcMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmMplsTcMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmMplsTcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmMplsTcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmMplsTcMasked, error) {
+	_oxmmplstcmasked := &OxmMplsTcMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmMplsTcMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmmplstcmasked.Value = uint8(decoder.ReadByte())
+	_oxmmplstcmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmmplstcmasked, nil
+}
+
+func NewOxmMplsTcMasked() *OxmMplsTcMasked {
+	obj := &OxmMplsTcMasked{
+		Oxm: NewOxm(2147501826),
+	}
+	return obj
+}
+func (self *OxmMplsTcMasked) GetOXMName() string {
+	return "mpls_tc_masked"
+}
+
+func (self *OxmMplsTcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmMplsTcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmMplsTcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmOvsTcpFlags struct {
+	*Oxm
+	ExperimenterId uint32
+	Value          uint16
+}
+
+type IOxmOvsTcpFlags interface {
+	goloxi.IOxm
+	GetExperimenterId() uint32
+	GetValue() uint16
+}
+
+func (self *OxmOvsTcpFlags) GetExperimenterId() uint32 {
+	return self.ExperimenterId
+}
+
+func (self *OxmOvsTcpFlags) SetExperimenterId(v uint32) {
+	self.ExperimenterId = v
+}
+
+func (self *OxmOvsTcpFlags) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmOvsTcpFlags) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmOvsTcpFlags) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.ExperimenterId))
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmOvsTcpFlags(parent *Oxm, decoder *goloxi.Decoder) (*OxmOvsTcpFlags, error) {
+	_oxmovstcpflags := &OxmOvsTcpFlags{Oxm: parent}
+	if decoder.Length() < 6 {
+		return nil, fmt.Errorf("OxmOvsTcpFlags packet too short: %d < 6", decoder.Length())
+	}
+	_oxmovstcpflags.ExperimenterId = uint32(decoder.ReadUint32())
+	_oxmovstcpflags.Value = uint16(decoder.ReadUint16())
+	return _oxmovstcpflags, nil
+}
+
+func NewOxmOvsTcpFlags() *OxmOvsTcpFlags {
+	obj := &OxmOvsTcpFlags{
+		Oxm: NewOxm(4294923270),
+	}
+	return obj
+}
+func (self *OxmOvsTcpFlags) GetOXMName() string {
+	return "ovs_tcp_flags"
+}
+
+func (self *OxmOvsTcpFlags) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmOvsTcpFlags) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmOvsTcpFlagsMasked struct {
+	*Oxm
+	ExperimenterId uint32
+	Value          uint16
+	ValueMask      uint16
+}
+
+type IOxmOvsTcpFlagsMasked interface {
+	goloxi.IOxm
+	GetExperimenterId() uint32
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmOvsTcpFlagsMasked) GetExperimenterId() uint32 {
+	return self.ExperimenterId
+}
+
+func (self *OxmOvsTcpFlagsMasked) SetExperimenterId(v uint32) {
+	self.ExperimenterId = v
+}
+
+func (self *OxmOvsTcpFlagsMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmOvsTcpFlagsMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmOvsTcpFlagsMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmOvsTcpFlagsMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmOvsTcpFlagsMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint32(uint32(self.ExperimenterId))
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmOvsTcpFlagsMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmOvsTcpFlagsMasked, error) {
+	_oxmovstcpflagsmasked := &OxmOvsTcpFlagsMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmOvsTcpFlagsMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmovstcpflagsmasked.ExperimenterId = uint32(decoder.ReadUint32())
+	_oxmovstcpflagsmasked.Value = uint16(decoder.ReadUint16())
+	_oxmovstcpflagsmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmovstcpflagsmasked, nil
+}
+
+func NewOxmOvsTcpFlagsMasked() *OxmOvsTcpFlagsMasked {
+	obj := &OxmOvsTcpFlagsMasked{
+		Oxm: NewOxm(4294923528),
+	}
+	return obj
+}
+func (self *OxmOvsTcpFlagsMasked) GetOXMName() string {
+	return "ovs_tcp_flags_masked"
+}
+
+func (self *OxmOvsTcpFlagsMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmOvsTcpFlagsMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmOvsTcpFlagsMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmSctpDst struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmSctpDst interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmSctpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmSctpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmSctpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmSctpDst(parent *Oxm, decoder *goloxi.Decoder) (*OxmSctpDst, error) {
+	_oxmsctpdst := &OxmSctpDst{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmSctpDst packet too short: %d < 2", decoder.Length())
+	}
+	_oxmsctpdst.Value = uint16(decoder.ReadUint16())
+	return _oxmsctpdst, nil
+}
+
+func NewOxmSctpDst() *OxmSctpDst {
+	obj := &OxmSctpDst{
+		Oxm: NewOxm(2147492866),
+	}
+	return obj
+}
+func (self *OxmSctpDst) GetOXMName() string {
+	return "sctp_dst"
+}
+
+func (self *OxmSctpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmSctpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmSctpDstMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmSctpDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmSctpDstMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmSctpDstMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmSctpDstMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmSctpDstMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmSctpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmSctpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmSctpDstMasked, error) {
+	_oxmsctpdstmasked := &OxmSctpDstMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmSctpDstMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmsctpdstmasked.Value = uint16(decoder.ReadUint16())
+	_oxmsctpdstmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmsctpdstmasked, nil
+}
+
+func NewOxmSctpDstMasked() *OxmSctpDstMasked {
+	obj := &OxmSctpDstMasked{
+		Oxm: NewOxm(2147493124),
+	}
+	return obj
+}
+func (self *OxmSctpDstMasked) GetOXMName() string {
+	return "sctp_dst_masked"
+}
+
+func (self *OxmSctpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmSctpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmSctpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmSctpSrc struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmSctpSrc interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmSctpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmSctpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmSctpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmSctpSrc(parent *Oxm, decoder *goloxi.Decoder) (*OxmSctpSrc, error) {
+	_oxmsctpsrc := &OxmSctpSrc{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmSctpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_oxmsctpsrc.Value = uint16(decoder.ReadUint16())
+	return _oxmsctpsrc, nil
+}
+
+func NewOxmSctpSrc() *OxmSctpSrc {
+	obj := &OxmSctpSrc{
+		Oxm: NewOxm(2147492354),
+	}
+	return obj
+}
+func (self *OxmSctpSrc) GetOXMName() string {
+	return "sctp_src"
+}
+
+func (self *OxmSctpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmSctpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmSctpSrcMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmSctpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmSctpSrcMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmSctpSrcMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmSctpSrcMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmSctpSrcMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmSctpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmSctpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmSctpSrcMasked, error) {
+	_oxmsctpsrcmasked := &OxmSctpSrcMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmSctpSrcMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmsctpsrcmasked.Value = uint16(decoder.ReadUint16())
+	_oxmsctpsrcmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmsctpsrcmasked, nil
+}
+
+func NewOxmSctpSrcMasked() *OxmSctpSrcMasked {
+	obj := &OxmSctpSrcMasked{
+		Oxm: NewOxm(2147492612),
+	}
+	return obj
+}
+func (self *OxmSctpSrcMasked) GetOXMName() string {
+	return "sctp_src_masked"
+}
+
+func (self *OxmSctpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmSctpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmSctpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmTcpDst struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmTcpDst interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmTcpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmTcpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmTcpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmTcpDst(parent *Oxm, decoder *goloxi.Decoder) (*OxmTcpDst, error) {
+	_oxmtcpdst := &OxmTcpDst{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmTcpDst packet too short: %d < 2", decoder.Length())
+	}
+	_oxmtcpdst.Value = uint16(decoder.ReadUint16())
+	return _oxmtcpdst, nil
+}
+
+func NewOxmTcpDst() *OxmTcpDst {
+	obj := &OxmTcpDst{
+		Oxm: NewOxm(2147490818),
+	}
+	return obj
+}
+func (self *OxmTcpDst) GetOXMName() string {
+	return "tcp_dst"
+}
+
+func (self *OxmTcpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTcpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmTcpDstMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmTcpDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmTcpDstMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmTcpDstMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmTcpDstMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmTcpDstMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmTcpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmTcpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmTcpDstMasked, error) {
+	_oxmtcpdstmasked := &OxmTcpDstMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmTcpDstMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmtcpdstmasked.Value = uint16(decoder.ReadUint16())
+	_oxmtcpdstmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmtcpdstmasked, nil
+}
+
+func NewOxmTcpDstMasked() *OxmTcpDstMasked {
+	obj := &OxmTcpDstMasked{
+		Oxm: NewOxm(2147491076),
+	}
+	return obj
+}
+func (self *OxmTcpDstMasked) GetOXMName() string {
+	return "tcp_dst_masked"
+}
+
+func (self *OxmTcpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTcpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmTcpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmTcpSrc struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmTcpSrc interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmTcpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmTcpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmTcpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmTcpSrc(parent *Oxm, decoder *goloxi.Decoder) (*OxmTcpSrc, error) {
+	_oxmtcpsrc := &OxmTcpSrc{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmTcpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_oxmtcpsrc.Value = uint16(decoder.ReadUint16())
+	return _oxmtcpsrc, nil
+}
+
+func NewOxmTcpSrc() *OxmTcpSrc {
+	obj := &OxmTcpSrc{
+		Oxm: NewOxm(2147490306),
+	}
+	return obj
+}
+func (self *OxmTcpSrc) GetOXMName() string {
+	return "tcp_src"
+}
+
+func (self *OxmTcpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTcpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmTcpSrcMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmTcpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmTcpSrcMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmTcpSrcMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmTcpSrcMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmTcpSrcMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmTcpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmTcpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmTcpSrcMasked, error) {
+	_oxmtcpsrcmasked := &OxmTcpSrcMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmTcpSrcMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmtcpsrcmasked.Value = uint16(decoder.ReadUint16())
+	_oxmtcpsrcmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmtcpsrcmasked, nil
+}
+
+func NewOxmTcpSrcMasked() *OxmTcpSrcMasked {
+	obj := &OxmTcpSrcMasked{
+		Oxm: NewOxm(2147490564),
+	}
+	return obj
+}
+func (self *OxmTcpSrcMasked) GetOXMName() string {
+	return "tcp_src_masked"
+}
+
+func (self *OxmTcpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTcpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmTcpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmTunnelId struct {
+	*Oxm
+	Value uint64
+}
+
+type IOxmTunnelId interface {
+	goloxi.IOxm
+	GetValue() uint64
+}
+
+func (self *OxmTunnelId) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *OxmTunnelId) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *OxmTunnelId) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+
+	return nil
+}
+
+func DecodeOxmTunnelId(parent *Oxm, decoder *goloxi.Decoder) (*OxmTunnelId, error) {
+	_oxmtunnelid := &OxmTunnelId{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmTunnelId packet too short: %d < 8", decoder.Length())
+	}
+	_oxmtunnelid.Value = uint64(decoder.ReadUint64())
+	return _oxmtunnelid, nil
+}
+
+func NewOxmTunnelId() *OxmTunnelId {
+	obj := &OxmTunnelId{
+		Oxm: NewOxm(2147503112),
+	}
+	return obj
+}
+func (self *OxmTunnelId) GetOXMName() string {
+	return "tunnel_id"
+}
+
+func (self *OxmTunnelId) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTunnelId) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmTunnelIdMasked struct {
+	*Oxm
+	Value     uint64
+	ValueMask uint64
+}
+
+type IOxmTunnelIdMasked interface {
+	goloxi.IOxm
+	GetValue() uint64
+	GetValueMask() uint64
+}
+
+func (self *OxmTunnelIdMasked) GetValue() uint64 {
+	return self.Value
+}
+
+func (self *OxmTunnelIdMasked) SetValue(v uint64) {
+	self.Value = v
+}
+
+func (self *OxmTunnelIdMasked) GetValueMask() uint64 {
+	return self.ValueMask
+}
+
+func (self *OxmTunnelIdMasked) SetValueMask(v uint64) {
+	self.ValueMask = v
+}
+
+func (self *OxmTunnelIdMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint64(uint64(self.Value))
+	encoder.PutUint64(uint64(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmTunnelIdMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmTunnelIdMasked, error) {
+	_oxmtunnelidmasked := &OxmTunnelIdMasked{Oxm: parent}
+	if decoder.Length() < 16 {
+		return nil, fmt.Errorf("OxmTunnelIdMasked packet too short: %d < 16", decoder.Length())
+	}
+	_oxmtunnelidmasked.Value = uint64(decoder.ReadUint64())
+	_oxmtunnelidmasked.ValueMask = uint64(decoder.ReadUint64())
+	return _oxmtunnelidmasked, nil
+}
+
+func NewOxmTunnelIdMasked() *OxmTunnelIdMasked {
+	obj := &OxmTunnelIdMasked{
+		Oxm: NewOxm(2147503376),
+	}
+	return obj
+}
+func (self *OxmTunnelIdMasked) GetOXMName() string {
+	return "tunnel_id_masked"
+}
+
+func (self *OxmTunnelIdMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTunnelIdMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmTunnelIdMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmTunnelIpv4Dst struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmTunnelIpv4Dst interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmTunnelIpv4Dst) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4Dst) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmTunnelIpv4Dst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeOxmTunnelIpv4Dst(parent *Oxm, decoder *goloxi.Decoder) (*OxmTunnelIpv4Dst, error) {
+	_oxmtunnelipv4dst := &OxmTunnelIpv4Dst{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmTunnelIpv4Dst packet too short: %d < 4", decoder.Length())
+	}
+	_oxmtunnelipv4dst.Value = net.IP(decoder.Read(4))
+	return _oxmtunnelipv4dst, nil
+}
+
+func NewOxmTunnelIpv4Dst() *OxmTunnelIpv4Dst {
+	obj := &OxmTunnelIpv4Dst{
+		Oxm: NewOxm(81924),
+	}
+	return obj
+}
+func (self *OxmTunnelIpv4Dst) GetOXMName() string {
+	return "tunnel_ipv4_dst"
+}
+
+func (self *OxmTunnelIpv4Dst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4Dst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmTunnelIpv4DstMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmTunnelIpv4DstMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmTunnelIpv4DstMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4DstMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmTunnelIpv4DstMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmTunnelIpv4DstMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmTunnelIpv4DstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeOxmTunnelIpv4DstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmTunnelIpv4DstMasked, error) {
+	_oxmtunnelipv4dstmasked := &OxmTunnelIpv4DstMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmTunnelIpv4DstMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmtunnelipv4dstmasked.Value = net.IP(decoder.Read(4))
+	_oxmtunnelipv4dstmasked.ValueMask = net.IP(decoder.Read(4))
+	return _oxmtunnelipv4dstmasked, nil
+}
+
+func NewOxmTunnelIpv4DstMasked() *OxmTunnelIpv4DstMasked {
+	obj := &OxmTunnelIpv4DstMasked{
+		Oxm: NewOxm(82184),
+	}
+	return obj
+}
+func (self *OxmTunnelIpv4DstMasked) GetOXMName() string {
+	return "tunnel_ipv4_dst_masked"
+}
+
+func (self *OxmTunnelIpv4DstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4DstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmTunnelIpv4DstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmTunnelIpv4Src struct {
+	*Oxm
+	Value net.IP
+}
+
+type IOxmTunnelIpv4Src interface {
+	goloxi.IOxm
+	GetValue() net.IP
+}
+
+func (self *OxmTunnelIpv4Src) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4Src) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmTunnelIpv4Src) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+
+	return nil
+}
+
+func DecodeOxmTunnelIpv4Src(parent *Oxm, decoder *goloxi.Decoder) (*OxmTunnelIpv4Src, error) {
+	_oxmtunnelipv4src := &OxmTunnelIpv4Src{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmTunnelIpv4Src packet too short: %d < 4", decoder.Length())
+	}
+	_oxmtunnelipv4src.Value = net.IP(decoder.Read(4))
+	return _oxmtunnelipv4src, nil
+}
+
+func NewOxmTunnelIpv4Src() *OxmTunnelIpv4Src {
+	obj := &OxmTunnelIpv4Src{
+		Oxm: NewOxm(81412),
+	}
+	return obj
+}
+func (self *OxmTunnelIpv4Src) GetOXMName() string {
+	return "tunnel_ipv4_src"
+}
+
+func (self *OxmTunnelIpv4Src) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4Src) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmTunnelIpv4SrcMasked struct {
+	*Oxm
+	Value     net.IP
+	ValueMask net.IP
+}
+
+type IOxmTunnelIpv4SrcMasked interface {
+	goloxi.IOxm
+	GetValue() net.IP
+	GetValueMask() net.IP
+}
+
+func (self *OxmTunnelIpv4SrcMasked) GetValue() net.IP {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4SrcMasked) SetValue(v net.IP) {
+	self.Value = v
+}
+
+func (self *OxmTunnelIpv4SrcMasked) GetValueMask() net.IP {
+	return self.ValueMask
+}
+
+func (self *OxmTunnelIpv4SrcMasked) SetValueMask(v net.IP) {
+	self.ValueMask = v
+}
+
+func (self *OxmTunnelIpv4SrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.Write(self.Value.To4())
+	encoder.Write(self.ValueMask.To4())
+
+	return nil
+}
+
+func DecodeOxmTunnelIpv4SrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmTunnelIpv4SrcMasked, error) {
+	_oxmtunnelipv4srcmasked := &OxmTunnelIpv4SrcMasked{Oxm: parent}
+	if decoder.Length() < 8 {
+		return nil, fmt.Errorf("OxmTunnelIpv4SrcMasked packet too short: %d < 8", decoder.Length())
+	}
+	_oxmtunnelipv4srcmasked.Value = net.IP(decoder.Read(4))
+	_oxmtunnelipv4srcmasked.ValueMask = net.IP(decoder.Read(4))
+	return _oxmtunnelipv4srcmasked, nil
+}
+
+func NewOxmTunnelIpv4SrcMasked() *OxmTunnelIpv4SrcMasked {
+	obj := &OxmTunnelIpv4SrcMasked{
+		Oxm: NewOxm(81672),
+	}
+	return obj
+}
+func (self *OxmTunnelIpv4SrcMasked) GetOXMName() string {
+	return "tunnel_ipv4_src_masked"
+}
+
+func (self *OxmTunnelIpv4SrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmTunnelIpv4SrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmTunnelIpv4SrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmUdpDst struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmUdpDst interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmUdpDst) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmUdpDst) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmUdpDst) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmUdpDst(parent *Oxm, decoder *goloxi.Decoder) (*OxmUdpDst, error) {
+	_oxmudpdst := &OxmUdpDst{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmUdpDst packet too short: %d < 2", decoder.Length())
+	}
+	_oxmudpdst.Value = uint16(decoder.ReadUint16())
+	return _oxmudpdst, nil
+}
+
+func NewOxmUdpDst() *OxmUdpDst {
+	obj := &OxmUdpDst{
+		Oxm: NewOxm(2147491842),
+	}
+	return obj
+}
+func (self *OxmUdpDst) GetOXMName() string {
+	return "udp_dst"
+}
+
+func (self *OxmUdpDst) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmUdpDst) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmUdpDstMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmUdpDstMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmUdpDstMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmUdpDstMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmUdpDstMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmUdpDstMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmUdpDstMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmUdpDstMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmUdpDstMasked, error) {
+	_oxmudpdstmasked := &OxmUdpDstMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmUdpDstMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmudpdstmasked.Value = uint16(decoder.ReadUint16())
+	_oxmudpdstmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmudpdstmasked, nil
+}
+
+func NewOxmUdpDstMasked() *OxmUdpDstMasked {
+	obj := &OxmUdpDstMasked{
+		Oxm: NewOxm(2147492100),
+	}
+	return obj
+}
+func (self *OxmUdpDstMasked) GetOXMName() string {
+	return "udp_dst_masked"
+}
+
+func (self *OxmUdpDstMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmUdpDstMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmUdpDstMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmUdpSrc struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmUdpSrc interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmUdpSrc) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmUdpSrc) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmUdpSrc) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmUdpSrc(parent *Oxm, decoder *goloxi.Decoder) (*OxmUdpSrc, error) {
+	_oxmudpsrc := &OxmUdpSrc{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmUdpSrc packet too short: %d < 2", decoder.Length())
+	}
+	_oxmudpsrc.Value = uint16(decoder.ReadUint16())
+	return _oxmudpsrc, nil
+}
+
+func NewOxmUdpSrc() *OxmUdpSrc {
+	obj := &OxmUdpSrc{
+		Oxm: NewOxm(2147491330),
+	}
+	return obj
+}
+func (self *OxmUdpSrc) GetOXMName() string {
+	return "udp_src"
+}
+
+func (self *OxmUdpSrc) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmUdpSrc) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmUdpSrcMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmUdpSrcMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmUdpSrcMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmUdpSrcMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmUdpSrcMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmUdpSrcMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmUdpSrcMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmUdpSrcMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmUdpSrcMasked, error) {
+	_oxmudpsrcmasked := &OxmUdpSrcMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmUdpSrcMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmudpsrcmasked.Value = uint16(decoder.ReadUint16())
+	_oxmudpsrcmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmudpsrcmasked, nil
+}
+
+func NewOxmUdpSrcMasked() *OxmUdpSrcMasked {
+	obj := &OxmUdpSrcMasked{
+		Oxm: NewOxm(2147491588),
+	}
+	return obj
+}
+func (self *OxmUdpSrcMasked) GetOXMName() string {
+	return "udp_src_masked"
+}
+
+func (self *OxmUdpSrcMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmUdpSrcMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmUdpSrcMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmVlanPcp struct {
+	*Oxm
+	Value uint8
+}
+
+type IOxmVlanPcp interface {
+	goloxi.IOxm
+	GetValue() uint8
+}
+
+func (self *OxmVlanPcp) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmVlanPcp) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmVlanPcp) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+
+	return nil
+}
+
+func DecodeOxmVlanPcp(parent *Oxm, decoder *goloxi.Decoder) (*OxmVlanPcp, error) {
+	_oxmvlanpcp := &OxmVlanPcp{Oxm: parent}
+	if decoder.Length() < 1 {
+		return nil, fmt.Errorf("OxmVlanPcp packet too short: %d < 1", decoder.Length())
+	}
+	_oxmvlanpcp.Value = uint8(decoder.ReadByte())
+	return _oxmvlanpcp, nil
+}
+
+func NewOxmVlanPcp() *OxmVlanPcp {
+	obj := &OxmVlanPcp{
+		Oxm: NewOxm(2147487233),
+	}
+	return obj
+}
+func (self *OxmVlanPcp) GetOXMName() string {
+	return "vlan_pcp"
+}
+
+func (self *OxmVlanPcp) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmVlanPcp) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmVlanPcpMasked struct {
+	*Oxm
+	Value     uint8
+	ValueMask uint8
+}
+
+type IOxmVlanPcpMasked interface {
+	goloxi.IOxm
+	GetValue() uint8
+	GetValueMask() uint8
+}
+
+func (self *OxmVlanPcpMasked) GetValue() uint8 {
+	return self.Value
+}
+
+func (self *OxmVlanPcpMasked) SetValue(v uint8) {
+	self.Value = v
+}
+
+func (self *OxmVlanPcpMasked) GetValueMask() uint8 {
+	return self.ValueMask
+}
+
+func (self *OxmVlanPcpMasked) SetValueMask(v uint8) {
+	self.ValueMask = v
+}
+
+func (self *OxmVlanPcpMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint8(uint8(self.Value))
+	encoder.PutUint8(uint8(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmVlanPcpMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmVlanPcpMasked, error) {
+	_oxmvlanpcpmasked := &OxmVlanPcpMasked{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmVlanPcpMasked packet too short: %d < 2", decoder.Length())
+	}
+	_oxmvlanpcpmasked.Value = uint8(decoder.ReadByte())
+	_oxmvlanpcpmasked.ValueMask = uint8(decoder.ReadByte())
+	return _oxmvlanpcpmasked, nil
+}
+
+func NewOxmVlanPcpMasked() *OxmVlanPcpMasked {
+	obj := &OxmVlanPcpMasked{
+		Oxm: NewOxm(2147487490),
+	}
+	return obj
+}
+func (self *OxmVlanPcpMasked) GetOXMName() string {
+	return "vlan_pcp_masked"
+}
+
+func (self *OxmVlanPcpMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmVlanPcpMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmVlanPcpMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
+
+type OxmVlanVid struct {
+	*Oxm
+	Value uint16
+}
+
+type IOxmVlanVid interface {
+	goloxi.IOxm
+	GetValue() uint16
+}
+
+func (self *OxmVlanVid) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmVlanVid) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmVlanVid) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+
+	return nil
+}
+
+func DecodeOxmVlanVid(parent *Oxm, decoder *goloxi.Decoder) (*OxmVlanVid, error) {
+	_oxmvlanvid := &OxmVlanVid{Oxm: parent}
+	if decoder.Length() < 2 {
+		return nil, fmt.Errorf("OxmVlanVid packet too short: %d < 2", decoder.Length())
+	}
+	_oxmvlanvid.Value = uint16(decoder.ReadUint16())
+	return _oxmvlanvid, nil
+}
+
+func NewOxmVlanVid() *OxmVlanVid {
+	obj := &OxmVlanVid{
+		Oxm: NewOxm(2147486722),
+	}
+	return obj
+}
+func (self *OxmVlanVid) GetOXMName() string {
+	return "vlan_vid"
+}
+
+func (self *OxmVlanVid) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmVlanVid) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s}", self.GetOXMName(), string(value))), nil
+}
+
+type OxmVlanVidMasked struct {
+	*Oxm
+	Value     uint16
+	ValueMask uint16
+}
+
+type IOxmVlanVidMasked interface {
+	goloxi.IOxm
+	GetValue() uint16
+	GetValueMask() uint16
+}
+
+func (self *OxmVlanVidMasked) GetValue() uint16 {
+	return self.Value
+}
+
+func (self *OxmVlanVidMasked) SetValue(v uint16) {
+	self.Value = v
+}
+
+func (self *OxmVlanVidMasked) GetValueMask() uint16 {
+	return self.ValueMask
+}
+
+func (self *OxmVlanVidMasked) SetValueMask(v uint16) {
+	self.ValueMask = v
+}
+
+func (self *OxmVlanVidMasked) Serialize(encoder *goloxi.Encoder) error {
+	if err := self.Oxm.Serialize(encoder); err != nil {
+		return err
+	}
+
+	encoder.PutUint16(uint16(self.Value))
+	encoder.PutUint16(uint16(self.ValueMask))
+
+	return nil
+}
+
+func DecodeOxmVlanVidMasked(parent *Oxm, decoder *goloxi.Decoder) (*OxmVlanVidMasked, error) {
+	_oxmvlanvidmasked := &OxmVlanVidMasked{Oxm: parent}
+	if decoder.Length() < 4 {
+		return nil, fmt.Errorf("OxmVlanVidMasked packet too short: %d < 4", decoder.Length())
+	}
+	_oxmvlanvidmasked.Value = uint16(decoder.ReadUint16())
+	_oxmvlanvidmasked.ValueMask = uint16(decoder.ReadUint16())
+	return _oxmvlanvidmasked, nil
+}
+
+func NewOxmVlanVidMasked() *OxmVlanVidMasked {
+	obj := &OxmVlanVidMasked{
+		Oxm: NewOxm(2147486980),
+	}
+	return obj
+}
+func (self *OxmVlanVidMasked) GetOXMName() string {
+	return "vlan_vid_masked"
+}
+
+func (self *OxmVlanVidMasked) GetOXMValue() interface{} {
+	return self.Value
+}
+
+func (self *OxmVlanVidMasked) GetOXMValueMask() interface{} {
+	return self.ValueMask
+}
+
+func (self *OxmVlanVidMasked) MarshalJSON() ([]byte, error) {
+	value, err := jsonValue(self.GetOXMValue())
+	if err != nil {
+		return nil, err
+	}
+	valueMask, err := jsonValue(self.GetOXMValueMask())
+	if err != nil {
+		return nil, err
+	}
+	return []byte(fmt.Sprintf("{\"Type\":\"%s\",\"Value\":%s,\"Mask\":%s}", self.GetOXMName(), string(value), string(valueMask))), nil
+}
diff --git a/vendor/github.com/skydive-project/goloxi/of13/types.go b/vendor/github.com/skydive-project/goloxi/of13/types.go
new file mode 100644
index 0000000..f6f2e7e
--- /dev/null
+++ b/vendor/github.com/skydive-project/goloxi/of13/types.go
@@ -0,0 +1,154 @@
+package of13
+
+import (
+	"encoding/json"
+	"fmt"
+	"net"
+
+	"github.com/skydive-project/goloxi"
+)
+
+// TODO: set real types
+type OXM = Oxm
+type uint128 = goloxi.Uint128
+type Checksum128 [16]byte
+type Bitmap128 uint128
+type Bitmap512 struct {
+	a, b, c, d uint128
+}
+type Unimplemented struct{}
+type BSNVport uint16
+type ControllerURI uint16
+
+func (h *Header) MessageType() uint8 {
+	return h.Type
+}
+
+func (h *Header) MessageName() string {
+	return Type(h.Type).String()
+}
+
+func (self *Checksum128) Decode(decoder *goloxi.Decoder) error {
+	return nil
+}
+
+func (self *Checksum128) Serialize(encoder *goloxi.Encoder) error {
+	return nil
+}
+func (self *Bitmap128) Decode(decoder *goloxi.Decoder) error {
+	return nil
+}
+
+func (self *Bitmap128) Serialize(encoder *goloxi.Encoder) error {
+	return nil
+}
+func (self *Bitmap512) Decode(decoder *goloxi.Decoder) error {
+	return nil
+}
+
+func (self *Bitmap512) Serialize(encoder *goloxi.Encoder) error {
+	return nil
+}
+func (self *BSNVport) Decode(decoder *goloxi.Decoder) error {
+	return nil
+}
+
+func (self *BSNVport) Serialize(encoder *goloxi.Encoder) error {
+	return nil
+}
+func (self *ControllerURI) Decode(decoder *goloxi.Decoder) error {
+	return nil
+}
+
+func (self *ControllerURI) Serialize(encoder *goloxi.Encoder) error {
+	return nil
+}
+
+type FmCmd uint8
+
+func (self *FmCmd) Serialize(encoder *goloxi.Encoder) error {
+	encoder.PutUint8(uint8(*self))
+	return nil
+}
+
+func (self *FmCmd) Decode(decoder *goloxi.Decoder) error {
+	*self = FmCmd(decoder.ReadUint8())
+	return nil
+}
+
+type MatchBmap uint64
+
+func (self *MatchBmap) Serialize(encoder *goloxi.Encoder) error {
+	encoder.PutUint64(uint64(*self))
+	return nil
+}
+
+func (self *MatchBmap) Decode(decoder *goloxi.Decoder) error {
+	*self = MatchBmap(decoder.ReadUint64())
+	return nil
+}
+
+type WcBmap uint64
+
+func (self *WcBmap) Serialize(encoder *goloxi.Encoder) error {
+	encoder.PutUint64(uint64(*self))
+	return nil
+}
+
+func (self *WcBmap) Decode(decoder *goloxi.Decoder) error {
+	*self = WcBmap(decoder.ReadUint64())
+	return nil
+}
+
+type Match = MatchV3
+type PortNo uint32
+
+func (self *PortNo) Serialize(encoder *goloxi.Encoder) error {
+	encoder.PutUint32(uint32(*self))
+	return nil
+}
+
+func (self *PortNo) Decode(decoder *goloxi.Decoder) error {
+	*self = PortNo(decoder.ReadUint32())
+	return nil
+}
+
+func DecodeMessage(data []byte) (goloxi.Message, error) {
+	header, err := DecodeHeader(goloxi.NewDecoder(data))
+	if err != nil {
+		return nil, err
+	}
+
+	return header.(goloxi.Message), nil
+}
+
+func (self *Port) Serialize(encoder *goloxi.Encoder) error {
+	portNo := PortNo(*self)
+	return portNo.Serialize(encoder)
+}
+
+func (self *Port) Decode(decoder *goloxi.Decoder) error {
+	portNo := PortNo(*self)
+	if err := portNo.Decode(decoder); err != nil {
+		return err
+	}
+	*self = Port(portNo)
+	return nil
+}
+
+func jsonValue(value interface{}) ([]byte, error) {
+	switch t := value.(type) {
+	case net.HardwareAddr:
+		value = t.String()
+	case net.IP:
+		value = t.String()
+	default:
+		if s, ok := t.(fmt.Stringer); ok {
+			value = s.String()
+		} else {
+			value = t
+		}
+	}
+
+	return json.Marshal(value)
+}