Netopeer NETCONF server integration

Amendments:

- Removed local copy of golang package. Added instructions to download it.
- Removed cached files which are created when transapi is built.
- Added netopeer as a build-able Makefile component.
  Updated documentation.

Change-Id: I532e813b81a0531648c5a6bcb048208700cf57a4
diff --git a/netopeer/voltha-grpc-client/README.md b/netopeer/voltha-grpc-client/README.md
new file mode 100644
index 0000000..a7e00db
--- /dev/null
+++ b/netopeer/voltha-grpc-client/README.md
@@ -0,0 +1,39 @@
+Voltha Golang GRPC Client
+-------------------------
+
+### Introduction
+
+This GoLang library is meant to be used as a layer between C libraries that need to interact with 
+Voltha.  
+
+The Voltha GRPC Go api was generated by first copying all the voltha .proto files located under:
+
+```
+../../voltha/protos
+```
+
+Followed by the execution of the command:
+
+```
+protoc --go_out=plugins=grpc:. *.proto
+```
+
+### TODO(s)
+
+* At the moment, the resulting API files had to be manually fixed to obtain a working solution.
+There were conflicting imports throughout the file.  It still needs to be investigated
+
+* The user-facing API, i.e. the exported methods with the main voltha.go file, need to be 
+manually added.  Only a few commands have been completed as it requires a lot of effort to 
+translate between the GRPC data model to C model that can be used by C libraries.
+
+* As a first attempt to auto-generate some of the code, a utility executable (generate-c-header
+.go) was implemented to create the C header that defines all the necessary C data structures 
+based on the available Voltha GRPC data structures.  This utility still needs some polishing.
+
+
+
+
+
+
+
diff --git a/netopeer/voltha-grpc-client/generate-c-header.go b/netopeer/voltha-grpc-client/generate-c-header.go
new file mode 100644
index 0000000..c84fdda
--- /dev/null
+++ b/netopeer/voltha-grpc-client/generate-c-header.go
@@ -0,0 +1,133 @@
+package main
+
+import (
+	"github.com/opencord/voltha/netconf/translator/voltha"
+	"reflect"
+	"fmt"
+)
+
+var StructMap map[string]map[string]string
+
+func init() {
+	StructMap = make(map[string]map[string]string)
+}
+
+func addArrayType(newType string) {
+	if _, ok := StructMap[newType+"Array"]; !ok {
+		StructMap[newType+"Array"] = make(map[string]string)
+		StructMap[newType+"Array"]["items"] = newType + "*"
+		StructMap[newType+"Array"]["size"] = "int"
+	}
+
+}
+
+func addEnumType(newType string) {
+	if _, ok := StructMap[newType]; !ok {
+		StructMap[newType] = make(map[string]string)
+		StructMap[newType]["Type"] = "enum " + newType + "Enum"
+		StructMap[newType]["Value"] = "char*"
+	}
+}
+
+func traverseVolthaStructures(original reflect.Value) string {
+	field_type := ""
+
+	switch original.Kind() {
+
+	case reflect.Ptr:
+		field_type = traverseVolthaStructures(original.Elem())
+
+	case reflect.Interface:
+		addEnumType(original.Type().Name())
+		field_type = original.Type().Name()
+
+	case reflect.Struct:
+		for i := 0; i < original.NumField(); i += 1 {
+			field_type = ""
+			if original.Field(i).Kind() == reflect.Ptr {
+				newType := reflect.New(original.Type().Field(i).Type.Elem())
+				traverseVolthaStructures(reflect.Indirect(newType))
+				field_type = original.Type().Field(i).Type.Elem().Name() + "*"
+			} else {
+				field_type = traverseVolthaStructures(original.Field(i))
+			}
+			if _, ok := StructMap[original.Type().Name()]; !ok {
+				StructMap[original.Type().Name()] = make(map[string]string)
+			}
+			if _, ok := StructMap[original.Type().Name()][original.Type().Field(i).Name]; !ok {
+				if field_type == "" {
+					StructMap[original.Type().Name()][original.Type().Field(i).Name] =
+						string(original.Type().Field(i).Type.String())
+				} else {
+					StructMap[original.Type().Name()][original.Type().Field(i).Name] =
+						field_type
+				}
+			}
+		}
+
+	case reflect.Slice:
+		if original.Type().Elem().Kind() == reflect.Ptr {
+			newType := reflect.New(original.Type().Elem().Elem())
+			field_type = newType.Type().Elem().Name() + "Array"
+			traverseVolthaStructures(reflect.Indirect(newType))
+			addArrayType(newType.Type().Elem().Name())
+		} else {
+			field_type = original.Type().Elem().Kind().String() + "Array"
+			addArrayType(original.Type().Elem().Kind().String())
+		}
+
+	//case reflect.Map:
+	//	for _, key := range original.MapKeys() {
+	//		originalValue := original.MapIndex(key)
+	//	}
+
+	case reflect.String:
+		field_type = "string"
+		break
+
+	default:
+		field_type = original.Kind().String()
+	}
+
+	return field_type
+}
+
+func main() {
+	traverseVolthaStructures(reflect.ValueOf(voltha.Voltha{}))
+
+	fmt.Printf("#ifndef VOLTHA_DEFS\n")
+	fmt.Printf("#define VOLTHA_DEFS\n")
+	fmt.Printf("\n#include <stdint.h>\n")
+	var attribute_type string
+	for k, v := range StructMap {
+		fmt.Printf("\ntypedef struct {\n")
+		for kk, vv := range v {
+			attribute_type = vv
+			switch vv {
+			case "string*":
+				attribute_type = "char**"
+			case "string":
+				attribute_type = "char*"
+			case "int32":
+				attribute_type = "int32_t"
+			case "uint8*":
+				fallthrough
+			case "uint8":
+				attribute_type = "uint8_t"
+			case "uint32*":
+				fallthrough
+			case "uint32":
+				attribute_type = "uint32_t"
+			case "uint64*":
+				fallthrough
+			case "uint64":
+				attribute_type = "uint64_t"
+			case "bool":
+				attribute_type = "int"
+			}
+			fmt.Printf("\t%s %s;\n", attribute_type, kk)
+		}
+		fmt.Printf("} %s;\n", k)
+	}
+	fmt.Printf("\n#endif\n")
+}
diff --git a/netopeer/voltha-grpc-client/voltha-defs.h b/netopeer/voltha-grpc-client/voltha-defs.h
new file mode 100644
index 0000000..eac9360
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha-defs.h
@@ -0,0 +1,456 @@
+#ifndef VOLTHA_DEFS
+#define VOLTHA_DEFS
+
+#include <stdint.h>
+
+typedef enum {
+    OUTPUT = 0,
+    MPLS_TTL = 1,
+    PUSH = 2,
+    POP_MPLS = 3,
+    GROUP = 4,
+    NW_TTL = 5,
+    SET_FIELD = 6,
+    EXPERIMENTER = 7
+} isOfpAction_ActionEnum;
+
+typedef enum {
+    DEBUG = 0,
+    INFO = 1,
+    WARNING = 2,
+    ERROR = 3,
+    CRITICAL = 4
+} LogLevelEnum;
+
+typedef enum {
+    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 = 7
+} isOfpInstruction_DataEnum;
+
+typedef enum {
+    OFB_FIELD = 0,
+    EXPERIMENTER_FIELD = 1
+} isOfpOxmField_FieldEnum;
+
+typedef enum {
+    MAC = 0,
+    IPV4 = 1,
+    IPV6 = 2,
+    HOST_AND_PORT = 3
+} isDevice_AddressEnum;
+
+typedef enum {
+    HEALTHY = 0,
+    OVERLOADED = 1,
+    DYING = 1
+} HealthStatusEnum;
+
+typedef struct {
+	char* State;
+} HealthStatus;
+
+typedef struct {
+	char* MfrDesc;
+	char* HwDesc;
+	char* SwDesc;
+	char* SerialNum;
+	char* DpDesc;
+} OfpDesc;
+
+typedef struct {
+	uint32_t NBuffers;
+	uint32_t NTables;
+	uint32_t AuxiliaryId;
+	uint32_t Capabilities;
+	uint64_t DatapathId;
+} OfpSwitchFeatures;
+
+typedef struct {
+	char* Value;
+	int Type;
+} isOfpOxmField_Field;
+
+typedef struct {
+	int32_t OxmClass;
+	isOfpOxmField_Field Field;
+} OfpOxmField;
+
+typedef struct {
+	OfpOxmField* items;
+	int size;
+} OfpOxmFieldArray;
+
+typedef struct {
+	int32_t Type;
+	OfpOxmFieldArray OxmFields;
+} OfpMatch;
+
+typedef struct {
+	int Type;
+	char* Value;
+} isOfpAction_Action;
+
+typedef struct {
+	int32_t Type;
+	isOfpAction_Action Action;
+} OfpAction;
+
+typedef struct {
+	int Type;
+	char* Value;
+} isOfpInstruction_Data;
+
+typedef struct {
+	isOfpInstruction_Data Data;
+	uint32_t Type;
+} OfpInstruction;
+
+typedef struct {
+	OfpInstruction* items;
+	int size;
+} OfpInstructionArray;
+
+typedef struct {
+	uint64_t PacketCount;
+	uint64_t ByteCount;
+	OfpMatch* Match;
+	uint64_t Id;
+	uint32_t DurationSec;
+	uint32_t Priority;
+	uint32_t HardTimeout;
+	uint32_t Flags;
+	uint32_t TableId;
+	uint32_t DurationNsec;
+	uint32_t IdleTimeout;
+	uint64_t Cookie;
+	OfpInstructionArray Instructions;
+} OfpFlowStats;
+
+typedef struct {
+	OfpFlowStats* items;
+	int size;
+} OfpFlowStatsArray;
+
+typedef struct {
+	OfpFlowStatsArray Items;
+} Flows;
+
+typedef struct {
+	OfpAction* items;
+	int size;
+} OfpActionArray;
+
+typedef struct {
+	OfpActionArray Actions;
+	uint32_t Weight;
+	uint32_t WatchPort;
+	uint32_t WatchGroup;
+} OfpBucket;
+
+typedef struct {
+	OfpBucket* items;
+	int size;
+} OfpBucketArray;
+
+typedef struct {
+	int32_t Type;
+	uint32_t GroupId;
+	OfpBucketArray Buckets;
+} OfpGroupDesc;
+
+typedef struct {
+	uint64_t PacketCount;
+	uint64_t ByteCount;
+} OfpBucketCounter;
+
+typedef struct {
+	OfpBucketCounter* items;
+	int size;
+} OfpBucketCounterArray;
+
+typedef struct {
+	uint32_t RefCount;
+	uint64_t PacketCount;
+	uint64_t ByteCount;
+	uint32_t DurationSec;
+	uint32_t DurationNsec;
+	OfpBucketCounterArray BucketStats;
+	uint32_t GroupId;
+} OfpGroupStats;
+
+typedef struct {
+	OfpGroupDesc* Desc;
+	OfpGroupStats* Stats;
+} OfpGroupEntry;
+
+typedef struct {
+	OfpGroupEntry* items;
+	int size;
+} OfpGroupEntryArray;
+
+typedef struct {
+	OfpGroupEntryArray Items;
+} FlowGroups;
+
+typedef struct {
+	uint32_t SampleFreq;
+	char* Name;
+	int32_t Type;
+	int Enabled;
+} PmConfig;
+
+typedef struct {
+	PmConfig* items;
+	int size;
+} PmConfigArray;
+
+typedef struct {
+	char* GroupName;
+	uint32_t GroupFreq;
+	int Enabled;
+	PmConfigArray Metrics;
+} PmGroupConfig;
+
+typedef struct {
+	PmGroupConfig* items;
+	int size;
+} PmGroupConfigArray;
+
+typedef struct {
+	uint32_t items;
+	int size;
+} uint32Array;
+
+typedef struct {
+	uint32Array HwAddr;
+	uint32_t State;
+	uint32_t Curr;
+	uint32_t MaxSpeed;
+	uint32_t PortNo;
+	char* Name;
+	uint32_t Config;
+	uint32_t Advertised;
+	uint32_t Supported;
+	uint32_t Peer;
+	uint32_t CurrSpeed;
+} OfpPort;
+
+typedef struct {
+	char* Value;
+	int Type;
+} isDevice_Address;
+
+typedef struct {
+	char* DeviceId;
+	uint32_t ChannelId;
+	uint32_t OnuId;
+	uint32_t OnuSessionId;
+} Device_ProxyAddress;
+
+typedef struct {
+	char** items;
+	int size;
+} stringArray;
+
+typedef struct {
+	uint8_t* items;
+	int size;
+} uint8Array;
+
+typedef struct {
+	uint8Array Value;
+	char* TypeUrl;
+} Any;
+
+typedef struct {
+	int32_t LogLevel;
+	Any* AdditionalConfig;
+} AdapterConfig;
+
+typedef struct {
+	AdapterConfig* Config;
+	Any* AdditionalDescription;
+	stringArray LogicalDeviceIds;
+	char* Id;
+	char* Vendor;
+	char* Version;
+} Adapter;
+
+typedef struct {
+	int32_t Key;
+	char* Value;
+} AlarmFilterRule;
+
+typedef struct {
+	AlarmFilterRule* items;
+	int size;
+} AlarmFilterRuleArray;
+
+typedef struct {
+	char* Id;
+	AlarmFilterRuleArray Rules;
+} AlarmFilter;
+
+typedef struct {
+	AlarmFilter* items;
+	int size;
+} AlarmFilterArray;
+
+typedef struct {
+	char* Id;
+	OfpPort* OfpPort;
+	char* DeviceId;
+	uint32_t DevicePortNo;
+	int RootPort;
+} LogicalPort;
+
+typedef struct {
+	LogicalPort* items;
+	int size;
+} LogicalPortArray;
+
+typedef struct {
+	FlowGroups* FlowGroups;
+	char* Id;
+	uint64_t DatapathId;
+	OfpDesc* Desc;
+	OfpSwitchFeatures* SwitchFeatures;
+	char* RootDeviceId;
+	LogicalPortArray Ports;
+	Flows* Flows;
+} LogicalDevice;
+
+typedef struct {
+	LogicalDevice* items;
+	int size;
+} LogicalDeviceArray;
+
+typedef struct {
+	uint32_t PortNo;
+	char* DeviceId;
+} Port_PeerPort;
+
+typedef struct {
+	Port_PeerPort* items;
+	int size;
+} Port_PeerPortArray;
+
+typedef struct {
+	uint32_t PortNo;
+	char* Label;
+	int32_t Type;
+	int32_t AdminState;
+	int32_t OperStatus;
+	char* DeviceId;
+	Port_PeerPortArray Peers;
+} Port;
+
+typedef struct {
+	Port* items;
+	int size;
+} PortArray;
+
+typedef struct {
+	uint32_t DefaultFreq;
+	int Grouped;
+	int FreqOverride;
+	PmGroupConfigArray Groups;
+	PmConfigArray Metrics;
+	char* Id;
+} PmConfigs;
+
+typedef struct {
+	char* Id;
+	char* Adapter;
+	int AcceptsBulkFlowUpdate;
+	int AcceptsAddRemoveFlowUpdates;
+} DeviceType;
+
+typedef struct {
+	DeviceType* items;
+	int size;
+} DeviceTypeArray;
+
+typedef struct {
+	char* Reason;
+	char* ConnectStatus;
+	FlowGroups* FlowGroups;
+	char* Id;
+	char* Model;
+	Device_ProxyAddress* ProxyAddress;
+	char* OperStatus;
+	uint32_t ParentPortNo;
+	char* HardwareVersion;
+	Flows* Flows;
+	PmConfigs* PmConfigs;
+	char* AdminState;
+	char* Type;
+	char* ParentId;
+	char* Vendor;
+	char* SerialNumber;
+	uint32_t Vlan;
+	isDevice_Address Address;
+	Any* Custom;
+	PortArray Ports;
+	int Root;
+	char* FirmwareVersion;
+	char* SoftwareVersion;
+	char* Adapter;
+} Device;
+
+typedef struct {
+	Device* items;
+	int size;
+} DeviceArray;
+
+typedef struct {
+	char* Id;
+	LogicalDeviceArray LogicalDevices;
+	DeviceArray Devices;
+} DeviceGroup;
+
+typedef struct {
+	DeviceGroup* items;
+	int size;
+} DeviceGroupArray;
+
+typedef struct {
+	Adapter* items;
+	int size;
+} AdapterArray;
+
+typedef struct {
+	AlarmFilterArray AlarmFilters;
+	char* InstanceId;
+	HealthStatus Health;
+	AdapterArray Adapters;
+	LogicalDeviceArray LogicalDevices;
+	DeviceGroupArray DeviceGroups;
+	char* Version;
+	char* LogLevel;
+	DeviceArray Devices;
+	DeviceTypeArray DeviceTypes;
+} VolthaInstance;
+
+typedef struct {
+	VolthaInstance* items;
+	int size;
+} VolthaInstanceArray;
+
+typedef struct {
+	char* Version;
+	char* LogLevel;
+	VolthaInstanceArray Instances;
+	AdapterArray Adapters;
+	LogicalDeviceArray LogicalDevices;
+	DeviceArray Devices;
+	DeviceGroupArray DeviceGroups;
+} Voltha;
+
+#endif
diff --git a/netopeer/voltha-grpc-client/voltha.go b/netopeer/voltha-grpc-client/voltha.go
new file mode 100644
index 0000000..2c7853a
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha.go
@@ -0,0 +1,497 @@
+//package voltha
+package main
+
+/*
+#include <stdlib.h>
+#include "voltha-defs.h"
+ */
+import "C"
+
+import (
+	"log"
+	"golang.org/x/net/context"
+	"google.golang.org/grpc"
+	"github.com/golang/protobuf/ptypes/empty"
+	"github.com/hashicorp/consul/api"
+	pb "github.com/opencord/voltha/netconf/translator/voltha"
+	pb_health "github.com/opencord/voltha/netconf/translator/voltha/health"
+	pb_device "github.com/opencord/voltha/netconf/translator/voltha/device"
+	pb_adapter "github.com/opencord/voltha/netconf/translator/voltha/adapter"
+	pb_logical_device "github.com/opencord/voltha/netconf/translator/voltha/logical_device"
+	pb_openflow "github.com/opencord/voltha/netconf/translator/voltha/openflow_13"
+	pb_any "github.com/golang/protobuf/ptypes/any"
+	"unsafe"
+	"fmt"
+)
+
+const (
+	default_consul_address = "10.100.198.220:8500"
+	default_grpc_address   = "localhost:50555"
+	grpc_service_name      = "voltha-grpc"
+)
+
+var (
+	GrpcConn           *grpc.ClientConn              = nil
+	VolthaGlobalClient pb.VolthaGlobalServiceClient  = nil
+	HealthClient       pb_health.HealthServiceClient = nil
+	ConsulClient       *api.Client                   = nil
+	GrpcServiceAddress string                        = "localhost:50555"
+)
+
+func init() {
+	ConsulClient = connect_to_consul(default_consul_address)
+	GrpcServiceAddress = get_consul_service_address(grpc_service_name)
+	GrpcConn = connect_to_grpc(GrpcServiceAddress)
+
+	VolthaGlobalClient = pb.NewVolthaGlobalServiceClient(GrpcConn)
+	HealthClient = pb_health.NewHealthServiceClient(GrpcConn)
+}
+
+func connect_to_consul(consul_address string) *api.Client {
+	cfg := api.Config{Address: consul_address }
+
+	log.Printf("Connecting to consul - address: %s", consul_address)
+
+	client, err := api.NewClient(&cfg)
+	if err != nil {
+		panic(err)
+	}
+
+	log.Printf("Connected to consul - address: %s", consul_address)
+
+	return client
+}
+
+func get_consul_service_address(service_name string) string {
+	var service []*api.CatalogService
+	var err error
+
+	log.Printf("Getting consul service - name:%s", service_name)
+
+	if service, _, _ = ConsulClient.Catalog().Service(service_name, "", nil); err != nil {
+		panic(err)
+	}
+
+	address := fmt.Sprintf("%s:%d", service[0].ServiceAddress, service[0].ServicePort)
+
+	log.Printf("Got consul service - name:%s, address:%s", service_name, address)
+
+	return address
+}
+
+func connect_to_grpc(grpc_address string) *grpc.ClientConn {
+	var err error
+	var client *grpc.ClientConn
+
+	log.Printf("Connecting to grpc - address: %s", grpc_address)
+
+	// Set up a connection to the server.
+	client, err = grpc.Dial(grpc_address, grpc.WithInsecure())
+	if err != nil {
+		log.Fatalf("did not connect: %s", err.Error())
+	}
+
+	log.Printf("Connected to grpc - address: %s", grpc_address)
+
+	return client
+}
+// Utility methods
+
+// -------------------------------------------------
+// C to Protobuf conversion methods
+// -------------------------------------------------
+
+func _c_to_proto_Address(address C.isDevice_Address) *pb_device.Device {
+	var device *pb_device.Device
+
+	// Identify the address type to assign
+	switch address.Type {
+	case C.MAC:
+		device.Address = &pb_device.Device_MacAddress{
+			MacAddress: C.GoString(address.Value),
+		}
+		break
+	case C.IPV4:
+		device.Address = &pb_device.Device_Ipv4Address{
+			Ipv4Address: C.GoString(address.Value),
+		}
+		break
+	case C.IPV6:
+		device.Address = &pb_device.Device_Ipv6Address{
+			Ipv6Address: C.GoString(address.Value),
+		}
+		break
+	case C.HOST_AND_PORT:
+		device.Address = &pb_device.Device_HostAndPort{
+			HostAndPort: C.GoString(address.Value),
+		}
+		break
+	}
+
+	return device
+}
+
+// -------------------------------------------------
+// Protobuf to C conversion methods
+// -------------------------------------------------
+
+func _proto_to_c_Adapters(instances []*pb_adapter.Adapter) C.AdapterArray {
+	// TODO: not implemented
+	var result C.AdapterArray
+	return result
+}
+func _proto_to_c_LogicalDevices(instances []*pb_logical_device.LogicalDevice) C.LogicalDeviceArray {
+	// TODO: not implemented
+	var result C.LogicalDeviceArray
+	return result
+}
+func _proto_to_c_DeviceTypes(instances []*pb_device.DeviceType) C.DeviceTypeArray {
+	// TODO: not implemented
+	var result C.DeviceTypeArray
+	return result
+}
+func _proto_to_c_AlarmFilters(instances []*pb.AlarmFilter) C.AlarmFilterArray {
+	// TODO: not implemented
+	var result C.AlarmFilterArray
+	return result
+}
+func _proto_to_c_DeviceGroups(instances []*pb.DeviceGroup) C.DeviceGroupArray {
+	// TODO: not implemented
+	var result C.DeviceGroupArray
+	return result
+}
+func _proto_to_c_ProxyAddress(proxyAddress *pb_device.Device_ProxyAddress) *C.Device_ProxyAddress {
+	// TODO: not implemented
+	var result *C.Device_ProxyAddress
+	defer C.free(unsafe.Pointer(result))
+	return result
+}
+func _proto_to_c_Ports(ports []*pb_device.Port) C.PortArray {
+	// TODO: not implemented
+	var result C.PortArray
+	return result
+}
+func _proto_to_c_Flows(flows *pb_openflow.Flows) *C.Flows {
+	// TODO: not implemented
+	var result *C.Flows
+	defer C.free(unsafe.Pointer(result))
+	return result
+}
+func _proto_to_c_FlowGroups(groups *pb_openflow.FlowGroups) *C.FlowGroups {
+	// TODO: not implemented
+	var result *C.FlowGroups
+	defer C.free(unsafe.Pointer(result))
+	return result
+}
+func _proto_to_c_PmConfigs(configs *pb_device.PmConfigs) *C.PmConfigs {
+	// TODO: not implemented
+	var result *C.PmConfigs
+	defer C.free(unsafe.Pointer(result))
+	return result
+}
+func _proto_to_c_Custom(configs *pb_any.Any) *C.Any {
+	// TODO: not implemented
+	var result *C.Any
+	defer C.free(unsafe.Pointer(result))
+	return result
+}
+func _proto_to_c_HealthStatus(health *pb_health.HealthStatus) C.HealthStatus {
+	var result C.HealthStatus
+
+	var c_string *C.char
+	defer C.free(unsafe.Pointer(c_string))
+
+	if c_string = C.CString(health.GetState().String()); c_string != nil {
+		result.State = c_string
+	}
+
+	return result
+}
+
+func _proto_to_c_VolthaInstances(instances []*pb.VolthaInstance) C.VolthaInstanceArray {
+	var result C.VolthaInstanceArray
+	var c_string *C.char
+	var c_voltha_instance C.VolthaInstance
+	defer C.free(unsafe.Pointer(c_string))
+
+	sizeof := unsafe.Sizeof(c_voltha_instance)
+	count := len(instances)
+	result.size = C.int(count)
+
+	c_items := C.malloc(C.size_t(result.size) * C.size_t(sizeof))
+	defer C.free(unsafe.Pointer(c_items))
+
+	// Array to the allocated space
+	c_array := (*[1<<30 - 1]C.VolthaInstance)(c_items)
+
+	for index, value := range instances {
+		if c_string = C.CString(value.GetInstanceId()); c_string != nil {
+			c_voltha_instance.InstanceId = c_string
+		}
+		if c_string = C.CString(value.GetVersion()); c_string != nil {
+			c_voltha_instance.Version = c_string
+		}
+		if c_string = C.CString(value.GetLogLevel().String()); c_string != nil {
+			c_voltha_instance.LogLevel = c_string
+		}
+		c_voltha_instance.Health = _proto_to_c_HealthStatus(value.GetHealth())
+		c_voltha_instance.Adapters = _proto_to_c_Adapters(value.GetAdapters())
+		c_voltha_instance.LogicalDevices = _proto_to_c_LogicalDevices(value.GetLogicalDevices())
+		c_voltha_instance.Devices = _proto_to_c_Devices(value.GetDevices())
+		c_voltha_instance.DeviceTypes = _proto_to_c_DeviceTypes(value.GetDeviceTypes())
+		c_voltha_instance.DeviceGroups = _proto_to_c_DeviceGroups(value.GetDeviceGroups())
+		c_voltha_instance.AlarmFilters = _proto_to_c_AlarmFilters(value.GetAlarmFilters())
+
+		c_array[index] = c_voltha_instance
+	}
+
+	result.items = (*C.VolthaInstance)(unsafe.Pointer(c_array))
+
+	return result
+}
+func _proto_to_c_Devices(instances []*pb_device.Device) C.DeviceArray {
+	var result C.DeviceArray
+	var c_string *C.char
+	var c_device_instance C.Device
+	defer C.free(unsafe.Pointer(c_string))
+
+	sizeof := unsafe.Sizeof(c_device_instance)
+	count := len(instances)
+	result.size = C.int(count)
+
+	c_items := C.malloc(C.size_t(result.size) * C.size_t(sizeof))
+	defer C.free(unsafe.Pointer(c_items))
+
+	c_array := (*[1<<30 - 1]C.Device)(c_items)
+
+	for index, value := range instances {
+		c_array[index] = _proto_to_c_Device(value)
+	}
+
+	result.items = (*C.Device)(unsafe.Pointer(c_array))
+
+	return result
+}
+func _proto_to_c_Voltha(voltha *pb.Voltha) C.Voltha {
+	var result C.Voltha
+	var c_string *C.char
+	defer C.free(unsafe.Pointer(c_string))
+
+	if c_string = C.CString(voltha.GetVersion()); c_string != nil {
+		result.Version = c_string
+	}
+	if c_string = C.CString(voltha.GetLogLevel().String()); c_string != nil {
+		result.LogLevel = c_string
+	}
+
+	result.Instances = _proto_to_c_VolthaInstances(voltha.GetInstances())
+	result.Adapters = _proto_to_c_Adapters(voltha.GetAdapters())
+	result.LogicalDevices = _proto_to_c_LogicalDevices(voltha.GetLogicalDevices())
+	result.Devices = _proto_to_c_Devices(voltha.GetDevices())
+	result.DeviceGroups = _proto_to_c_DeviceGroups(voltha.GetDeviceGroups())
+
+	return result
+}
+
+func _proto_to_c_Address(device *pb_device.Device) C.isDevice_Address {
+	var address C.isDevice_Address
+	var c_string *C.char
+	defer C.free(unsafe.Pointer(c_string))
+
+	switch device.GetAddress().(type) {
+	case *pb_device.Device_MacAddress:
+		address.Type = C.MAC
+		c_string = C.CString(device.GetMacAddress())
+		address.Value = c_string
+	case *pb_device.Device_Ipv4Address:
+		address.Type = C.IPV4
+		c_string = C.CString(device.GetIpv4Address())
+		address.Value = c_string
+	case *pb_device.Device_Ipv6Address:
+		address.Type = C.IPV6
+		c_string = C.CString(device.GetIpv6Address())
+		address.Value = c_string
+	case *pb_device.Device_HostAndPort:
+		address.Type = C.HOST_AND_PORT
+		c_string = C.CString(device.GetHostAndPort())
+		address.Value = c_string
+	}
+	return address
+}
+
+func _proto_to_c_Device(device *pb_device.Device) C.Device {
+	var result C.Device
+	var c_string *C.char
+	defer C.free(unsafe.Pointer(c_string))
+
+	if c_string = C.CString(device.GetId()); c_string != nil {
+		result.Id = c_string
+	}
+	if c_string = C.CString(device.GetType()); c_string != nil {
+		result.Type = c_string
+	}
+	if device.GetRoot() {
+		result.Root = C.int(1)
+	} else {
+		result.Root = C.int(0)
+	}
+	if c_string = C.CString(device.GetParentId()); c_string != nil {
+		result.ParentId = c_string
+	}
+
+	result.ParentPortNo = C.uint32_t(device.GetParentPortNo())
+
+	if c_string = C.CString(device.GetVendor()); c_string != nil {
+		result.Vendor = c_string
+	}
+	if c_string = C.CString(device.GetModel()); c_string != nil {
+		result.Model = c_string
+	}
+	if c_string = C.CString(device.GetHardwareVersion()); c_string != nil {
+		result.HardwareVersion = c_string
+	}
+	if c_string = C.CString(device.GetFirmwareVersion()); c_string != nil {
+		result.FirmwareVersion = c_string
+	}
+	if c_string = C.CString(device.GetSoftwareVersion()); c_string != nil {
+		result.SoftwareVersion = c_string
+	}
+	if c_string = C.CString(device.GetSerialNumber()); c_string != nil {
+		result.SerialNumber = c_string
+	}
+	if c_string = C.CString(device.GetAdapter()); c_string != nil {
+		result.Adapter = c_string
+	}
+
+	result.Vlan = C.uint32_t(device.GetVlan())
+	result.ProxyAddress = _proto_to_c_ProxyAddress(device.GetProxyAddress())
+
+	if c_string = C.CString(device.GetAdminState().String()); c_string != nil {
+		result.AdminState = c_string
+	}
+	if c_string = C.CString(device.GetOperStatus().String()); c_string != nil {
+		result.OperStatus = c_string
+	}
+	if c_string = C.CString(device.GetReason()); c_string != nil {
+		result.Reason = c_string
+	}
+	if c_string = C.CString(device.GetConnectStatus().String()); c_string != nil {
+		result.ConnectStatus = c_string
+	}
+
+	result.Custom = _proto_to_c_Custom(device.GetCustom())
+	result.Ports = _proto_to_c_Ports(device.GetPorts())
+	result.Flows = _proto_to_c_Flows(device.GetFlows())
+	result.FlowGroups = _proto_to_c_FlowGroups(device.GetFlowGroups())
+	result.PmConfigs = _proto_to_c_PmConfigs(device.GetPmConfigs())
+	result.Address = _proto_to_c_Address(device)
+
+	return result
+}
+
+// ---------------------------------------------------------
+// Exported methods accessible through the shared library
+// ---------------------------------------------------------
+
+//export GetHealthStatus
+func GetHealthStatus() C.HealthStatus {
+	var output *pb_health.HealthStatus
+	var err error
+
+	if output, err = HealthClient.GetHealthStatus(context.Background(), &empty.Empty{}); output == nil || err != nil {
+		log.Fatalf("Failed to retrieve health status: %s", err.Error())
+	}
+
+	return _proto_to_c_HealthStatus(output)
+}
+
+//export GetVoltha
+func GetVoltha() C.Voltha {
+	var output *pb.Voltha
+	var err error
+	if output, err = VolthaGlobalClient.GetVoltha(context.Background(), &empty.Empty{}); output == nil || err != nil {
+		log.Fatalf("Failed to retrieve voltha information: %s", err.Error())
+	}
+
+	return _proto_to_c_Voltha(output)
+}
+
+//export ListDevices
+func ListDevices() C.DeviceArray {
+	var output *pb_device.Devices
+	var err error
+	if output, err = VolthaGlobalClient.ListDevices(context.Background(), &empty.Empty{});
+		output == nil || err != nil {
+		log.Fatalf("Failed to retrieve voltha information: %s", err.Error())
+	}
+
+	return _proto_to_c_Devices(output.Items)
+}
+
+//export ListVolthaInstances
+func ListVolthaInstances() *C.char {
+	return nil
+}
+
+//export ListLogicalDevices
+func ListLogicalDevices() *C.char {
+	return nil
+}
+
+//export GetLogicalDevice
+func GetLogicalDevice(input *C.char) *C.char {
+	return nil
+}
+
+//export ListLogicalDevicePorts
+func ListLogicalDevicePorts(input *C.char) *C.char {
+	return nil
+}
+
+//export ListLogicalDeviceFlows
+func ListLogicalDeviceFlows(input *C.char) *C.char {
+	return nil
+}
+
+//export CreateDevice
+func CreateDevice(input C.Device) C.Device {
+	log.Printf("Incoming C Device - type:%v, address_type: %v, address_value:%s",
+		C.GoString(input.Type),
+		C.int(input.Address.Type),
+		C.GoString(input.Address.Value),
+	)
+
+	device := _c_to_proto_Address(input.Address)
+	device.Type = C.GoString(input.Type)
+
+	var output *pb_device.Device
+	var err error
+
+	if output, err = VolthaGlobalClient.CreateDevice(context.Background(), device);
+		output == nil || err != nil {
+		log.Fatalf("Failed to create device: %s", err.Error())
+	}
+
+	return _proto_to_c_Device(output)
+}
+
+// Debugging code
+func TestSerialize() {
+	var object C.Device
+
+	object.Type = C.CString("simulated_olt")
+	object.Address.Type = 3
+	object.Address.Value = C.CString("172.16.1.233:123")
+
+	//xmlObject, _ := xml.Marshal(object)
+	//
+	//log.Printf("object: %+v", string(xmlObject))
+
+	CreateDevice(object)
+}
+
+func main() {
+	// We need the main function to make possible
+	// CGO compiler to compile the package as C shared library
+	//TestSerialize()
+}
diff --git a/netopeer/voltha-grpc-client/voltha/adapter/adapter.pb.go b/netopeer/voltha-grpc-client/voltha/adapter/adapter.pb.go
new file mode 100644
index 0000000..9c1f8e4
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/adapter/adapter.pb.go
@@ -0,0 +1,170 @@
+// Code generated by protoc-gen-go.
+// source: adapter.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	adapter.proto
+
+It has these top-level messages:
+	AdapterConfig
+	Adapter
+	Adapters
+*/
+package adapter
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf "github.com/golang/protobuf/ptypes/any"
+import voltha2 "github.com/opencord/voltha/netconf/translator/voltha/common"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type AdapterConfig struct {
+	// Common adapter config attributes here
+	LogLevel voltha2.LogLevel_LogLevel `protobuf:"varint,1,opt,name=log_level,json=logLevel,enum=voltha.LogLevel_LogLevel" json:"log_level,omitempty"`
+	// Custom (vendor-specific) configuration attributes
+	AdditionalConfig *google_protobuf.Any `protobuf:"bytes,64,opt,name=additional_config,json=additionalConfig" json:"additional_config,omitempty"`
+}
+
+func (m *AdapterConfig) Reset()                    { *m = AdapterConfig{} }
+func (m *AdapterConfig) String() string            { return proto.CompactTextString(m) }
+func (*AdapterConfig) ProtoMessage()               {}
+func (*AdapterConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *AdapterConfig) GetLogLevel() voltha2.LogLevel_LogLevel {
+	if m != nil {
+		return m.LogLevel
+	}
+	return voltha2.LogLevel_DEBUG
+}
+
+func (m *AdapterConfig) GetAdditionalConfig() *google_protobuf.Any {
+	if m != nil {
+		return m.AdditionalConfig
+	}
+	return nil
+}
+
+// Adapter (software plugin)
+type Adapter struct {
+	// Unique name of adapter, matching the python packate name under
+	// voltha/adapters.
+	Id      string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	Vendor  string `protobuf:"bytes,2,opt,name=vendor" json:"vendor,omitempty"`
+	Version string `protobuf:"bytes,3,opt,name=version" json:"version,omitempty"`
+	// Adapter configuration
+	Config *AdapterConfig `protobuf:"bytes,16,opt,name=config" json:"config,omitempty"`
+	// Custom descriptors and custom configuration
+	AdditionalDescription *google_protobuf.Any `protobuf:"bytes,64,opt,name=additional_description,json=additionalDescription" json:"additional_description,omitempty"`
+	LogicalDeviceIds      []string             `protobuf:"bytes,4,rep,name=logical_device_ids,json=logicalDeviceIds" json:"logical_device_ids,omitempty"`
+}
+
+func (m *Adapter) Reset()                    { *m = Adapter{} }
+func (m *Adapter) String() string            { return proto.CompactTextString(m) }
+func (*Adapter) ProtoMessage()               {}
+func (*Adapter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+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() *google_protobuf.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" json:"items,omitempty"`
+}
+
+func (m *Adapters) Reset()                    { *m = Adapters{} }
+func (m *Adapters) String() string            { return proto.CompactTextString(m) }
+func (*Adapters) ProtoMessage()               {}
+func (*Adapters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+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("adapter.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 340 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0xc1, 0x4e, 0xea, 0x40,
+	0x14, 0x86, 0xd3, 0x72, 0x29, 0x70, 0xb8, 0xdc, 0x8b, 0x13, 0x31, 0x85, 0x84, 0xd8, 0x90, 0x98,
+	0x74, 0xa1, 0x25, 0x62, 0xe2, 0x5a, 0x94, 0x8d, 0x09, 0xab, 0xbe, 0x00, 0x19, 0x3a, 0x43, 0x9d,
+	0x64, 0x3a, 0x87, 0xb4, 0xb5, 0x09, 0xaf, 0xe0, 0xce, 0x07, 0xf3, 0x3d, 0x7c, 0x02, 0xd7, 0x86,
+	0x99, 0xa9, 0xa0, 0x0b, 0x77, 0x67, 0xfe, 0xff, 0x9c, 0xf3, 0x7f, 0x67, 0xa0, 0x47, 0x19, 0xdd,
+	0x96, 0x3c, 0x8f, 0xb6, 0x39, 0x96, 0x48, 0xbc, 0x0a, 0x65, 0xf9, 0x44, 0x47, 0xc3, 0x14, 0x31,
+	0x95, 0x7c, 0xaa, 0xd5, 0xf5, 0xf3, 0x66, 0x4a, 0xd5, 0xce, 0xb4, 0x8c, 0xfe, 0x26, 0x98, 0x65,
+	0xa8, 0xec, 0x0b, 0x32, 0x5e, 0x52, 0x53, 0x4f, 0x5e, 0x1c, 0xe8, 0xcd, 0xcd, 0xba, 0x07, 0x54,
+	0x1b, 0x91, 0x92, 0x5b, 0xe8, 0x48, 0x4c, 0x57, 0x92, 0x57, 0x5c, 0xfa, 0x4e, 0xe0, 0x84, 0xff,
+	0x66, 0xc3, 0xc8, 0x44, 0x44, 0x4b, 0x4c, 0x97, 0x7b, 0xfd, 0xab, 0x88, 0xdb, 0xd2, 0x56, 0x64,
+	0x0e, 0x27, 0x94, 0x31, 0x51, 0x0a, 0x54, 0x54, 0xae, 0x12, 0xbd, 0xcc, 0xbf, 0x0b, 0x9c, 0xb0,
+	0x3b, 0x3b, 0x8d, 0x0c, 0x5a, 0x54, 0xa3, 0x45, 0x73, 0xb5, 0x8b, 0xfb, 0x87, 0x76, 0x13, 0x3d,
+	0x79, 0x75, 0xa1, 0x65, 0x61, 0xc8, 0x00, 0x5c, 0xc1, 0x74, 0x7e, 0xe7, 0xbe, 0xf9, 0xfe, 0xf1,
+	0x36, 0x76, 0x62, 0x57, 0x30, 0x32, 0x06, 0xaf, 0xe2, 0x8a, 0x61, 0xee, 0xbb, 0xc7, 0x96, 0x15,
+	0xc9, 0x39, 0xb4, 0x2a, 0x9e, 0x17, 0x02, 0x95, 0xdf, 0x38, 0xf6, 0x6b, 0x95, 0x5c, 0x81, 0x67,
+	0xd1, 0xfa, 0x1a, 0x6d, 0x50, 0x9f, 0xf6, 0xed, 0x13, 0x62, 0xdb, 0x44, 0x62, 0x38, 0x3b, 0x3a,
+	0x8a, 0xf1, 0x22, 0xc9, 0xc5, 0x76, 0xff, 0xfa, 0xed, 0xb2, 0x3a, 0x74, 0x70, 0x18, 0x5d, 0x1c,
+	0x26, 0xc9, 0x25, 0x10, 0x89, 0xa9, 0x48, 0xf4, 0xc2, 0x4a, 0x24, 0x7c, 0x25, 0x58, 0xe1, 0xff,
+	0x09, 0x1a, 0x61, 0x27, 0xee, 0x5b, 0x67, 0xa1, 0x8d, 0x47, 0x56, 0x4c, 0xae, 0xa1, 0x6d, 0xd1,
+	0x0a, 0x72, 0x01, 0x4d, 0x51, 0xf2, 0xac, 0xf0, 0x9d, 0xa0, 0x11, 0x76, 0x67, 0xff, 0x7f, 0xb0,
+	0xc7, 0xc6, 0x5d, 0x7b, 0x1a, 0xe6, 0xe6, 0x33, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x5e, 0xc4, 0x9a,
+	0x28, 0x02, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/common/common.pb.go b/netopeer/voltha-grpc-client/voltha/common/common.pb.go
new file mode 100644
index 0000000..7a621d6
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/common/common.pb.go
@@ -0,0 +1,255 @@
+// Code generated by protoc-gen-go.
+// source: common.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	common.proto
+
+It has these top-level messages:
+	ID
+	LogLevel
+	AdminState
+	OperStatus
+	ConnectStatus
+*/
+package common
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// 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
+)
+
+var LogLevel_LogLevel_name = map[int32]string{
+	0: "DEBUG",
+	1: "INFO",
+	2: "WARNING",
+	3: "ERROR",
+	4: "CRITICAL",
+}
+var LogLevel_LogLevel_value = map[string]int32{
+	"DEBUG":    0,
+	"INFO":     1,
+	"WARNING":  2,
+	"ERROR":    3,
+	"CRITICAL": 4,
+}
+
+func (x LogLevel_LogLevel) String() string {
+	return proto.EnumName(LogLevel_LogLevel_name, int32(x))
+}
+func (LogLevel_LogLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1, 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 = 3
+	// The device is disabled and shall not perform its intended forwarding
+	// functions other than being available for re-activation.
+	AdminState_DISABLED AdminState_AdminState = 2
+)
+
+var AdminState_AdminState_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "PREPROVISIONED",
+	3: "ENABLED",
+	2: "DISABLED",
+}
+var AdminState_AdminState_value = map[string]int32{
+	"UNKNOWN":        0,
+	"PREPROVISIONED": 1,
+	"ENABLED":        3,
+	"DISABLED":       2,
+}
+
+func (x AdminState_AdminState) String() string {
+	return proto.EnumName(AdminState_AdminState_name, int32(x))
+}
+func (AdminState_AdminState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 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 fileDescriptor0, []int{3, 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 fileDescriptor0, []int{4, 0}
+}
+
+// Convey a resource identifier
+type ID struct {
+	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+}
+
+func (m *ID) Reset()                    { *m = ID{} }
+func (m *ID) String() string            { return proto.CompactTextString(m) }
+func (*ID) ProtoMessage()               {}
+func (*ID) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *ID) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+type LogLevel struct {
+}
+
+func (m *LogLevel) Reset()                    { *m = LogLevel{} }
+func (m *LogLevel) String() string            { return proto.CompactTextString(m) }
+func (*LogLevel) ProtoMessage()               {}
+func (*LogLevel) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+type AdminState struct {
+}
+
+func (m *AdminState) Reset()                    { *m = AdminState{} }
+func (m *AdminState) String() string            { return proto.CompactTextString(m) }
+func (*AdminState) ProtoMessage()               {}
+func (*AdminState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+type OperStatus struct {
+}
+
+func (m *OperStatus) Reset()                    { *m = OperStatus{} }
+func (m *OperStatus) String() string            { return proto.CompactTextString(m) }
+func (*OperStatus) ProtoMessage()               {}
+func (*OperStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+type ConnectStatus struct {
+}
+
+func (m *ConnectStatus) Reset()                    { *m = ConnectStatus{} }
+func (m *ConnectStatus) String() string            { return proto.CompactTextString(m) }
+func (*ConnectStatus) ProtoMessage()               {}
+func (*ConnectStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+func init() {
+	proto.RegisterType((*ID)(nil), "voltha.ID")
+	proto.RegisterType((*LogLevel)(nil), "voltha.LogLevel")
+	proto.RegisterType((*AdminState)(nil), "voltha.AdminState")
+	proto.RegisterType((*OperStatus)(nil), "voltha.OperStatus")
+	proto.RegisterType((*ConnectStatus)(nil), "voltha.ConnectStatus")
+	proto.RegisterEnum("voltha.LogLevel_LogLevel", LogLevel_LogLevel_name, LogLevel_LogLevel_value)
+	proto.RegisterEnum("voltha.AdminState_AdminState", AdminState_AdminState_name, AdminState_AdminState_value)
+	proto.RegisterEnum("voltha.OperStatus_OperStatus", OperStatus_OperStatus_name, OperStatus_OperStatus_value)
+	proto.RegisterEnum("voltha.ConnectStatus_ConnectStatus", ConnectStatus_ConnectStatus_name, ConnectStatus_ConnectStatus_value)
+}
+
+func init() { proto.RegisterFile("common.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 326 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x91, 0x4f, 0x4f, 0xc2, 0x30,
+	0x18, 0xc6, 0xd9, 0xf8, 0xff, 0x02, 0xb3, 0x69, 0x3c, 0x18, 0x13, 0x13, 0xb3, 0x93, 0x27, 0x2f,
+	0xde, 0x8c, 0x97, 0xb2, 0x15, 0x68, 0x5c, 0x5a, 0xd2, 0x0d, 0xf0, 0xa2, 0x06, 0x61, 0xc1, 0x25,
+	0xd0, 0x12, 0xa8, 0x24, 0x7e, 0x48, 0xbf, 0x8b, 0x27, 0xcf, 0xa6, 0x9b, 0x04, 0xf0, 0xf6, 0x3e,
+	0x7d, 0x9b, 0xdf, 0xaf, 0x4f, 0x0a, 0xed, 0x99, 0x5e, 0xad, 0xb4, 0xba, 0x5d, 0x6f, 0xb4, 0xd1,
+	0xb8, 0xb6, 0xd3, 0x4b, 0xf3, 0x3e, 0xbd, 0xc4, 0x9f, 0x53, 0xb5, 0x78, 0xd5, 0x6b, 0x93, 0x69,
+	0xb5, 0x2d, 0x76, 0xfe, 0x39, 0xb8, 0x2c, 0xc4, 0x1e, 0xb8, 0xd9, 0xfc, 0xc2, 0xb9, 0x76, 0x6e,
+	0x9a, 0xd2, 0xcd, 0xe6, 0xfe, 0x13, 0x34, 0x22, 0xbd, 0x88, 0xd2, 0x5d, 0xba, 0xf4, 0xe9, 0x61,
+	0xc6, 0x4d, 0xa8, 0x86, 0xb4, 0x3b, 0xea, 0xa3, 0x12, 0x6e, 0x40, 0x85, 0xf1, 0x9e, 0x40, 0x0e,
+	0x6e, 0x41, 0x7d, 0x42, 0x24, 0x67, 0xbc, 0x8f, 0x5c, 0x7b, 0x83, 0x4a, 0x29, 0x24, 0x2a, 0xe3,
+	0x36, 0x34, 0x02, 0xc9, 0x12, 0x16, 0x90, 0x08, 0x55, 0xee, 0xab, 0xdf, 0x3f, 0x5f, 0x57, 0x25,
+	0xff, 0x19, 0x80, 0xcc, 0x57, 0x99, 0x8a, 0xcd, 0xd4, 0xa4, 0xfe, 0xe0, 0x38, 0x59, 0xd0, 0x88,
+	0x3f, 0x72, 0x31, 0xe1, 0xa8, 0x84, 0x31, 0x78, 0x43, 0x49, 0x87, 0x52, 0x8c, 0x59, 0xcc, 0x04,
+	0xa7, 0x61, 0x61, 0xa2, 0x9c, 0x74, 0x23, 0x1a, 0x16, 0xf8, 0x90, 0xc5, 0x45, 0x72, 0xf7, 0xf8,
+	0x2d, 0x80, 0x58, 0xa7, 0x1b, 0xcb, 0xfb, 0xd8, 0xfa, 0x2f, 0xc7, 0xe9, 0x14, 0xef, 0x01, 0x84,
+	0x2c, 0x0e, 0xc4, 0x98, 0xca, 0x1c, 0xed, 0x01, 0x90, 0x20, 0x61, 0x63, 0x92, 0x14, 0x3d, 0x5a,
+	0x50, 0x4f, 0x68, 0x9c, 0x87, 0x32, 0x06, 0xa8, 0xe5, 0x4b, 0x8a, 0x2a, 0x76, 0xee, 0x11, 0x66,
+	0xa5, 0xd5, 0xbd, 0x34, 0x81, 0x4e, 0xa0, 0x95, 0x4a, 0x67, 0xe6, 0xcf, 0xfb, 0xf0, 0xef, 0xe0,
+	0x54, 0x7d, 0x06, 0xad, 0x11, 0x97, 0x94, 0x04, 0x03, 0xfb, 0x78, 0xe4, 0xe0, 0x0e, 0x34, 0x0f,
+	0x71, 0x5f, 0xe5, 0xad, 0x96, 0x7f, 0xd0, 0xdd, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x80,
+	0x95, 0xd3, 0xcc, 0x01, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/device/device.pb.go b/netopeer/voltha-grpc-client/voltha/device/device.pb.go
new file mode 100644
index 0000000..9e87b04
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/device/device.pb.go
@@ -0,0 +1,918 @@
+// Code generated by protoc-gen-go.
+// source: device.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	device.proto
+
+It has these top-level messages:
+	DeviceType
+	DeviceTypes
+	PmConfig
+	PmGroupConfig
+	PmConfigs
+	Port
+	Ports
+	Device
+	Devices
+*/
+package device
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf1 "github.com/golang/protobuf/ptypes/any"
+import voltha3 "github.com/opencord/voltha/netconf/translator/voltha/common"
+import openflow_13 "github.com/opencord/voltha/netconf/translator/voltha/openflow_13"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type PmConfig_PmType int32
+
+const (
+	PmConfig_COUNTER PmConfig_PmType = 0
+	PmConfig_GUAGE   PmConfig_PmType = 1
+	PmConfig_STATE   PmConfig_PmType = 2
+)
+
+var PmConfig_PmType_name = map[int32]string{
+	0: "COUNTER",
+	1: "GUAGE",
+	2: "STATE",
+}
+var PmConfig_PmType_value = map[string]int32{
+	"COUNTER": 0,
+	"GUAGE":   1,
+	"STATE":   2,
+}
+
+func (x PmConfig_PmType) String() string {
+	return proto.EnumName(PmConfig_PmType_name, int32(x))
+}
+func (PmConfig_PmType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} }
+
+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
+)
+
+var Port_PortType_name = map[int32]string{
+	0: "UNKNOWN",
+	1: "ETHERNET_NNI",
+	2: "ETHERNET_UNI",
+	3: "PON_OLT",
+	4: "PON_ONU",
+}
+var Port_PortType_value = map[string]int32{
+	"UNKNOWN":      0,
+	"ETHERNET_NNI": 1,
+	"ETHERNET_UNI": 2,
+	"PON_OLT":      3,
+	"PON_ONU":      4,
+}
+
+func (x Port_PortType) String() string {
+	return proto.EnumName(Port_PortType_name, int32(x))
+}
+func (Port_PortType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5, 0} }
+
+// A Device Type
+type DeviceType struct {
+	// Unique name for the device type
+	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	// Name of the adapter that handles device type
+	Adapter                     string `protobuf:"bytes,2,opt,name=adapter" json:"adapter,omitempty"`
+	AcceptsBulkFlowUpdate       bool   `protobuf:"varint,3,opt,name=accepts_bulk_flow_update,json=acceptsBulkFlowUpdate" json:"accepts_bulk_flow_update,omitempty"`
+	AcceptsAddRemoveFlowUpdates bool   `protobuf:"varint,4,opt,name=accepts_add_remove_flow_updates,json=acceptsAddRemoveFlowUpdates" json:"accepts_add_remove_flow_updates,omitempty"`
+}
+
+func (m *DeviceType) Reset()                    { *m = DeviceType{} }
+func (m *DeviceType) String() string            { return proto.CompactTextString(m) }
+func (*DeviceType) ProtoMessage()               {}
+func (*DeviceType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *DeviceType) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+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
+}
+
+// A plurality of device types
+type DeviceTypes struct {
+	Items []*DeviceType `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
+}
+
+func (m *DeviceTypes) Reset()                    { *m = DeviceTypes{} }
+func (m *DeviceTypes) String() string            { return proto.CompactTextString(m) }
+func (*DeviceTypes) ProtoMessage()               {}
+func (*DeviceTypes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (m *DeviceTypes) GetItems() []*DeviceType {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type PmConfig struct {
+	Name       string          `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Type       PmConfig_PmType `protobuf:"varint,2,opt,name=type,enum=voltha.PmConfig_PmType" json:"type,omitempty"`
+	Enabled    bool            `protobuf:"varint,3,opt,name=enabled" json:"enabled,omitempty"`
+	SampleFreq uint32          `protobuf:"varint,4,opt,name=sample_freq,json=sampleFreq" json:"sample_freq,omitempty"`
+}
+
+func (m *PmConfig) Reset()                    { *m = PmConfig{} }
+func (m *PmConfig) String() string            { return proto.CompactTextString(m) }
+func (*PmConfig) ProtoMessage()               {}
+func (*PmConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+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" json:"group_name,omitempty"`
+	GroupFreq uint32      `protobuf:"varint,2,opt,name=group_freq,json=groupFreq" json:"group_freq,omitempty"`
+	Enabled   bool        `protobuf:"varint,3,opt,name=enabled" json:"enabled,omitempty"`
+	Metrics   []*PmConfig `protobuf:"bytes,4,rep,name=metrics" json:"metrics,omitempty"`
+}
+
+func (m *PmGroupConfig) Reset()                    { *m = PmGroupConfig{} }
+func (m *PmGroupConfig) String() string            { return proto.CompactTextString(m) }
+func (*PmGroupConfig) ProtoMessage()               {}
+func (*PmGroupConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+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" json:"id,omitempty"`
+	DefaultFreq uint32 `protobuf:"varint,2,opt,name=default_freq,json=defaultFreq" json:"default_freq,omitempty"`
+	// Forces group names and group semantics
+	Grouped bool `protobuf:"varint,3,opt,name=grouped" json:"grouped,omitempty"`
+	// Allows Pm to set an individual sample frequency
+	FreqOverride bool             `protobuf:"varint,4,opt,name=freq_override,json=freqOverride" json:"freq_override,omitempty"`
+	Groups       []*PmGroupConfig `protobuf:"bytes,5,rep,name=groups" json:"groups,omitempty"`
+	Metrics      []*PmConfig      `protobuf:"bytes,6,rep,name=metrics" json:"metrics,omitempty"`
+}
+
+func (m *PmConfigs) Reset()                    { *m = PmConfigs{} }
+func (m *PmConfigs) String() string            { return proto.CompactTextString(m) }
+func (*PmConfigs) ProtoMessage()               {}
+func (*PmConfigs) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+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
+}
+
+type Port struct {
+	PortNo     uint32                        `protobuf:"varint,1,opt,name=port_no,json=portNo" json:"port_no,omitempty"`
+	Label      string                        `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"`
+	Type       Port_PortType                 `protobuf:"varint,3,opt,name=type,enum=voltha.Port_PortType" json:"type,omitempty"`
+	AdminState voltha3.AdminState_AdminState `protobuf:"varint,5,opt,name=admin_state,json=adminState,enum=voltha.AdminState_AdminState" json:"admin_state,omitempty"`
+	OperStatus voltha3.OperStatus_OperStatus `protobuf:"varint,6,opt,name=oper_status,json=operStatus,enum=voltha.OperStatus_OperStatus" json:"oper_status,omitempty"`
+	DeviceId   string                        `protobuf:"bytes,7,opt,name=device_id,json=deviceId" json:"device_id,omitempty"`
+	Peers      []*Port_PeerPort              `protobuf:"bytes,8,rep,name=peers" json:"peers,omitempty"`
+}
+
+func (m *Port) Reset()                    { *m = Port{} }
+func (m *Port) String() string            { return proto.CompactTextString(m) }
+func (*Port) ProtoMessage()               {}
+func (*Port) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+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() voltha3.AdminState_AdminState {
+	if m != nil {
+		return m.AdminState
+	}
+	return voltha3.AdminState_UNKNOWN
+}
+
+func (m *Port) GetOperStatus() voltha3.OperStatus_OperStatus {
+	if m != nil {
+		return m.OperStatus
+	}
+	return voltha3.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
+}
+
+type Port_PeerPort struct {
+	DeviceId string `protobuf:"bytes,1,opt,name=device_id,json=deviceId" json:"device_id,omitempty"`
+	PortNo   uint32 `protobuf:"varint,2,opt,name=port_no,json=portNo" json:"port_no,omitempty"`
+}
+
+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 fileDescriptor0, []int{5, 0} }
+
+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" json:"items,omitempty"`
+}
+
+func (m *Ports) Reset()                    { *m = Ports{} }
+func (m *Ports) String() string            { return proto.CompactTextString(m) }
+func (*Ports) ProtoMessage()               {}
+func (*Ports) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+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" json:"id,omitempty"`
+	// Device type, refers to one of the registered device types
+	Type string `protobuf:"bytes,2,opt,name=type" 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" 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" json:"parent_id,omitempty"`
+	ParentPortNo uint32 `protobuf:"varint,20,opt,name=parent_port_no,json=parentPortNo" json:"parent_port_no,omitempty"`
+	// Vendor, version, serial number, etc.
+	Vendor          string `protobuf:"bytes,5,opt,name=vendor" json:"vendor,omitempty"`
+	Model           string `protobuf:"bytes,6,opt,name=model" json:"model,omitempty"`
+	HardwareVersion string `protobuf:"bytes,7,opt,name=hardware_version,json=hardwareVersion" json:"hardware_version,omitempty"`
+	FirmwareVersion string `protobuf:"bytes,8,opt,name=firmware_version,json=firmwareVersion" json:"firmware_version,omitempty"`
+	SoftwareVersion string `protobuf:"bytes,9,opt,name=software_version,json=softwareVersion" json:"software_version,omitempty"`
+	SerialNumber    string `protobuf:"bytes,10,opt,name=serial_number,json=serialNumber" json:"serial_number,omitempty"`
+	// Addapter that takes care of device
+	Adapter string `protobuf:"bytes,11,opt,name=adapter" json:"adapter,omitempty"`
+	// Device contact on vlan (if 0, no vlan)
+	Vlan uint32 `protobuf:"varint,12,opt,name=vlan" json:"vlan,omitempty"`
+	// Types that are valid to be assigned to Address:
+	//	*Device_MacAddress
+	//	*Device_Ipv4Address
+	//	*Device_Ipv6Address
+	//	*Device_HostAndPort
+	Address       isDevice_Address                    `protobuf_oneof:"address"`
+	ProxyAddress  *Device_ProxyAddress                `protobuf:"bytes,19,opt,name=proxy_address,json=proxyAddress" json:"proxy_address,omitempty"`
+	AdminState    voltha3.AdminState_AdminState       `protobuf:"varint,16,opt,name=admin_state,json=adminState,enum=voltha.AdminState_AdminState" json:"admin_state,omitempty"`
+	OperStatus    voltha3.OperStatus_OperStatus       `protobuf:"varint,17,opt,name=oper_status,json=operStatus,enum=voltha.OperStatus_OperStatus" json:"oper_status,omitempty"`
+	Reason        string                              `protobuf:"bytes,22,opt,name=reason" json:"reason,omitempty"`
+	ConnectStatus voltha3.ConnectStatus_ConnectStatus `protobuf:"varint,18,opt,name=connect_status,json=connectStatus,enum=voltha.ConnectStatus_ConnectStatus" json:"connect_status,omitempty"`
+	// Device type specific attributes
+	Custom     *google_protobuf1.Any   `protobuf:"bytes,64,opt,name=custom" json:"custom,omitempty"`
+	Ports      []*Port                 `protobuf:"bytes,128,rep,name=ports" json:"ports,omitempty"`
+	Flows      *openflow_13.Flows      `protobuf:"bytes,129,opt,name=flows" json:"flows,omitempty"`
+	FlowGroups *openflow_13.FlowGroups `protobuf:"bytes,130,opt,name=flow_groups,json=flowGroups" 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" json:"pm_configs,omitempty"`
+}
+
+func (m *Device) Reset()                    { *m = Device{} }
+func (m *Device) String() string            { return proto.CompactTextString(m) }
+func (*Device) ProtoMessage()               {}
+func (*Device) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+type isDevice_Address interface {
+	isDevice_Address()
+}
+
+type Device_MacAddress struct {
+	MacAddress string `protobuf:"bytes,13,opt,name=mac_address,json=macAddress,oneof"`
+}
+type Device_Ipv4Address struct {
+	Ipv4Address string `protobuf:"bytes,14,opt,name=ipv4_address,json=ipv4Address,oneof"`
+}
+type Device_Ipv6Address struct {
+	Ipv6Address string `protobuf:"bytes,15,opt,name=ipv6_address,json=ipv6Address,oneof"`
+}
+type Device_HostAndPort struct {
+	HostAndPort string `protobuf:"bytes,21,opt,name=host_and_port,json=hostAndPort,oneof"`
+}
+
+func (*Device_MacAddress) isDevice_Address()  {}
+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) 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) GetSoftwareVersion() string {
+	if m != nil {
+		return m.SoftwareVersion
+	}
+	return ""
+}
+
+func (m *Device) GetSerialNumber() string {
+	if m != nil {
+		return m.SerialNumber
+	}
+	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 x, ok := m.GetAddress().(*Device_MacAddress); ok {
+		return x.MacAddress
+	}
+	return ""
+}
+
+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) GetProxyAddress() *Device_ProxyAddress {
+	if m != nil {
+		return m.ProxyAddress
+	}
+	return nil
+}
+
+func (m *Device) GetAdminState() voltha3.AdminState_AdminState {
+	if m != nil {
+		return m.AdminState
+	}
+	return voltha3.AdminState_UNKNOWN
+}
+
+func (m *Device) GetOperStatus() voltha3.OperStatus_OperStatus {
+	if m != nil {
+		return m.OperStatus
+	}
+	return voltha3.OperStatus_UNKNOWN
+}
+
+func (m *Device) GetReason() string {
+	if m != nil {
+		return m.Reason
+	}
+	return ""
+}
+
+func (m *Device) GetConnectStatus() voltha3.ConnectStatus_ConnectStatus {
+	if m != nil {
+		return m.ConnectStatus
+	}
+	return voltha3.ConnectStatus_UNKNOWN
+}
+
+func (m *Device) GetCustom() *google_protobuf1.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
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Device) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Device_OneofMarshaler, _Device_OneofUnmarshaler, _Device_OneofSizer, []interface{}{
+		(*Device_MacAddress)(nil),
+		(*Device_Ipv4Address)(nil),
+		(*Device_Ipv6Address)(nil),
+		(*Device_HostAndPort)(nil),
+	}
+}
+
+func _Device_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Device)
+	// address
+	switch x := m.Address.(type) {
+	case *Device_MacAddress:
+		b.EncodeVarint(13<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.MacAddress)
+	case *Device_Ipv4Address:
+		b.EncodeVarint(14<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Ipv4Address)
+	case *Device_Ipv6Address:
+		b.EncodeVarint(15<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.Ipv6Address)
+	case *Device_HostAndPort:
+		b.EncodeVarint(21<<3 | proto.WireBytes)
+		b.EncodeStringBytes(x.HostAndPort)
+	case nil:
+	default:
+		return fmt.Errorf("Device.Address has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Device_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Device)
+	switch tag {
+	case 13: // address.mac_address
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Address = &Device_MacAddress{x}
+		return true, err
+	case 14: // address.ipv4_address
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Address = &Device_Ipv4Address{x}
+		return true, err
+	case 15: // address.ipv6_address
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Address = &Device_Ipv6Address{x}
+		return true, err
+	case 21: // address.host_and_port
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeStringBytes()
+		m.Address = &Device_HostAndPort{x}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Device_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Device)
+	// address
+	switch x := m.Address.(type) {
+	case *Device_MacAddress:
+		n += proto.SizeVarint(13<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.MacAddress)))
+		n += len(x.MacAddress)
+	case *Device_Ipv4Address:
+		n += proto.SizeVarint(14<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv4Address)))
+		n += len(x.Ipv4Address)
+	case *Device_Ipv6Address:
+		n += proto.SizeVarint(15<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6Address)))
+		n += len(x.Ipv6Address)
+	case *Device_HostAndPort:
+		n += proto.SizeVarint(21<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.HostAndPort)))
+		n += len(x.HostAndPort)
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+type Device_ProxyAddress struct {
+	DeviceId     string `protobuf:"bytes,1,opt,name=device_id,json=deviceId" json:"device_id,omitempty"`
+	ChannelId    uint32 `protobuf:"varint,2,opt,name=channel_id,json=channelId" json:"channel_id,omitempty"`
+	OnuId        uint32 `protobuf:"varint,3,opt,name=onu_id,json=onuId" json:"onu_id,omitempty"`
+	OnuSessionId uint32 `protobuf:"varint,4,opt,name=onu_session_id,json=onuSessionId" json:"onu_session_id,omitempty"`
+}
+
+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 fileDescriptor0, []int{7, 0} }
+
+func (m *Device_ProxyAddress) GetDeviceId() string {
+	if m != nil {
+		return m.DeviceId
+	}
+	return ""
+}
+
+func (m *Device_ProxyAddress) GetChannelId() uint32 {
+	if m != nil {
+		return m.ChannelId
+	}
+	return 0
+}
+
+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" json:"items,omitempty"`
+}
+
+func (m *Devices) Reset()                    { *m = Devices{} }
+func (m *Devices) String() string            { return proto.CompactTextString(m) }
+func (*Devices) ProtoMessage()               {}
+func (*Devices) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+
+func (m *Devices) GetItems() []*Device {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+func init() {
+	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((*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.RegisterEnum("voltha.PmConfig_PmType", PmConfig_PmType_name, PmConfig_PmType_value)
+	proto.RegisterEnum("voltha.Port_PortType", Port_PortType_name, Port_PortType_value)
+}
+
+func init() { proto.RegisterFile("device.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 1280 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x4d, 0x6f, 0xdb, 0xb6,
+	0x1b, 0x8f, 0x1c, 0xcb, 0x2f, 0x8f, 0x5f, 0xea, 0xf2, 0xdf, 0xfc, 0xab, 0x26, 0x30, 0x9a, 0xba,
+	0x3d, 0x64, 0xcd, 0xe6, 0x76, 0xed, 0xd0, 0x0e, 0x3b, 0x0c, 0x71, 0x5a, 0xb7, 0x0d, 0x36, 0x38,
+	0x9e, 0x62, 0x6f, 0x47, 0x81, 0x91, 0xe8, 0x44, 0xa8, 0x44, 0xaa, 0xa4, 0xec, 0x2e, 0xb7, 0xbd,
+	0x1c, 0xf6, 0x01, 0xf6, 0x51, 0x86, 0x7d, 0x89, 0x01, 0xbd, 0xed, 0x13, 0xec, 0x30, 0xec, 0xb8,
+	0x53, 0xce, 0x03, 0x49, 0x51, 0x91, 0xd2, 0xa1, 0xdb, 0x2e, 0x06, 0xf9, 0x7b, 0x21, 0xf9, 0x3c,
+	0x7e, 0xf8, 0x50, 0xd0, 0x0e, 0xc8, 0x2a, 0xf4, 0xc9, 0x30, 0xe1, 0x2c, 0x65, 0xa8, 0xb6, 0x62,
+	0x51, 0x7a, 0x8a, 0x37, 0x21, 0x26, 0x29, 0xd6, 0xd8, 0xe6, 0x8d, 0x13, 0xc6, 0x4e, 0x22, 0x72,
+	0x4f, 0xcd, 0x8e, 0x97, 0x8b, 0x7b, 0x98, 0x9e, 0x65, 0x54, 0xdb, 0x67, 0x71, 0xcc, 0x68, 0x36,
+	0xbb, 0xca, 0x12, 0x42, 0x17, 0x11, 0x7b, 0xed, 0x7d, 0xf8, 0x30, 0x83, 0xd0, 0x19, 0xa6, 0x27,
+	0x1e, 0x4b, 0xd2, 0x90, 0x51, 0xa1, 0xb1, 0xc1, 0xcf, 0x16, 0xc0, 0x53, 0xb5, 0xe9, 0xec, 0x2c,
+	0x21, 0xa8, 0x0b, 0x95, 0x30, 0x70, 0xac, 0x6d, 0x6b, 0xa7, 0xe9, 0x56, 0xc2, 0x00, 0x39, 0x50,
+	0xc7, 0x01, 0x4e, 0x52, 0xc2, 0x9d, 0x8a, 0x02, 0xcd, 0x14, 0x3d, 0x06, 0x07, 0xfb, 0x3e, 0x49,
+	0x52, 0xe1, 0x1d, 0x2f, 0xa3, 0x97, 0x9e, 0xda, 0x6a, 0x99, 0x04, 0x38, 0x25, 0xce, 0xfa, 0xb6,
+	0xb5, 0xd3, 0x70, 0x37, 0x32, 0x7e, 0x7f, 0x19, 0xbd, 0x7c, 0x16, 0xb1, 0xd7, 0x73, 0x45, 0xa2,
+	0xa7, 0x70, 0xd3, 0x18, 0x71, 0x10, 0x78, 0x9c, 0xc4, 0x6c, 0x45, 0x8a, 0x76, 0xe1, 0x54, 0x95,
+	0x7f, 0x2b, 0x93, 0x8d, 0x82, 0xc0, 0x55, 0xa2, 0x8b, 0x45, 0xc4, 0xe0, 0x31, 0xb4, 0x2e, 0x8e,
+	0x2d, 0xd0, 0x0e, 0xd8, 0x61, 0x4a, 0x62, 0xe1, 0x58, 0xdb, 0xeb, 0x3b, 0xad, 0x07, 0x68, 0xa8,
+	0x53, 0x37, 0xbc, 0xd0, 0xb8, 0x5a, 0x30, 0xf8, 0xc9, 0x82, 0xc6, 0x34, 0x7e, 0xc2, 0xe8, 0x22,
+	0x3c, 0x41, 0x08, 0xaa, 0x14, 0xc7, 0x24, 0x0b, 0x58, 0x8d, 0xd1, 0x2e, 0x54, 0xd3, 0xb3, 0x84,
+	0xa8, 0x78, 0xbb, 0x0f, 0xae, 0x9b, 0x95, 0x8c, 0x67, 0x38, 0x8d, 0xd5, 0x72, 0x4a, 0x24, 0xf3,
+	0x43, 0x28, 0x3e, 0x8e, 0x48, 0x90, 0x05, 0x6d, 0xa6, 0xe8, 0x26, 0xb4, 0x04, 0x8e, 0x93, 0x88,
+	0x78, 0x0b, 0x4e, 0x5e, 0xa9, 0x90, 0x3a, 0x2e, 0x68, 0xe8, 0x19, 0x27, 0xaf, 0x06, 0xbb, 0x50,
+	0xd3, 0x4b, 0xa1, 0x16, 0xd4, 0x9f, 0x1c, 0xce, 0x27, 0xb3, 0xb1, 0xdb, 0x5b, 0x43, 0x4d, 0xb0,
+	0x9f, 0xcf, 0x47, 0xcf, 0xc7, 0x3d, 0x4b, 0x0e, 0x8f, 0x66, 0xa3, 0xd9, 0xb8, 0x57, 0x19, 0xfc,
+	0x68, 0x41, 0x67, 0x1a, 0x3f, 0xe7, 0x6c, 0x99, 0x64, 0x47, 0xef, 0x03, 0x9c, 0xc8, 0xa9, 0x57,
+	0x08, 0xa0, 0xa9, 0x90, 0x89, 0x8c, 0x22, 0xa7, 0xd5, 0xee, 0x15, 0xb5, 0xbb, 0xa6, 0xe5, 0xe6,
+	0xef, 0x38, 0xf7, 0x5d, 0xa8, 0xc7, 0x24, 0xe5, 0xa1, 0x2f, 0xff, 0x06, 0x99, 0xcb, 0xde, 0xe5,
+	0x0c, 0xb8, 0x46, 0x30, 0xf8, 0xdd, 0x82, 0xa6, 0x41, 0xc5, 0x5b, 0xb5, 0x73, 0x4b, 0x96, 0xf3,
+	0x02, 0x2f, 0xa3, 0xb4, 0x78, 0x88, 0x56, 0x86, 0xa9, 0x63, 0xdc, 0x84, 0xba, 0x3a, 0x93, 0x39,
+	0xc6, 0xbe, 0xfd, 0xc7, 0xf9, 0x9b, 0xbe, 0xe5, 0x1a, 0x14, 0xdd, 0x85, 0x8e, 0xf4, 0x7a, 0x6c,
+	0x45, 0x38, 0x0f, 0x03, 0xa2, 0x4b, 0xc3, 0xc8, 0xda, 0x92, 0x3b, 0xcc, 0x28, 0xf4, 0x01, 0xd4,
+	0x94, 0x4d, 0x38, 0xb6, 0x3a, 0xf8, 0xc6, 0xc5, 0xc1, 0x0b, 0x89, 0x73, 0x33, 0x51, 0x31, 0xd0,
+	0xda, 0x3f, 0x05, 0xfa, 0xcb, 0x3a, 0x54, 0xa7, 0x8c, 0xa7, 0xe8, 0x3a, 0xd4, 0x13, 0xc6, 0x53,
+	0x8f, 0x32, 0x15, 0x68, 0xc7, 0xad, 0xc9, 0xe9, 0x84, 0xa1, 0x6b, 0x60, 0x47, 0xf8, 0x98, 0x44,
+	0xd9, 0x35, 0xd1, 0x13, 0xf4, 0x5e, 0x56, 0x4b, 0xeb, 0xaa, 0x96, 0x2e, 0x0e, 0xc4, 0x78, 0xaa,
+	0x7e, 0x0a, 0x95, 0xf4, 0x29, 0xb4, 0x70, 0x10, 0x87, 0xd4, 0x13, 0xa9, 0xbc, 0x42, 0xb6, 0x72,
+	0xf4, 0x8d, 0x63, 0x24, 0xa9, 0x23, 0xc9, 0x14, 0x86, 0x2e, 0xe0, 0x7c, 0x2c, 0xfd, 0x2c, 0x21,
+	0x5c, 0xd9, 0x97, 0x32, 0xa4, 0x92, 0xff, 0x30, 0x21, 0xfc, 0x48, 0x31, 0x85, 0xa1, 0x0b, 0x2c,
+	0x1f, 0xa3, 0x2d, 0x68, 0xea, 0xe6, 0xe3, 0x85, 0x81, 0x53, 0x57, 0x41, 0x34, 0x34, 0x70, 0x10,
+	0xa0, 0x5d, 0xb0, 0x13, 0x42, 0xb8, 0x70, 0x1a, 0x97, 0x32, 0xab, 0x02, 0x21, 0x84, 0xcb, 0x81,
+	0xab, 0x35, 0x9b, 0x7b, 0xd0, 0x30, 0x50, 0x79, 0x55, 0xeb, 0xd2, 0xaa, 0x85, 0x64, 0x56, 0x8a,
+	0xc9, 0x1c, 0xcc, 0xa1, 0x61, 0xb2, 0x23, 0x2f, 0xc7, 0x7c, 0xf2, 0xd9, 0xe4, 0xf0, 0xab, 0x49,
+	0x6f, 0x0d, 0xf5, 0xa0, 0x3d, 0x9e, 0xbd, 0x18, 0xbb, 0x93, 0xf1, 0xcc, 0x9b, 0x4c, 0x0e, 0x7a,
+	0x56, 0x09, 0x99, 0x4f, 0x0e, 0x7a, 0x15, 0x69, 0x98, 0x1e, 0x4e, 0xbc, 0xc3, 0xcf, 0x67, 0xbd,
+	0xf5, 0x7c, 0x32, 0x99, 0xf7, 0xaa, 0x9f, 0xd8, 0x7f, 0x9e, 0xbf, 0xe9, 0xaf, 0x0d, 0x76, 0xc1,
+	0x96, 0xab, 0x0b, 0x34, 0x28, 0x37, 0x8d, 0x76, 0x31, 0x2a, 0xd3, 0x2e, 0x7e, 0x05, 0xa8, 0xe9,
+	0x26, 0x82, 0x36, 0x2e, 0xea, 0xdb, 0x14, 0xa0, 0x2c, 0xf3, 0x1b, 0x85, 0x7e, 0x91, 0x13, 0xfa,
+	0x3f, 0xbd, 0x01, 0x55, 0xce, 0x58, 0x5a, 0xae, 0x6d, 0x05, 0xa1, 0x01, 0x34, 0x13, 0xcc, 0x09,
+	0x4d, 0x65, 0x62, 0xaa, 0x45, 0x6b, 0x43, 0xe3, 0x2a, 0xeb, 0xdd, 0x4c, 0x63, 0xd2, 0x74, 0x4d,
+	0xa6, 0x29, 0xaf, 0x7e, 0x4d, 0x4e, 0x75, 0x01, 0xf6, 0xa1, 0xb6, 0x22, 0x34, 0x60, 0x5c, 0x95,
+	0x4e, 0xbe, 0x5a, 0x06, 0xa2, 0x2d, 0xb0, 0x63, 0x16, 0x90, 0x48, 0x15, 0x46, 0xce, 0x6a, 0x0c,
+	0xdd, 0x87, 0xde, 0x29, 0xe6, 0xc1, 0x6b, 0xcc, 0x89, 0xb7, 0x22, 0x5c, 0x84, 0x8c, 0xea, 0x12,
+	0x30, 0xba, 0x2b, 0x86, 0xfe, 0x52, 0xb3, 0xd2, 0xb1, 0x08, 0x79, 0x5c, 0x72, 0x34, 0x4a, 0x0e,
+	0x43, 0x17, 0x1c, 0x82, 0x2d, 0xd2, 0x92, 0xa3, 0x59, 0x72, 0x18, 0xda, 0x38, 0xee, 0x42, 0x47,
+	0x10, 0x1e, 0xe2, 0xc8, 0xa3, 0xcb, 0xf8, 0x98, 0x70, 0x07, 0x8a, 0xf2, 0xb6, 0xe6, 0x26, 0x8a,
+	0x92, 0x8d, 0xc4, 0xbc, 0x53, 0xad, 0xa2, 0x2a, 0x7f, 0xae, 0x10, 0x54, 0x57, 0x11, 0xa6, 0x4e,
+	0x5b, 0x15, 0x9a, 0x1a, 0xa3, 0x5b, 0xd0, 0x8a, 0xb1, 0x2f, 0x5f, 0x21, 0x4e, 0x84, 0x70, 0x3a,
+	0xd2, 0xf8, 0x62, 0xcd, 0x85, 0x18, 0xfb, 0x23, 0x8d, 0xa1, 0xdb, 0xd0, 0x0e, 0x93, 0xd5, 0x47,
+	0xb9, 0xa6, 0x9b, 0x69, 0x5a, 0x12, 0x2d, 0x8b, 0x1e, 0xe5, 0xa2, 0x2b, 0x05, 0xd1, 0x23, 0x23,
+	0xba, 0x03, 0x9d, 0x53, 0x26, 0x52, 0x0f, 0xd3, 0x40, 0xfd, 0x9d, 0xce, 0x86, 0x51, 0x49, 0x78,
+	0x44, 0x03, 0x75, 0x5f, 0xf6, 0xa0, 0x93, 0x70, 0xf6, 0xf5, 0x59, 0xbe, 0xd6, 0xff, 0xb6, 0xad,
+	0x9d, 0xd6, 0x83, 0xad, 0xf2, 0x7b, 0x36, 0x9c, 0x4a, 0x4d, 0xb6, 0xb2, 0xdb, 0x4e, 0x0a, 0xb3,
+	0xcb, 0x7d, 0xa4, 0xf7, 0x5f, 0xfb, 0xc8, 0xb8, 0xdc, 0x47, 0xae, 0xfe, 0x8b, 0x3e, 0x62, 0x92,
+	0x5d, 0x6c, 0x27, 0x7d, 0xa8, 0x71, 0x82, 0x05, 0xa3, 0xce, 0xff, 0x4b, 0xe5, 0xa8, 0x41, 0xf4,
+	0x05, 0x74, 0x7d, 0x46, 0x29, 0xf1, 0x53, 0xb3, 0x11, 0x52, 0x1b, 0xdd, 0x36, 0x1b, 0x3d, 0xd1,
+	0x6c, 0xb6, 0x57, 0x69, 0x66, 0xd6, 0xea, 0xf8, 0x45, 0x14, 0xbd, 0x0f, 0x35, 0x7f, 0x29, 0x52,
+	0x16, 0x3b, 0x7b, 0x2a, 0x67, 0xd7, 0x86, 0xfa, 0x53, 0x69, 0x68, 0x3e, 0x95, 0x86, 0x23, 0x7a,
+	0xe6, 0x66, 0x1a, 0xf4, 0x10, 0x6c, 0xf9, 0x2f, 0x08, 0xe7, 0x9b, 0xbf, 0xb9, 0xfc, 0xfb, 0xdd,
+	0xdf, 0xce, 0xdf, 0xf4, 0x9b, 0x79, 0x7b, 0x72, 0xb5, 0x16, 0xdd, 0x07, 0x5b, 0x7e, 0xa7, 0x08,
+	0xe7, 0x5b, 0x4b, 0x6d, 0x81, 0x86, 0xc5, 0x8f, 0x2c, 0xf9, 0x79, 0x22, 0xf6, 0x6d, 0x69, 0x5d,
+	0x73, 0xb5, 0x10, 0xed, 0x41, 0x4b, 0xd1, 0xd9, 0xc3, 0xf4, 0x9d, 0xf6, 0x5d, 0x7f, 0xcb, 0xa7,
+	0x1e, 0xa8, 0xdc, 0x0c, 0x8b, 0x1c, 0x42, 0x1f, 0x03, 0x24, 0xb1, 0xe7, 0xeb, 0x37, 0xd6, 0xf9,
+	0x5e, 0x2f, 0x70, 0xf5, 0xf2, 0x53, 0x95, 0x5b, 0x9b, 0x89, 0x41, 0x36, 0x7f, 0xb0, 0xa0, 0x5d,
+	0x2c, 0x94, 0x77, 0x37, 0xe3, 0x3e, 0x80, 0x7f, 0x8a, 0x29, 0x25, 0x91, 0x64, 0xb3, 0x0f, 0x86,
+	0x0c, 0x39, 0x08, 0xd0, 0x06, 0xd4, 0x18, 0x5d, 0x4a, 0x6a, 0x5d, 0x51, 0x36, 0xa3, 0xcb, 0x83,
+	0x00, 0xdd, 0x81, 0xae, 0x84, 0x05, 0x11, 0xf2, 0xca, 0x9a, 0x5e, 0xd6, 0x71, 0xdb, 0x8c, 0x2e,
+	0x8f, 0x34, 0x78, 0x10, 0x64, 0x8d, 0x77, 0xbf, 0x29, 0x2f, 0xa9, 0x3a, 0xca, 0xe0, 0x1e, 0xd4,
+	0x75, 0x29, 0xcb, 0x8b, 0x51, 0xea, 0xc2, 0xdd, 0x72, 0xa9, 0x67, 0x7d, 0xf8, 0xb8, 0xa6, 0xfe,
+	0xc5, 0x87, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x33, 0xa2, 0x3e, 0x22, 0x0b, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/events/events.pb.go b/netopeer/voltha-grpc-client/voltha/events/events.pb.go
new file mode 100644
index 0000000..dea9896
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/events/events.pb.go
@@ -0,0 +1,518 @@
+// Code generated by protoc-gen-go.
+// source: events.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	events.proto
+
+It has these top-level messages:
+	ConfigEventType
+	ConfigEvent
+	KpiEventType
+	MetricValuePairs
+	KpiEvent
+	AlarmEventType
+	AlarmEventCategory
+	AlarmEventState
+	AlarmEventSeverity
+	AlarmEvent
+*/
+package events
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import 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.ProtoPackageIsVersion2 // 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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []int{5, 0}
+}
+
+type AlarmEventCategory_AlarmEventCategory int32
+
+const (
+	AlarmEventCategory_PON AlarmEventCategory_AlarmEventCategory = 0
+)
+
+var AlarmEventCategory_AlarmEventCategory_name = map[int32]string{
+	0: "PON",
+}
+var AlarmEventCategory_AlarmEventCategory_value = map[string]int32{
+	"PON": 0,
+}
+
+func (x AlarmEventCategory_AlarmEventCategory) String() string {
+	return proto.EnumName(AlarmEventCategory_AlarmEventCategory_name, int32(x))
+}
+func (AlarmEventCategory_AlarmEventCategory) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{6, 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 fileDescriptor0, []int{7, 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 fileDescriptor0, []int{8, 0}
+}
+
+type ConfigEventType struct {
+}
+
+func (m *ConfigEventType) Reset()                    { *m = ConfigEventType{} }
+func (m *ConfigEventType) String() string            { return proto.CompactTextString(m) }
+func (*ConfigEventType) ProtoMessage()               {}
+func (*ConfigEventType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+type ConfigEvent struct {
+	Type ConfigEventType_ConfigEventType `protobuf:"varint,1,opt,name=type,enum=voltha.ConfigEventType_ConfigEventType" json:"type,omitempty"`
+	Hash string                          `protobuf:"bytes,2,opt,name=hash" json:"hash,omitempty"`
+	Data string                          `protobuf:"bytes,3,opt,name=data" json:"data,omitempty"`
+}
+
+func (m *ConfigEvent) Reset()                    { *m = ConfigEvent{} }
+func (m *ConfigEvent) String() string            { return proto.CompactTextString(m) }
+func (*ConfigEvent) ProtoMessage()               {}
+func (*ConfigEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+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 {
+}
+
+func (m *KpiEventType) Reset()                    { *m = KpiEventType{} }
+func (m *KpiEventType) String() string            { return proto.CompactTextString(m) }
+func (*KpiEventType) ProtoMessage()               {}
+func (*KpiEventType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+//
+// 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" json:"metrics,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"`
+}
+
+func (m *MetricValuePairs) Reset()                    { *m = MetricValuePairs{} }
+func (m *MetricValuePairs) String() string            { return proto.CompactTextString(m) }
+func (*MetricValuePairs) ProtoMessage()               {}
+func (*MetricValuePairs) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (m *MetricValuePairs) GetMetrics() map[string]float32 {
+	if m != nil {
+		return m.Metrics
+	}
+	return nil
+}
+
+type KpiEvent struct {
+	Type     KpiEventType_KpiEventType    `protobuf:"varint,1,opt,name=type,enum=voltha.KpiEventType_KpiEventType" json:"type,omitempty"`
+	Ts       float32                      `protobuf:"fixed32,2,opt,name=ts" json:"ts,omitempty"`
+	Prefixes map[string]*MetricValuePairs `protobuf:"bytes,3,rep,name=prefixes" json:"prefixes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+}
+
+func (m *KpiEvent) Reset()                    { *m = KpiEvent{} }
+func (m *KpiEvent) String() string            { return proto.CompactTextString(m) }
+func (*KpiEvent) ProtoMessage()               {}
+func (*KpiEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+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
+}
+
+//
+// Identify to the area of the system impacted by the alarm
+type AlarmEventType struct {
+}
+
+func (m *AlarmEventType) Reset()                    { *m = AlarmEventType{} }
+func (m *AlarmEventType) String() string            { return proto.CompactTextString(m) }
+func (*AlarmEventType) ProtoMessage()               {}
+func (*AlarmEventType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+//
+// Identify to the functional category originating the alarm
+type AlarmEventCategory struct {
+}
+
+func (m *AlarmEventCategory) Reset()                    { *m = AlarmEventCategory{} }
+func (m *AlarmEventCategory) String() string            { return proto.CompactTextString(m) }
+func (*AlarmEventCategory) ProtoMessage()               {}
+func (*AlarmEventCategory) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+//
+// Active state of the alarm
+type AlarmEventState struct {
+}
+
+func (m *AlarmEventState) Reset()                    { *m = AlarmEventState{} }
+func (m *AlarmEventState) String() string            { return proto.CompactTextString(m) }
+func (*AlarmEventState) ProtoMessage()               {}
+func (*AlarmEventState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+//
+// Identify the overall impact of the alarm on the system
+type AlarmEventSeverity struct {
+}
+
+func (m *AlarmEventSeverity) Reset()                    { *m = AlarmEventSeverity{} }
+func (m *AlarmEventSeverity) String() string            { return proto.CompactTextString(m) }
+func (*AlarmEventSeverity) ProtoMessage()               {}
+func (*AlarmEventSeverity) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+
+//
+//
+type AlarmEvent struct {
+	// Unique ID for this alarm.  e.g. voltha.some_olt.1234
+	Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	// Refers to the area of the system impacted by the alarm
+	Type AlarmEventType_AlarmEventType `protobuf:"varint,2,opt,name=type,enum=voltha.AlarmEventType_AlarmEventType" json:"type,omitempty"`
+	// Refers to functional category of the alarm
+	Category AlarmEventCategory_AlarmEventCategory `protobuf:"varint,3,opt,name=category,enum=voltha.AlarmEventCategory_AlarmEventCategory" json:"category,omitempty"`
+	// Current active state of the alarm
+	State AlarmEventState_AlarmEventState `protobuf:"varint,4,opt,name=state,enum=voltha.AlarmEventState_AlarmEventState" json:"state,omitempty"`
+	// Overall impact of the alarm on the system
+	Severity AlarmEventSeverity_AlarmEventSeverity `protobuf:"varint,5,opt,name=severity,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" json:"raised_ts,omitempty"`
+	// Timestamp at which the alarm was reported
+	ReportedTs float32 `protobuf:"fixed32,7,opt,name=reported_ts,json=reportedTs" 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" json:"changed_ts,omitempty"`
+	// Identifier of the originating resource of the alarm
+	ResourceId string `protobuf:"bytes,9,opt,name=resource_id,json=resourceId" json:"resource_id,omitempty"`
+	// Textual explanation of the alarm
+	Description string `protobuf:"bytes,10,opt,name=description" 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" json:"context,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+}
+
+func (m *AlarmEvent) Reset()                    { *m = AlarmEvent{} }
+func (m *AlarmEvent) String() string            { return proto.CompactTextString(m) }
+func (*AlarmEvent) ProtoMessage()               {}
+func (*AlarmEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+
+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 init() {
+	proto.RegisterType((*ConfigEventType)(nil), "voltha.ConfigEventType")
+	proto.RegisterType((*ConfigEvent)(nil), "voltha.ConfigEvent")
+	proto.RegisterType((*KpiEventType)(nil), "voltha.KpiEventType")
+	proto.RegisterType((*MetricValuePairs)(nil), "voltha.MetricValuePairs")
+	proto.RegisterType((*KpiEvent)(nil), "voltha.KpiEvent")
+	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.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)
+}
+
+func init() { proto.RegisterFile("events.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 775 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0xef, 0x6e, 0xe3, 0x44,
+	0x10, 0xaf, 0x9d, 0xbf, 0x1e, 0xb7, 0xe9, 0xb2, 0xe2, 0x83, 0x55, 0x38, 0xae, 0x67, 0x09, 0x51,
+	0x21, 0x91, 0x13, 0x39, 0x21, 0x71, 0x45, 0x27, 0x64, 0xb9, 0x2b, 0x64, 0xb8, 0x38, 0x61, 0xe3,
+	0x16, 0xf8, 0x74, 0x5a, 0xe2, 0xbd, 0xd4, 0x22, 0xb5, 0x2d, 0xef, 0x36, 0xba, 0x7c, 0xe3, 0x0d,
+	0x78, 0x28, 0x5e, 0x85, 0x07, 0x41, 0xbb, 0xb6, 0x1b, 0xc7, 0x4d, 0x75, 0xdf, 0x66, 0x7e, 0xf3,
+	0xc7, 0xf3, 0x9b, 0x9d, 0x19, 0xc3, 0x31, 0xdf, 0xf0, 0x54, 0x8a, 0x71, 0x5e, 0x64, 0x32, 0xc3,
+	0xfd, 0x4d, 0xb6, 0x96, 0xb7, 0xec, 0x0c, 0xee, 0xb8, 0x64, 0x25, 0x76, 0xf6, 0xf9, 0x2a, 0xcb,
+	0x56, 0x6b, 0xfe, 0x92, 0xe5, 0xc9, 0x4b, 0x96, 0xa6, 0x99, 0x64, 0x32, 0xc9, 0xd2, 0x2a, 0xc2,
+	0x25, 0x70, 0xea, 0x67, 0xe9, 0xfb, 0x64, 0x45, 0x54, 0x9e, 0x68, 0x9b, 0x73, 0x77, 0xf2, 0x08,
+	0xc2, 0x03, 0xe8, 0xb0, 0x38, 0x46, 0x47, 0x18, 0xa0, 0x5f, 0xf0, 0xbb, 0x6c, 0xc3, 0x91, 0xa1,
+	0xe4, 0xfb, 0x3c, 0x66, 0x92, 0x23, 0xd3, 0x2d, 0xc0, 0x6e, 0xc4, 0xe0, 0x1f, 0xa0, 0x2b, 0xb7,
+	0x39, 0x77, 0x8c, 0x73, 0xe3, 0x62, 0x34, 0xf9, 0x6a, 0x5c, 0x96, 0x35, 0x6e, 0xa5, 0x6d, 0xeb,
+	0x54, 0x07, 0x61, 0x0c, 0xdd, 0x5b, 0x26, 0x6e, 0x1d, 0xf3, 0xdc, 0xb8, 0xb0, 0xa8, 0x96, 0x15,
+	0x16, 0x33, 0xc9, 0x9c, 0x4e, 0x89, 0x29, 0xd9, 0xfd, 0x16, 0x8e, 0x7f, 0xc9, 0x93, 0x5d, 0xdd,
+	0x2f, 0xf6, 0x75, 0x6c, 0x41, 0x4f, 0xac, 0x93, 0x25, 0x47, 0x47, 0xb8, 0x0f, 0xa6, 0x14, 0xc8,
+	0x70, 0xff, 0x31, 0x00, 0x4d, 0xb9, 0x2c, 0x92, 0xe5, 0x0d, 0x5b, 0xdf, 0xf3, 0x39, 0x4b, 0x0a,
+	0x81, 0x7f, 0x84, 0xc1, 0x9d, 0xc6, 0x84, 0x63, 0x9c, 0x77, 0x2e, 0xec, 0xc9, 0x97, 0x75, 0xbd,
+	0x6d, 0xd7, 0x0a, 0x10, 0x24, 0x95, 0xc5, 0x96, 0xd6, 0x51, 0x67, 0x97, 0x70, 0xdc, 0x34, 0x60,
+	0x04, 0x9d, 0xbf, 0xf8, 0x56, 0x93, 0xb7, 0xa8, 0x12, 0xf1, 0xa7, 0xd0, 0xdb, 0xa8, 0x2c, 0x9a,
+	0x93, 0x49, 0x4b, 0xe5, 0xd2, 0xfc, 0xde, 0x70, 0xff, 0x33, 0x60, 0x58, 0x57, 0x8d, 0xbf, 0xdb,
+	0x6b, 0xdb, 0x8b, 0xba, 0x8c, 0x26, 0xab, 0x3d, 0xa5, 0x6a, 0xd8, 0x48, 0xb1, 0xab, 0x52, 0x9b,
+	0x52, 0xe0, 0x4b, 0x18, 0xe6, 0x05, 0x7f, 0x9f, 0x7c, 0xe0, 0xc2, 0xe9, 0x68, 0x46, 0x5f, 0xb4,
+	0x53, 0x8d, 0xe7, 0x95, 0x43, 0x49, 0xe5, 0xc1, 0xff, 0xec, 0x1a, 0x4e, 0xf6, 0x4c, 0x07, 0xc8,
+	0x8c, 0x9b, 0x64, 0xec, 0x89, 0xf3, 0x54, 0xb7, 0x9a, 0x34, 0xff, 0x36, 0x60, 0xe4, 0xad, 0x59,
+	0x71, 0xb7, 0x7b, 0xae, 0xb4, 0x8d, 0xe0, 0x4f, 0xe0, 0xc4, 0x9f, 0x4d, 0xa7, 0xd7, 0x61, 0xe0,
+	0x7b, 0x51, 0x30, 0x0b, 0xd1, 0x11, 0x3e, 0x05, 0x9b, 0x84, 0x37, 0x01, 0x9d, 0x85, 0x53, 0x12,
+	0x46, 0xc8, 0xc0, 0x27, 0x60, 0x91, 0x5f, 0xaf, 0x83, 0xb9, 0x56, 0x4d, 0x6c, 0xc3, 0x60, 0x41,
+	0xe8, 0x4d, 0xe0, 0x13, 0xd4, 0xc1, 0x23, 0x80, 0x39, 0x9d, 0xf9, 0x64, 0xb1, 0x08, 0xc2, 0x9f,
+	0x50, 0x17, 0x1f, 0xc3, 0x70, 0x41, 0xfc, 0x6b, 0x1a, 0x44, 0x7f, 0xa0, 0x9e, 0xfb, 0x0a, 0xf0,
+	0xee, 0x7b, 0x3e, 0x93, 0x7c, 0x95, 0x15, 0x5b, 0xf7, 0xd9, 0x21, 0x54, 0xcd, 0xfb, 0x5c, 0x7d,
+	0xdf, 0x7d, 0x03, 0xa7, 0x3b, 0xf3, 0x42, 0x32, 0xc9, 0xdd, 0xaf, 0x1f, 0x41, 0x6a, 0x13, 0xa8,
+	0x17, 0x2c, 0xc8, 0x15, 0x3a, 0x52, 0x15, 0xf9, 0x6f, 0x89, 0x47, 0xc9, 0x15, 0x32, 0xdc, 0xb4,
+	0x99, 0x7d, 0xc1, 0x37, 0xbc, 0x48, 0xe4, 0xd6, 0xfd, 0xfd, 0x10, 0xaa, 0xd8, 0x07, 0xe1, 0x15,
+	0x89, 0x08, 0x9d, 0x06, 0xa1, 0x17, 0x91, 0x32, 0xd7, 0x6f, 0x1e, 0x0d, 0x15, 0x1b, 0x43, 0x8d,
+	0xf3, 0x34, 0x08, 0x67, 0x14, 0x99, 0x5a, 0xf4, 0x7e, 0x9e, 0x51, 0xd4, 0x51, 0x1c, 0x7d, 0x1a,
+	0x44, 0x81, 0xef, 0xbd, 0x45, 0x5d, 0xf7, 0xdf, 0x2e, 0xc0, 0x2e, 0xb5, 0x1a, 0x8c, 0x24, 0xae,
+	0x9e, 0xce, 0x4c, 0x62, 0xfc, 0xba, 0x9a, 0x2f, 0x53, 0xcf, 0xd7, 0xc3, 0x98, 0xef, 0x3f, 0x43,
+	0x4b, 0xad, 0x66, 0x2c, 0x80, 0xe1, 0xb2, 0xea, 0x8e, 0x5e, 0xc2, 0xd1, 0xe4, 0x9b, 0xc7, 0xe1,
+	0x75, 0xff, 0x0e, 0x40, 0xf4, 0x21, 0x1c, 0xbf, 0x81, 0x9e, 0x50, 0x6d, 0x73, 0xba, 0xfb, 0xd7,
+	0xa1, 0xd5, 0xd5, 0xb6, 0x4e, 0xcb, 0x28, 0x55, 0x89, 0xa8, 0x7a, 0xe6, 0xf4, 0x9e, 0xaa, 0xa4,
+	0xee, 0xea, 0x01, 0x88, 0x3e, 0x84, 0xe3, 0xcf, 0xc0, 0x2a, 0x58, 0x22, 0x78, 0xfc, 0x4e, 0x0a,
+	0xa7, 0xaf, 0xf7, 0x67, 0x58, 0x02, 0x91, 0xc0, 0xcf, 0xc1, 0x2e, 0x78, 0x9e, 0x15, 0xb2, 0x34,
+	0x0f, 0xb4, 0x19, 0x6a, 0x28, 0x12, 0xf8, 0x19, 0xc0, 0xf2, 0x96, 0xa5, 0xab, 0xd2, 0x3e, 0xd4,
+	0x76, 0xab, 0x42, 0xea, 0x78, 0x91, 0xdd, 0x17, 0x4b, 0xfe, 0x2e, 0x89, 0x1d, 0x4b, 0xbf, 0x02,
+	0xd4, 0x50, 0x10, 0xe3, 0x73, 0xb0, 0x63, 0x2e, 0x96, 0x45, 0x92, 0xab, 0x83, 0xec, 0x80, 0x76,
+	0x68, 0x42, 0xf8, 0x35, 0x0c, 0x96, 0x59, 0x2a, 0xf9, 0x07, 0xe9, 0xd8, 0x7a, 0x8f, 0x9f, 0x3f,
+	0x66, 0xaa, 0x8e, 0xa8, 0xf2, 0xa8, 0x6e, 0x52, 0xe5, 0xaf, 0x6e, 0x52, 0xd3, 0xf0, 0xb1, 0x9b,
+	0x64, 0x35, 0x96, 0xf5, 0xcf, 0xbe, 0xfe, 0x35, 0xbc, 0xfa, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x27,
+	0x78, 0x37, 0x67, 0x5c, 0x06, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/health/health.pb.go b/netopeer/voltha-grpc-client/voltha/health/health.pb.go
new file mode 100644
index 0000000..cf98267
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/health/health.pb.go
@@ -0,0 +1,179 @@
+// Code generated by protoc-gen-go.
+// source: health.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	health.proto
+
+It has these top-level messages:
+	HealthStatus
+*/
+package health
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf1 "github.com/golang/protobuf/ptypes/empty"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // 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 fileDescriptor0, []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,enum=voltha.HealthStatus_HealthState" json:"state,omitempty"`
+}
+
+func (m *HealthStatus) Reset()                    { *m = HealthStatus{} }
+func (m *HealthStatus) String() string            { return proto.CompactTextString(m) }
+func (*HealthStatus) ProtoMessage()               {}
+func (*HealthStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *HealthStatus) GetState() HealthStatus_HealthState {
+	if m != nil {
+		return m.State
+	}
+	return HealthStatus_HEALTHY
+}
+
+func init() {
+	proto.RegisterType((*HealthStatus)(nil), "voltha.HealthStatus")
+	proto.RegisterEnum("voltha.HealthStatus_HealthState", HealthStatus_HealthState_name, HealthStatus_HealthState_value)
+}
+
+// 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
+
+// Client API for HealthService service
+
+type HealthServiceClient interface {
+	// Return current health status of a Voltha instance
+	GetHealthStatus(ctx context.Context, in *google_protobuf1.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 *google_protobuf1.Empty, opts ...grpc.CallOption) (*HealthStatus, error) {
+	out := new(HealthStatus)
+	err := grpc.Invoke(ctx, "/voltha.HealthService/GetHealthStatus", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// Server API for HealthService service
+
+type HealthServiceServer interface {
+	// Return current health status of a Voltha instance
+	GetHealthStatus(context.Context, *google_protobuf1.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(google_protobuf1.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.(*google_protobuf1.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: "health.proto",
+}
+
+func init() { proto.RegisterFile("health.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 248 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xc9, 0x48, 0x4d, 0xcc,
+	0x29, 0xc9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2b, 0xcb, 0xcf, 0x29, 0xc9, 0x48,
+	0x94, 0x92, 0x49, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xcc, 0xcb,
+	0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0x86, 0xa8, 0x92, 0x92, 0x86, 0xca, 0x82, 0x79,
+	0x49, 0xa5, 0x69, 0xfa, 0xa9, 0xb9, 0x05, 0x25, 0x95, 0x50, 0x49, 0xae, 0xdc, 0xd4, 0x92, 0x44,
+	0x08, 0x5b, 0xa9, 0x85, 0x91, 0x8b, 0xc7, 0x03, 0x6c, 0x7e, 0x70, 0x49, 0x62, 0x49, 0x69, 0xb1,
+	0x90, 0x2d, 0x17, 0x6b, 0x71, 0x49, 0x62, 0x49, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x9f, 0x91,
+	0x82, 0x1e, 0xc4, 0x3e, 0x3d, 0x64, 0x45, 0x48, 0x9c, 0x54, 0x27, 0xd6, 0x17, 0xdf, 0xce, 0xca,
+	0x32, 0x06, 0x41, 0x74, 0x29, 0x99, 0x72, 0x71, 0x23, 0x49, 0x0a, 0x71, 0x73, 0xb1, 0x7b, 0xb8,
+	0x3a, 0xfa, 0x84, 0x78, 0x44, 0x0a, 0x30, 0x08, 0xf1, 0x71, 0x71, 0xf9, 0x87, 0xb9, 0x06, 0xf9,
+	0xf8, 0x3b, 0xba, 0xb8, 0xba, 0x08, 0x30, 0x0a, 0x71, 0x72, 0xb1, 0xba, 0x44, 0x7a, 0xfa, 0xb9,
+	0x0b, 0x30, 0x19, 0x25, 0x72, 0xf1, 0x42, 0xb5, 0xa5, 0x16, 0x95, 0x65, 0x26, 0xa7, 0x0a, 0x05,
+	0x70, 0xf1, 0xbb, 0xa7, 0x96, 0xa0, 0xb8, 0x4c, 0x4c, 0x0f, 0xe2, 0x29, 0x3d, 0x98, 0xa7, 0xf4,
+	0x5c, 0x41, 0x9e, 0x92, 0x12, 0xc1, 0xe6, 0x44, 0x25, 0xfe, 0xa6, 0xcb, 0x4f, 0x26, 0x33, 0x71,
+	0x0a, 0xb1, 0xeb, 0x43, 0x82, 0x2f, 0x89, 0x0d, 0xac, 0xcd, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff,
+	0x59, 0x30, 0x7e, 0x18, 0x4f, 0x01, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/logical_device/logical_device.pb.go b/netopeer/voltha-grpc-client/voltha/logical_device/logical_device.pb.go
new file mode 100644
index 0000000..04bde69
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/logical_device/logical_device.pb.go
@@ -0,0 +1,234 @@
+// Code generated by protoc-gen-go.
+// source: logical_device.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	logical_device.proto
+
+It has these top-level messages:
+	LogicalPort
+	LogicalPorts
+	LogicalDevice
+	LogicalDevices
+*/
+package logical_device
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import openflow_13 "github.com/opencord/voltha/netconf/translator/voltha/openflow_13"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type LogicalPort struct {
+	Id           string               `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	OfpPort      *openflow_13.OfpPort `protobuf:"bytes,2,opt,name=ofp_port,json=ofpPort" json:"ofp_port,omitempty"`
+	DeviceId     string               `protobuf:"bytes,3,opt,name=device_id,json=deviceId" json:"device_id,omitempty"`
+	DevicePortNo uint32               `protobuf:"varint,4,opt,name=device_port_no,json=devicePortNo" json:"device_port_no,omitempty"`
+	RootPort     bool                 `protobuf:"varint,5,opt,name=root_port,json=rootPort" json:"root_port,omitempty"`
+}
+
+func (m *LogicalPort) Reset()                    { *m = LogicalPort{} }
+func (m *LogicalPort) String() string            { return proto.CompactTextString(m) }
+func (*LogicalPort) ProtoMessage()               {}
+func (*LogicalPort) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+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
+}
+
+type LogicalPorts struct {
+	Items []*LogicalPort `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
+}
+
+func (m *LogicalPorts) Reset()                    { *m = LogicalPorts{} }
+func (m *LogicalPorts) String() string            { return proto.CompactTextString(m) }
+func (*LogicalPorts) ProtoMessage()               {}
+func (*LogicalPorts) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+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" 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" json:"datapath_id,omitempty"`
+	// device description
+	Desc *openflow_13.OfpDesc `protobuf:"bytes,3,opt,name=desc" json:"desc,omitempty"`
+	// device features
+	SwitchFeatures *openflow_13.OfpSwitchFeatures `protobuf:"bytes,4,opt,name=switch_features,json=switchFeatures" json:"switch_features,omitempty"`
+	// name of the root device anchoring logical device
+	RootDeviceId string `protobuf:"bytes,5,opt,name=root_device_id,json=rootDeviceId" json:"root_device_id,omitempty"`
+	// logical device ports
+	Ports []*LogicalPort `protobuf:"bytes,128,rep,name=ports" json:"ports,omitempty"`
+	// flows configured on the logical device
+	Flows *openflow_13.Flows `protobuf:"bytes,129,opt,name=flows" json:"flows,omitempty"`
+	// flow groups configured on the logical device
+	FlowGroups *openflow_13.FlowGroups `protobuf:"bytes,130,opt,name=flow_groups,json=flowGroups" json:"flow_groups,omitempty"`
+}
+
+func (m *LogicalDevice) Reset()                    { *m = LogicalDevice{} }
+func (m *LogicalDevice) String() string            { return proto.CompactTextString(m) }
+func (*LogicalDevice) ProtoMessage()               {}
+func (*LogicalDevice) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+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
+}
+
+type LogicalDevices struct {
+	Items []*LogicalDevice `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
+}
+
+func (m *LogicalDevices) Reset()                    { *m = LogicalDevices{} }
+func (m *LogicalDevices) String() string            { return proto.CompactTextString(m) }
+func (*LogicalDevices) ProtoMessage()               {}
+func (*LogicalDevices) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (m *LogicalDevices) GetItems() []*LogicalDevice {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+func init() {
+	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("logical_device.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 438 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x52, 0xd1, 0x6e, 0xd3, 0x30,
+	0x14, 0xc5, 0x6d, 0x33, 0xda, 0x9b, 0xae, 0x08, 0xc3, 0x84, 0x35, 0x40, 0x44, 0x15, 0x0f, 0x99,
+	0x90, 0xba, 0xd1, 0x89, 0x07, 0x1e, 0x90, 0xd0, 0x34, 0x0d, 0x55, 0x42, 0x08, 0xf9, 0x07, 0x22,
+	0x53, 0x3b, 0xad, 0xa5, 0x2c, 0xd7, 0x8a, 0xbd, 0xed, 0x15, 0x78, 0xe1, 0x73, 0xf8, 0x12, 0x7e,
+	0x82, 0x8f, 0xe0, 0x19, 0xd9, 0x4e, 0xa0, 0x5d, 0xe1, 0x31, 0xe7, 0x9c, 0x7b, 0x7c, 0xee, 0xb9,
+	0x81, 0x87, 0x15, 0xae, 0xf4, 0x52, 0x54, 0x85, 0x54, 0xd7, 0x7a, 0xa9, 0x66, 0xa6, 0x41, 0x87,
+	0x74, 0xef, 0x1a, 0x2b, 0xb7, 0x16, 0x87, 0x70, 0xa9, 0x9c, 0x88, 0xd8, 0xe1, 0x93, 0x15, 0xe2,
+	0xaa, 0x52, 0xc7, 0xc2, 0xe8, 0x63, 0x51, 0xd7, 0xe8, 0x84, 0xd3, 0x58, 0xdb, 0x96, 0xbd, 0x8f,
+	0x46, 0xd5, 0x65, 0x85, 0x37, 0xc5, 0xcb, 0xd3, 0x08, 0x4d, 0xbf, 0x13, 0x48, 0xdf, 0x47, 0xf7,
+	0x8f, 0xd8, 0x38, 0x3a, 0x81, 0x9e, 0x96, 0x8c, 0x64, 0x24, 0x1f, 0xf1, 0x9e, 0x96, 0xf4, 0x04,
+	0x86, 0x58, 0x9a, 0xc2, 0x60, 0xe3, 0x58, 0x2f, 0x23, 0x79, 0x3a, 0x3f, 0x98, 0x6d, 0xba, 0x74,
+	0x24, 0xbf, 0x8b, 0xa5, 0x09, 0x0e, 0x8f, 0x61, 0x14, 0x63, 0x16, 0x5a, 0xb2, 0x7e, 0x30, 0x1a,
+	0x46, 0x60, 0x21, 0xe9, 0x73, 0x98, 0xb4, 0xa4, 0x1f, 0x2a, 0x6a, 0x64, 0x83, 0x8c, 0xe4, 0xfb,
+	0x7c, 0x1c, 0x51, 0x6f, 0xf0, 0x01, 0xbd, 0x45, 0x83, 0xe8, 0xe2, 0xab, 0x49, 0x46, 0xf2, 0x21,
+	0x1f, 0x7a, 0xc0, 0xd3, 0xd3, 0xd7, 0x30, 0xde, 0x08, 0x6c, 0xe9, 0x11, 0x24, 0xda, 0xa9, 0x4b,
+	0xcb, 0x48, 0xd6, 0xcf, 0xd3, 0xf9, 0x83, 0x59, 0xac, 0x65, 0xb6, 0x21, 0xe2, 0x51, 0x31, 0xfd,
+	0xd6, 0x87, 0xfd, 0x16, 0x3e, 0x0f, 0xef, 0xed, 0xac, 0xfb, 0x0c, 0x52, 0x29, 0x9c, 0x30, 0xc2,
+	0xad, 0x7d, 0x7c, 0xbf, 0xf1, 0x80, 0x43, 0x07, 0x2d, 0x24, 0x3d, 0x82, 0x81, 0x54, 0x76, 0x19,
+	0x16, 0xfb, 0x57, 0x17, 0x9e, 0xe4, 0x41, 0x42, 0x17, 0x70, 0xcf, 0xde, 0x68, 0xb7, 0x5c, 0x17,
+	0xa5, 0x12, 0xee, 0xaa, 0x51, 0x36, 0x2c, 0x9b, 0xce, 0xb3, 0x9d, 0xa9, 0x5b, 0x3a, 0x3e, 0x89,
+	0xc0, 0x45, 0xfb, 0xed, 0x6b, 0x0b, 0x85, 0xfc, 0x2d, 0x36, 0x09, 0x91, 0xc7, 0x1e, 0x3d, 0xef,
+	0xca, 0x7d, 0x05, 0x89, 0x6f, 0xcc, 0xb2, 0xcf, 0xff, 0xaf, 0xe2, 0x6c, 0xf4, 0xf3, 0xd7, 0x8f,
+	0xa7, 0x03, 0xbf, 0x36, 0x8f, 0x6a, 0x7a, 0x02, 0x89, 0xcf, 0x62, 0xd9, 0x17, 0x12, 0xe2, 0xd1,
+	0xad, 0x78, 0x17, 0x9e, 0x3a, 0x4b, 0xfc, 0xd4, 0x1d, 0x1e, 0x85, 0xf4, 0x2d, 0xa4, 0x81, 0x5e,
+	0x35, 0x78, 0x65, 0x2c, 0xfb, 0x1a, 0xe7, 0x1e, 0xed, 0xcc, 0xbd, 0x0b, 0x7c, 0x37, 0x0c, 0xe5,
+	0x1f, 0x68, 0xfa, 0x06, 0x26, 0x5b, 0x87, 0xb0, 0xf4, 0xc5, 0xf6, 0x19, 0x0f, 0x6e, 0x65, 0x8f,
+	0xb2, 0xf6, 0x90, 0x9f, 0xf6, 0xc2, 0xcf, 0x7b, 0xfa, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x24, 0xce,
+	0xf3, 0x88, 0x19, 0x03, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/meta/meta.pb.go b/netopeer/voltha-grpc-client/voltha/meta/meta.pb.go
new file mode 100644
index 0000000..f4ab63c
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/meta/meta.pb.go
@@ -0,0 +1,120 @@
+// Code generated by protoc-gen-go.
+// source: meta.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	meta.proto
+
+It has these top-level messages:
+	ChildNode
+*/
+package meta
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
+
+// 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.ProtoPackageIsVersion2 // 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 fileDescriptor0, []int{0} }
+
+type ChildNode struct {
+	Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
+}
+
+func (m *ChildNode) Reset()                    { *m = ChildNode{} }
+func (m *ChildNode) String() string            { return proto.CompactTextString(m) }
+func (*ChildNode) ProtoMessage()               {}
+func (*ChildNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *ChildNode) GetKey() string {
+	if m != nil {
+		return m.Key
+	}
+	return ""
+}
+
+var E_ChildNode = &proto.ExtensionDesc{
+	ExtendedType:  (*google_protobuf.FieldOptions)(nil),
+	ExtensionType: (*ChildNode)(nil),
+	Field:         7761772,
+	Name:          "voltha.child_node",
+	Tag:           "bytes,7761772,opt,name=child_node,json=childNode",
+	Filename:      "meta.proto",
+}
+
+var E_Access = &proto.ExtensionDesc{
+	ExtendedType:  (*google_protobuf.FieldOptions)(nil),
+	ExtensionType: (*Access)(nil),
+	Field:         7761773,
+	Name:          "voltha.access",
+	Tag:           "varint,7761773,opt,name=access,enum=voltha.Access",
+	Filename:      "meta.proto",
+}
+
+func init() {
+	proto.RegisterType((*ChildNode)(nil), "voltha.ChildNode")
+	proto.RegisterEnum("voltha.Access", Access_name, Access_value)
+	proto.RegisterExtension(E_ChildNode)
+	proto.RegisterExtension(E_Access)
+}
+
+func init() { proto.RegisterFile("meta.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 229 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xca, 0x4d, 0x2d, 0x49,
+	0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2b, 0xcb, 0xcf, 0x29, 0xc9, 0x48, 0x94, 0x52,
+	0x48, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x07, 0x8b, 0x26, 0x95, 0xa6, 0xe9, 0xa7, 0xa4, 0x16,
+	0x27, 0x17, 0x65, 0x16, 0x94, 0xe4, 0x17, 0x41, 0x54, 0x2a, 0xc9, 0x72, 0x71, 0x3a, 0x67, 0x64,
+	0xe6, 0xa4, 0xf8, 0xe5, 0xa7, 0xa4, 0x0a, 0x09, 0x70, 0x31, 0x67, 0xa7, 0x56, 0x4a, 0x30, 0x2a,
+	0x30, 0x6a, 0x70, 0x06, 0x81, 0x98, 0x5a, 0x46, 0x5c, 0x6c, 0x8e, 0xc9, 0xc9, 0xa9, 0xc5, 0xc5,
+	0x42, 0x5c, 0x5c, 0x6c, 0xce, 0xfe, 0x7e, 0x6e, 0x9e, 0xee, 0x02, 0x0c, 0x42, 0xbc, 0x5c, 0x9c,
+	0x41, 0xae, 0x8e, 0x2e, 0xf1, 0xfe, 0x7e, 0x3e, 0x91, 0x02, 0x8c, 0x50, 0xae, 0x4f, 0x7c, 0x88,
+	0xa7, 0xaf, 0xab, 0x00, 0x93, 0x55, 0x10, 0x17, 0x57, 0x32, 0xc8, 0xc8, 0xf8, 0x3c, 0x90, 0x99,
+	0xb2, 0x7a, 0x10, 0x37, 0xe8, 0xc1, 0xdc, 0xa0, 0xe7, 0x96, 0x99, 0x9a, 0x93, 0xe2, 0x5f, 0x50,
+	0x92, 0x99, 0x9f, 0x57, 0x2c, 0xf1, 0xe6, 0xde, 0x4d, 0x66, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x41,
+	0x3d, 0x88, 0x9b, 0xf5, 0xe0, 0xce, 0x09, 0xe2, 0x4c, 0x86, 0x31, 0xad, 0x3c, 0xb8, 0xd8, 0x12,
+	0x21, 0xee, 0x20, 0x60, 0xde, 0x5b, 0x88, 0x79, 0x7c, 0x46, 0x7c, 0x30, 0xf3, 0x20, 0xee, 0x0f,
+	0x82, 0xea, 0x4f, 0x62, 0x03, 0xeb, 0x33, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x55, 0xcc, 0xf1,
+	0x90, 0x2f, 0x01, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/openflow_13/openflow_13.pb.go b/netopeer/voltha-grpc-client/voltha/openflow_13/openflow_13.pb.go
new file mode 100644
index 0000000..4be77bd
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/openflow_13/openflow_13.pb.go
@@ -0,0 +1,8597 @@
+// Code generated by protoc-gen-go.
+// source: openflow_13.proto
+// DO NOT EDIT!
+
+/*
+Package openflow_13 is a generated protocol buffer package.
+
+It is generated from these files:
+	openflow_13.proto
+
+It has these top-level messages:
+	OfpHeader
+	OfpHelloElemHeader
+	OfpHelloElemVersionbitmap
+	OfpHello
+	OfpSwitchConfig
+	OfpTableMod
+	OfpPort
+	OfpSwitchFeatures
+	OfpPortStatus
+	OfpPortMod
+	OfpMatch
+	OfpOxmField
+	OfpOxmOfbField
+	OfpOxmExperimenterField
+	OfpAction
+	OfpActionOutput
+	OfpActionMplsTtl
+	OfpActionPush
+	OfpActionPopMpls
+	OfpActionGroup
+	OfpActionNwTtl
+	OfpActionSetField
+	OfpActionExperimenter
+	OfpInstruction
+	OfpInstructionGotoTable
+	OfpInstructionWriteMetadata
+	OfpInstructionActions
+	OfpInstructionMeter
+	OfpInstructionExperimenter
+	OfpFlowMod
+	OfpBucket
+	OfpGroupMod
+	OfpPacketOut
+	OfpPacketIn
+	OfpFlowRemoved
+	OfpMeterBandHeader
+	OfpMeterBandDrop
+	OfpMeterBandDscpRemark
+	OfpMeterBandExperimenter
+	OfpMeterMod
+	OfpErrorMsg
+	OfpErrorExperimenterMsg
+	OfpMultipartRequest
+	OfpMultipartReply
+	OfpDesc
+	OfpFlowStatsRequest
+	OfpFlowStats
+	OfpAggregateStatsRequest
+	OfpAggregateStatsReply
+	OfpTableFeatureProperty
+	OfpTableFeaturePropInstructions
+	OfpTableFeaturePropNextTables
+	OfpTableFeaturePropActions
+	OfpTableFeaturePropOxm
+	OfpTableFeaturePropExperimenter
+	OfpTableFeatures
+	OfpTableStats
+	OfpPortStatsRequest
+	OfpPortStats
+	OfpGroupStatsRequest
+	OfpBucketCounter
+	OfpGroupStats
+	OfpGroupDesc
+	OfpGroupEntry
+	OfpGroupFeatures
+	OfpMeterMultipartRequest
+	OfpMeterBandStats
+	OfpMeterStats
+	OfpMeterConfig
+	OfpMeterFeatures
+	OfpExperimenterMultipartHeader
+	OfpExperimenterHeader
+	OfpQueuePropHeader
+	OfpQueuePropMinRate
+	OfpQueuePropMaxRate
+	OfpQueuePropExperimenter
+	OfpPacketQueue
+	OfpQueueGetConfigRequest
+	OfpQueueGetConfigReply
+	OfpActionSetQueue
+	OfpQueueStatsRequest
+	OfpQueueStats
+	OfpRoleRequest
+	OfpAsyncConfig
+	FlowTableUpdate
+	FlowGroupTableUpdate
+	Flows
+	FlowGroups
+	PacketIn
+	PacketOut
+	ChangeEvent
+*/
+package openflow_13
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import voltha "github.com/opencord/voltha/netconf/translator/voltha/yang_options"
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// InlineNode from public import yang_options.proto
+type InlineNode voltha.InlineNode
+
+func (m *InlineNode) Reset()          { (*voltha.InlineNode)(m).Reset() }
+func (m *InlineNode) String() string  { return (*voltha.InlineNode)(m).String() }
+func (*InlineNode) ProtoMessage()     {}
+func (m *InlineNode) GetId() string   { return (*voltha.InlineNode)(m).GetId() }
+func (m *InlineNode) GetType() string { return (*voltha.InlineNode)(m).GetType() }
+
+// RpcReturnDef from public import yang_options.proto
+type RpcReturnDef voltha.RpcReturnDef
+
+func (m *RpcReturnDef) Reset()                   { (*voltha.RpcReturnDef)(m).Reset() }
+func (m *RpcReturnDef) String() string           { return (*voltha.RpcReturnDef)(m).String() }
+func (*RpcReturnDef) ProtoMessage()              {}
+func (m *RpcReturnDef) GetXmlTag() string        { return (*voltha.RpcReturnDef)(m).GetXmlTag() }
+func (m *RpcReturnDef) GetListItemsName() string { return (*voltha.RpcReturnDef)(m).GetListItemsName() }
+
+// MessageParserOption from public import yang_options.proto
+type MessageParserOption voltha.MessageParserOption
+
+var MessageParserOption_name = voltha.MessageParserOption_name
+var MessageParserOption_value = voltha.MessageParserOption_value
+
+func (x MessageParserOption) String() string { return (voltha.MessageParserOption)(x).String() }
+
+const MessageParserOption_MOVE_TO_PARENT_LEVEL = MessageParserOption(voltha.MessageParserOption_MOVE_TO_PARENT_LEVEL)
+const MessageParserOption_CREATE_BOTH_GROUPING_AND_CONTAINER = MessageParserOption(voltha.MessageParserOption_CREATE_BOTH_GROUPING_AND_CONTAINER)
+
+// yang_child_rule from public import yang_options.proto
+var E_YangChildRule = voltha.E_YangChildRule
+
+// yang_message_rule from public import yang_options.proto
+var E_YangMessageRule = voltha.E_YangMessageRule
+
+// yang_inline_node from public import yang_options.proto
+var E_YangInlineNode = voltha.E_YangInlineNode
+
+// yang_xml_tag from public import yang_options.proto
+var E_YangXmlTag = voltha.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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []int{51} }
+
+// Header on all OpenFlow packets.
+type OfpHeader struct {
+	Version uint32  `protobuf:"varint,1,opt,name=version" json:"version,omitempty"`
+	Type    OfpType `protobuf:"varint,2,opt,name=type,enum=openflow_13.OfpType" json:"type,omitempty"`
+	Xid     uint32  `protobuf:"varint,3,opt,name=xid" json:"xid,omitempty"`
+}
+
+func (m *OfpHeader) Reset()                    { *m = OfpHeader{} }
+func (m *OfpHeader) String() string            { return proto.CompactTextString(m) }
+func (*OfpHeader) ProtoMessage()               {}
+func (*OfpHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+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,enum=openflow_13.OfpHelloElemType" json:"type,omitempty"`
+	// Types that are valid to be assigned to Element:
+	//	*OfpHelloElemHeader_Versionbitmap
+	Element isOfpHelloElemHeader_Element `protobuf_oneof:"element"`
+}
+
+func (m *OfpHelloElemHeader) Reset()                    { *m = OfpHelloElemHeader{} }
+func (m *OfpHelloElemHeader) String() string            { return proto.CompactTextString(m) }
+func (*OfpHelloElemHeader) ProtoMessage()               {}
+func (*OfpHelloElemHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+type isOfpHelloElemHeader_Element interface {
+	isOfpHelloElemHeader_Element()
+}
+
+type OfpHelloElemHeader_Versionbitmap struct {
+	Versionbitmap *OfpHelloElemVersionbitmap `protobuf:"bytes,2,opt,name=versionbitmap,oneof"`
+}
+
+func (*OfpHelloElemHeader_Versionbitmap) isOfpHelloElemHeader_Element() {}
+
+func (m *OfpHelloElemHeader) GetElement() isOfpHelloElemHeader_Element {
+	if m != nil {
+		return m.Element
+	}
+	return nil
+}
+
+func (m *OfpHelloElemHeader) GetType() OfpHelloElemType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpHelloElemType_OFPHET_INVALID
+}
+
+func (m *OfpHelloElemHeader) GetVersionbitmap() *OfpHelloElemVersionbitmap {
+	if x, ok := m.GetElement().(*OfpHelloElemHeader_Versionbitmap); ok {
+		return x.Versionbitmap
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*OfpHelloElemHeader) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OfpHelloElemHeader_OneofMarshaler, _OfpHelloElemHeader_OneofUnmarshaler, _OfpHelloElemHeader_OneofSizer, []interface{}{
+		(*OfpHelloElemHeader_Versionbitmap)(nil),
+	}
+}
+
+func _OfpHelloElemHeader_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpHelloElemHeader)
+	// element
+	switch x := m.Element.(type) {
+	case *OfpHelloElemHeader_Versionbitmap:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Versionbitmap); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("OfpHelloElemHeader.Element has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OfpHelloElemHeader_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpHelloElemHeader)
+	switch tag {
+	case 2: // element.versionbitmap
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpHelloElemVersionbitmap)
+		err := b.DecodeMessage(msg)
+		m.Element = &OfpHelloElemHeader_Versionbitmap{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OfpHelloElemHeader_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OfpHelloElemHeader)
+	// element
+	switch x := m.Element.(type) {
+	case *OfpHelloElemHeader_Versionbitmap:
+		s := proto.Size(x.Versionbitmap)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Version bitmap Hello Element
+type OfpHelloElemVersionbitmap struct {
+	Bitmaps []uint32 `protobuf:"varint,2,rep,packed,name=bitmaps" json:"bitmaps,omitempty"`
+}
+
+func (m *OfpHelloElemVersionbitmap) Reset()                    { *m = OfpHelloElemVersionbitmap{} }
+func (m *OfpHelloElemVersionbitmap) String() string            { return proto.CompactTextString(m) }
+func (*OfpHelloElemVersionbitmap) ProtoMessage()               {}
+func (*OfpHelloElemVersionbitmap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+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" json:"elements,omitempty"`
+}
+
+func (m *OfpHello) Reset()                    { *m = OfpHello{} }
+func (m *OfpHello) String() string            { return proto.CompactTextString(m) }
+func (*OfpHello) ProtoMessage()               {}
+func (*OfpHello) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+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" json:"flags,omitempty"`
+	MissSendLen uint32 `protobuf:"varint,2,opt,name=miss_send_len,json=missSendLen" json:"miss_send_len,omitempty"`
+}
+
+func (m *OfpSwitchConfig) Reset()                    { *m = OfpSwitchConfig{} }
+func (m *OfpSwitchConfig) String() string            { return proto.CompactTextString(m) }
+func (*OfpSwitchConfig) ProtoMessage()               {}
+func (*OfpSwitchConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+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" json:"table_id,omitempty"`
+	Config  uint32 `protobuf:"varint,2,opt,name=config" json:"config,omitempty"`
+}
+
+func (m *OfpTableMod) Reset()                    { *m = OfpTableMod{} }
+func (m *OfpTableMod) String() string            { return proto.CompactTextString(m) }
+func (*OfpTableMod) ProtoMessage()               {}
+func (*OfpTableMod) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+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" json:"port_no,omitempty"`
+	HwAddr []uint32 `protobuf:"varint,2,rep,packed,name=hw_addr,json=hwAddr" json:"hw_addr,omitempty"`
+	Name   string   `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"`
+	Config uint32   `protobuf:"varint,4,opt,name=config" json:"config,omitempty"`
+	State  uint32   `protobuf:"varint,5,opt,name=state" json:"state,omitempty"`
+	// Bitmaps of OFPPF_* that describe features.  All bits zeroed if
+	// unsupported or unavailable.
+	Curr       uint32 `protobuf:"varint,6,opt,name=curr" json:"curr,omitempty"`
+	Advertised uint32 `protobuf:"varint,7,opt,name=advertised" json:"advertised,omitempty"`
+	Supported  uint32 `protobuf:"varint,8,opt,name=supported" json:"supported,omitempty"`
+	Peer       uint32 `protobuf:"varint,9,opt,name=peer" json:"peer,omitempty"`
+	CurrSpeed  uint32 `protobuf:"varint,10,opt,name=curr_speed,json=currSpeed" json:"curr_speed,omitempty"`
+	MaxSpeed   uint32 `protobuf:"varint,11,opt,name=max_speed,json=maxSpeed" json:"max_speed,omitempty"`
+}
+
+func (m *OfpPort) Reset()                    { *m = OfpPort{} }
+func (m *OfpPort) String() string            { return proto.CompactTextString(m) }
+func (*OfpPort) ProtoMessage()               {}
+func (*OfpPort) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+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" json:"datapath_id,omitempty"`
+	NBuffers    uint32 `protobuf:"varint,2,opt,name=n_buffers,json=nBuffers" json:"n_buffers,omitempty"`
+	NTables     uint32 `protobuf:"varint,3,opt,name=n_tables,json=nTables" json:"n_tables,omitempty"`
+	AuxiliaryId uint32 `protobuf:"varint,4,opt,name=auxiliary_id,json=auxiliaryId" json:"auxiliary_id,omitempty"`
+	// Features.
+	Capabilities uint32 `protobuf:"varint,5,opt,name=capabilities" json:"capabilities,omitempty"`
+}
+
+func (m *OfpSwitchFeatures) Reset()                    { *m = OfpSwitchFeatures{} }
+func (m *OfpSwitchFeatures) String() string            { return proto.CompactTextString(m) }
+func (*OfpSwitchFeatures) ProtoMessage()               {}
+func (*OfpSwitchFeatures) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+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,enum=openflow_13.OfpPortReason" json:"reason,omitempty"`
+	Desc   *OfpPort      `protobuf:"bytes,2,opt,name=desc" json:"desc,omitempty"`
+}
+
+func (m *OfpPortStatus) Reset()                    { *m = OfpPortStatus{} }
+func (m *OfpPortStatus) String() string            { return proto.CompactTextString(m) }
+func (*OfpPortStatus) ProtoMessage()               {}
+func (*OfpPortStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+
+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" json:"port_no,omitempty"`
+	HwAddr []uint32 `protobuf:"varint,2,rep,packed,name=hw_addr,json=hwAddr" 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" json:"config,omitempty"`
+	Mask      uint32 `protobuf:"varint,4,opt,name=mask" json:"mask,omitempty"`
+	Advertise uint32 `protobuf:"varint,5,opt,name=advertise" json:"advertise,omitempty"`
+}
+
+func (m *OfpPortMod) Reset()                    { *m = OfpPortMod{} }
+func (m *OfpPortMod) String() string            { return proto.CompactTextString(m) }
+func (*OfpPortMod) ProtoMessage()               {}
+func (*OfpPortMod) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+
+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,enum=openflow_13.OfpMatchType" json:"type,omitempty"`
+	OxmFields []*OfpOxmField `protobuf:"bytes,2,rep,name=oxm_fields,json=oxmFields" json:"oxm_fields,omitempty"`
+}
+
+func (m *OfpMatch) Reset()                    { *m = OfpMatch{} }
+func (m *OfpMatch) String() string            { return proto.CompactTextString(m) }
+func (*OfpMatch) ProtoMessage()               {}
+func (*OfpMatch) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+
+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,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"`
+}
+
+func (m *OfpOxmField) Reset()                    { *m = OfpOxmField{} }
+func (m *OfpOxmField) String() string            { return proto.CompactTextString(m) }
+func (*OfpOxmField) ProtoMessage()               {}
+func (*OfpOxmField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+
+type isOfpOxmField_Field interface {
+	isOfpOxmField_Field()
+}
+
+type OfpOxmField_OfbField struct {
+	OfbField *OfpOxmOfbField `protobuf:"bytes,4,opt,name=ofb_field,json=ofbField,oneof"`
+}
+type OfpOxmField_ExperimenterField struct {
+	ExperimenterField *OfpOxmExperimenterField `protobuf:"bytes,5,opt,name=experimenter_field,json=experimenterField,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) GetOxmClass() OfpOxmClass {
+	if m != nil {
+		return m.OxmClass
+	}
+	return OfpOxmClass_OFPXMC_NXM_0
+}
+
+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_OneofFuncs is for the internal use of the proto package.
+func (*OfpOxmField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OfpOxmField_OneofMarshaler, _OfpOxmField_OneofUnmarshaler, _OfpOxmField_OneofSizer, []interface{}{
+		(*OfpOxmField_OfbField)(nil),
+		(*OfpOxmField_ExperimenterField)(nil),
+	}
+}
+
+func _OfpOxmField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpOxmField)
+	// field
+	switch x := m.Field.(type) {
+	case *OfpOxmField_OfbField:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.OfbField); err != nil {
+			return err
+		}
+	case *OfpOxmField_ExperimenterField:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ExperimenterField); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("OfpOxmField.Field has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OfpOxmField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpOxmField)
+	switch tag {
+	case 4: // field.ofb_field
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpOxmOfbField)
+		err := b.DecodeMessage(msg)
+		m.Field = &OfpOxmField_OfbField{msg}
+		return true, err
+	case 5: // field.experimenter_field
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpOxmExperimenterField)
+		err := b.DecodeMessage(msg)
+		m.Field = &OfpOxmField_ExperimenterField{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OfpOxmField_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OfpOxmField)
+	// field
+	switch x := m.Field.(type) {
+	case *OfpOxmField_OfbField:
+		s := proto.Size(x.OfbField)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpOxmField_ExperimenterField:
+		s := proto.Size(x.ExperimenterField)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// OXM OpenFlow Basic Match Field
+type OfpOxmOfbField struct {
+	Type    OxmOfbFieldTypes `protobuf:"varint,1,opt,name=type,enum=openflow_13.OxmOfbFieldTypes" json:"type,omitempty"`
+	HasMask bool             `protobuf:"varint,2,opt,name=has_mask,json=hasMask" 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"`
+}
+
+func (m *OfpOxmOfbField) Reset()                    { *m = OfpOxmOfbField{} }
+func (m *OfpOxmOfbField) String() string            { return proto.CompactTextString(m) }
+func (*OfpOxmOfbField) ProtoMessage()               {}
+func (*OfpOxmOfbField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+
+type isOfpOxmOfbField_Value interface {
+	isOfpOxmOfbField_Value()
+}
+type isOfpOxmOfbField_Mask interface {
+	isOfpOxmOfbField_Mask()
+}
+
+type OfpOxmOfbField_Port struct {
+	Port uint32 `protobuf:"varint,3,opt,name=port,oneof"`
+}
+type OfpOxmOfbField_PhysicalPort struct {
+	PhysicalPort uint32 `protobuf:"varint,4,opt,name=physical_port,json=physicalPort,oneof"`
+}
+type OfpOxmOfbField_TableMetadata struct {
+	TableMetadata uint64 `protobuf:"varint,5,opt,name=table_metadata,json=tableMetadata,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,oneof"`
+}
+type OfpOxmOfbField_VlanVid struct {
+	VlanVid uint32 `protobuf:"varint,9,opt,name=vlan_vid,json=vlanVid,oneof"`
+}
+type OfpOxmOfbField_VlanPcp struct {
+	VlanPcp uint32 `protobuf:"varint,10,opt,name=vlan_pcp,json=vlanPcp,oneof"`
+}
+type OfpOxmOfbField_IpDscp struct {
+	IpDscp uint32 `protobuf:"varint,11,opt,name=ip_dscp,json=ipDscp,oneof"`
+}
+type OfpOxmOfbField_IpEcn struct {
+	IpEcn uint32 `protobuf:"varint,12,opt,name=ip_ecn,json=ipEcn,oneof"`
+}
+type OfpOxmOfbField_IpProto struct {
+	IpProto uint32 `protobuf:"varint,13,opt,name=ip_proto,json=ipProto,oneof"`
+}
+type OfpOxmOfbField_Ipv4Src struct {
+	Ipv4Src uint32 `protobuf:"varint,14,opt,name=ipv4_src,json=ipv4Src,oneof"`
+}
+type OfpOxmOfbField_Ipv4Dst struct {
+	Ipv4Dst uint32 `protobuf:"varint,15,opt,name=ipv4_dst,json=ipv4Dst,oneof"`
+}
+type OfpOxmOfbField_TcpSrc struct {
+	TcpSrc uint32 `protobuf:"varint,16,opt,name=tcp_src,json=tcpSrc,oneof"`
+}
+type OfpOxmOfbField_TcpDst struct {
+	TcpDst uint32 `protobuf:"varint,17,opt,name=tcp_dst,json=tcpDst,oneof"`
+}
+type OfpOxmOfbField_UdpSrc struct {
+	UdpSrc uint32 `protobuf:"varint,18,opt,name=udp_src,json=udpSrc,oneof"`
+}
+type OfpOxmOfbField_UdpDst struct {
+	UdpDst uint32 `protobuf:"varint,19,opt,name=udp_dst,json=udpDst,oneof"`
+}
+type OfpOxmOfbField_SctpSrc struct {
+	SctpSrc uint32 `protobuf:"varint,20,opt,name=sctp_src,json=sctpSrc,oneof"`
+}
+type OfpOxmOfbField_SctpDst struct {
+	SctpDst uint32 `protobuf:"varint,21,opt,name=sctp_dst,json=sctpDst,oneof"`
+}
+type OfpOxmOfbField_Icmpv4Type struct {
+	Icmpv4Type uint32 `protobuf:"varint,22,opt,name=icmpv4_type,json=icmpv4Type,oneof"`
+}
+type OfpOxmOfbField_Icmpv4Code struct {
+	Icmpv4Code uint32 `protobuf:"varint,23,opt,name=icmpv4_code,json=icmpv4Code,oneof"`
+}
+type OfpOxmOfbField_ArpOp struct {
+	ArpOp uint32 `protobuf:"varint,24,opt,name=arp_op,json=arpOp,oneof"`
+}
+type OfpOxmOfbField_ArpSpa struct {
+	ArpSpa uint32 `protobuf:"varint,25,opt,name=arp_spa,json=arpSpa,oneof"`
+}
+type OfpOxmOfbField_ArpTpa struct {
+	ArpTpa uint32 `protobuf:"varint,26,opt,name=arp_tpa,json=arpTpa,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,oneof"`
+}
+type OfpOxmOfbField_Icmpv6Type struct {
+	Icmpv6Type uint32 `protobuf:"varint,32,opt,name=icmpv6_type,json=icmpv6Type,oneof"`
+}
+type OfpOxmOfbField_Icmpv6Code struct {
+	Icmpv6Code uint32 `protobuf:"varint,33,opt,name=icmpv6_code,json=icmpv6Code,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,oneof"`
+}
+type OfpOxmOfbField_MplsTc struct {
+	MplsTc uint32 `protobuf:"varint,38,opt,name=mpls_tc,json=mplsTc,oneof"`
+}
+type OfpOxmOfbField_MplsBos struct {
+	MplsBos uint32 `protobuf:"varint,39,opt,name=mpls_bos,json=mplsBos,oneof"`
+}
+type OfpOxmOfbField_PbbIsid struct {
+	PbbIsid uint32 `protobuf:"varint,40,opt,name=pbb_isid,json=pbbIsid,oneof"`
+}
+type OfpOxmOfbField_TunnelId struct {
+	TunnelId uint64 `protobuf:"varint,41,opt,name=tunnel_id,json=tunnelId,oneof"`
+}
+type OfpOxmOfbField_Ipv6Exthdr struct {
+	Ipv6Exthdr uint32 `protobuf:"varint,42,opt,name=ipv6_exthdr,json=ipv6Exthdr,oneof"`
+}
+type OfpOxmOfbField_TableMetadataMask struct {
+	TableMetadataMask uint64 `protobuf:"varint,105,opt,name=table_metadata_mask,json=tableMetadataMask,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,oneof"`
+}
+type OfpOxmOfbField_Ipv4SrcMask struct {
+	Ipv4SrcMask uint32 `protobuf:"varint,114,opt,name=ipv4_src_mask,json=ipv4SrcMask,oneof"`
+}
+type OfpOxmOfbField_Ipv4DstMask struct {
+	Ipv4DstMask uint32 `protobuf:"varint,115,opt,name=ipv4_dst_mask,json=ipv4DstMask,oneof"`
+}
+type OfpOxmOfbField_ArpSpaMask struct {
+	ArpSpaMask uint32 `protobuf:"varint,125,opt,name=arp_spa_mask,json=arpSpaMask,oneof"`
+}
+type OfpOxmOfbField_ArpTpaMask struct {
+	ArpTpaMask uint32 `protobuf:"varint,126,opt,name=arp_tpa_mask,json=arpTpaMask,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,oneof"`
+}
+type OfpOxmOfbField_PbbIsidMask struct {
+	PbbIsidMask uint32 `protobuf:"varint,140,opt,name=pbb_isid_mask,json=pbbIsidMask,oneof"`
+}
+type OfpOxmOfbField_TunnelIdMask struct {
+	TunnelIdMask uint64 `protobuf:"varint,141,opt,name=tunnel_id_mask,json=tunnelIdMask,oneof"`
+}
+type OfpOxmOfbField_Ipv6ExthdrMask struct {
+	Ipv6ExthdrMask uint32 `protobuf:"varint,142,opt,name=ipv6_exthdr_mask,json=ipv6ExthdrMask,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 (*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) GetValue() isOfpOxmOfbField_Value {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+func (m *OfpOxmOfbField) GetMask() isOfpOxmOfbField_Mask {
+	if m != nil {
+		return m.Mask
+	}
+	return nil
+}
+
+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
+}
+
+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
+}
+
+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_OneofFuncs is for the internal use of the proto package.
+func (*OfpOxmOfbField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OfpOxmOfbField_OneofMarshaler, _OfpOxmOfbField_OneofUnmarshaler, _OfpOxmOfbField_OneofSizer, []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),
+	}
+}
+
+func _OfpOxmOfbField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpOxmOfbField)
+	// value
+	switch x := m.Value.(type) {
+	case *OfpOxmOfbField_Port:
+		b.EncodeVarint(3<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Port))
+	case *OfpOxmOfbField_PhysicalPort:
+		b.EncodeVarint(4<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.PhysicalPort))
+	case *OfpOxmOfbField_TableMetadata:
+		b.EncodeVarint(5<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.TableMetadata))
+	case *OfpOxmOfbField_EthDst:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.EthDst)
+	case *OfpOxmOfbField_EthSrc:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.EthSrc)
+	case *OfpOxmOfbField_EthType:
+		b.EncodeVarint(8<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.EthType))
+	case *OfpOxmOfbField_VlanVid:
+		b.EncodeVarint(9<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.VlanVid))
+	case *OfpOxmOfbField_VlanPcp:
+		b.EncodeVarint(10<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.VlanPcp))
+	case *OfpOxmOfbField_IpDscp:
+		b.EncodeVarint(11<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.IpDscp))
+	case *OfpOxmOfbField_IpEcn:
+		b.EncodeVarint(12<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.IpEcn))
+	case *OfpOxmOfbField_IpProto:
+		b.EncodeVarint(13<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.IpProto))
+	case *OfpOxmOfbField_Ipv4Src:
+		b.EncodeVarint(14<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv4Src))
+	case *OfpOxmOfbField_Ipv4Dst:
+		b.EncodeVarint(15<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv4Dst))
+	case *OfpOxmOfbField_TcpSrc:
+		b.EncodeVarint(16<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.TcpSrc))
+	case *OfpOxmOfbField_TcpDst:
+		b.EncodeVarint(17<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.TcpDst))
+	case *OfpOxmOfbField_UdpSrc:
+		b.EncodeVarint(18<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.UdpSrc))
+	case *OfpOxmOfbField_UdpDst:
+		b.EncodeVarint(19<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.UdpDst))
+	case *OfpOxmOfbField_SctpSrc:
+		b.EncodeVarint(20<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.SctpSrc))
+	case *OfpOxmOfbField_SctpDst:
+		b.EncodeVarint(21<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.SctpDst))
+	case *OfpOxmOfbField_Icmpv4Type:
+		b.EncodeVarint(22<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Icmpv4Type))
+	case *OfpOxmOfbField_Icmpv4Code:
+		b.EncodeVarint(23<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Icmpv4Code))
+	case *OfpOxmOfbField_ArpOp:
+		b.EncodeVarint(24<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ArpOp))
+	case *OfpOxmOfbField_ArpSpa:
+		b.EncodeVarint(25<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ArpSpa))
+	case *OfpOxmOfbField_ArpTpa:
+		b.EncodeVarint(26<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ArpTpa))
+	case *OfpOxmOfbField_ArpSha:
+		b.EncodeVarint(27<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.ArpSha)
+	case *OfpOxmOfbField_ArpTha:
+		b.EncodeVarint(28<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.ArpTha)
+	case *OfpOxmOfbField_Ipv6Src:
+		b.EncodeVarint(29<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.Ipv6Src)
+	case *OfpOxmOfbField_Ipv6Dst:
+		b.EncodeVarint(30<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.Ipv6Dst)
+	case *OfpOxmOfbField_Ipv6Flabel:
+		b.EncodeVarint(31<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv6Flabel))
+	case *OfpOxmOfbField_Icmpv6Type:
+		b.EncodeVarint(32<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Icmpv6Type))
+	case *OfpOxmOfbField_Icmpv6Code:
+		b.EncodeVarint(33<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Icmpv6Code))
+	case *OfpOxmOfbField_Ipv6NdTarget:
+		b.EncodeVarint(34<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.Ipv6NdTarget)
+	case *OfpOxmOfbField_Ipv6NdSsl:
+		b.EncodeVarint(35<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.Ipv6NdSsl)
+	case *OfpOxmOfbField_Ipv6NdTll:
+		b.EncodeVarint(36<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.Ipv6NdTll)
+	case *OfpOxmOfbField_MplsLabel:
+		b.EncodeVarint(37<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MplsLabel))
+	case *OfpOxmOfbField_MplsTc:
+		b.EncodeVarint(38<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MplsTc))
+	case *OfpOxmOfbField_MplsBos:
+		b.EncodeVarint(39<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.MplsBos))
+	case *OfpOxmOfbField_PbbIsid:
+		b.EncodeVarint(40<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.PbbIsid))
+	case *OfpOxmOfbField_TunnelId:
+		b.EncodeVarint(41<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.TunnelId))
+	case *OfpOxmOfbField_Ipv6Exthdr:
+		b.EncodeVarint(42<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv6Exthdr))
+	case nil:
+	default:
+		return fmt.Errorf("OfpOxmOfbField.Value has unexpected type %T", x)
+	}
+	// mask
+	switch x := m.Mask.(type) {
+	case *OfpOxmOfbField_TableMetadataMask:
+		b.EncodeVarint(105<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.TableMetadataMask))
+	case *OfpOxmOfbField_EthDstMask:
+		b.EncodeVarint(106<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.EthDstMask)
+	case *OfpOxmOfbField_EthSrcMask:
+		b.EncodeVarint(107<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.EthSrcMask)
+	case *OfpOxmOfbField_VlanVidMask:
+		b.EncodeVarint(109<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.VlanVidMask))
+	case *OfpOxmOfbField_Ipv4SrcMask:
+		b.EncodeVarint(114<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv4SrcMask))
+	case *OfpOxmOfbField_Ipv4DstMask:
+		b.EncodeVarint(115<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv4DstMask))
+	case *OfpOxmOfbField_ArpSpaMask:
+		b.EncodeVarint(125<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ArpSpaMask))
+	case *OfpOxmOfbField_ArpTpaMask:
+		b.EncodeVarint(126<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.ArpTpaMask))
+	case *OfpOxmOfbField_Ipv6SrcMask:
+		b.EncodeVarint(129<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.Ipv6SrcMask)
+	case *OfpOxmOfbField_Ipv6DstMask:
+		b.EncodeVarint(130<<3 | proto.WireBytes)
+		b.EncodeRawBytes(x.Ipv6DstMask)
+	case *OfpOxmOfbField_Ipv6FlabelMask:
+		b.EncodeVarint(131<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv6FlabelMask))
+	case *OfpOxmOfbField_PbbIsidMask:
+		b.EncodeVarint(140<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.PbbIsidMask))
+	case *OfpOxmOfbField_TunnelIdMask:
+		b.EncodeVarint(141<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.TunnelIdMask))
+	case *OfpOxmOfbField_Ipv6ExthdrMask:
+		b.EncodeVarint(142<<3 | proto.WireVarint)
+		b.EncodeVarint(uint64(x.Ipv6ExthdrMask))
+	case nil:
+	default:
+		return fmt.Errorf("OfpOxmOfbField.Mask has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OfpOxmOfbField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpOxmOfbField)
+	switch tag {
+	case 3: // value.port
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Port{uint32(x)}
+		return true, err
+	case 4: // value.physical_port
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_PhysicalPort{uint32(x)}
+		return true, err
+	case 5: // value.table_metadata
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_TableMetadata{x}
+		return true, err
+	case 6: // value.eth_dst
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_EthDst{x}
+		return true, err
+	case 7: // value.eth_src
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_EthSrc{x}
+		return true, err
+	case 8: // value.eth_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_EthType{uint32(x)}
+		return true, err
+	case 9: // value.vlan_vid
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_VlanVid{uint32(x)}
+		return true, err
+	case 10: // value.vlan_pcp
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_VlanPcp{uint32(x)}
+		return true, err
+	case 11: // value.ip_dscp
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_IpDscp{uint32(x)}
+		return true, err
+	case 12: // value.ip_ecn
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_IpEcn{uint32(x)}
+		return true, err
+	case 13: // value.ip_proto
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_IpProto{uint32(x)}
+		return true, err
+	case 14: // value.ipv4_src
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Ipv4Src{uint32(x)}
+		return true, err
+	case 15: // value.ipv4_dst
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Ipv4Dst{uint32(x)}
+		return true, err
+	case 16: // value.tcp_src
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_TcpSrc{uint32(x)}
+		return true, err
+	case 17: // value.tcp_dst
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_TcpDst{uint32(x)}
+		return true, err
+	case 18: // value.udp_src
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_UdpSrc{uint32(x)}
+		return true, err
+	case 19: // value.udp_dst
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_UdpDst{uint32(x)}
+		return true, err
+	case 20: // value.sctp_src
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_SctpSrc{uint32(x)}
+		return true, err
+	case 21: // value.sctp_dst
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_SctpDst{uint32(x)}
+		return true, err
+	case 22: // value.icmpv4_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Icmpv4Type{uint32(x)}
+		return true, err
+	case 23: // value.icmpv4_code
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Icmpv4Code{uint32(x)}
+		return true, err
+	case 24: // value.arp_op
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_ArpOp{uint32(x)}
+		return true, err
+	case 25: // value.arp_spa
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_ArpSpa{uint32(x)}
+		return true, err
+	case 26: // value.arp_tpa
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_ArpTpa{uint32(x)}
+		return true, err
+	case 27: // value.arp_sha
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_ArpSha{x}
+		return true, err
+	case 28: // value.arp_tha
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_ArpTha{x}
+		return true, err
+	case 29: // value.ipv6_src
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_Ipv6Src{x}
+		return true, err
+	case 30: // value.ipv6_dst
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_Ipv6Dst{x}
+		return true, err
+	case 31: // value.ipv6_flabel
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Ipv6Flabel{uint32(x)}
+		return true, err
+	case 32: // value.icmpv6_type
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Icmpv6Type{uint32(x)}
+		return true, err
+	case 33: // value.icmpv6_code
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Icmpv6Code{uint32(x)}
+		return true, err
+	case 34: // value.ipv6_nd_target
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_Ipv6NdTarget{x}
+		return true, err
+	case 35: // value.ipv6_nd_ssl
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_Ipv6NdSsl{x}
+		return true, err
+	case 36: // value.ipv6_nd_tll
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Value = &OfpOxmOfbField_Ipv6NdTll{x}
+		return true, err
+	case 37: // value.mpls_label
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_MplsLabel{uint32(x)}
+		return true, err
+	case 38: // value.mpls_tc
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_MplsTc{uint32(x)}
+		return true, err
+	case 39: // value.mpls_bos
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_MplsBos{uint32(x)}
+		return true, err
+	case 40: // value.pbb_isid
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_PbbIsid{uint32(x)}
+		return true, err
+	case 41: // value.tunnel_id
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_TunnelId{x}
+		return true, err
+	case 42: // value.ipv6_exthdr
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Value = &OfpOxmOfbField_Ipv6Exthdr{uint32(x)}
+		return true, err
+	case 105: // mask.table_metadata_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_TableMetadataMask{x}
+		return true, err
+	case 106: // mask.eth_dst_mask
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Mask = &OfpOxmOfbField_EthDstMask{x}
+		return true, err
+	case 107: // mask.eth_src_mask
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Mask = &OfpOxmOfbField_EthSrcMask{x}
+		return true, err
+	case 109: // mask.vlan_vid_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_VlanVidMask{uint32(x)}
+		return true, err
+	case 114: // mask.ipv4_src_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_Ipv4SrcMask{uint32(x)}
+		return true, err
+	case 115: // mask.ipv4_dst_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_Ipv4DstMask{uint32(x)}
+		return true, err
+	case 125: // mask.arp_spa_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_ArpSpaMask{uint32(x)}
+		return true, err
+	case 126: // mask.arp_tpa_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_ArpTpaMask{uint32(x)}
+		return true, err
+	case 129: // mask.ipv6_src_mask
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Mask = &OfpOxmOfbField_Ipv6SrcMask{x}
+		return true, err
+	case 130: // mask.ipv6_dst_mask
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeRawBytes(true)
+		m.Mask = &OfpOxmOfbField_Ipv6DstMask{x}
+		return true, err
+	case 131: // mask.ipv6_flabel_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_Ipv6FlabelMask{uint32(x)}
+		return true, err
+	case 140: // mask.pbb_isid_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_PbbIsidMask{uint32(x)}
+		return true, err
+	case 141: // mask.tunnel_id_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_TunnelIdMask{x}
+		return true, err
+	case 142: // mask.ipv6_exthdr_mask
+		if wire != proto.WireVarint {
+			return true, proto.ErrInternalBadWireType
+		}
+		x, err := b.DecodeVarint()
+		m.Mask = &OfpOxmOfbField_Ipv6ExthdrMask{uint32(x)}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OfpOxmOfbField_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OfpOxmOfbField)
+	// value
+	switch x := m.Value.(type) {
+	case *OfpOxmOfbField_Port:
+		n += proto.SizeVarint(3<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Port))
+	case *OfpOxmOfbField_PhysicalPort:
+		n += proto.SizeVarint(4<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.PhysicalPort))
+	case *OfpOxmOfbField_TableMetadata:
+		n += proto.SizeVarint(5<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.TableMetadata))
+	case *OfpOxmOfbField_EthDst:
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.EthDst)))
+		n += len(x.EthDst)
+	case *OfpOxmOfbField_EthSrc:
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.EthSrc)))
+		n += len(x.EthSrc)
+	case *OfpOxmOfbField_EthType:
+		n += proto.SizeVarint(8<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.EthType))
+	case *OfpOxmOfbField_VlanVid:
+		n += proto.SizeVarint(9<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.VlanVid))
+	case *OfpOxmOfbField_VlanPcp:
+		n += proto.SizeVarint(10<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.VlanPcp))
+	case *OfpOxmOfbField_IpDscp:
+		n += proto.SizeVarint(11<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.IpDscp))
+	case *OfpOxmOfbField_IpEcn:
+		n += proto.SizeVarint(12<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.IpEcn))
+	case *OfpOxmOfbField_IpProto:
+		n += proto.SizeVarint(13<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.IpProto))
+	case *OfpOxmOfbField_Ipv4Src:
+		n += proto.SizeVarint(14<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv4Src))
+	case *OfpOxmOfbField_Ipv4Dst:
+		n += proto.SizeVarint(15<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv4Dst))
+	case *OfpOxmOfbField_TcpSrc:
+		n += proto.SizeVarint(16<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.TcpSrc))
+	case *OfpOxmOfbField_TcpDst:
+		n += proto.SizeVarint(17<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.TcpDst))
+	case *OfpOxmOfbField_UdpSrc:
+		n += proto.SizeVarint(18<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.UdpSrc))
+	case *OfpOxmOfbField_UdpDst:
+		n += proto.SizeVarint(19<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.UdpDst))
+	case *OfpOxmOfbField_SctpSrc:
+		n += proto.SizeVarint(20<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.SctpSrc))
+	case *OfpOxmOfbField_SctpDst:
+		n += proto.SizeVarint(21<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.SctpDst))
+	case *OfpOxmOfbField_Icmpv4Type:
+		n += proto.SizeVarint(22<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Icmpv4Type))
+	case *OfpOxmOfbField_Icmpv4Code:
+		n += proto.SizeVarint(23<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Icmpv4Code))
+	case *OfpOxmOfbField_ArpOp:
+		n += proto.SizeVarint(24<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.ArpOp))
+	case *OfpOxmOfbField_ArpSpa:
+		n += proto.SizeVarint(25<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.ArpSpa))
+	case *OfpOxmOfbField_ArpTpa:
+		n += proto.SizeVarint(26<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.ArpTpa))
+	case *OfpOxmOfbField_ArpSha:
+		n += proto.SizeVarint(27<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.ArpSha)))
+		n += len(x.ArpSha)
+	case *OfpOxmOfbField_ArpTha:
+		n += proto.SizeVarint(28<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.ArpTha)))
+		n += len(x.ArpTha)
+	case *OfpOxmOfbField_Ipv6Src:
+		n += proto.SizeVarint(29<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6Src)))
+		n += len(x.Ipv6Src)
+	case *OfpOxmOfbField_Ipv6Dst:
+		n += proto.SizeVarint(30<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6Dst)))
+		n += len(x.Ipv6Dst)
+	case *OfpOxmOfbField_Ipv6Flabel:
+		n += proto.SizeVarint(31<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv6Flabel))
+	case *OfpOxmOfbField_Icmpv6Type:
+		n += proto.SizeVarint(32<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Icmpv6Type))
+	case *OfpOxmOfbField_Icmpv6Code:
+		n += proto.SizeVarint(33<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Icmpv6Code))
+	case *OfpOxmOfbField_Ipv6NdTarget:
+		n += proto.SizeVarint(34<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6NdTarget)))
+		n += len(x.Ipv6NdTarget)
+	case *OfpOxmOfbField_Ipv6NdSsl:
+		n += proto.SizeVarint(35<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6NdSsl)))
+		n += len(x.Ipv6NdSsl)
+	case *OfpOxmOfbField_Ipv6NdTll:
+		n += proto.SizeVarint(36<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6NdTll)))
+		n += len(x.Ipv6NdTll)
+	case *OfpOxmOfbField_MplsLabel:
+		n += proto.SizeVarint(37<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.MplsLabel))
+	case *OfpOxmOfbField_MplsTc:
+		n += proto.SizeVarint(38<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.MplsTc))
+	case *OfpOxmOfbField_MplsBos:
+		n += proto.SizeVarint(39<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.MplsBos))
+	case *OfpOxmOfbField_PbbIsid:
+		n += proto.SizeVarint(40<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.PbbIsid))
+	case *OfpOxmOfbField_TunnelId:
+		n += proto.SizeVarint(41<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.TunnelId))
+	case *OfpOxmOfbField_Ipv6Exthdr:
+		n += proto.SizeVarint(42<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv6Exthdr))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	// mask
+	switch x := m.Mask.(type) {
+	case *OfpOxmOfbField_TableMetadataMask:
+		n += proto.SizeVarint(105<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.TableMetadataMask))
+	case *OfpOxmOfbField_EthDstMask:
+		n += proto.SizeVarint(106<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.EthDstMask)))
+		n += len(x.EthDstMask)
+	case *OfpOxmOfbField_EthSrcMask:
+		n += proto.SizeVarint(107<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.EthSrcMask)))
+		n += len(x.EthSrcMask)
+	case *OfpOxmOfbField_VlanVidMask:
+		n += proto.SizeVarint(109<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.VlanVidMask))
+	case *OfpOxmOfbField_Ipv4SrcMask:
+		n += proto.SizeVarint(114<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv4SrcMask))
+	case *OfpOxmOfbField_Ipv4DstMask:
+		n += proto.SizeVarint(115<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv4DstMask))
+	case *OfpOxmOfbField_ArpSpaMask:
+		n += proto.SizeVarint(125<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.ArpSpaMask))
+	case *OfpOxmOfbField_ArpTpaMask:
+		n += proto.SizeVarint(126<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.ArpTpaMask))
+	case *OfpOxmOfbField_Ipv6SrcMask:
+		n += proto.SizeVarint(129<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6SrcMask)))
+		n += len(x.Ipv6SrcMask)
+	case *OfpOxmOfbField_Ipv6DstMask:
+		n += proto.SizeVarint(130<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(len(x.Ipv6DstMask)))
+		n += len(x.Ipv6DstMask)
+	case *OfpOxmOfbField_Ipv6FlabelMask:
+		n += proto.SizeVarint(131<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv6FlabelMask))
+	case *OfpOxmOfbField_PbbIsidMask:
+		n += proto.SizeVarint(140<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.PbbIsidMask))
+	case *OfpOxmOfbField_TunnelIdMask:
+		n += proto.SizeVarint(141<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.TunnelIdMask))
+	case *OfpOxmOfbField_Ipv6ExthdrMask:
+		n += proto.SizeVarint(142<<3 | proto.WireVarint)
+		n += proto.SizeVarint(uint64(x.Ipv6ExthdrMask))
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// 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" json:"oxm_header,omitempty"`
+	Experimenter uint32 `protobuf:"varint,2,opt,name=experimenter" json:"experimenter,omitempty"`
+}
+
+func (m *OfpOxmExperimenterField) Reset()                    { *m = OfpOxmExperimenterField{} }
+func (m *OfpOxmExperimenterField) String() string            { return proto.CompactTextString(m) }
+func (*OfpOxmExperimenterField) ProtoMessage()               {}
+func (*OfpOxmExperimenterField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+
+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,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"`
+}
+
+func (m *OfpAction) Reset()                    { *m = OfpAction{} }
+func (m *OfpAction) String() string            { return proto.CompactTextString(m) }
+func (*OfpAction) ProtoMessage()               {}
+func (*OfpAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+
+type isOfpAction_Action interface {
+	isOfpAction_Action()
+}
+
+type OfpAction_Output struct {
+	Output *OfpActionOutput `protobuf:"bytes,2,opt,name=output,oneof"`
+}
+type OfpAction_MplsTtl struct {
+	MplsTtl *OfpActionMplsTtl `protobuf:"bytes,3,opt,name=mpls_ttl,json=mplsTtl,oneof"`
+}
+type OfpAction_Push struct {
+	Push *OfpActionPush `protobuf:"bytes,4,opt,name=push,oneof"`
+}
+type OfpAction_PopMpls struct {
+	PopMpls *OfpActionPopMpls `protobuf:"bytes,5,opt,name=pop_mpls,json=popMpls,oneof"`
+}
+type OfpAction_Group struct {
+	Group *OfpActionGroup `protobuf:"bytes,6,opt,name=group,oneof"`
+}
+type OfpAction_NwTtl struct {
+	NwTtl *OfpActionNwTtl `protobuf:"bytes,7,opt,name=nw_ttl,json=nwTtl,oneof"`
+}
+type OfpAction_SetField struct {
+	SetField *OfpActionSetField `protobuf:"bytes,8,opt,name=set_field,json=setField,oneof"`
+}
+type OfpAction_Experimenter struct {
+	Experimenter *OfpActionExperimenter `protobuf:"bytes,9,opt,name=experimenter,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) GetType() OfpActionType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpActionType_OFPAT_OUTPUT
+}
+
+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_OneofFuncs is for the internal use of the proto package.
+func (*OfpAction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OfpAction_OneofMarshaler, _OfpAction_OneofUnmarshaler, _OfpAction_OneofSizer, []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),
+	}
+}
+
+func _OfpAction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpAction)
+	// action
+	switch x := m.Action.(type) {
+	case *OfpAction_Output:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Output); err != nil {
+			return err
+		}
+	case *OfpAction_MplsTtl:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MplsTtl); err != nil {
+			return err
+		}
+	case *OfpAction_Push:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Push); err != nil {
+			return err
+		}
+	case *OfpAction_PopMpls:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PopMpls); err != nil {
+			return err
+		}
+	case *OfpAction_Group:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Group); err != nil {
+			return err
+		}
+	case *OfpAction_NwTtl:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.NwTtl); err != nil {
+			return err
+		}
+	case *OfpAction_SetField:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SetField); err != nil {
+			return err
+		}
+	case *OfpAction_Experimenter:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Experimenter); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("OfpAction.Action has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OfpAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpAction)
+	switch tag {
+	case 2: // action.output
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionOutput)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_Output{msg}
+		return true, err
+	case 3: // action.mpls_ttl
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionMplsTtl)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_MplsTtl{msg}
+		return true, err
+	case 4: // action.push
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionPush)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_Push{msg}
+		return true, err
+	case 5: // action.pop_mpls
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionPopMpls)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_PopMpls{msg}
+		return true, err
+	case 6: // action.group
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionGroup)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_Group{msg}
+		return true, err
+	case 7: // action.nw_ttl
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionNwTtl)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_NwTtl{msg}
+		return true, err
+	case 8: // action.set_field
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionSetField)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_SetField{msg}
+		return true, err
+	case 9: // action.experimenter
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpActionExperimenter)
+		err := b.DecodeMessage(msg)
+		m.Action = &OfpAction_Experimenter{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OfpAction_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OfpAction)
+	// action
+	switch x := m.Action.(type) {
+	case *OfpAction_Output:
+		s := proto.Size(x.Output)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpAction_MplsTtl:
+		s := proto.Size(x.MplsTtl)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpAction_Push:
+		s := proto.Size(x.Push)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpAction_PopMpls:
+		s := proto.Size(x.PopMpls)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpAction_Group:
+		s := proto.Size(x.Group)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpAction_NwTtl:
+		s := proto.Size(x.NwTtl)
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpAction_SetField:
+		s := proto.Size(x.SetField)
+		n += proto.SizeVarint(8<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpAction_Experimenter:
+		s := proto.Size(x.Experimenter)
+		n += proto.SizeVarint(9<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// 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" json:"port,omitempty"`
+	MaxLen uint32 `protobuf:"varint,2,opt,name=max_len,json=maxLen" json:"max_len,omitempty"`
+}
+
+func (m *OfpActionOutput) Reset()                    { *m = OfpActionOutput{} }
+func (m *OfpActionOutput) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionOutput) ProtoMessage()               {}
+func (*OfpActionOutput) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+
+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" json:"mpls_ttl,omitempty"`
+}
+
+func (m *OfpActionMplsTtl) Reset()                    { *m = OfpActionMplsTtl{} }
+func (m *OfpActionMplsTtl) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionMplsTtl) ProtoMessage()               {}
+func (*OfpActionMplsTtl) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+
+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" json:"ethertype,omitempty"`
+}
+
+func (m *OfpActionPush) Reset()                    { *m = OfpActionPush{} }
+func (m *OfpActionPush) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionPush) ProtoMessage()               {}
+func (*OfpActionPush) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+
+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" json:"ethertype,omitempty"`
+}
+
+func (m *OfpActionPopMpls) Reset()                    { *m = OfpActionPopMpls{} }
+func (m *OfpActionPopMpls) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionPopMpls) ProtoMessage()               {}
+func (*OfpActionPopMpls) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+
+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" json:"group_id,omitempty"`
+}
+
+func (m *OfpActionGroup) Reset()                    { *m = OfpActionGroup{} }
+func (m *OfpActionGroup) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionGroup) ProtoMessage()               {}
+func (*OfpActionGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+
+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" json:"nw_ttl,omitempty"`
+}
+
+func (m *OfpActionNwTtl) Reset()                    { *m = OfpActionNwTtl{} }
+func (m *OfpActionNwTtl) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionNwTtl) ProtoMessage()               {}
+func (*OfpActionNwTtl) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+
+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" json:"field,omitempty"`
+}
+
+func (m *OfpActionSetField) Reset()                    { *m = OfpActionSetField{} }
+func (m *OfpActionSetField) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionSetField) ProtoMessage()               {}
+func (*OfpActionSetField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+
+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" json:"experimenter,omitempty"`
+	Data         []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpActionExperimenter) Reset()                    { *m = OfpActionExperimenter{} }
+func (m *OfpActionExperimenter) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionExperimenter) ProtoMessage()               {}
+func (*OfpActionExperimenter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+
+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" 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"`
+}
+
+func (m *OfpInstruction) Reset()                    { *m = OfpInstruction{} }
+func (m *OfpInstruction) String() string            { return proto.CompactTextString(m) }
+func (*OfpInstruction) ProtoMessage()               {}
+func (*OfpInstruction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+
+type isOfpInstruction_Data interface {
+	isOfpInstruction_Data()
+}
+
+type OfpInstruction_GotoTable struct {
+	GotoTable *OfpInstructionGotoTable `protobuf:"bytes,2,opt,name=goto_table,json=gotoTable,oneof"`
+}
+type OfpInstruction_WriteMetadata struct {
+	WriteMetadata *OfpInstructionWriteMetadata `protobuf:"bytes,3,opt,name=write_metadata,json=writeMetadata,oneof"`
+}
+type OfpInstruction_Actions struct {
+	Actions *OfpInstructionActions `protobuf:"bytes,4,opt,name=actions,oneof"`
+}
+type OfpInstruction_Meter struct {
+	Meter *OfpInstructionMeter `protobuf:"bytes,5,opt,name=meter,oneof"`
+}
+type OfpInstruction_Experimenter struct {
+	Experimenter *OfpInstructionExperimenter `protobuf:"bytes,6,opt,name=experimenter,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) GetType() uint32 {
+	if m != nil {
+		return m.Type
+	}
+	return 0
+}
+
+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_OneofFuncs is for the internal use of the proto package.
+func (*OfpInstruction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OfpInstruction_OneofMarshaler, _OfpInstruction_OneofUnmarshaler, _OfpInstruction_OneofSizer, []interface{}{
+		(*OfpInstruction_GotoTable)(nil),
+		(*OfpInstruction_WriteMetadata)(nil),
+		(*OfpInstruction_Actions)(nil),
+		(*OfpInstruction_Meter)(nil),
+		(*OfpInstruction_Experimenter)(nil),
+	}
+}
+
+func _OfpInstruction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpInstruction)
+	// data
+	switch x := m.Data.(type) {
+	case *OfpInstruction_GotoTable:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.GotoTable); err != nil {
+			return err
+		}
+	case *OfpInstruction_WriteMetadata:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.WriteMetadata); err != nil {
+			return err
+		}
+	case *OfpInstruction_Actions:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Actions); err != nil {
+			return err
+		}
+	case *OfpInstruction_Meter:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Meter); err != nil {
+			return err
+		}
+	case *OfpInstruction_Experimenter:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Experimenter); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("OfpInstruction.Data has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OfpInstruction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpInstruction)
+	switch tag {
+	case 2: // data.goto_table
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpInstructionGotoTable)
+		err := b.DecodeMessage(msg)
+		m.Data = &OfpInstruction_GotoTable{msg}
+		return true, err
+	case 3: // data.write_metadata
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpInstructionWriteMetadata)
+		err := b.DecodeMessage(msg)
+		m.Data = &OfpInstruction_WriteMetadata{msg}
+		return true, err
+	case 4: // data.actions
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpInstructionActions)
+		err := b.DecodeMessage(msg)
+		m.Data = &OfpInstruction_Actions{msg}
+		return true, err
+	case 5: // data.meter
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpInstructionMeter)
+		err := b.DecodeMessage(msg)
+		m.Data = &OfpInstruction_Meter{msg}
+		return true, err
+	case 6: // data.experimenter
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpInstructionExperimenter)
+		err := b.DecodeMessage(msg)
+		m.Data = &OfpInstruction_Experimenter{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OfpInstruction_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OfpInstruction)
+	// data
+	switch x := m.Data.(type) {
+	case *OfpInstruction_GotoTable:
+		s := proto.Size(x.GotoTable)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpInstruction_WriteMetadata:
+		s := proto.Size(x.WriteMetadata)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpInstruction_Actions:
+		s := proto.Size(x.Actions)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpInstruction_Meter:
+		s := proto.Size(x.Meter)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpInstruction_Experimenter:
+		s := proto.Size(x.Experimenter)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Instruction structure for OFPIT_GOTO_TABLE
+type OfpInstructionGotoTable struct {
+	TableId uint32 `protobuf:"varint,1,opt,name=table_id,json=tableId" json:"table_id,omitempty"`
+}
+
+func (m *OfpInstructionGotoTable) Reset()                    { *m = OfpInstructionGotoTable{} }
+func (m *OfpInstructionGotoTable) String() string            { return proto.CompactTextString(m) }
+func (*OfpInstructionGotoTable) ProtoMessage()               {}
+func (*OfpInstructionGotoTable) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+
+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" json:"metadata,omitempty"`
+	MetadataMask uint64 `protobuf:"varint,2,opt,name=metadata_mask,json=metadataMask" json:"metadata_mask,omitempty"`
+}
+
+func (m *OfpInstructionWriteMetadata) Reset()                    { *m = OfpInstructionWriteMetadata{} }
+func (m *OfpInstructionWriteMetadata) String() string            { return proto.CompactTextString(m) }
+func (*OfpInstructionWriteMetadata) ProtoMessage()               {}
+func (*OfpInstructionWriteMetadata) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
+
+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" json:"actions,omitempty"`
+}
+
+func (m *OfpInstructionActions) Reset()                    { *m = OfpInstructionActions{} }
+func (m *OfpInstructionActions) String() string            { return proto.CompactTextString(m) }
+func (*OfpInstructionActions) ProtoMessage()               {}
+func (*OfpInstructionActions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+
+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" json:"meter_id,omitempty"`
+}
+
+func (m *OfpInstructionMeter) Reset()                    { *m = OfpInstructionMeter{} }
+func (m *OfpInstructionMeter) String() string            { return proto.CompactTextString(m) }
+func (*OfpInstructionMeter) ProtoMessage()               {}
+func (*OfpInstructionMeter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
+
+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" json:"experimenter,omitempty"`
+	// Experimenter-defined arbitrary additional data.
+	Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpInstructionExperimenter) Reset()                    { *m = OfpInstructionExperimenter{} }
+func (m *OfpInstructionExperimenter) String() string            { return proto.CompactTextString(m) }
+func (*OfpInstructionExperimenter) ProtoMessage()               {}
+func (*OfpInstructionExperimenter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
+
+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" json:"cookie,omitempty"`
+	CookieMask   uint64            `protobuf:"varint,2,opt,name=cookie_mask,json=cookieMask" json:"cookie_mask,omitempty"`
+	TableId      uint32            `protobuf:"varint,3,opt,name=table_id,json=tableId" json:"table_id,omitempty"`
+	Command      OfpFlowModCommand `protobuf:"varint,4,opt,name=command,enum=openflow_13.OfpFlowModCommand" json:"command,omitempty"`
+	IdleTimeout  uint32            `protobuf:"varint,5,opt,name=idle_timeout,json=idleTimeout" json:"idle_timeout,omitempty"`
+	HardTimeout  uint32            `protobuf:"varint,6,opt,name=hard_timeout,json=hardTimeout" json:"hard_timeout,omitempty"`
+	Priority     uint32            `protobuf:"varint,7,opt,name=priority" json:"priority,omitempty"`
+	BufferId     uint32            `protobuf:"varint,8,opt,name=buffer_id,json=bufferId" json:"buffer_id,omitempty"`
+	OutPort      uint32            `protobuf:"varint,9,opt,name=out_port,json=outPort" json:"out_port,omitempty"`
+	OutGroup     uint32            `protobuf:"varint,10,opt,name=out_group,json=outGroup" json:"out_group,omitempty"`
+	Flags        uint32            `protobuf:"varint,11,opt,name=flags" json:"flags,omitempty"`
+	Match        *OfpMatch         `protobuf:"bytes,12,opt,name=match" json:"match,omitempty"`
+	Instructions []*OfpInstruction `protobuf:"bytes,13,rep,name=instructions" json:"instructions,omitempty"`
+}
+
+func (m *OfpFlowMod) Reset()                    { *m = OfpFlowMod{} }
+func (m *OfpFlowMod) String() string            { return proto.CompactTextString(m) }
+func (*OfpFlowMod) ProtoMessage()               {}
+func (*OfpFlowMod) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
+
+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" json:"weight,omitempty"`
+	WatchPort  uint32       `protobuf:"varint,2,opt,name=watch_port,json=watchPort" json:"watch_port,omitempty"`
+	WatchGroup uint32       `protobuf:"varint,3,opt,name=watch_group,json=watchGroup" json:"watch_group,omitempty"`
+	Actions    []*OfpAction `protobuf:"bytes,4,rep,name=actions" json:"actions,omitempty"`
+}
+
+func (m *OfpBucket) Reset()                    { *m = OfpBucket{} }
+func (m *OfpBucket) String() string            { return proto.CompactTextString(m) }
+func (*OfpBucket) ProtoMessage()               {}
+func (*OfpBucket) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
+
+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,enum=openflow_13.OfpGroupModCommand" json:"command,omitempty"`
+	Type    OfpGroupType       `protobuf:"varint,2,opt,name=type,enum=openflow_13.OfpGroupType" json:"type,omitempty"`
+	GroupId uint32             `protobuf:"varint,3,opt,name=group_id,json=groupId" json:"group_id,omitempty"`
+	Buckets []*OfpBucket       `protobuf:"bytes,4,rep,name=buckets" json:"buckets,omitempty"`
+}
+
+func (m *OfpGroupMod) Reset()                    { *m = OfpGroupMod{} }
+func (m *OfpGroupMod) String() string            { return proto.CompactTextString(m) }
+func (*OfpGroupMod) ProtoMessage()               {}
+func (*OfpGroupMod) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
+
+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" json:"buffer_id,omitempty"`
+	InPort   uint32       `protobuf:"varint,2,opt,name=in_port,json=inPort" json:"in_port,omitempty"`
+	Actions  []*OfpAction `protobuf:"bytes,3,rep,name=actions" 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"`
+}
+
+func (m *OfpPacketOut) Reset()                    { *m = OfpPacketOut{} }
+func (m *OfpPacketOut) String() string            { return proto.CompactTextString(m) }
+func (*OfpPacketOut) ProtoMessage()               {}
+func (*OfpPacketOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
+
+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" json:"buffer_id,omitempty"`
+	Reason   OfpPacketInReason `protobuf:"varint,2,opt,name=reason,enum=openflow_13.OfpPacketInReason" json:"reason,omitempty"`
+	TableId  uint32            `protobuf:"varint,3,opt,name=table_id,json=tableId" json:"table_id,omitempty"`
+	Cookie   uint64            `protobuf:"varint,4,opt,name=cookie" json:"cookie,omitempty"`
+	Match    *OfpMatch         `protobuf:"bytes,5,opt,name=match" json:"match,omitempty"`
+	Data     []byte            `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpPacketIn) Reset()                    { *m = OfpPacketIn{} }
+func (m *OfpPacketIn) String() string            { return proto.CompactTextString(m) }
+func (*OfpPacketIn) ProtoMessage()               {}
+func (*OfpPacketIn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} }
+
+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" json:"cookie,omitempty"`
+	Priority     uint32               `protobuf:"varint,2,opt,name=priority" json:"priority,omitempty"`
+	Reason       OfpFlowRemovedReason `protobuf:"varint,3,opt,name=reason,enum=openflow_13.OfpFlowRemovedReason" json:"reason,omitempty"`
+	TableId      uint32               `protobuf:"varint,4,opt,name=table_id,json=tableId" json:"table_id,omitempty"`
+	DurationSec  uint32               `protobuf:"varint,5,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationNsec uint32               `protobuf:"varint,6,opt,name=duration_nsec,json=durationNsec" json:"duration_nsec,omitempty"`
+	IdleTimeout  uint32               `protobuf:"varint,7,opt,name=idle_timeout,json=idleTimeout" json:"idle_timeout,omitempty"`
+	HardTimeout  uint32               `protobuf:"varint,8,opt,name=hard_timeout,json=hardTimeout" json:"hard_timeout,omitempty"`
+	PacketCount  uint64               `protobuf:"varint,9,opt,name=packet_count,json=packetCount" json:"packet_count,omitempty"`
+	ByteCount    uint64               `protobuf:"varint,10,opt,name=byte_count,json=byteCount" json:"byte_count,omitempty"`
+	Match        *OfpMatch            `protobuf:"bytes,121,opt,name=match" json:"match,omitempty"`
+}
+
+func (m *OfpFlowRemoved) Reset()                    { *m = OfpFlowRemoved{} }
+func (m *OfpFlowRemoved) String() string            { return proto.CompactTextString(m) }
+func (*OfpFlowRemoved) ProtoMessage()               {}
+func (*OfpFlowRemoved) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} }
+
+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,enum=openflow_13.OfpMeterBandType" json:"type,omitempty"`
+	Len       uint32           `protobuf:"varint,2,opt,name=len" json:"len,omitempty"`
+	Rate      uint32           `protobuf:"varint,3,opt,name=rate" json:"rate,omitempty"`
+	BurstSize uint32           `protobuf:"varint,4,opt,name=burst_size,json=burstSize" json:"burst_size,omitempty"`
+}
+
+func (m *OfpMeterBandHeader) Reset()                    { *m = OfpMeterBandHeader{} }
+func (m *OfpMeterBandHeader) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterBandHeader) ProtoMessage()               {}
+func (*OfpMeterBandHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
+
+func (m *OfpMeterBandHeader) GetType() OfpMeterBandType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpMeterBandType_OFPMBT_INVALID
+}
+
+func (m *OfpMeterBandHeader) GetLen() uint32 {
+	if m != nil {
+		return m.Len
+	}
+	return 0
+}
+
+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
+}
+
+// OFPMBT_DROP band - drop packets
+type OfpMeterBandDrop struct {
+	Type      uint32 `protobuf:"varint,1,opt,name=type" json:"type,omitempty"`
+	Len       uint32 `protobuf:"varint,2,opt,name=len" json:"len,omitempty"`
+	Rate      uint32 `protobuf:"varint,3,opt,name=rate" json:"rate,omitempty"`
+	BurstSize uint32 `protobuf:"varint,4,opt,name=burst_size,json=burstSize" json:"burst_size,omitempty"`
+}
+
+func (m *OfpMeterBandDrop) Reset()                    { *m = OfpMeterBandDrop{} }
+func (m *OfpMeterBandDrop) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterBandDrop) ProtoMessage()               {}
+func (*OfpMeterBandDrop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
+
+func (m *OfpMeterBandDrop) GetType() uint32 {
+	if m != nil {
+		return m.Type
+	}
+	return 0
+}
+
+func (m *OfpMeterBandDrop) GetLen() uint32 {
+	if m != nil {
+		return m.Len
+	}
+	return 0
+}
+
+func (m *OfpMeterBandDrop) GetRate() uint32 {
+	if m != nil {
+		return m.Rate
+	}
+	return 0
+}
+
+func (m *OfpMeterBandDrop) GetBurstSize() uint32 {
+	if m != nil {
+		return m.BurstSize
+	}
+	return 0
+}
+
+// OFPMBT_DSCP_REMARK band - Remark DSCP in the IP header
+type OfpMeterBandDscpRemark struct {
+	Type      uint32 `protobuf:"varint,1,opt,name=type" json:"type,omitempty"`
+	Len       uint32 `protobuf:"varint,2,opt,name=len" json:"len,omitempty"`
+	Rate      uint32 `protobuf:"varint,3,opt,name=rate" json:"rate,omitempty"`
+	BurstSize uint32 `protobuf:"varint,4,opt,name=burst_size,json=burstSize" json:"burst_size,omitempty"`
+	PrecLevel uint32 `protobuf:"varint,5,opt,name=prec_level,json=precLevel" json:"prec_level,omitempty"`
+}
+
+func (m *OfpMeterBandDscpRemark) Reset()                    { *m = OfpMeterBandDscpRemark{} }
+func (m *OfpMeterBandDscpRemark) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterBandDscpRemark) ProtoMessage()               {}
+func (*OfpMeterBandDscpRemark) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} }
+
+func (m *OfpMeterBandDscpRemark) GetType() uint32 {
+	if m != nil {
+		return m.Type
+	}
+	return 0
+}
+
+func (m *OfpMeterBandDscpRemark) GetLen() uint32 {
+	if m != nil {
+		return m.Len
+	}
+	return 0
+}
+
+func (m *OfpMeterBandDscpRemark) GetRate() uint32 {
+	if m != nil {
+		return m.Rate
+	}
+	return 0
+}
+
+func (m *OfpMeterBandDscpRemark) GetBurstSize() uint32 {
+	if m != nil {
+		return m.BurstSize
+	}
+	return 0
+}
+
+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 {
+	Type         OfpMeterBandType `protobuf:"varint,1,opt,name=type,enum=openflow_13.OfpMeterBandType" json:"type,omitempty"`
+	Len          uint32           `protobuf:"varint,2,opt,name=len" json:"len,omitempty"`
+	Rate         uint32           `protobuf:"varint,3,opt,name=rate" json:"rate,omitempty"`
+	BurstSize    uint32           `protobuf:"varint,4,opt,name=burst_size,json=burstSize" json:"burst_size,omitempty"`
+	Experimenter uint32           `protobuf:"varint,5,opt,name=experimenter" json:"experimenter,omitempty"`
+}
+
+func (m *OfpMeterBandExperimenter) Reset()                    { *m = OfpMeterBandExperimenter{} }
+func (m *OfpMeterBandExperimenter) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterBandExperimenter) ProtoMessage()               {}
+func (*OfpMeterBandExperimenter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} }
+
+func (m *OfpMeterBandExperimenter) GetType() OfpMeterBandType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpMeterBandType_OFPMBT_INVALID
+}
+
+func (m *OfpMeterBandExperimenter) GetLen() uint32 {
+	if m != nil {
+		return m.Len
+	}
+	return 0
+}
+
+func (m *OfpMeterBandExperimenter) GetRate() uint32 {
+	if m != nil {
+		return m.Rate
+	}
+	return 0
+}
+
+func (m *OfpMeterBandExperimenter) GetBurstSize() uint32 {
+	if m != nil {
+		return m.BurstSize
+	}
+	return 0
+}
+
+func (m *OfpMeterBandExperimenter) GetExperimenter() uint32 {
+	if m != nil {
+		return m.Experimenter
+	}
+	return 0
+}
+
+// Meter configuration. OFPT_METER_MOD.
+type OfpMeterMod struct {
+	//    ofp_header   header = 1;
+	Command OfpMeterModCommand    `protobuf:"varint,1,opt,name=command,enum=openflow_13.OfpMeterModCommand" json:"command,omitempty"`
+	Flags   uint32                `protobuf:"varint,2,opt,name=flags" json:"flags,omitempty"`
+	MeterId uint32                `protobuf:"varint,3,opt,name=meter_id,json=meterId" json:"meter_id,omitempty"`
+	Bands   []*OfpMeterBandHeader `protobuf:"bytes,4,rep,name=bands" json:"bands,omitempty"`
+}
+
+func (m *OfpMeterMod) Reset()                    { *m = OfpMeterMod{} }
+func (m *OfpMeterMod) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterMod) ProtoMessage()               {}
+func (*OfpMeterMod) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} }
+
+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" json:"type,omitempty"`
+	Code uint32 `protobuf:"varint,2,opt,name=code" json:"code,omitempty"`
+	Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpErrorMsg) Reset()                    { *m = OfpErrorMsg{} }
+func (m *OfpErrorMsg) String() string            { return proto.CompactTextString(m) }
+func (*OfpErrorMsg) ProtoMessage()               {}
+func (*OfpErrorMsg) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
+
+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" json:"type,omitempty"`
+	ExpType      uint32 `protobuf:"varint,2,opt,name=exp_type,json=expType" json:"exp_type,omitempty"`
+	Experimenter uint32 `protobuf:"varint,3,opt,name=experimenter" json:"experimenter,omitempty"`
+	Data         []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpErrorExperimenterMsg) Reset()                    { *m = OfpErrorExperimenterMsg{} }
+func (m *OfpErrorExperimenterMsg) String() string            { return proto.CompactTextString(m) }
+func (*OfpErrorExperimenterMsg) ProtoMessage()               {}
+func (*OfpErrorExperimenterMsg) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
+
+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,enum=openflow_13.OfpMultipartType" json:"type,omitempty"`
+	Flags uint32           `protobuf:"varint,2,opt,name=flags" json:"flags,omitempty"`
+	Body  []byte           `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
+}
+
+func (m *OfpMultipartRequest) Reset()                    { *m = OfpMultipartRequest{} }
+func (m *OfpMultipartRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpMultipartRequest) ProtoMessage()               {}
+func (*OfpMultipartRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
+
+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,enum=openflow_13.OfpMultipartType" json:"type,omitempty"`
+	Flags uint32           `protobuf:"varint,2,opt,name=flags" json:"flags,omitempty"`
+	Body  []byte           `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"`
+}
+
+func (m *OfpMultipartReply) Reset()                    { *m = OfpMultipartReply{} }
+func (m *OfpMultipartReply) String() string            { return proto.CompactTextString(m) }
+func (*OfpMultipartReply) ProtoMessage()               {}
+func (*OfpMultipartReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
+
+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" json:"mfr_desc,omitempty"`
+	HwDesc    string `protobuf:"bytes,2,opt,name=hw_desc,json=hwDesc" json:"hw_desc,omitempty"`
+	SwDesc    string `protobuf:"bytes,3,opt,name=sw_desc,json=swDesc" json:"sw_desc,omitempty"`
+	SerialNum string `protobuf:"bytes,4,opt,name=serial_num,json=serialNum" json:"serial_num,omitempty"`
+	DpDesc    string `protobuf:"bytes,5,opt,name=dp_desc,json=dpDesc" json:"dp_desc,omitempty"`
+}
+
+func (m *OfpDesc) Reset()                    { *m = OfpDesc{} }
+func (m *OfpDesc) String() string            { return proto.CompactTextString(m) }
+func (*OfpDesc) ProtoMessage()               {}
+func (*OfpDesc) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
+
+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" json:"table_id,omitempty"`
+	OutPort    uint32    `protobuf:"varint,2,opt,name=out_port,json=outPort" json:"out_port,omitempty"`
+	OutGroup   uint32    `protobuf:"varint,3,opt,name=out_group,json=outGroup" json:"out_group,omitempty"`
+	Cookie     uint64    `protobuf:"varint,4,opt,name=cookie" json:"cookie,omitempty"`
+	CookieMask uint64    `protobuf:"varint,5,opt,name=cookie_mask,json=cookieMask" json:"cookie_mask,omitempty"`
+	Match      *OfpMatch `protobuf:"bytes,6,opt,name=match" json:"match,omitempty"`
+}
+
+func (m *OfpFlowStatsRequest) Reset()                    { *m = OfpFlowStatsRequest{} }
+func (m *OfpFlowStatsRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpFlowStatsRequest) ProtoMessage()               {}
+func (*OfpFlowStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} }
+
+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" json:"id,omitempty"`
+	TableId      uint32            `protobuf:"varint,1,opt,name=table_id,json=tableId" json:"table_id,omitempty"`
+	DurationSec  uint32            `protobuf:"varint,2,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationNsec uint32            `protobuf:"varint,3,opt,name=duration_nsec,json=durationNsec" json:"duration_nsec,omitempty"`
+	Priority     uint32            `protobuf:"varint,4,opt,name=priority" json:"priority,omitempty"`
+	IdleTimeout  uint32            `protobuf:"varint,5,opt,name=idle_timeout,json=idleTimeout" json:"idle_timeout,omitempty"`
+	HardTimeout  uint32            `protobuf:"varint,6,opt,name=hard_timeout,json=hardTimeout" json:"hard_timeout,omitempty"`
+	Flags        uint32            `protobuf:"varint,7,opt,name=flags" json:"flags,omitempty"`
+	Cookie       uint64            `protobuf:"varint,8,opt,name=cookie" json:"cookie,omitempty"`
+	PacketCount  uint64            `protobuf:"varint,9,opt,name=packet_count,json=packetCount" json:"packet_count,omitempty"`
+	ByteCount    uint64            `protobuf:"varint,10,opt,name=byte_count,json=byteCount" json:"byte_count,omitempty"`
+	Match        *OfpMatch         `protobuf:"bytes,12,opt,name=match" json:"match,omitempty"`
+	Instructions []*OfpInstruction `protobuf:"bytes,13,rep,name=instructions" json:"instructions,omitempty"`
+}
+
+func (m *OfpFlowStats) Reset()                    { *m = OfpFlowStats{} }
+func (m *OfpFlowStats) String() string            { return proto.CompactTextString(m) }
+func (*OfpFlowStats) ProtoMessage()               {}
+func (*OfpFlowStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} }
+
+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" json:"table_id,omitempty"`
+	OutPort    uint32    `protobuf:"varint,2,opt,name=out_port,json=outPort" json:"out_port,omitempty"`
+	OutGroup   uint32    `protobuf:"varint,3,opt,name=out_group,json=outGroup" json:"out_group,omitempty"`
+	Cookie     uint64    `protobuf:"varint,4,opt,name=cookie" json:"cookie,omitempty"`
+	CookieMask uint64    `protobuf:"varint,5,opt,name=cookie_mask,json=cookieMask" json:"cookie_mask,omitempty"`
+	Match      *OfpMatch `protobuf:"bytes,6,opt,name=match" json:"match,omitempty"`
+}
+
+func (m *OfpAggregateStatsRequest) Reset()                    { *m = OfpAggregateStatsRequest{} }
+func (m *OfpAggregateStatsRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpAggregateStatsRequest) ProtoMessage()               {}
+func (*OfpAggregateStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} }
+
+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" json:"packet_count,omitempty"`
+	ByteCount   uint64 `protobuf:"varint,2,opt,name=byte_count,json=byteCount" json:"byte_count,omitempty"`
+	FlowCount   uint32 `protobuf:"varint,3,opt,name=flow_count,json=flowCount" json:"flow_count,omitempty"`
+}
+
+func (m *OfpAggregateStatsReply) Reset()                    { *m = OfpAggregateStatsReply{} }
+func (m *OfpAggregateStatsReply) String() string            { return proto.CompactTextString(m) }
+func (*OfpAggregateStatsReply) ProtoMessage()               {}
+func (*OfpAggregateStatsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} }
+
+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,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"`
+}
+
+func (m *OfpTableFeatureProperty) Reset()                    { *m = OfpTableFeatureProperty{} }
+func (m *OfpTableFeatureProperty) String() string            { return proto.CompactTextString(m) }
+func (*OfpTableFeatureProperty) ProtoMessage()               {}
+func (*OfpTableFeatureProperty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} }
+
+type isOfpTableFeatureProperty_Value interface {
+	isOfpTableFeatureProperty_Value()
+}
+
+type OfpTableFeatureProperty_Instructions struct {
+	Instructions *OfpTableFeaturePropInstructions `protobuf:"bytes,2,opt,name=instructions,oneof"`
+}
+type OfpTableFeatureProperty_NextTables struct {
+	NextTables *OfpTableFeaturePropNextTables `protobuf:"bytes,3,opt,name=next_tables,json=nextTables,oneof"`
+}
+type OfpTableFeatureProperty_Actions struct {
+	Actions *OfpTableFeaturePropActions `protobuf:"bytes,4,opt,name=actions,oneof"`
+}
+type OfpTableFeatureProperty_Oxm struct {
+	Oxm *OfpTableFeaturePropOxm `protobuf:"bytes,5,opt,name=oxm,oneof"`
+}
+type OfpTableFeatureProperty_Experimenter struct {
+	Experimenter *OfpTableFeaturePropExperimenter `protobuf:"bytes,6,opt,name=experimenter,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) GetType() OfpTableFeaturePropType {
+	if m != nil {
+		return m.Type
+	}
+	return OfpTableFeaturePropType_OFPTFPT_INSTRUCTIONS
+}
+
+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_OneofFuncs is for the internal use of the proto package.
+func (*OfpTableFeatureProperty) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _OfpTableFeatureProperty_OneofMarshaler, _OfpTableFeatureProperty_OneofUnmarshaler, _OfpTableFeatureProperty_OneofSizer, []interface{}{
+		(*OfpTableFeatureProperty_Instructions)(nil),
+		(*OfpTableFeatureProperty_NextTables)(nil),
+		(*OfpTableFeatureProperty_Actions)(nil),
+		(*OfpTableFeatureProperty_Oxm)(nil),
+		(*OfpTableFeatureProperty_Experimenter)(nil),
+	}
+}
+
+func _OfpTableFeatureProperty_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpTableFeatureProperty)
+	// value
+	switch x := m.Value.(type) {
+	case *OfpTableFeatureProperty_Instructions:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Instructions); err != nil {
+			return err
+		}
+	case *OfpTableFeatureProperty_NextTables:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.NextTables); err != nil {
+			return err
+		}
+	case *OfpTableFeatureProperty_Actions:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Actions); err != nil {
+			return err
+		}
+	case *OfpTableFeatureProperty_Oxm:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Oxm); err != nil {
+			return err
+		}
+	case *OfpTableFeatureProperty_Experimenter:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Experimenter); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("OfpTableFeatureProperty.Value has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _OfpTableFeatureProperty_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpTableFeatureProperty)
+	switch tag {
+	case 2: // value.instructions
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpTableFeaturePropInstructions)
+		err := b.DecodeMessage(msg)
+		m.Value = &OfpTableFeatureProperty_Instructions{msg}
+		return true, err
+	case 3: // value.next_tables
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpTableFeaturePropNextTables)
+		err := b.DecodeMessage(msg)
+		m.Value = &OfpTableFeatureProperty_NextTables{msg}
+		return true, err
+	case 4: // value.actions
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpTableFeaturePropActions)
+		err := b.DecodeMessage(msg)
+		m.Value = &OfpTableFeatureProperty_Actions{msg}
+		return true, err
+	case 5: // value.oxm
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpTableFeaturePropOxm)
+		err := b.DecodeMessage(msg)
+		m.Value = &OfpTableFeatureProperty_Oxm{msg}
+		return true, err
+	case 6: // value.experimenter
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpTableFeaturePropExperimenter)
+		err := b.DecodeMessage(msg)
+		m.Value = &OfpTableFeatureProperty_Experimenter{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _OfpTableFeatureProperty_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*OfpTableFeatureProperty)
+	// value
+	switch x := m.Value.(type) {
+	case *OfpTableFeatureProperty_Instructions:
+		s := proto.Size(x.Instructions)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpTableFeatureProperty_NextTables:
+		s := proto.Size(x.NextTables)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpTableFeatureProperty_Actions:
+		s := proto.Size(x.Actions)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpTableFeatureProperty_Oxm:
+		s := proto.Size(x.Oxm)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *OfpTableFeatureProperty_Experimenter:
+		s := proto.Size(x.Experimenter)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Instructions property
+type OfpTableFeaturePropInstructions struct {
+	// One of OFPTFPT_INSTRUCTIONS,
+	// OFPTFPT_INSTRUCTIONS_MISS.
+	Instructions []*OfpInstruction `protobuf:"bytes,1,rep,name=instructions" json:"instructions,omitempty"`
+}
+
+func (m *OfpTableFeaturePropInstructions) Reset()         { *m = OfpTableFeaturePropInstructions{} }
+func (m *OfpTableFeaturePropInstructions) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropInstructions) ProtoMessage()    {}
+func (*OfpTableFeaturePropInstructions) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{50}
+}
+
+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" json:"next_table_ids,omitempty"`
+}
+
+func (m *OfpTableFeaturePropNextTables) Reset()                    { *m = OfpTableFeaturePropNextTables{} }
+func (m *OfpTableFeaturePropNextTables) String() string            { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropNextTables) ProtoMessage()               {}
+func (*OfpTableFeaturePropNextTables) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{51} }
+
+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" json:"actions,omitempty"`
+}
+
+func (m *OfpTableFeaturePropActions) Reset()                    { *m = OfpTableFeaturePropActions{} }
+func (m *OfpTableFeaturePropActions) String() string            { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropActions) ProtoMessage()               {}
+func (*OfpTableFeaturePropActions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{52} }
+
+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" json:"oxm_ids,omitempty"`
+}
+
+func (m *OfpTableFeaturePropOxm) Reset()                    { *m = OfpTableFeaturePropOxm{} }
+func (m *OfpTableFeaturePropOxm) String() string            { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropOxm) ProtoMessage()               {}
+func (*OfpTableFeaturePropOxm) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{53} }
+
+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" json:"experimenter,omitempty"`
+	ExpType          uint32   `protobuf:"varint,3,opt,name=exp_type,json=expType" json:"exp_type,omitempty"`
+	ExperimenterData []uint32 `protobuf:"varint,4,rep,packed,name=experimenter_data,json=experimenterData" json:"experimenter_data,omitempty"`
+}
+
+func (m *OfpTableFeaturePropExperimenter) Reset()         { *m = OfpTableFeaturePropExperimenter{} }
+func (m *OfpTableFeaturePropExperimenter) String() string { return proto.CompactTextString(m) }
+func (*OfpTableFeaturePropExperimenter) ProtoMessage()    {}
+func (*OfpTableFeaturePropExperimenter) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{54}
+}
+
+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" json:"table_id,omitempty"`
+	Name          string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
+	MetadataMatch uint64 `protobuf:"varint,3,opt,name=metadata_match,json=metadataMatch" json:"metadata_match,omitempty"`
+	MetadataWrite uint64 `protobuf:"varint,4,opt,name=metadata_write,json=metadataWrite" json:"metadata_write,omitempty"`
+	Config        uint32 `protobuf:"varint,5,opt,name=config" json:"config,omitempty"`
+	MaxEntries    uint32 `protobuf:"varint,6,opt,name=max_entries,json=maxEntries" json:"max_entries,omitempty"`
+	// Table Feature Property list
+	Properties []*OfpTableFeatureProperty `protobuf:"bytes,7,rep,name=properties" json:"properties,omitempty"`
+}
+
+func (m *OfpTableFeatures) Reset()                    { *m = OfpTableFeatures{} }
+func (m *OfpTableFeatures) String() string            { return proto.CompactTextString(m) }
+func (*OfpTableFeatures) ProtoMessage()               {}
+func (*OfpTableFeatures) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} }
+
+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" json:"table_id,omitempty"`
+	ActiveCount  uint32 `protobuf:"varint,2,opt,name=active_count,json=activeCount" json:"active_count,omitempty"`
+	LookupCount  uint64 `protobuf:"varint,3,opt,name=lookup_count,json=lookupCount" json:"lookup_count,omitempty"`
+	MatchedCount uint64 `protobuf:"varint,4,opt,name=matched_count,json=matchedCount" json:"matched_count,omitempty"`
+}
+
+func (m *OfpTableStats) Reset()                    { *m = OfpTableStats{} }
+func (m *OfpTableStats) String() string            { return proto.CompactTextString(m) }
+func (*OfpTableStats) ProtoMessage()               {}
+func (*OfpTableStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{56} }
+
+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" json:"port_no,omitempty"`
+}
+
+func (m *OfpPortStatsRequest) Reset()                    { *m = OfpPortStatsRequest{} }
+func (m *OfpPortStatsRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpPortStatsRequest) ProtoMessage()               {}
+func (*OfpPortStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{57} }
+
+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" json:"port_no,omitempty"`
+	RxPackets    uint64 `protobuf:"varint,2,opt,name=rx_packets,json=rxPackets" json:"rx_packets,omitempty"`
+	TxPackets    uint64 `protobuf:"varint,3,opt,name=tx_packets,json=txPackets" json:"tx_packets,omitempty"`
+	RxBytes      uint64 `protobuf:"varint,4,opt,name=rx_bytes,json=rxBytes" json:"rx_bytes,omitempty"`
+	TxBytes      uint64 `protobuf:"varint,5,opt,name=tx_bytes,json=txBytes" json:"tx_bytes,omitempty"`
+	RxDropped    uint64 `protobuf:"varint,6,opt,name=rx_dropped,json=rxDropped" json:"rx_dropped,omitempty"`
+	TxDropped    uint64 `protobuf:"varint,7,opt,name=tx_dropped,json=txDropped" json:"tx_dropped,omitempty"`
+	RxErrors     uint64 `protobuf:"varint,8,opt,name=rx_errors,json=rxErrors" json:"rx_errors,omitempty"`
+	TxErrors     uint64 `protobuf:"varint,9,opt,name=tx_errors,json=txErrors" json:"tx_errors,omitempty"`
+	RxFrameErr   uint64 `protobuf:"varint,10,opt,name=rx_frame_err,json=rxFrameErr" json:"rx_frame_err,omitempty"`
+	RxOverErr    uint64 `protobuf:"varint,11,opt,name=rx_over_err,json=rxOverErr" json:"rx_over_err,omitempty"`
+	RxCrcErr     uint64 `protobuf:"varint,12,opt,name=rx_crc_err,json=rxCrcErr" json:"rx_crc_err,omitempty"`
+	Collisions   uint64 `protobuf:"varint,13,opt,name=collisions" json:"collisions,omitempty"`
+	DurationSec  uint32 `protobuf:"varint,14,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationNsec uint32 `protobuf:"varint,15,opt,name=duration_nsec,json=durationNsec" json:"duration_nsec,omitempty"`
+}
+
+func (m *OfpPortStats) Reset()                    { *m = OfpPortStats{} }
+func (m *OfpPortStats) String() string            { return proto.CompactTextString(m) }
+func (*OfpPortStats) ProtoMessage()               {}
+func (*OfpPortStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{58} }
+
+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" json:"group_id,omitempty"`
+}
+
+func (m *OfpGroupStatsRequest) Reset()                    { *m = OfpGroupStatsRequest{} }
+func (m *OfpGroupStatsRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpGroupStatsRequest) ProtoMessage()               {}
+func (*OfpGroupStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{59} }
+
+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" json:"packet_count,omitempty"`
+	ByteCount   uint64 `protobuf:"varint,2,opt,name=byte_count,json=byteCount" json:"byte_count,omitempty"`
+}
+
+func (m *OfpBucketCounter) Reset()                    { *m = OfpBucketCounter{} }
+func (m *OfpBucketCounter) String() string            { return proto.CompactTextString(m) }
+func (*OfpBucketCounter) ProtoMessage()               {}
+func (*OfpBucketCounter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} }
+
+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" json:"group_id,omitempty"`
+	RefCount     uint32              `protobuf:"varint,2,opt,name=ref_count,json=refCount" json:"ref_count,omitempty"`
+	PacketCount  uint64              `protobuf:"varint,3,opt,name=packet_count,json=packetCount" json:"packet_count,omitempty"`
+	ByteCount    uint64              `protobuf:"varint,4,opt,name=byte_count,json=byteCount" json:"byte_count,omitempty"`
+	DurationSec  uint32              `protobuf:"varint,5,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationNsec uint32              `protobuf:"varint,6,opt,name=duration_nsec,json=durationNsec" json:"duration_nsec,omitempty"`
+	BucketStats  []*OfpBucketCounter `protobuf:"bytes,7,rep,name=bucket_stats,json=bucketStats" json:"bucket_stats,omitempty"`
+}
+
+func (m *OfpGroupStats) Reset()                    { *m = OfpGroupStats{} }
+func (m *OfpGroupStats) String() string            { return proto.CompactTextString(m) }
+func (*OfpGroupStats) ProtoMessage()               {}
+func (*OfpGroupStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{61} }
+
+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,enum=openflow_13.OfpGroupType" json:"type,omitempty"`
+	GroupId uint32       `protobuf:"varint,2,opt,name=group_id,json=groupId" json:"group_id,omitempty"`
+	Buckets []*OfpBucket `protobuf:"bytes,3,rep,name=buckets" json:"buckets,omitempty"`
+}
+
+func (m *OfpGroupDesc) Reset()                    { *m = OfpGroupDesc{} }
+func (m *OfpGroupDesc) String() string            { return proto.CompactTextString(m) }
+func (*OfpGroupDesc) ProtoMessage()               {}
+func (*OfpGroupDesc) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{62} }
+
+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" json:"desc,omitempty"`
+	Stats *OfpGroupStats `protobuf:"bytes,2,opt,name=stats" json:"stats,omitempty"`
+}
+
+func (m *OfpGroupEntry) Reset()                    { *m = OfpGroupEntry{} }
+func (m *OfpGroupEntry) String() string            { return proto.CompactTextString(m) }
+func (*OfpGroupEntry) ProtoMessage()               {}
+func (*OfpGroupEntry) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{63} }
+
+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" json:"types,omitempty"`
+	Capabilities uint32   `protobuf:"varint,2,opt,name=capabilities" json:"capabilities,omitempty"`
+	MaxGroups    []uint32 `protobuf:"varint,3,rep,packed,name=max_groups,json=maxGroups" json:"max_groups,omitempty"`
+	Actions      []uint32 `protobuf:"varint,4,rep,packed,name=actions" json:"actions,omitempty"`
+}
+
+func (m *OfpGroupFeatures) Reset()                    { *m = OfpGroupFeatures{} }
+func (m *OfpGroupFeatures) String() string            { return proto.CompactTextString(m) }
+func (*OfpGroupFeatures) ProtoMessage()               {}
+func (*OfpGroupFeatures) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{64} }
+
+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" json:"meter_id,omitempty"`
+}
+
+func (m *OfpMeterMultipartRequest) Reset()                    { *m = OfpMeterMultipartRequest{} }
+func (m *OfpMeterMultipartRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterMultipartRequest) ProtoMessage()               {}
+func (*OfpMeterMultipartRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{65} }
+
+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" json:"packet_band_count,omitempty"`
+	ByteBandCount   uint64 `protobuf:"varint,2,opt,name=byte_band_count,json=byteBandCount" json:"byte_band_count,omitempty"`
+}
+
+func (m *OfpMeterBandStats) Reset()                    { *m = OfpMeterBandStats{} }
+func (m *OfpMeterBandStats) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterBandStats) ProtoMessage()               {}
+func (*OfpMeterBandStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{66} }
+
+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" json:"meter_id,omitempty"`
+	FlowCount     uint32               `protobuf:"varint,2,opt,name=flow_count,json=flowCount" json:"flow_count,omitempty"`
+	PacketInCount uint64               `protobuf:"varint,3,opt,name=packet_in_count,json=packetInCount" json:"packet_in_count,omitempty"`
+	ByteInCount   uint64               `protobuf:"varint,4,opt,name=byte_in_count,json=byteInCount" json:"byte_in_count,omitempty"`
+	DurationSec   uint32               `protobuf:"varint,5,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationNsec  uint32               `protobuf:"varint,6,opt,name=duration_nsec,json=durationNsec" json:"duration_nsec,omitempty"`
+	BandStats     []*OfpMeterBandStats `protobuf:"bytes,7,rep,name=band_stats,json=bandStats" json:"band_stats,omitempty"`
+}
+
+func (m *OfpMeterStats) Reset()                    { *m = OfpMeterStats{} }
+func (m *OfpMeterStats) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterStats) ProtoMessage()               {}
+func (*OfpMeterStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} }
+
+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" json:"flags,omitempty"`
+	MeterId uint32                `protobuf:"varint,2,opt,name=meter_id,json=meterId" json:"meter_id,omitempty"`
+	Bands   []*OfpMeterBandHeader `protobuf:"bytes,3,rep,name=bands" json:"bands,omitempty"`
+}
+
+func (m *OfpMeterConfig) Reset()                    { *m = OfpMeterConfig{} }
+func (m *OfpMeterConfig) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterConfig) ProtoMessage()               {}
+func (*OfpMeterConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} }
+
+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" json:"max_meter,omitempty"`
+	BandTypes    uint32 `protobuf:"varint,2,opt,name=band_types,json=bandTypes" json:"band_types,omitempty"`
+	Capabilities uint32 `protobuf:"varint,3,opt,name=capabilities" json:"capabilities,omitempty"`
+	MaxBands     uint32 `protobuf:"varint,4,opt,name=max_bands,json=maxBands" json:"max_bands,omitempty"`
+	MaxColor     uint32 `protobuf:"varint,5,opt,name=max_color,json=maxColor" json:"max_color,omitempty"`
+}
+
+func (m *OfpMeterFeatures) Reset()                    { *m = OfpMeterFeatures{} }
+func (m *OfpMeterFeatures) String() string            { return proto.CompactTextString(m) }
+func (*OfpMeterFeatures) ProtoMessage()               {}
+func (*OfpMeterFeatures) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} }
+
+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
+}
+
+// Body for ofp_multipart_request/reply of type OFPMP_EXPERIMENTER.
+type OfpExperimenterMultipartHeader struct {
+	Experimenter uint32 `protobuf:"varint,1,opt,name=experimenter" json:"experimenter,omitempty"`
+	ExpType      uint32 `protobuf:"varint,2,opt,name=exp_type,json=expType" json:"exp_type,omitempty"`
+	Data         []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpExperimenterMultipartHeader) Reset()                    { *m = OfpExperimenterMultipartHeader{} }
+func (m *OfpExperimenterMultipartHeader) String() string            { return proto.CompactTextString(m) }
+func (*OfpExperimenterMultipartHeader) ProtoMessage()               {}
+func (*OfpExperimenterMultipartHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} }
+
+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" json:"experimenter,omitempty"`
+	ExpType      uint32 `protobuf:"varint,2,opt,name=exp_type,json=expType" json:"exp_type,omitempty"`
+	Data         []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpExperimenterHeader) Reset()                    { *m = OfpExperimenterHeader{} }
+func (m *OfpExperimenterHeader) String() string            { return proto.CompactTextString(m) }
+func (*OfpExperimenterHeader) ProtoMessage()               {}
+func (*OfpExperimenterHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} }
+
+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" json:"property,omitempty"`
+	Len      uint32 `protobuf:"varint,2,opt,name=len" json:"len,omitempty"`
+}
+
+func (m *OfpQueuePropHeader) Reset()                    { *m = OfpQueuePropHeader{} }
+func (m *OfpQueuePropHeader) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueuePropHeader) ProtoMessage()               {}
+func (*OfpQueuePropHeader) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} }
+
+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" json:"prop_header,omitempty"`
+	Rate       uint32              `protobuf:"varint,2,opt,name=rate" json:"rate,omitempty"`
+}
+
+func (m *OfpQueuePropMinRate) Reset()                    { *m = OfpQueuePropMinRate{} }
+func (m *OfpQueuePropMinRate) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueuePropMinRate) ProtoMessage()               {}
+func (*OfpQueuePropMinRate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} }
+
+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" json:"prop_header,omitempty"`
+	Rate       uint32              `protobuf:"varint,2,opt,name=rate" json:"rate,omitempty"`
+}
+
+func (m *OfpQueuePropMaxRate) Reset()                    { *m = OfpQueuePropMaxRate{} }
+func (m *OfpQueuePropMaxRate) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueuePropMaxRate) ProtoMessage()               {}
+func (*OfpQueuePropMaxRate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} }
+
+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" json:"prop_header,omitempty"`
+	Experimenter uint32              `protobuf:"varint,2,opt,name=experimenter" json:"experimenter,omitempty"`
+	Data         []byte              `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (m *OfpQueuePropExperimenter) Reset()                    { *m = OfpQueuePropExperimenter{} }
+func (m *OfpQueuePropExperimenter) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueuePropExperimenter) ProtoMessage()               {}
+func (*OfpQueuePropExperimenter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} }
+
+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" json:"queue_id,omitempty"`
+	Port       uint32                `protobuf:"varint,2,opt,name=port" json:"port,omitempty"`
+	Properties []*OfpQueuePropHeader `protobuf:"bytes,4,rep,name=properties" json:"properties,omitempty"`
+}
+
+func (m *OfpPacketQueue) Reset()                    { *m = OfpPacketQueue{} }
+func (m *OfpPacketQueue) String() string            { return proto.CompactTextString(m) }
+func (*OfpPacketQueue) ProtoMessage()               {}
+func (*OfpPacketQueue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} }
+
+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" json:"port,omitempty"`
+}
+
+func (m *OfpQueueGetConfigRequest) Reset()                    { *m = OfpQueueGetConfigRequest{} }
+func (m *OfpQueueGetConfigRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueueGetConfigRequest) ProtoMessage()               {}
+func (*OfpQueueGetConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} }
+
+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" json:"port,omitempty"`
+	Queues []*OfpPacketQueue `protobuf:"bytes,2,rep,name=queues" json:"queues,omitempty"`
+}
+
+func (m *OfpQueueGetConfigReply) Reset()                    { *m = OfpQueueGetConfigReply{} }
+func (m *OfpQueueGetConfigReply) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueueGetConfigReply) ProtoMessage()               {}
+func (*OfpQueueGetConfigReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} }
+
+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" json:"type,omitempty"`
+	QueueId uint32 `protobuf:"varint,3,opt,name=queue_id,json=queueId" json:"queue_id,omitempty"`
+}
+
+func (m *OfpActionSetQueue) Reset()                    { *m = OfpActionSetQueue{} }
+func (m *OfpActionSetQueue) String() string            { return proto.CompactTextString(m) }
+func (*OfpActionSetQueue) ProtoMessage()               {}
+func (*OfpActionSetQueue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
+
+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" json:"port_no,omitempty"`
+	QueueId uint32 `protobuf:"varint,2,opt,name=queue_id,json=queueId" json:"queue_id,omitempty"`
+}
+
+func (m *OfpQueueStatsRequest) Reset()                    { *m = OfpQueueStatsRequest{} }
+func (m *OfpQueueStatsRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueueStatsRequest) ProtoMessage()               {}
+func (*OfpQueueStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
+
+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" json:"port_no,omitempty"`
+	QueueId      uint32 `protobuf:"varint,2,opt,name=queue_id,json=queueId" json:"queue_id,omitempty"`
+	TxBytes      uint64 `protobuf:"varint,3,opt,name=tx_bytes,json=txBytes" json:"tx_bytes,omitempty"`
+	TxPackets    uint64 `protobuf:"varint,4,opt,name=tx_packets,json=txPackets" json:"tx_packets,omitempty"`
+	TxErrors     uint64 `protobuf:"varint,5,opt,name=tx_errors,json=txErrors" json:"tx_errors,omitempty"`
+	DurationSec  uint32 `protobuf:"varint,6,opt,name=duration_sec,json=durationSec" json:"duration_sec,omitempty"`
+	DurationNsec uint32 `protobuf:"varint,7,opt,name=duration_nsec,json=durationNsec" json:"duration_nsec,omitempty"`
+}
+
+func (m *OfpQueueStats) Reset()                    { *m = OfpQueueStats{} }
+func (m *OfpQueueStats) String() string            { return proto.CompactTextString(m) }
+func (*OfpQueueStats) ProtoMessage()               {}
+func (*OfpQueueStats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
+
+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,enum=openflow_13.OfpControllerRole" json:"role,omitempty"`
+	GenerationId uint64            `protobuf:"varint,2,opt,name=generation_id,json=generationId" json:"generation_id,omitempty"`
+}
+
+func (m *OfpRoleRequest) Reset()                    { *m = OfpRoleRequest{} }
+func (m *OfpRoleRequest) String() string            { return proto.CompactTextString(m) }
+func (*OfpRoleRequest) ProtoMessage()               {}
+func (*OfpRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} }
+
+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" json:"packet_in_mask,omitempty"`
+	PortStatusMask  []uint32 `protobuf:"varint,2,rep,packed,name=port_status_mask,json=portStatusMask" json:"port_status_mask,omitempty"`
+	FlowRemovedMask []uint32 `protobuf:"varint,3,rep,packed,name=flow_removed_mask,json=flowRemovedMask" json:"flow_removed_mask,omitempty"`
+}
+
+func (m *OfpAsyncConfig) Reset()                    { *m = OfpAsyncConfig{} }
+func (m *OfpAsyncConfig) String() string            { return proto.CompactTextString(m) }
+func (*OfpAsyncConfig) ProtoMessage()               {}
+func (*OfpAsyncConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} }
+
+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 FlowTableUpdate struct {
+	Id      string      `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	FlowMod *OfpFlowMod `protobuf:"bytes,2,opt,name=flow_mod,json=flowMod" json:"flow_mod,omitempty"`
+}
+
+func (m *FlowTableUpdate) Reset()                    { *m = FlowTableUpdate{} }
+func (m *FlowTableUpdate) String() string            { return proto.CompactTextString(m) }
+func (*FlowTableUpdate) ProtoMessage()               {}
+func (*FlowTableUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} }
+
+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" json:"id,omitempty"`
+	GroupMod *OfpGroupMod `protobuf:"bytes,2,opt,name=group_mod,json=groupMod" json:"group_mod,omitempty"`
+}
+
+func (m *FlowGroupTableUpdate) Reset()                    { *m = FlowGroupTableUpdate{} }
+func (m *FlowGroupTableUpdate) String() string            { return proto.CompactTextString(m) }
+func (*FlowGroupTableUpdate) ProtoMessage()               {}
+func (*FlowGroupTableUpdate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} }
+
+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" json:"items,omitempty"`
+}
+
+func (m *Flows) Reset()                    { *m = Flows{} }
+func (m *Flows) String() string            { return proto.CompactTextString(m) }
+func (*Flows) ProtoMessage()               {}
+func (*Flows) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} }
+
+func (m *Flows) GetItems() []*OfpFlowStats {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type FlowGroups struct {
+	Items []*OfpGroupEntry `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
+}
+
+func (m *FlowGroups) Reset()                    { *m = FlowGroups{} }
+func (m *FlowGroups) String() string            { return proto.CompactTextString(m) }
+func (*FlowGroups) ProtoMessage()               {}
+func (*FlowGroups) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} }
+
+func (m *FlowGroups) GetItems() []*OfpGroupEntry {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type PacketIn struct {
+	Id       string       `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	PacketIn *OfpPacketIn `protobuf:"bytes,2,opt,name=packet_in,json=packetIn" json:"packet_in,omitempty"`
+}
+
+func (m *PacketIn) Reset()                    { *m = PacketIn{} }
+func (m *PacketIn) String() string            { return proto.CompactTextString(m) }
+func (*PacketIn) ProtoMessage()               {}
+func (*PacketIn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} }
+
+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" json:"id,omitempty"`
+	PacketOut *OfpPacketOut `protobuf:"bytes,2,opt,name=packet_out,json=packetOut" json:"packet_out,omitempty"`
+}
+
+func (m *PacketOut) Reset()                    { *m = PacketOut{} }
+func (m *PacketOut) String() string            { return proto.CompactTextString(m) }
+func (*PacketOut) ProtoMessage()               {}
+func (*PacketOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} }
+
+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" json:"id,omitempty"`
+	// Types that are valid to be assigned to Event:
+	//	*ChangeEvent_PortStatus
+	Event isChangeEvent_Event `protobuf_oneof:"event"`
+}
+
+func (m *ChangeEvent) Reset()                    { *m = ChangeEvent{} }
+func (m *ChangeEvent) String() string            { return proto.CompactTextString(m) }
+func (*ChangeEvent) ProtoMessage()               {}
+func (*ChangeEvent) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} }
+
+type isChangeEvent_Event interface {
+	isChangeEvent_Event()
+}
+
+type ChangeEvent_PortStatus struct {
+	PortStatus *OfpPortStatus `protobuf:"bytes,2,opt,name=port_status,json=portStatus,oneof"`
+}
+
+func (*ChangeEvent_PortStatus) isChangeEvent_Event() {}
+
+func (m *ChangeEvent) GetEvent() isChangeEvent_Event {
+	if m != nil {
+		return m.Event
+	}
+	return nil
+}
+
+func (m *ChangeEvent) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *ChangeEvent) GetPortStatus() *OfpPortStatus {
+	if x, ok := m.GetEvent().(*ChangeEvent_PortStatus); ok {
+		return x.PortStatus
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*ChangeEvent) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _ChangeEvent_OneofMarshaler, _ChangeEvent_OneofUnmarshaler, _ChangeEvent_OneofSizer, []interface{}{
+		(*ChangeEvent_PortStatus)(nil),
+	}
+}
+
+func _ChangeEvent_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ChangeEvent)
+	// event
+	switch x := m.Event.(type) {
+	case *ChangeEvent_PortStatus:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.PortStatus); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("ChangeEvent.Event has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _ChangeEvent_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ChangeEvent)
+	switch tag {
+	case 2: // event.port_status
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(OfpPortStatus)
+		err := b.DecodeMessage(msg)
+		m.Event = &ChangeEvent_PortStatus{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _ChangeEvent_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*ChangeEvent)
+	// event
+	switch x := m.Event.(type) {
+	case *ChangeEvent_PortStatus:
+		s := proto.Size(x.PortStatus)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+func init() {
+	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((*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((*FlowTableUpdate)(nil), "openflow_13.FlowTableUpdate")
+	proto.RegisterType((*FlowGroupTableUpdate)(nil), "openflow_13.FlowGroupTableUpdate")
+	proto.RegisterType((*Flows)(nil), "openflow_13.Flows")
+	proto.RegisterType((*FlowGroups)(nil), "openflow_13.FlowGroups")
+	proto.RegisterType((*PacketIn)(nil), "openflow_13.PacketIn")
+	proto.RegisterType((*PacketOut)(nil), "openflow_13.PacketOut")
+	proto.RegisterType((*ChangeEvent)(nil), "openflow_13.ChangeEvent")
+	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)
+}
+
+func init() { proto.RegisterFile("openflow_13.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 8209 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7c, 0x5b, 0x8c, 0x1b, 0x4b,
+	0x76, 0x98, 0xf8, 0x98, 0x21, 0x59, 0x9c, 0x19, 0xb5, 0x5a, 0x2f, 0x4a, 0x23, 0x5d, 0x49, 0x5c,
+	0xdd, 0xdd, 0xbb, 0x5c, 0xdb, 0xf7, 0x5e, 0x5d, 0xad, 0x76, 0xbd, 0x7e, 0x44, 0x4d, 0xb2, 0x39,
+	0xe4, 0x8a, 0x8f, 0x56, 0x77, 0xcf, 0x48, 0x72, 0xe0, 0x34, 0x38, 0x64, 0x6b, 0x86, 0xbe, 0x7c,
+	0x6d, 0x77, 0xcf, 0x68, 0xe4, 0xc4, 0x81, 0x62, 0x23, 0x08, 0x90, 0xc4, 0x76, 0x12, 0x07, 0x58,
+	0x20, 0x70, 0x80, 0x18, 0x71, 0x3e, 0x82, 0x00, 0xf9, 0x08, 0x10, 0x20, 0x40, 0xf2, 0x99, 0x00,
+	0x09, 0x90, 0x07, 0x60, 0x20, 0xf0, 0x4f, 0xfc, 0xe7, 0xfc, 0x04, 0xf0, 0x77, 0x12, 0x67, 0xb3,
+	0x0a, 0x4e, 0x9d, 0x53, 0xd5, 0xd5, 0x7c, 0xcc, 0x9d, 0xdd, 0xdc, 0x4d, 0x00, 0x7f, 0x0d, 0xfb,
+	0x9c, 0x53, 0xa7, 0xaa, 0x4e, 0x9d, 0x77, 0x57, 0x0f, 0xbb, 0x32, 0x9b, 0xfb, 0xd3, 0xd7, 0xe3,
+	0xd9, 0x1b, 0xef, 0xd3, 0xcf, 0x7e, 0x66, 0x1e, 0xcc, 0xa2, 0x99, 0x5e, 0x54, 0x40, 0xb7, 0xef,
+	0x1c, 0xcd, 0x66, 0x47, 0x63, 0xff, 0xe3, 0xfe, 0x7c, 0xf4, 0x71, 0x7f, 0x3a, 0x9d, 0x45, 0xfd,
+	0x68, 0x34, 0x9b, 0x86, 0x48, 0x7a, 0x5b, 0x7f, 0xdb, 0x9f, 0x1e, 0x79, 0xb3, 0xb9, 0x02, 0x2b,
+	0x0f, 0x18, 0x9b, 0xbd, 0x9e, 0x7b, 0xc7, 0x7e, 0x7f, 0xe8, 0x07, 0x7a, 0x89, 0xe5, 0x4e, 0xfd,
+	0x20, 0x1c, 0xcd, 0xa6, 0xa5, 0xd4, 0xfd, 0xd4, 0x47, 0xdb, 0xb6, 0x78, 0xd4, 0xbf, 0xce, 0xb2,
+	0xd1, 0xdb, 0xb9, 0x5f, 0x4a, 0xdf, 0x4f, 0x7d, 0xb4, 0xf3, 0xe8, 0xfa, 0xcf, 0xa8, 0x0b, 0x01,
+	0x06, 0x80, 0xb4, 0x39, 0x89, 0xae, 0xb1, 0xcc, 0xd9, 0x68, 0x58, 0xca, 0x70, 0x06, 0xf0, 0xb3,
+	0xfc, 0x4f, 0x52, 0xec, 0x3a, 0xce, 0x32, 0x1e, 0xcf, 0x3c, 0x7f, 0xec, 0x4f, 0xc4, 0x84, 0x8f,
+	0x89, 0x6d, 0x8a, 0xb3, 0xbd, 0xbf, 0xc4, 0x56, 0x19, 0xa1, 0xcc, 0xf0, 0x9c, 0x6d, 0xd3, 0xba,
+	0x0e, 0x47, 0xd1, 0xa4, 0x3f, 0xe7, 0xab, 0x2a, 0x3e, 0xfa, 0xfa, 0x79, 0xc3, 0x13, 0x03, 0x9a,
+	0x97, 0xec, 0x24, 0x87, 0x6a, 0x81, 0xe5, 0x80, 0xcc, 0x9f, 0x46, 0xe5, 0x6f, 0xb3, 0x3b, 0xe7,
+	0x8d, 0x05, 0x21, 0xe1, 0xaf, 0xb0, 0x94, 0xbe, 0x9f, 0x01, 0x21, 0xd1, 0x63, 0xf9, 0x19, 0x2b,
+	0xc8, 0x91, 0xfa, 0x2f, 0xb2, 0x3c, 0x71, 0x0c, 0x4b, 0xa9, 0xfb, 0x99, 0x8f, 0x8a, 0x8f, 0xca,
+	0xe7, 0xad, 0x0f, 0x05, 0x62, 0xcb, 0x31, 0xe5, 0x0e, 0xbb, 0x02, 0x24, 0xe1, 0x9b, 0x51, 0x34,
+	0x38, 0xf6, 0x06, 0xb3, 0xe9, 0xeb, 0xd1, 0x91, 0x7e, 0x8d, 0x6d, 0xbc, 0x1e, 0xf7, 0x8f, 0x42,
+	0x3a, 0x1e, 0x7c, 0xd0, 0xcb, 0x6c, 0x7b, 0x32, 0x0a, 0x43, 0x2f, 0xf4, 0xa7, 0x43, 0x6f, 0xec,
+	0x4f, 0xb9, 0x3c, 0xb6, 0xed, 0x22, 0x00, 0x1d, 0x7f, 0x3a, 0x6c, 0xfb, 0xd3, 0x72, 0x95, 0x6d,
+	0xf3, 0x73, 0xea, 0x1f, 0x8e, 0x7d, 0x6f, 0x32, 0x1b, 0xea, 0xb7, 0x58, 0x1e, 0x1f, 0x46, 0x43,
+	0x71, 0xd8, 0xfc, 0xb9, 0x35, 0xd4, 0x6f, 0xb0, 0x4d, 0x9c, 0x8f, 0x18, 0xd1, 0x53, 0xf9, 0x1f,
+	0xa4, 0x59, 0x1e, 0x98, 0xcc, 0x67, 0x41, 0xa4, 0xdf, 0x64, 0x39, 0xf8, 0xeb, 0x4d, 0x67, 0x34,
+	0x7c, 0x13, 0x1e, 0xbb, 0x33, 0x40, 0x1c, 0xbf, 0xf1, 0xfa, 0xc3, 0x61, 0x40, 0xf2, 0xd9, 0x3c,
+	0x7e, 0x63, 0x0c, 0x87, 0x81, 0xae, 0xb3, 0xec, 0xb4, 0x3f, 0xf1, 0xb9, 0x66, 0x14, 0x6c, 0xfe,
+	0x5b, 0x99, 0x2a, 0xab, 0x4e, 0x05, 0x1b, 0x0d, 0xa3, 0x7e, 0xe4, 0x97, 0x36, 0x70, 0xa3, 0xfc,
+	0x01, 0x38, 0x0c, 0x4e, 0x82, 0xa0, 0xb4, 0xc9, 0x81, 0xfc, 0xb7, 0xfe, 0x01, 0x63, 0xfd, 0xe1,
+	0xa9, 0x1f, 0x44, 0xa3, 0xd0, 0x1f, 0x96, 0x72, 0x1c, 0xa3, 0x40, 0xf4, 0x3b, 0xac, 0x10, 0x9e,
+	0xcc, 0x61, 0x6d, 0xfe, 0xb0, 0x94, 0xe7, 0xe8, 0x18, 0x00, 0x1c, 0xe7, 0xbe, 0x1f, 0x94, 0x0a,
+	0xc8, 0x11, 0x7e, 0xeb, 0x77, 0x19, 0x03, 0xce, 0x5e, 0x38, 0xf7, 0xfd, 0x61, 0x89, 0xe1, 0x10,
+	0x80, 0x38, 0x00, 0xd0, 0x77, 0x59, 0x61, 0xd2, 0x3f, 0x23, 0x6c, 0x91, 0x63, 0xf3, 0x93, 0xfe,
+	0x19, 0x47, 0x96, 0xff, 0x79, 0x8a, 0x5d, 0x55, 0x8e, 0xed, 0xb5, 0xdf, 0x8f, 0x4e, 0x02, 0x3f,
+	0xd4, 0xef, 0xb1, 0xe2, 0xb0, 0x1f, 0xf5, 0xe7, 0xfd, 0xe8, 0x58, 0x08, 0x3c, 0x6b, 0x33, 0x01,
+	0x6a, 0x71, 0xae, 0x53, 0xef, 0xf0, 0xe4, 0xf5, 0x6b, 0x3f, 0x08, 0x49, 0xec, 0xf9, 0x69, 0x15,
+	0x9f, 0xe1, 0xac, 0xa6, 0x78, 0x74, 0x21, 0xd9, 0x55, 0x6e, 0xea, 0xf2, 0x47, 0xfd, 0x01, 0xdb,
+	0xea, 0x9f, 0x9c, 0x8d, 0xc6, 0xa3, 0x7e, 0xf0, 0x16, 0x38, 0xa3, 0x18, 0x8b, 0x12, 0xd6, 0x1a,
+	0xea, 0x65, 0xb6, 0x35, 0xe8, 0xcf, 0xfb, 0x87, 0xa3, 0xf1, 0x28, 0x1a, 0xf9, 0x21, 0x89, 0x34,
+	0x01, 0x2b, 0x07, 0xec, 0xb2, 0x38, 0x59, 0x0f, 0x64, 0x7d, 0x12, 0xea, 0x8f, 0xd9, 0x66, 0xe0,
+	0xf7, 0x43, 0xf2, 0x05, 0x3b, 0x8f, 0xee, 0x2c, 0xa9, 0x2f, 0xa7, 0x46, 0x1a, 0x9b, 0x68, 0xc1,
+	0x51, 0x0c, 0xfd, 0x70, 0x40, 0x26, 0x79, 0x7d, 0xe5, 0x18, 0x9b, 0x93, 0x94, 0xff, 0x7a, 0x8a,
+	0x6d, 0x49, 0x36, 0xa0, 0x92, 0x3f, 0xba, 0x4a, 0xc5, 0xea, 0x93, 0x49, 0xa8, 0x8f, 0xce, 0xb2,
+	0x93, 0x7e, 0xf8, 0x39, 0x49, 0x83, 0xff, 0x06, 0x45, 0x90, 0x6a, 0x41, 0x32, 0x88, 0x01, 0xe5,
+	0x37, 0x68, 0xbb, 0x93, 0x7e, 0x34, 0x38, 0xd6, 0x3f, 0x4e, 0xb8, 0xa5, 0xdd, 0xa5, 0x4d, 0x70,
+	0x2a, 0xd5, 0x23, 0xfd, 0x2c, 0x63, 0xb3, 0xb3, 0x89, 0xf7, 0x7a, 0xe4, 0x8f, 0x87, 0xe8, 0x16,
+	0x8a, 0x8f, 0x6e, 0x2f, 0x0d, 0x93, 0x24, 0x76, 0x61, 0x76, 0x36, 0x69, 0x70, 0xe2, 0xf2, 0x7f,
+	0x4b, 0xa1, 0x65, 0x4a, 0xa4, 0xfe, 0x2d, 0x06, 0x68, 0x6f, 0x30, 0xee, 0x87, 0x21, 0x2d, 0x61,
+	0x35, 0x2f, 0x4e, 0x61, 0xe7, 0x67, 0x67, 0x93, 0x1a, 0xfc, 0xd2, 0x7f, 0x01, 0xf6, 0x70, 0x88,
+	0x5c, 0xf8, 0xd6, 0x8b, 0x8f, 0x3e, 0x58, 0x39, 0x50, 0x52, 0x35, 0x2f, 0xd9, 0xf9, 0xd9, 0xeb,
+	0x43, 0xbe, 0x14, 0xfd, 0x25, 0xd3, 0xfd, 0xb3, 0xb9, 0x1f, 0x8c, 0xc0, 0x01, 0xf9, 0x01, 0xf1,
+	0xd9, 0xe0, 0x7c, 0xbe, 0xb6, 0x92, 0xcf, 0x32, 0x79, 0xf3, 0x92, 0x7d, 0x45, 0x85, 0x72, 0xce,
+	0xd5, 0x1c, 0xdb, 0xe0, 0xd8, 0xf2, 0x1f, 0xee, 0xa0, 0x57, 0x4b, 0x2c, 0xe2, 0xfc, 0x28, 0xa0,
+	0x52, 0x72, 0x91, 0x87, 0x24, 0xf3, 0x5b, 0x2c, 0x7f, 0xdc, 0x0f, 0x3d, 0x7e, 0xce, 0xa0, 0x6d,
+	0x79, 0x3b, 0x77, 0xdc, 0x0f, 0x3b, 0x70, 0xd4, 0xd7, 0x58, 0x16, 0x34, 0x07, 0x95, 0xa2, 0x79,
+	0xc9, 0xe6, 0x4f, 0xfa, 0x87, 0x6c, 0x7b, 0x7e, 0xfc, 0x36, 0x1c, 0x0d, 0xfa, 0x63, 0xae, 0x73,
+	0xa8, 0x1d, 0xcd, 0x4b, 0xf6, 0x96, 0x00, 0x5b, 0x40, 0xf6, 0x35, 0xb6, 0x43, 0x5e, 0xd2, 0x8f,
+	0xfa, 0x60, 0xa1, 0x5c, 0x04, 0x59, 0x88, 0x19, 0x1c, 0xde, 0x21, 0xb0, 0x7e, 0x8b, 0xe5, 0xfc,
+	0xe8, 0xd8, 0x1b, 0x86, 0x11, 0x77, 0x48, 0x5b, 0xcd, 0x4b, 0xf6, 0xa6, 0x1f, 0x1d, 0xd7, 0xc3,
+	0x48, 0xa0, 0xc2, 0x60, 0xc0, 0x3d, 0x92, 0x40, 0x39, 0xc1, 0x40, 0xdf, 0x65, 0x79, 0x40, 0xf1,
+	0x0d, 0xe7, 0x69, 0x01, 0x40, 0xec, 0xc2, 0x9e, 0x76, 0x59, 0xfe, 0x74, 0xdc, 0x9f, 0x7a, 0xa7,
+	0xa3, 0x21, 0xba, 0x24, 0x40, 0x02, 0xe4, 0x60, 0x34, 0x94, 0xc8, 0xf9, 0x60, 0x8e, 0x5e, 0x49,
+	0x20, 0xad, 0xc1, 0x1c, 0x66, 0x1c, 0xcd, 0xbd, 0x61, 0x38, 0x98, 0xa3, 0x4f, 0x82, 0x19, 0x47,
+	0xf3, 0x7a, 0x38, 0x98, 0xeb, 0x37, 0xd9, 0xe6, 0x68, 0xee, 0xf9, 0x83, 0x69, 0x69, 0x8b, 0x30,
+	0x1b, 0xa3, 0xb9, 0x39, 0x98, 0x02, 0xc3, 0xd1, 0xdc, 0xe3, 0x89, 0x40, 0x69, 0x5b, 0x30, 0x1c,
+	0xcd, 0x2d, 0x9e, 0x58, 0x70, 0xe4, 0xe9, 0x63, 0xbe, 0x87, 0x9d, 0x18, 0x79, 0xfa, 0x98, 0x36,
+	0xc1, 0x91, 0xb0, 0xf7, 0xcb, 0x2a, 0x92, 0x36, 0x1f, 0x0d, 0xe6, 0x7c, 0xa0, 0x26, 0x96, 0x12,
+	0x0d, 0xe6, 0x30, 0x8e, 0x50, 0x30, 0xec, 0x8a, 0x82, 0xa2, 0x51, 0x27, 0x43, 0x1c, 0xa5, 0x0b,
+	0xd4, 0xc9, 0x50, 0x8c, 0x02, 0x14, 0x8c, 0xba, 0xaa, 0xa0, 0x60, 0xd4, 0x2e, 0xcb, 0x87, 0x83,
+	0x08, 0x87, 0x5d, 0x13, 0x0b, 0x01, 0x08, 0xad, 0x92, 0x23, 0x61, 0xe0, 0x75, 0x15, 0x09, 0x23,
+	0x1f, 0xb0, 0xe2, 0x68, 0x30, 0x81, 0x4d, 0xf0, 0xa3, 0xb8, 0x41, 0x78, 0x86, 0x40, 0x7e, 0x1a,
+	0x31, 0xc9, 0x60, 0x36, 0xf4, 0x4b, 0x37, 0x93, 0x24, 0xb5, 0xd9, 0xd0, 0x07, 0xd9, 0xf6, 0x83,
+	0xb9, 0x37, 0x9b, 0x97, 0x4a, 0x42, 0xb6, 0xfd, 0x60, 0xde, 0xe3, 0xe7, 0x01, 0x88, 0x70, 0xde,
+	0x2f, 0xdd, 0x12, 0x6b, 0xee, 0x07, 0x73, 0x67, 0xde, 0x17, 0xa8, 0x68, 0xde, 0x2f, 0xdd, 0x56,
+	0x50, 0x6e, 0x8c, 0x0a, 0x8f, 0xfb, 0xa5, 0x5d, 0xa1, 0x37, 0x30, 0xea, 0x38, 0x1e, 0x75, 0xdc,
+	0x2f, 0xdd, 0x51, 0x50, 0xee, 0x71, 0x9f, 0x4e, 0xe3, 0x09, 0x17, 0xc2, 0x5d, 0xc2, 0xc1, 0x69,
+	0x3c, 0x89, 0x8f, 0xea, 0x09, 0x17, 0xc2, 0x07, 0x2a, 0x52, 0x08, 0x01, 0x90, 0xaf, 0xc7, 0xfd,
+	0x43, 0x7f, 0x5c, 0xba, 0x27, 0x77, 0x38, 0x3f, 0x7d, 0xd2, 0xe0, 0x30, 0x29, 0x84, 0x27, 0x28,
+	0xa7, 0xfb, 0x09, 0x21, 0x3c, 0x49, 0xc8, 0xe9, 0x09, 0xca, 0xe9, 0x41, 0x92, 0x84, 0xcb, 0xe9,
+	0xab, 0x6c, 0x87, 0x4f, 0x34, 0x1d, 0x7a, 0x51, 0x3f, 0x38, 0xf2, 0xa3, 0x52, 0x99, 0xd6, 0xb2,
+	0x05, 0xf0, 0xee, 0xd0, 0xe5, 0x50, 0xfd, 0x3e, 0x2d, 0x68, 0x3a, 0xf4, 0xc2, 0x70, 0x5c, 0xfa,
+	0x0a, 0x11, 0x15, 0x90, 0xc8, 0x09, 0xc7, 0x2a, 0x45, 0x34, 0x1e, 0x97, 0x1e, 0x26, 0x29, 0xdc,
+	0xf1, 0x58, 0xbf, 0xc7, 0xd8, 0x64, 0x3e, 0x0e, 0x3d, 0xdc, 0xd3, 0x87, 0xb4, 0x9a, 0x02, 0xc0,
+	0xda, 0x7c, 0x4b, 0xb7, 0x58, 0x8e, 0x13, 0x44, 0x83, 0xd2, 0x57, 0xc5, 0x01, 0x00, 0xc0, 0xe5,
+	0xd2, 0xe2, 0xa8, 0xc3, 0x59, 0x58, 0xfa, 0x9a, 0x50, 0x19, 0x80, 0x54, 0x67, 0x21, 0x20, 0xe7,
+	0x87, 0x87, 0xde, 0x28, 0x1c, 0x0d, 0x4b, 0x1f, 0x09, 0xe4, 0xfc, 0xf0, 0xb0, 0x15, 0x8e, 0x86,
+	0xfa, 0x5d, 0x56, 0x88, 0x4e, 0xa6, 0x53, 0x7f, 0x0c, 0x51, 0xf8, 0xeb, 0xe4, 0x31, 0xf2, 0x08,
+	0x6a, 0x0d, 0xa5, 0xa4, 0xfd, 0xb3, 0xe8, 0x78, 0x18, 0x94, 0x2a, 0xaa, 0xa4, 0x4d, 0x0e, 0xd3,
+	0x3f, 0x61, 0x57, 0x93, 0x8e, 0x07, 0x7d, 0xdb, 0x88, 0xf3, 0x4a, 0xd9, 0x57, 0x12, 0xde, 0x87,
+	0xfb, 0xb9, 0x32, 0xdb, 0x22, 0x0f, 0x84, 0xa4, 0xbf, 0xc2, 0x85, 0x91, 0xb2, 0x19, 0xba, 0x21,
+	0x95, 0x26, 0x0c, 0x06, 0x48, 0xf3, 0xb9, 0x42, 0xe3, 0x04, 0x03, 0x4e, 0xf3, 0x90, 0x6d, 0x0b,
+	0xb7, 0x83, 0x44, 0x13, 0xbe, 0xbc, 0x94, 0x5d, 0x24, 0xdf, 0x23, 0xa8, 0x84, 0x47, 0x40, 0xaa,
+	0x40, 0x50, 0x91, 0x5b, 0x48, 0x50, 0xc9, 0x45, 0x85, 0x2a, 0x95, 0xb2, 0x2a, 0x32, 0x0f, 0x24,
+	0xfa, 0x35, 0x22, 0x62, 0x68, 0x23, 0x2a, 0x4d, 0x24, 0x68, 0xfe, 0xb2, 0x42, 0xe3, 0x12, 0xcd,
+	0x87, 0x7c, 0xb6, 0x27, 0xf1, 0x9a, 0xfe, 0x4a, 0x8a, 0xf6, 0x57, 0x24, 0x03, 0x48, 0x90, 0xc9,
+	0x45, 0xfd, 0x7a, 0x82, 0x4c, 0xac, 0xea, 0x1b, 0x4c, 0x53, 0xcc, 0x01, 0x29, 0x7f, 0x23, 0x45,
+	0xd3, 0xee, 0xc4, 0x46, 0x21, 0x78, 0x0a, 0x6d, 0x40, 0xca, 0xbf, 0x29, 0x28, 0x8b, 0xa4, 0x13,
+	0x9c, 0x0c, 0xc2, 0x89, 0xd0, 0x0b, 0xa4, 0xfb, 0xcd, 0x14, 0x9d, 0xe8, 0x96, 0xd0, 0x8e, 0xc4,
+	0xe4, 0xa8, 0x21, 0x48, 0xfa, 0x5b, 0x89, 0xc9, 0x51, 0x4f, 0x80, 0x18, 0x22, 0xea, 0x69, 0x7f,
+	0x7c, 0xe2, 0x57, 0x37, 0x31, 0xd3, 0x29, 0x7b, 0xec, 0xf6, 0xfa, 0xa8, 0x0c, 0x29, 0x2d, 0x60,
+	0xb0, 0xc8, 0xa0, 0xe4, 0x0a, 0x92, 0x8c, 0x26, 0x96, 0x61, 0xa0, 0x23, 0xca, 0x20, 0xca, 0x3f,
+	0x13, 0xb0, 0xf2, 0x3f, 0xcb, 0x62, 0xa9, 0xd8, 0x1f, 0x40, 0xfd, 0xa8, 0x7f, 0x92, 0x88, 0xd9,
+	0xcb, 0xb9, 0x21, 0x92, 0xa9, 0x39, 0xd2, 0xb7, 0xd9, 0xe6, 0xec, 0x24, 0x9a, 0x9f, 0x44, 0x94,
+	0x1b, 0x7e, 0xb0, 0x6e, 0x0c, 0x52, 0x81, 0x51, 0xe2, 0x2f, 0xfd, 0x17, 0xc8, 0x28, 0xa3, 0x68,
+	0xcc, 0x43, 0x7a, 0x71, 0x45, 0xa5, 0x48, 0x63, 0x05, 0x9d, 0x30, 0x5b, 0x37, 0x1a, 0xeb, 0x8f,
+	0x58, 0x76, 0x7e, 0x12, 0x1e, 0x53, 0x46, 0xb4, 0x76, 0xa9, 0x40, 0xc3, 0x73, 0x85, 0x93, 0xf0,
+	0x18, 0xa6, 0x9c, 0xcf, 0xe6, 0x9c, 0x1d, 0x65, 0x40, 0x6b, 0xa7, 0x14, 0x74, 0xdc, 0x19, 0xcc,
+	0xe6, 0x9d, 0xf9, 0x38, 0xd4, 0xbf, 0xc9, 0x36, 0x8e, 0x82, 0xd9, 0xc9, 0x9c, 0x27, 0x06, 0xc5,
+	0x47, 0x77, 0xd7, 0x8d, 0xe5, 0x44, 0x10, 0x34, 0xf8, 0x0f, 0xfd, 0x5b, 0x6c, 0x73, 0xfa, 0x86,
+	0x6f, 0x33, 0x77, 0xbe, 0x88, 0x90, 0x0a, 0x06, 0x4e, 0xdf, 0xc0, 0x16, 0x9f, 0xb2, 0x42, 0xe8,
+	0x47, 0x94, 0xb1, 0xe5, 0xf9, 0xd8, 0x07, 0xeb, 0xc6, 0x4a, 0x42, 0xf0, 0x4f, 0xa1, 0x1f, 0x61,
+	0xf2, 0xf7, 0xdd, 0x05, 0x15, 0x28, 0x70, 0x26, 0x0f, 0xd7, 0x31, 0x51, 0x69, 0xc1, 0x89, 0xab,
+	0xcf, 0xd5, 0x3c, 0xdb, 0x44, 0xb2, 0xf2, 0x53, 0x4c, 0xf7, 0x12, 0x07, 0xcb, 0x6b, 0x2e, 0x48,
+	0xbf, 0x52, 0x54, 0x73, 0x51, 0x35, 0x09, 0x45, 0x55, 0x5c, 0xbc, 0x6e, 0x4e, 0xfa, 0x67, 0x50,
+	0xb7, 0x7e, 0x82, 0xf5, 0xd4, 0xc2, 0xf1, 0x42, 0xf2, 0x27, 0x55, 0x82, 0xaa, 0x57, 0x3a, 0xee,
+	0xf2, 0xc7, 0x58, 0xca, 0x28, 0xa7, 0x0a, 0xa9, 0xbf, 0x1f, 0x1d, 0xfb, 0x81, 0xd4, 0xd8, 0x6d,
+	0x3b, 0x06, 0x94, 0x3f, 0x4b, 0x4c, 0x21, 0x8e, 0xf3, 0x0b, 0x06, 0xfd, 0x34, 0xd3, 0x16, 0xcf,
+	0x11, 0x16, 0xc5, 0x7f, 0x28, 0x25, 0x35, 0x7f, 0x6e, 0x0d, 0xcb, 0x95, 0x84, 0x20, 0xf0, 0xf8,
+	0xf4, 0xeb, 0xf2, 0xb8, 0xa9, 0x9c, 0xe7, 0x87, 0x59, 0x6e, 0xb2, 0x6b, 0xab, 0x8e, 0x4b, 0xff,
+	0x84, 0xb2, 0x68, 0x4e, 0x7d, 0x7e, 0x7d, 0x41, 0xe9, 0xf6, 0x73, 0x76, 0x73, 0xcd, 0x99, 0x2d,
+	0x99, 0x7c, 0x6a, 0xd9, 0xe4, 0xe1, 0xa0, 0x78, 0xfe, 0x0b, 0x27, 0xb2, 0x65, 0xf3, 0xdf, 0xe5,
+	0xdf, 0xcd, 0xa0, 0x78, 0x47, 0xd3, 0x30, 0x0a, 0x4e, 0xd0, 0x17, 0xe8, 0x8a, 0x2f, 0xd8, 0x26,
+	0x6b, 0x6f, 0x32, 0x76, 0x34, 0x8b, 0x66, 0x58, 0xb5, 0x92, 0xc5, 0x2f, 0x17, 0x11, 0x0a, 0x17,
+	0x2f, 0x26, 0x87, 0x68, 0x0d, 0x4f, 0xbc, 0xc4, 0xd5, 0x5d, 0xb6, 0xf3, 0x26, 0x18, 0x45, 0x4a,
+	0x3e, 0x8e, 0x3e, 0xe0, 0x1b, 0xe7, 0x72, 0x4b, 0x0e, 0x81, 0xe4, 0x9d, 0x43, 0x64, 0xf2, 0xfe,
+	0x94, 0xe5, 0x50, 0x2c, 0x21, 0xf9, 0x85, 0x87, 0xe7, 0xb2, 0x23, 0x5a, 0xb0, 0x71, 0xfa, 0xa9,
+	0x7f, 0x87, 0x6d, 0x4c, 0x7c, 0x10, 0x1d, 0xfa, 0x87, 0xf2, 0xb9, 0xe3, 0x39, 0x25, 0xd8, 0x2b,
+	0xff, 0xa1, 0xf7, 0x16, 0xa4, 0xbf, 0xb9, 0xa6, 0x81, 0xa5, 0xb2, 0x38, 0xd7, 0xe4, 0x36, 0xf1,
+	0xa8, 0xca, 0xdf, 0xc2, 0x30, 0xb0, 0x5a, 0xae, 0xe7, 0xf4, 0x7c, 0xca, 0x7d, 0xf6, 0xc1, 0xf9,
+	0x22, 0xd4, 0x6f, 0xb3, 0xbc, 0x3c, 0x01, 0xec, 0x5f, 0xc8, 0x67, 0xfd, 0x2b, 0x6c, 0x3b, 0x99,
+	0xb4, 0xa4, 0x39, 0xc1, 0xd6, 0x44, 0xc9, 0x56, 0xca, 0x6d, 0xd4, 0xc6, 0x15, 0x62, 0xd5, 0x3f,
+	0x8d, 0x4f, 0x03, 0x7b, 0x65, 0x37, 0xd7, 0x38, 0x1e, 0x29, 0xfe, 0xf2, 0x23, 0xec, 0x29, 0x2e,
+	0x09, 0x99, 0xbb, 0x06, 0xf8, 0xa1, 0x6c, 0x92, 0x3f, 0xb7, 0x86, 0xe5, 0x03, 0x6c, 0xed, 0xad,
+	0x93, 0xea, 0x8f, 0x6d, 0x14, 0xff, 0x25, 0x83, 0x9d, 0x0c, 0xbe, 0xde, 0xc9, 0x8c, 0x3a, 0x68,
+	0xb3, 0xcf, 0x47, 0x3e, 0x49, 0x8a, 0x9e, 0xf4, 0x7b, 0xac, 0x88, 0xbf, 0x54, 0x29, 0x31, 0x04,
+	0xf1, 0x24, 0x40, 0x3d, 0xa1, 0x4c, 0xb2, 0x2b, 0xf7, 0x73, 0x2c, 0x37, 0x98, 0x4d, 0x26, 0xfd,
+	0x29, 0xd6, 0xf6, 0x3b, 0x2b, 0x3c, 0xbc, 0x98, 0xdf, 0x23, 0x42, 0x5b, 0x8c, 0xd0, 0x1f, 0xb0,
+	0xad, 0xd1, 0x70, 0xec, 0x7b, 0xd1, 0x68, 0xe2, 0xcf, 0x4e, 0x22, 0xea, 0x7f, 0x14, 0x01, 0xe6,
+	0x22, 0x08, 0x48, 0x8e, 0xfb, 0xc1, 0x50, 0x92, 0x60, 0x93, 0xad, 0x08, 0x30, 0x41, 0x72, 0x9b,
+	0xe5, 0xe7, 0xc1, 0x68, 0x16, 0x8c, 0xa2, 0xb7, 0xd4, 0x69, 0x93, 0xcf, 0xfa, 0x2e, 0x2b, 0x60,
+	0xfb, 0x0a, 0x96, 0x8e, 0x7d, 0xb6, 0x3c, 0x02, 0x5a, 0xbc, 0xd9, 0x38, 0x3b, 0x89, 0xb0, 0xea,
+	0xc6, 0x56, 0x5b, 0x6e, 0x76, 0x12, 0xf1, 0x72, 0x7b, 0x97, 0x15, 0x00, 0x85, 0xe1, 0x12, 0x9b,
+	0x6d, 0x40, 0xbb, 0xc7, 0x3d, 0xaa, 0xec, 0x77, 0x16, 0xd5, 0x7e, 0xe7, 0x4f, 0xb1, 0x0d, 0xde,
+	0x81, 0xe1, 0xf5, 0x6c, 0xf1, 0xd1, 0x8d, 0xd5, 0xfd, 0x19, 0x1b, 0x89, 0xf4, 0xa7, 0x6c, 0x4b,
+	0x39, 0xf0, 0xb0, 0xb4, 0xcd, 0x15, 0xec, 0xce, 0x79, 0xb6, 0x66, 0x27, 0x46, 0x94, 0xbf, 0x9f,
+	0xc2, 0xd4, 0xe7, 0xf0, 0x64, 0xf0, 0xb9, 0x1f, 0xc1, 0xe1, 0xbe, 0xf1, 0x47, 0x47, 0xc7, 0x22,
+	0x82, 0xd1, 0x13, 0x24, 0x59, 0x6f, 0x78, 0x63, 0x88, 0x6f, 0x13, 0xc3, 0x58, 0x81, 0x43, 0xf8,
+	0x46, 0xef, 0xb1, 0x22, 0xa2, 0x71, 0xab, 0x78, 0xba, 0x38, 0x02, 0x37, 0xfb, 0xa9, 0xea, 0x92,
+	0x2e, 0x66, 0x04, 0xff, 0x9e, 0x9a, 0x47, 0x18, 0x76, 0x40, 0xf3, 0x7e, 0x3e, 0xd6, 0x12, 0x4c,
+	0xcd, 0x96, 0xfd, 0x92, 0x24, 0x5e, 0x56, 0x93, 0x8f, 0x13, 0x6d, 0xfe, 0xdd, 0x35, 0x43, 0x95,
+	0xa4, 0x4e, 0x0d, 0x79, 0x99, 0x44, 0xc8, 0x83, 0xed, 0xa0, 0xc0, 0xd6, 0x6f, 0x07, 0xf1, 0xb6,
+	0xa0, 0x2b, 0xff, 0x66, 0x8a, 0xed, 0xf0, 0x8e, 0x60, 0x1f, 0x9e, 0x21, 0x5f, 0x48, 0xaa, 0x55,
+	0x6a, 0x41, 0xad, 0x6e, 0xb2, 0xdc, 0x68, 0xaa, 0x8a, 0x7b, 0x73, 0x34, 0xe5, 0xb2, 0x56, 0x44,
+	0x99, 0xb9, 0x98, 0x28, 0xa5, 0x5d, 0x67, 0x55, 0xbb, 0x26, 0xf1, 0xd2, 0x7a, 0x46, 0xd3, 0xf3,
+	0x97, 0xf3, 0xb3, 0xb2, 0x63, 0x9a, 0x5e, 0x63, 0xa0, 0x92, 0xd1, 0x62, 0xdb, 0xf4, 0x1c, 0xbb,
+	0x8f, 0x7d, 0x49, 0x36, 0xe1, 0x4b, 0xa4, 0x15, 0x6c, 0x5c, 0xc4, 0x0a, 0xc4, 0xf6, 0x36, 0x95,
+	0xed, 0xfd, 0xfd, 0x0c, 0x26, 0x31, 0x7c, 0x50, 0xe0, 0x4f, 0x66, 0xa7, 0xfe, 0x7a, 0xd7, 0xa5,
+	0xda, 0x7e, 0x7a, 0xc1, 0xf6, 0x7f, 0x5e, 0x6e, 0x3c, 0xc3, 0x37, 0xfe, 0x70, 0xb5, 0x67, 0xa2,
+	0x29, 0xce, 0xdb, 0x7b, 0x36, 0xb9, 0xf7, 0x07, 0x6c, 0x6b, 0x78, 0x12, 0xf4, 0x29, 0x11, 0x1a,
+	0x08, 0xb7, 0x25, 0x60, 0x8e, 0x3f, 0x80, 0xd0, 0x23, 0x49, 0xa6, 0x40, 0x83, 0x7e, 0x4b, 0x8e,
+	0xeb, 0x86, 0xfe, 0x60, 0xc9, 0xfd, 0xe5, 0xbe, 0xd8, 0xfd, 0xe5, 0x97, 0xdd, 0xdf, 0x03, 0xb6,
+	0x45, 0x07, 0x38, 0x98, 0x9d, 0x4c, 0xd1, 0x93, 0x65, 0xed, 0x22, 0xc2, 0x6a, 0x00, 0x02, 0x1f,
+	0x70, 0xf8, 0x36, 0xf2, 0x89, 0x80, 0x71, 0x82, 0x02, 0x40, 0x10, 0x2d, 0xcf, 0xec, 0xed, 0x05,
+	0xce, 0xac, 0xfc, 0x77, 0xe8, 0xbd, 0x19, 0x86, 0xb3, 0xc3, 0xfe, 0x74, 0x78, 0xd1, 0xf7, 0x66,
+	0xca, 0x88, 0xe4, 0x9b, 0xb9, 0x38, 0xc1, 0x86, 0x9f, 0xa0, 0x15, 0x41, 0x3f, 0xf2, 0x49, 0xe5,
+	0xf8, 0x6f, 0xbe, 0x85, 0x93, 0x20, 0x8c, 0xbc, 0x70, 0xf4, 0xab, 0x3e, 0x1d, 0x48, 0x81, 0x43,
+	0x9c, 0xd1, 0xaf, 0xfa, 0xe5, 0x29, 0x66, 0xcb, 0xca, 0x0c, 0xc3, 0x60, 0x36, 0x5f, 0x99, 0x03,
+	0x7e, 0x29, 0xf3, 0xfd, 0xdd, 0x14, 0xa6, 0x34, 0xea, 0x84, 0xe1, 0x60, 0x0e, 0xca, 0xd4, 0x0f,
+	0x3e, 0xff, 0x89, 0xcd, 0x0b, 0xe8, 0x79, 0xe0, 0x0f, 0xbc, 0xb1, 0x7f, 0xea, 0x8f, 0xc5, 0xfb,
+	0x02, 0x80, 0xb4, 0x01, 0x50, 0xfe, 0x57, 0x29, 0xb6, 0xbb, 0xb0, 0xac, 0x44, 0x9a, 0xf0, 0xff,
+	0xef, 0x84, 0x96, 0xb2, 0x98, 0x8d, 0x15, 0xd5, 0xfc, 0xbf, 0x20, 0xcf, 0x86, 0xcb, 0xb8, 0x60,
+	0xe0, 0x90, 0xc4, 0xcb, 0x81, 0x43, 0x06, 0xea, 0xb4, 0x1a, 0xa8, 0xd5, 0x54, 0x2c, 0x93, 0x48,
+	0xc5, 0xf4, 0x6f, 0xb3, 0x0d, 0xd8, 0xbc, 0x88, 0x0d, 0xe5, 0xf3, 0x04, 0x44, 0xef, 0x46, 0x71,
+	0x40, 0xf9, 0x19, 0xae, 0xdc, 0x0f, 0x82, 0x59, 0xe0, 0x4d, 0xc2, 0xa3, 0x95, 0x2a, 0xa0, 0xb3,
+	0x2c, 0xef, 0x45, 0xa6, 0xe9, 0x4d, 0xe1, 0x6c, 0xe8, 0x4b, 0x17, 0x98, 0x51, 0x5c, 0xe0, 0x6f,
+	0x90, 0x76, 0x21, 0xb7, 0x44, 0xe7, 0x64, 0x1d, 0xeb, 0x5b, 0x2c, 0xef, 0x9f, 0x61, 0x10, 0x24,
+	0xf6, 0x39, 0xff, 0x6c, 0xce, 0x1b, 0xa1, 0x8b, 0x92, 0xcf, 0x9c, 0x93, 0x3f, 0xaa, 0x71, 0xe6,
+	0x94, 0xec, 0xfc, 0x64, 0x1c, 0x8d, 0xe6, 0x7d, 0xfe, 0x52, 0xed, 0x7b, 0x27, 0x7e, 0x18, 0xe9,
+	0x9f, 0x25, 0xb4, 0xe8, 0xde, 0xb2, 0x90, 0xe4, 0x08, 0x45, 0x89, 0x56, 0x9f, 0x85, 0xce, 0xb2,
+	0x87, 0xb3, 0xe1, 0x5b, 0xb1, 0x7b, 0xf8, 0x5d, 0x8e, 0xc8, 0x96, 0x95, 0x79, 0xe7, 0xe3, 0xb7,
+	0x3f, 0xe9, 0x59, 0x7f, 0x3b, 0x85, 0xaf, 0x91, 0x87, 0x7e, 0x38, 0xe0, 0x2a, 0xf2, 0x3a, 0xe0,
+	0xbf, 0xf9, 0x7c, 0x05, 0x3b, 0x37, 0x79, 0x1d, 0xd4, 0x01, 0x85, 0x6f, 0xfd, 0xe4, 0xdb, 0xc4,
+	0x82, 0xbd, 0x79, 0xfc, 0x46, 0x20, 0x42, 0x42, 0xe0, 0xbb, 0xe4, 0xcd, 0x10, 0x11, 0x77, 0x19,
+	0x0b, 0xfd, 0x60, 0xd4, 0x1f, 0x7b, 0xd3, 0x93, 0x09, 0x97, 0x70, 0xc1, 0x2e, 0x20, 0xa4, 0x7b,
+	0x32, 0x81, 0x71, 0x43, 0x9c, 0x96, 0xdb, 0x44, 0xc1, 0xde, 0x1c, 0xce, 0x61, 0x5c, 0xf9, 0x0f,
+	0x52, 0xec, 0x86, 0x8c, 0x52, 0x61, 0xd4, 0x8f, 0x42, 0x79, 0x02, 0xe7, 0xbc, 0x26, 0x57, 0x93,
+	0xda, 0xf4, 0x39, 0x49, 0x6d, 0x66, 0x21, 0xa9, 0x5d, 0x17, 0xd0, 0x17, 0x8a, 0x83, 0x8d, 0xa5,
+	0xe2, 0x40, 0x46, 0x8f, 0xcd, 0x8b, 0x44, 0x8f, 0x7f, 0x93, 0xc1, 0x64, 0x2a, 0xde, 0x94, 0xbe,
+	0xc3, 0xd2, 0xa3, 0x21, 0x7f, 0x9b, 0x93, 0xb5, 0xd3, 0xa3, 0x73, 0xef, 0x00, 0x2c, 0x46, 0xde,
+	0xf4, 0x05, 0x22, 0x6f, 0x66, 0x45, 0xe4, 0x55, 0xd3, 0x86, 0xec, 0x42, 0xda, 0xf0, 0xe5, 0x14,
+	0x25, 0x52, 0xf1, 0x72, 0xaa, 0xe2, 0xc5, 0x42, 0xce, 0x27, 0x84, 0xfc, 0x25, 0xc6, 0xf0, 0xff,
+	0x47, 0xd5, 0xc7, 0x1f, 0x52, 0xa4, 0xe9, 0x1f, 0x1d, 0x05, 0xfe, 0x51, 0x3f, 0xf2, 0xff, 0xcc,
+	0x68, 0xe8, 0x5f, 0x62, 0xb7, 0x56, 0x6f, 0x0c, 0x9c, 0xd0, 0xe2, 0x41, 0xa5, 0xbe, 0xe8, 0xa0,
+	0xd2, 0x8b, 0x07, 0x75, 0x97, 0x31, 0x3e, 0x35, 0xa2, 0x71, 0x8f, 0x05, 0x80, 0x70, 0x74, 0xf9,
+	0x4f, 0x32, 0xe8, 0xfa, 0x51, 0x78, 0x74, 0x53, 0xc3, 0x9b, 0x07, 0xb3, 0xb9, 0x1f, 0xf0, 0x9c,
+	0x56, 0x75, 0x82, 0x1f, 0x2d, 0xdf, 0x78, 0x5a, 0x1a, 0xa6, 0x7a, 0xc3, 0x83, 0x85, 0x63, 0xc7,
+	0x06, 0xd8, 0x27, 0x17, 0xe1, 0xa2, 0x8e, 0xe3, 0xef, 0xc7, 0x94, 0x67, 0xdd, 0x66, 0xc5, 0xa9,
+	0x7f, 0x16, 0xa9, 0x97, 0x41, 0x8a, 0x8f, 0x3e, 0xbe, 0x08, 0x5b, 0x65, 0x58, 0xf3, 0x92, 0xcd,
+	0xe0, 0x91, 0xae, 0x90, 0xec, 0x2d, 0xb6, 0xc2, 0xbe, 0x71, 0x11, 0x7e, 0x2b, 0x3a, 0x62, 0x3f,
+	0xc7, 0x32, 0xb3, 0xb3, 0xc9, 0xda, 0x1b, 0x03, 0x2b, 0x98, 0xcc, 0xce, 0x26, 0xcd, 0x4b, 0x36,
+	0x8c, 0x02, 0x89, 0xad, 0x68, 0x89, 0x5d, 0x48, 0x62, 0xe7, 0x76, 0xc6, 0xc4, 0x9b, 0x92, 0xf2,
+	0x11, 0xfb, 0xca, 0x05, 0x24, 0xbe, 0x64, 0xb0, 0xa9, 0x1f, 0xd9, 0x60, 0xbf, 0xcb, 0xca, 0x5f,
+	0x7c, 0x06, 0xfa, 0x43, 0xb6, 0x13, 0x3f, 0x7a, 0xa3, 0x21, 0xce, 0xb4, 0x6d, 0x6f, 0xc9, 0x93,
+	0x69, 0x0d, 0xc3, 0xb2, 0x83, 0x6d, 0xb9, 0xf5, 0xf2, 0xff, 0x71, 0x5a, 0x67, 0xdf, 0x5c, 0xa7,
+	0xf8, 0x70, 0x1e, 0x10, 0x25, 0x67, 0x67, 0x13, 0xbe, 0xa2, 0x0c, 0x5e, 0xb6, 0x99, 0x9d, 0x4d,
+	0x60, 0x2d, 0x7f, 0x3b, 0xb5, 0x56, 0x82, 0xe7, 0x76, 0xd1, 0x56, 0xbc, 0x4d, 0x4a, 0x24, 0x51,
+	0x99, 0x64, 0x12, 0xf5, 0x0d, 0x96, 0xb8, 0x41, 0xe2, 0x51, 0xb6, 0x04, 0x2b, 0xd1, 0x54, 0x44,
+	0x1d, 0x32, 0xa7, 0xdf, 0x49, 0x33, 0x7d, 0x69, 0x4d, 0xe1, 0x79, 0x3e, 0x51, 0xdc, 0x42, 0x4b,
+	0x2b, 0xb7, 0xd0, 0x3e, 0x64, 0x3b, 0x4a, 0xfb, 0x12, 0xfc, 0x57, 0x86, 0x3b, 0x93, 0xed, 0xb8,
+	0x7f, 0x09, 0xbe, 0x5c, 0x25, 0xe3, 0xcd, 0x51, 0x72, 0x8f, 0x92, 0xec, 0x05, 0x00, 0x95, 0x4b,
+	0x49, 0x1b, 0x89, 0x4b, 0x49, 0xf7, 0x58, 0x71, 0xd2, 0x3f, 0xf3, 0xfc, 0x69, 0x14, 0x8c, 0xfc,
+	0x90, 0x42, 0x19, 0x9b, 0xf4, 0xcf, 0x4c, 0x84, 0xe8, 0x7b, 0x50, 0x72, 0x70, 0xf7, 0x03, 0xf8,
+	0x1c, 0x3f, 0xcd, 0x8b, 0x98, 0x11, 0xf8, 0x2b, 0x5b, 0x19, 0x5a, 0xfe, 0x7e, 0x0a, 0x9b, 0xf4,
+	0x48, 0x8a, 0xb1, 0xff, 0xfc, 0x58, 0x0f, 0xaa, 0x71, 0xaa, 0x7a, 0xd2, 0x6d, 0xbb, 0x88, 0x30,
+	0xf4, 0xa5, 0x0f, 0xd8, 0xd6, 0x78, 0x36, 0xfb, 0xfc, 0x64, 0xae, 0x78, 0xd3, 0xac, 0x5d, 0x44,
+	0x18, 0x92, 0x7c, 0x85, 0x6d, 0x73, 0xd9, 0xf9, 0x43, 0xa2, 0xc9, 0x52, 0x0f, 0x18, 0x81, 0xe8,
+	0x74, 0x3f, 0xc5, 0x44, 0x4b, 0xde, 0x33, 0x8b, 0xc3, 0xd8, 0xba, 0xcb, 0x5f, 0xe5, 0x3f, 0xa2,
+	0x3c, 0x26, 0x1e, 0xb3, 0xfe, 0xa2, 0xd8, 0x5d, 0xc6, 0x82, 0x33, 0xea, 0xb2, 0x84, 0x22, 0x22,
+	0x04, 0x67, 0x16, 0x02, 0x00, 0x1d, 0xc5, 0x68, 0xdc, 0x43, 0x21, 0x92, 0xe8, 0x5b, 0x2c, 0x1f,
+	0x9c, 0x79, 0x10, 0x40, 0x42, 0x5a, 0x7c, 0x2e, 0x38, 0xab, 0xc2, 0x23, 0x97, 0x9e, 0x40, 0x61,
+	0xd8, 0xcb, 0x45, 0x84, 0xc2, 0x39, 0xa1, 0x08, 0x9e, 0xfb, 0x43, 0x7e, 0xaa, 0x7c, 0xce, 0x3a,
+	0x02, 0x68, 0x4e, 0x81, 0xce, 0x89, 0x39, 0x05, 0x7a, 0x97, 0x15, 0x82, 0x33, 0x2c, 0x3f, 0x42,
+	0x4a, 0x55, 0xf2, 0xc1, 0x99, 0xc9, 0x9f, 0x01, 0x19, 0x49, 0x24, 0x66, 0x2a, 0xf9, 0x48, 0x20,
+	0xef, 0xb3, 0xad, 0xe0, 0xcc, 0x7b, 0x1d, 0xf4, 0x27, 0x3e, 0x90, 0x50, 0xa2, 0xc2, 0x82, 0xb3,
+	0x06, 0x80, 0x4c, 0x7e, 0x35, 0xb2, 0x18, 0x9c, 0x79, 0xb3, 0x53, 0x3f, 0xe0, 0x04, 0x45, 0xb1,
+	0xb4, 0xde, 0xa9, 0x1f, 0x00, 0xfe, 0x0e, 0x5f, 0xf9, 0x20, 0x18, 0x70, 0xf4, 0x96, 0x98, 0xbc,
+	0x16, 0x0c, 0x70, 0x34, 0x1b, 0xcc, 0xc6, 0xe3, 0x51, 0x48, 0x79, 0x0b, 0xc5, 0x7a, 0x01, 0x59,
+	0xca, 0x10, 0x77, 0x2e, 0x90, 0x21, 0x5e, 0x5e, 0xce, 0x10, 0xcb, 0x8f, 0xf1, 0xb5, 0x00, 0xb6,
+	0x11, 0x97, 0x52, 0x9b, 0x75, 0x2f, 0xd4, 0x0e, 0xd0, 0xee, 0xb1, 0x73, 0x88, 0x0a, 0xe7, 0x07,
+	0xff, 0xf7, 0x49, 0x43, 0xf9, 0xfb, 0x69, 0x34, 0x1d, 0x65, 0x39, 0xe7, 0x2c, 0x83, 0x1f, 0x9f,
+	0xff, 0x3a, 0x61, 0x37, 0xf9, 0xc0, 0x7f, 0x2d, 0x8d, 0x26, 0xb1, 0x9a, 0xcc, 0x17, 0xad, 0x26,
+	0xbb, 0x98, 0xc2, 0x7c, 0x59, 0xfd, 0xaf, 0x2a, 0xdb, 0x22, 0x49, 0xf1, 0x1d, 0x91, 0x6f, 0xb9,
+	0xb7, 0xa6, 0x21, 0x2b, 0xc4, 0x69, 0x17, 0xf1, 0xd9, 0x81, 0x31, 0x50, 0xb6, 0xed, 0xc4, 0x92,
+	0xe1, 0xc5, 0xdb, 0x17, 0xdd, 0x93, 0x3c, 0xb7, 0x5d, 0x9c, 0x5e, 0xdb, 0x2e, 0xce, 0x5c, 0xb0,
+	0x5d, 0xfc, 0xfb, 0x29, 0xf5, 0xac, 0xc0, 0xaf, 0xbe, 0xd5, 0x7f, 0x99, 0xee, 0x9f, 0xe2, 0x3b,
+	0xd2, 0x75, 0x4b, 0x02, 0x92, 0xea, 0x4f, 0xfd, 0xfa, 0x7f, 0xff, 0x0f, 0x77, 0x37, 0x91, 0x1e,
+	0x7e, 0xde, 0xd1, 0x6f, 0x2b, 0xd4, 0x3f, 0x9d, 0xa4, 0xc6, 0x3b, 0xab, 0xfa, 0x23, 0xbc, 0x97,
+	0x2c, 0x12, 0xba, 0x3b, 0x6b, 0xf8, 0x73, 0x1a, 0xbc, 0xb5, 0x1c, 0x96, 0xff, 0x5a, 0x0a, 0x75,
+	0x15, 0x51, 0x32, 0x46, 0x5d, 0x63, 0x1b, 0xfc, 0x3a, 0xa3, 0x78, 0xf9, 0xcb, 0x1f, 0x96, 0x2e,
+	0xeb, 0xa6, 0x97, 0x2f, 0xeb, 0x82, 0xd2, 0x40, 0x20, 0xe1, 0xfc, 0x44, 0x90, 0x2e, 0x4c, 0xfa,
+	0x67, 0x3c, 0x79, 0x0f, 0xf5, 0x52, 0xf2, 0x3d, 0xc2, 0x76, 0x1c, 0xf8, 0xbf, 0xad, 0xf6, 0xac,
+	0x96, 0xbb, 0x0d, 0xe7, 0xbc, 0x39, 0xfb, 0x15, 0x7c, 0x27, 0xad, 0x34, 0x65, 0xd0, 0x34, 0x2a,
+	0xec, 0x0a, 0xa9, 0x38, 0x07, 0xaa, 0x56, 0x77, 0x19, 0x11, 0xd5, 0xfe, 0x14, 0x7d, 0xbf, 0xfe,
+	0x55, 0x76, 0x99, 0xeb, 0xba, 0x42, 0x89, 0xe6, 0xb7, 0x0d, 0x60, 0x49, 0x57, 0xfe, 0x3d, 0x32,
+	0x41, 0x9c, 0x4c, 0x9a, 0xe0, 0x9a, 0xa5, 0x2d, 0xa4, 0xf9, 0xe9, 0x85, 0x34, 0x1f, 0x66, 0x8d,
+	0xbb, 0xee, 0xaa, 0x1d, 0x6e, 0x23, 0xb8, 0x35, 0x45, 0xba, 0x32, 0xe3, 0xcb, 0x88, 0xa9, 0xd0,
+	0x18, 0x8b, 0x00, 0x14, 0x34, 0x5f, 0x96, 0x39, 0x3e, 0x65, 0x2c, 0x96, 0x21, 0x19, 0xe3, 0x83,
+	0xf3, 0x3a, 0x60, 0xa8, 0x4f, 0x05, 0xf8, 0x8d, 0xc6, 0xf8, 0x6b, 0xd8, 0xb9, 0x47, 0x92, 0x73,
+	0x3f, 0x0e, 0x50, 0x25, 0x97, 0x5e, 0xd3, 0x83, 0xcb, 0xfc, 0xa8, 0x3d, 0xb8, 0x7f, 0x4a, 0x2a,
+	0x8d, 0x04, 0x52, 0xa5, 0xe9, 0x6a, 0x3c, 0xbe, 0x16, 0x4f, 0xc9, 0xab, 0xf1, 0x1d, 0xfe, 0x5e,
+	0xf6, 0x2e, 0x6d, 0x1a, 0x95, 0x9e, 0xce, 0x09, 0x20, 0xee, 0x4a, 0xc5, 0xcf, 0xac, 0x50, 0x7c,
+	0xe2, 0x2f, 0x1a, 0x87, 0x82, 0x3f, 0xa8, 0x8e, 0x44, 0x0e, 0x66, 0xe3, 0x99, 0xe8, 0x79, 0x02,
+	0xb2, 0x06, 0xcf, 0xe5, 0x53, 0xf6, 0x80, 0xb7, 0xf9, 0x12, 0x0d, 0x3e, 0x69, 0x00, 0xc7, 0xab,
+	0xaf, 0x41, 0xa5, 0xbe, 0x20, 0x71, 0x5d, 0xe8, 0xfe, 0xad, 0xea, 0x2f, 0x8e, 0x31, 0xb8, 0x25,
+	0xe6, 0xfd, 0xc9, 0xcd, 0x66, 0x62, 0x1f, 0xf1, 0x7b, 0x27, 0xfe, 0x09, 0x25, 0xe6, 0x34, 0x17,
+	0xef, 0xc2, 0x60, 0xa2, 0x28, 0xce, 0x45, 0x16, 0xba, 0x4b, 0x3d, 0xe7, 0x72, 0x80, 0x8b, 0x56,
+	0xd8, 0x4c, 0x46, 0x53, 0x8f, 0xb7, 0x9e, 0x6b, 0xac, 0xa8, 0xf0, 0x25, 0x2f, 0xbb, 0xac, 0x38,
+	0x4b, 0x2b, 0xc0, 0xf4, 0x94, 0xae, 0x9b, 0x89, 0x9e, 0x76, 0x3a, 0xee, 0x69, 0xaf, 0x9a, 0xb3,
+	0x7f, 0xf6, 0x13, 0x9e, 0xf3, 0xef, 0x51, 0x67, 0x45, 0x19, 0x99, 0x90, 0xfe, 0x97, 0x32, 0xf1,
+	0x45, 0xaa, 0xa1, 0x55, 0x67, 0xf9, 0x57, 0x53, 0x68, 0xe2, 0xe4, 0xbc, 0xf8, 0x24, 0xa0, 0x0f,
+	0x38, 0x5b, 0xec, 0x06, 0xf9, 0x33, 0xd6, 0x35, 0x4a, 0x9f, 0x07, 0x6f, 0x55, 0x55, 0x13, 0x05,
+	0xc5, 0xba, 0x4e, 0xfb, 0x9a, 0xf5, 0x53, 0x2d, 0xf1, 0x08, 0xef, 0x4c, 0x20, 0xd1, 0x11, 0x4f,
+	0x0e, 0xc0, 0xdb, 0xc8, 0xa0, 0xb1, 0xe2, 0x36, 0x57, 0xf9, 0x08, 0x0b, 0xcc, 0x15, 0x63, 0xe6,
+	0xe3, 0xb7, 0x2b, 0xef, 0x7f, 0x7d, 0x93, 0x6d, 0x72, 0x6a, 0xf1, 0xf1, 0xc4, 0xdd, 0x75, 0xaf,
+	0x4e, 0x39, 0x95, 0x4d, 0xc4, 0x65, 0x73, 0xe9, 0xaa, 0x14, 0xca, 0x69, 0x4d, 0xdf, 0x5e, 0xca,
+	0x2e, 0x93, 0x90, 0x5d, 0xb9, 0xa3, 0x2a, 0xdf, 0xc5, 0xca, 0x92, 0x04, 0xbb, 0x74, 0x92, 0xdd,
+	0x1f, 0x53, 0x5e, 0xa2, 0xf0, 0xfb, 0x71, 0xf8, 0x24, 0x8a, 0x8e, 0xcc, 0x52, 0xd1, 0xa1, 0x54,
+	0x32, 0xd9, 0xc5, 0x4a, 0x26, 0x51, 0x38, 0x6c, 0x2c, 0x14, 0x0e, 0x8b, 0x51, 0x6c, 0xf3, 0x02,
+	0x51, 0x2c, 0xb7, 0x22, 0x71, 0x9f, 0xa0, 0x82, 0x06, 0xb3, 0xb1, 0x2f, 0xc5, 0xf5, 0x98, 0x65,
+	0xe1, 0x79, 0xed, 0x6b, 0xaf, 0xc1, 0x6c, 0x1a, 0x05, 0xb3, 0xf1, 0xd8, 0x0f, 0xf8, 0x38, 0x9b,
+	0x53, 0xc3, 0x74, 0x47, 0xfe, 0xd4, 0xa7, 0x09, 0x49, 0x10, 0x59, 0x7b, 0x2b, 0x06, 0xb6, 0x86,
+	0xe5, 0xdf, 0x22, 0x83, 0xe8, 0x87, 0x6f, 0xa7, 0x03, 0x11, 0xf3, 0x1e, 0xb2, 0x9d, 0x38, 0xba,
+	0xf3, 0xa6, 0x24, 0x75, 0x51, 0x44, 0x70, 0xe7, 0x6d, 0xc9, 0x8f, 0x98, 0xa6, 0x7c, 0xd9, 0x24,
+	0xee, 0xde, 0x00, 0xdd, 0x0e, 0xc0, 0x1d, 0x0e, 0xe6, 0x94, 0x15, 0x76, 0x25, 0xf1, 0xaa, 0x9a,
+	0x93, 0x62, 0x86, 0x75, 0x19, 0x10, 0x36, 0xc2, 0xf9, 0x7d, 0xa6, 0x17, 0xec, 0x72, 0x63, 0x3c,
+	0x7b, 0xc3, 0x7b, 0x35, 0xfb, 0xf3, 0x21, 0xb8, 0x2a, 0x6c, 0xb0, 0xe3, 0x7b, 0x8c, 0xf4, 0x68,
+	0xa8, 0x3f, 0x66, 0x79, 0x71, 0x27, 0x87, 0x32, 0xc6, 0x5b, 0x6b, 0x2f, 0xed, 0xd8, 0x39, 0xf8,
+	0xd5, 0x99, 0x0d, 0xcb, 0x1e, 0xbb, 0x06, 0x8c, 0x79, 0x3a, 0x77, 0x1e, 0xf7, 0x6f, 0xb1, 0x82,
+	0xbc, 0xcb, 0x41, 0xec, 0x6f, 0xaf, 0xbf, 0xed, 0x61, 0x63, 0xea, 0x0d, 0x13, 0x7c, 0x87, 0x6d,
+	0xc0, 0x04, 0xa1, 0xfe, 0x29, 0xdb, 0x18, 0x45, 0xfe, 0x44, 0xb4, 0x8e, 0x76, 0x57, 0x2f, 0x8e,
+	0xb2, 0x59, 0x4e, 0x59, 0x7e, 0xca, 0x98, 0x5c, 0x5c, 0x08, 0xf9, 0xb0, 0xca, 0x60, 0x5d, 0x3e,
+	0xcc, 0x73, 0x73, 0xc1, 0xc1, 0x61, 0x79, 0x8b, 0x4e, 0x67, 0xd5, 0x96, 0xe4, 0x79, 0xae, 0xdd,
+	0x92, 0xa4, 0xb0, 0xf3, 0xe2, 0x98, 0xcb, 0x2f, 0x58, 0x01, 0x99, 0xf6, 0x4e, 0xa2, 0x25, 0xae,
+	0xdf, 0x61, 0x2c, 0xbe, 0x52, 0x42, 0x6c, 0x77, 0xd7, 0xb1, 0x9d, 0x9d, 0x44, 0x36, 0x2d, 0xa2,
+	0x77, 0x02, 0xbe, 0xac, 0x58, 0x3b, 0xee, 0x4f, 0x8f, 0x7c, 0xf3, 0xd4, 0x9f, 0x2e, 0xb3, 0xfe,
+	0x73, 0xac, 0xa8, 0xa8, 0xd6, 0xda, 0xb2, 0x40, 0xa1, 0x69, 0x5e, 0xb2, 0x59, 0xac, 0x75, 0xd5,
+	0x1c, 0xdb, 0xf0, 0x81, 0x73, 0xe5, 0x3f, 0xa7, 0x58, 0x51, 0x92, 0x4e, 0x67, 0xba, 0xc6, 0xb6,
+	0x7a, 0x0d, 0xcb, 0xf2, 0x5a, 0xdd, 0x03, 0xa3, 0xdd, 0xaa, 0x6b, 0x97, 0x74, 0x8d, 0xe5, 0x39,
+	0xa4, 0x63, 0xbc, 0xd4, 0xde, 0xfd, 0xf0, 0xfd, 0xfb, 0x9c, 0x7e, 0x4d, 0xd2, 0x78, 0x56, 0xcf,
+	0x76, 0xb5, 0xff, 0xf1, 0x1e, 0xa0, 0x3a, 0x63, 0x1c, 0xea, 0x1a, 0xd5, 0xb6, 0xa9, 0xfd, 0x4f,
+	0x0e, 0xbb, 0xca, 0x8a, 0x1c, 0xd6, 0xed, 0xd9, 0x1d, 0xa3, 0xad, 0xfd, 0x69, 0x82, 0xb0, 0xd1,
+	0xee, 0xf5, 0xea, 0xda, 0xff, 0xe2, 0x30, 0x31, 0x89, 0xd1, 0x6e, 0x6b, 0x3f, 0xe0, 0x90, 0x9b,
+	0xec, 0x32, 0x87, 0xd4, 0x7a, 0x5d, 0xd7, 0xee, 0xb5, 0xdb, 0xa6, 0xad, 0xfd, 0xef, 0xc4, 0xf0,
+	0x76, 0xaf, 0x66, 0xb4, 0xb5, 0x1f, 0x26, 0x87, 0x77, 0x5f, 0x69, 0xef, 0x01, 0x52, 0xf9, 0xb7,
+	0x1b, 0xf8, 0xba, 0x8f, 0x3b, 0xe1, 0x1d, 0x3e, 0xc4, 0xf5, 0x9a, 0x66, 0xbb, 0xdd, 0xd3, 0x2e,
+	0xc9, 0x67, 0xd3, 0xb6, 0x7b, 0xb6, 0x96, 0xd2, 0xaf, 0xb3, 0x2b, 0xf8, 0x5c, 0x6b, 0xf6, 0x3c,
+	0xdb, 0x7c, 0xbe, 0x6f, 0x3a, 0xae, 0x96, 0xd6, 0xaf, 0xf2, 0x25, 0x48, 0xb0, 0xd5, 0x7e, 0xa5,
+	0x65, 0x62, 0xda, 0x97, 0x96, 0x69, 0xb7, 0x3a, 0x66, 0xd7, 0x35, 0x6d, 0x2d, 0xab, 0xdf, 0x62,
+	0xd7, 0x39, 0xb8, 0x61, 0x1a, 0xee, 0xbe, 0x6d, 0x3a, 0x92, 0xcd, 0x86, 0x7e, 0x93, 0x5d, 0x5d,
+	0x44, 0x01, 0xab, 0x4d, 0x7d, 0x97, 0xdd, 0xe4, 0x88, 0x3d, 0xd3, 0x85, 0x6d, 0x36, 0x5a, 0x7b,
+	0x72, 0x54, 0x4e, 0x32, 0x4c, 0x20, 0x61, 0x5c, 0x5e, 0xae, 0xcb, 0x91, 0x28, 0xad, 0xa0, 0xeb,
+	0x6c, 0x87, 0x03, 0x2d, 0xa3, 0xf6, 0xcc, 0x74, 0xbd, 0x56, 0x57, 0x63, 0x72, 0xad, 0x8d, 0x76,
+	0xef, 0x85, 0x67, 0x9b, 0x9d, 0xde, 0x81, 0x59, 0xd7, 0x8a, 0xfa, 0x35, 0xa6, 0x21, 0x69, 0xcf,
+	0x76, 0x3d, 0xc7, 0x35, 0xdc, 0x7d, 0x47, 0xdb, 0x92, 0x5c, 0x89, 0x41, 0x6f, 0xdf, 0xd5, 0xb6,
+	0xf5, 0x2b, 0x6c, 0x3b, 0xe6, 0xd0, 0xe9, 0xd5, 0xb5, 0x1d, 0x39, 0xd1, 0x9e, 0xdd, 0xdb, 0xb7,
+	0x38, 0xec, 0xb2, 0x24, 0xe3, 0x1c, 0x01, 0xa4, 0x49, 0x32, 0xae, 0x0e, 0x1c, 0x76, 0x45, 0xbf,
+	0xcd, 0x6e, 0x70, 0x58, 0x67, 0xbf, 0xed, 0xb6, 0x2c, 0xc3, 0x76, 0xe5, 0x7e, 0x75, 0xbd, 0xc4,
+	0xae, 0x2d, 0xe1, 0x60, 0xbb, 0x57, 0x25, 0xa6, 0x6a, 0xd8, 0x76, 0xcb, 0xb4, 0xe5, 0x98, 0x6b,
+	0xfa, 0x0d, 0xa6, 0x2f, 0x60, 0x60, 0xc4, 0x75, 0xfd, 0x01, 0xbb, 0xcb, 0xe1, 0xcf, 0xf7, 0xcd,
+	0x7d, 0x73, 0x95, 0x78, 0x6f, 0xe8, 0xf7, 0xd8, 0xee, 0x3a, 0x12, 0xe0, 0x71, 0x53, 0xca, 0xce,
+	0xee, 0xb5, 0x4d, 0x39, 0xae, 0x24, 0xa5, 0x44, 0x60, 0xa0, 0xbd, 0x25, 0xf7, 0x05, 0x6c, 0x0c,
+	0xe7, 0x55, 0xb7, 0x26, 0x07, 0xdc, 0x96, 0xab, 0x57, 0x71, 0x30, 0x6a, 0x57, 0x4a, 0xc8, 0x11,
+	0x18, 0xed, 0x8e, 0x84, 0x75, 0x4c, 0xd7, 0xb4, 0xb9, 0xd4, 0xee, 0x56, 0x6a, 0xf8, 0xbe, 0x7c,
+	0xe1, 0xab, 0x74, 0x22, 0x6d, 0xf2, 0xb3, 0x16, 0xb6, 0x8a, 0x93, 0x01, 0xec, 0xc0, 0xb4, 0x9d,
+	0x56, 0xaf, 0x5b, 0x6d, 0xb9, 0x1d, 0xc3, 0xd2, 0x52, 0x15, 0x1f, 0xc3, 0x18, 0xa5, 0x44, 0x58,
+	0xa4, 0xa1, 0x1e, 0xd4, 0xbc, 0x86, 0x6d, 0xec, 0x09, 0x13, 0xbd, 0x44, 0x7c, 0x09, 0x5a, 0xb7,
+	0x7b, 0x96, 0x96, 0xa2, 0x5d, 0x13, 0xcc, 0x36, 0x0d, 0xa7, 0xa3, 0xa5, 0x93, 0x84, 0x1d, 0xc3,
+	0x79, 0xa6, 0x65, 0x2a, 0x4f, 0x71, 0x1a, 0xec, 0xf9, 0x52, 0xb4, 0x24, 0xe5, 0xa8, 0x29, 0xeb,
+	0x24, 0xe5, 0xae, 0x79, 0x75, 0xd3, 0xb2, 0xcd, 0x9a, 0xe1, 0x9a, 0x75, 0xc1, 0xe1, 0x17, 0xf1,
+	0x93, 0x58, 0xbc, 0x3a, 0x4c, 0x43, 0xd5, 0x2d, 0xee, 0xb0, 0x02, 0x82, 0xc0, 0x1f, 0xfd, 0x30,
+	0x15, 0x3f, 0x83, 0xeb, 0x78, 0x9f, 0xaa, 0xfc, 0x4b, 0x0a, 0xd8, 0x89, 0x12, 0x0e, 0xbd, 0x9a,
+	0xba, 0x02, 0xb9, 0x23, 0x50, 0x6c, 0xb0, 0x01, 0x47, 0x4b, 0x49, 0x81, 0xa0, 0xce, 0x22, 0x34,
+	0x2d, 0x49, 0xa5, 0xb9, 0x38, 0x5a, 0x56, 0x92, 0xa2, 0x15, 0x20, 0x34, 0x4f, 0xeb, 0xad, 0x79,
+	0x2d, 0x8b, 0xa4, 0x74, 0x5f, 0x12, 0xa2, 0xa2, 0x21, 0xe1, 0x53, 0xfd, 0x06, 0xd7, 0x2e, 0xe2,
+	0x59, 0x6d, 0xf7, 0x6a, 0xcf, 0xcc, 0xba, 0xf6, 0x2e, 0x5d, 0x39, 0x55, 0xbe, 0x88, 0x4e, 0x88,
+	0x6f, 0xc5, 0xe2, 0xc5, 0xf0, 0x7a, 0xef, 0x45, 0x57, 0x4b, 0xc5, 0x74, 0x5d, 0x70, 0x56, 0xb5,
+	0x03, 0x2d, 0x2b, 0x9c, 0x39, 0x07, 0x35, 0x5e, 0xd4, 0xb5, 0xfb, 0x64, 0x31, 0x08, 0x89, 0x3d,
+	0xc5, 0xd3, 0xca, 0x9f, 0x5f, 0xe8, 0x76, 0x0b, 0xd1, 0x5b, 0xce, 0xf2, 0xb4, 0x8e, 0xd7, 0x6e,
+	0x75, 0x9f, 0x2d, 0x4c, 0xeb, 0xc8, 0x5d, 0xa4, 0xc9, 0xbd, 0x72, 0xba, 0x03, 0x53, 0xcb, 0x56,
+	0xfe, 0x28, 0x8d, 0xdf, 0x21, 0x70, 0xee, 0xb2, 0x6c, 0xa7, 0x81, 0x0d, 0x65, 0x02, 0x09, 0xfa,
+	0xf4, 0x93, 0x4e, 0xd5, 0x6b, 0xd6, 0x63, 0xf6, 0x04, 0x6a, 0xd4, 0xa5, 0xde, 0x71, 0x10, 0x91,
+	0x65, 0x17, 0x61, 0x8d, 0xba, 0x96, 0x17, 0xbb, 0x6f, 0x78, 0x9f, 0xee, 0x71, 0x2a, 0x2d, 0x09,
+	0x69, 0x80, 0x3c, 0x14, 0xf6, 0x08, 0x7a, 0xaa, 0xeb, 0x02, 0xf4, 0x98, 0x40, 0xef, 0x40, 0xff,
+	0x63, 0xf6, 0x04, 0x4c, 0xeb, 0x57, 0x24, 0x37, 0x17, 0x41, 0x20, 0xf0, 0x22, 0x82, 0x7a, 0x6e,
+	0xd3, 0xb4, 0xb5, 0x77, 0xf9, 0x98, 0xa8, 0xd6, 0xb3, 0x2c, 0x00, 0x69, 0x31, 0x51, 0xa3, 0x55,
+	0x05, 0xc8, 0xfd, 0x78, 0x4a, 0x63, 0xdf, 0xed, 0x75, 0xcd, 0x3d, 0xed, 0xdd, 0x53, 0xfd, 0x8a,
+	0xa0, 0xb2, 0x8c, 0x7d, 0xc7, 0xd4, 0xde, 0xbd, 0x4b, 0xe9, 0x37, 0xb8, 0x2a, 0x09, 0x10, 0xf8,
+	0x8c, 0x8e, 0xf6, 0xee, 0x5d, 0xba, 0x52, 0x57, 0x94, 0x86, 0x6e, 0x37, 0x6e, 0x73, 0xab, 0xb0,
+	0x6c, 0xcf, 0xa8, 0x63, 0x0c, 0xdf, 0xc2, 0xc7, 0xba, 0xd9, 0x36, 0x5d, 0x53, 0x4b, 0xc5, 0x90,
+	0x4e, 0xaf, 0xde, 0x6a, 0xbc, 0xd2, 0xd2, 0x95, 0xcf, 0x50, 0x05, 0xe2, 0xaf, 0xcc, 0x49, 0xa8,
+	0x1d, 0xae, 0xf4, 0xdd, 0xba, 0x61, 0x03, 0x27, 0x64, 0xdc, 0x71, 0xbd, 0xde, 0xcb, 0x8e, 0x96,
+	0xaa, 0x7c, 0x1e, 0x7f, 0x46, 0xce, 0xbf, 0x0b, 0x27, 0xbe, 0x2f, 0x3b, 0x35, 0xaf, 0xfb, 0xb2,
+	0xe3, 0x7d, 0x22, 0xe7, 0x16, 0x90, 0x4f, 0xb5, 0x94, 0xbe, 0xcb, 0xad, 0x1f, 0x20, 0x3d, 0xcb,
+	0xec, 0x72, 0x0b, 0xac, 0x1a, 0x4e, 0xab, 0x06, 0x9b, 0xd1, 0x6f, 0xf1, 0x68, 0x09, 0xc8, 0x44,
+	0x84, 0x7d, 0xff, 0x3e, 0x53, 0xf9, 0x5b, 0x79, 0x76, 0x75, 0xc5, 0x97, 0xd9, 0xa4, 0xd4, 0x2f,
+	0x61, 0x51, 0x8d, 0xaa, 0xcc, 0x4a, 0x2e, 0x91, 0x5b, 0x56, 0xe1, 0xcd, 0x57, 0x88, 0x4b, 0x51,
+	0x50, 0x16, 0xb8, 0x8e, 0xe9, 0x1a, 0x75, 0xc3, 0x35, 0xb4, 0xf4, 0x02, 0x33, 0xd3, 0x6d, 0x7a,
+	0x75, 0xc7, 0xd5, 0x32, 0x2b, 0xe0, 0x8e, 0x5d, 0xd3, 0xb2, 0x0b, 0x8c, 0x00, 0xee, 0xbe, 0xb2,
+	0x4c, 0x19, 0xf6, 0x05, 0xe2, 0xa0, 0x6d, 0x74, 0xbd, 0x83, 0x56, 0x5d, 0xdb, 0x5c, 0x85, 0xb0,
+	0x6a, 0x96, 0x96, 0x5b, 0xdc, 0x87, 0xe5, 0xd5, 0x9d, 0x9a, 0xa5, 0xe5, 0x29, 0x14, 0x29, 0x70,
+	0xb3, 0xd6, 0xd5, 0x0a, 0x0b, 0x7c, 0x5a, 0x96, 0x67, 0xd9, 0x3d, 0xb7, 0xa7, 0xb1, 0x25, 0xc4,
+	0xc1, 0x63, 0xbe, 0xd6, 0xe2, 0x2a, 0x04, 0x6c, 0x6e, 0x6b, 0x61, 0x66, 0xb7, 0x66, 0xf1, 0x01,
+	0xdb, 0x2b, 0xe0, 0x40, 0xbf, 0xb3, 0x00, 0xdf, 0xaf, 0x23, 0xfd, 0xe5, 0x15, 0x70, 0xa0, 0xd7,
+	0x16, 0x26, 0x76, 0x6a, 0x2e, 0x0e, 0xb8, 0xb2, 0x0a, 0x51, 0xe7, 0xe9, 0xc0, 0xc2, 0xd9, 0xd5,
+	0x3a, 0xb0, 0x58, 0x2e, 0xd9, 0xab, 0xab, 0x71, 0xb5, 0x5e, 0xdd, 0xd4, 0xae, 0x2d, 0xc8, 0xca,
+	0xb0, 0x2d, 0xaf, 0x67, 0x69, 0xd7, 0x17, 0x16, 0x06, 0x60, 0xc7, 0x32, 0xb4, 0x1b, 0x2b, 0xe0,
+	0xae, 0x65, 0x68, 0x37, 0x57, 0xd1, 0x37, 0x0d, 0xad, 0xb4, 0x8a, 0xbe, 0x69, 0x68, 0xb7, 0x96,
+	0x25, 0xfb, 0x84, 0x6f, 0xf0, 0xf6, 0x2a, 0x04, 0x6c, 0x70, 0x77, 0x71, 0x13, 0x80, 0x68, 0xb4,
+	0x8d, 0xaa, 0xd9, 0xd6, 0xee, 0xac, 0xda, 0xe0, 0x13, 0xdc, 0xfc, 0xdd, 0xd5, 0x38, 0xbe, 0xf9,
+	0x0f, 0xf4, 0xbb, 0xec, 0xd6, 0x22, 0xcf, 0x6e, 0xdd, 0x73, 0x0d, 0x7b, 0xcf, 0x74, 0xb5, 0x7b,
+	0xab, 0xa6, 0xec, 0xd6, 0x3d, 0xa7, 0xdd, 0xd6, 0xee, 0xaf, 0xc1, 0xb9, 0xed, 0xb6, 0xf6, 0x80,
+	0xa2, 0xb5, 0xb4, 0x15, 0xab, 0xed, 0x78, 0xb8, 0xd2, 0xf2, 0x82, 0x3c, 0x38, 0xca, 0xad, 0x69,
+	0x5f, 0x59, 0x34, 0x2f, 0x80, 0x57, 0x7b, 0x8e, 0xf6, 0x70, 0x01, 0x61, 0x55, 0xab, 0x5e, 0xcb,
+	0x69, 0xd5, 0xb5, 0x0f, 0x29, 0x75, 0x91, 0xaa, 0xb6, 0xdf, 0xed, 0x9a, 0x6d, 0xaf, 0x55, 0xd7,
+	0xbe, 0xba, 0x6a, 0x69, 0xe6, 0x4b, 0xb7, 0x59, 0xb7, 0xb5, 0xaf, 0x55, 0x3e, 0xc3, 0xea, 0x85,
+	0x7f, 0x47, 0x3c, 0x1a, 0xea, 0x97, 0xb9, 0xd3, 0x3c, 0x68, 0xd5, 0xbd, 0x6e, 0xaf, 0x6b, 0xf2,
+	0x90, 0xb5, 0x43, 0x00, 0xcb, 0x36, 0x1d, 0xb3, 0xeb, 0x6a, 0xef, 0xee, 0x57, 0xfe, 0x5d, 0x0a,
+	0x1b, 0x38, 0xa3, 0xf9, 0xe9, 0x13, 0xfa, 0xee, 0x55, 0xdc, 0x1b, 0x04, 0xea, 0x96, 0xd9, 0x5c,
+	0x8a, 0x49, 0x00, 0x03, 0x96, 0x2f, 0xc1, 0x77, 0x60, 0x7c, 0x03, 0x90, 0xe9, 0x58, 0x5a, 0x9a,
+	0x66, 0x85, 0x67, 0x63, 0xdf, 0x6d, 0x6a, 0x59, 0x05, 0x50, 0x87, 0x24, 0x30, 0xaf, 0x00, 0x20,
+	0x59, 0xd2, 0x34, 0x85, 0xab, 0xdd, 0xdb, 0x07, 0xff, 0x76, 0x5f, 0xe1, 0xda, 0xec, 0x59, 0xda,
+	0x53, 0x8a, 0x1c, 0xf0, 0xbc, 0xdf, 0xb5, 0x4d, 0x0b, 0xc2, 0x90, 0x0a, 0x72, 0xcc, 0xe7, 0x90,
+	0x30, 0xfc, 0x20, 0x9d, 0xf8, 0xf0, 0x90, 0xee, 0xf3, 0x02, 0x99, 0xc1, 0x73, 0x78, 0x6b, 0x1f,
+	0x3c, 0x21, 0x1e, 0x93, 0x01, 0x49, 0xae, 0xf5, 0xca, 0x73, 0xdd, 0x36, 0x4f, 0xef, 0x8b, 0x64,
+	0x2d, 0x2a, 0xbc, 0xd5, 0x95, 0xee, 0xc0, 0xc0, 0xd4, 0x14, 0x0f, 0xd5, 0x6d, 0x4b, 0xf3, 0x36,
+	0x5c, 0xaf, 0x6e, 0xd6, 0x62, 0xb8, 0x46, 0x89, 0x81, 0xe1, 0x7a, 0xd6, 0xbe, 0xd3, 0xe4, 0x1e,
+	0x4d, 0xbb, 0x42, 0xc2, 0x04, 0x60, 0xcf, 0x42, 0x98, 0xbe, 0x40, 0x08, 0x1c, 0xb4, 0xab, 0x49,
+	0x42, 0x0e, 0xbb, 0x16, 0x13, 0xc2, 0x0a, 0x78, 0xea, 0xa4, 0x5d, 0x27, 0x29, 0x1a, 0x54, 0x7a,
+	0x68, 0x37, 0x28, 0xb7, 0x22, 0xaa, 0xee, 0x0b, 0xbe, 0x9a, 0x9b, 0x31, 0x14, 0x56, 0x49, 0xd0,
+	0x52, 0x92, 0x63, 0xa3, 0x65, 0xb6, 0xeb, 0xda, 0x2d, 0x65, 0x6a, 0x58, 0x8f, 0x55, 0xad, 0x6a,
+	0xb7, 0xe9, 0x68, 0x68, 0x39, 0x00, 0xda, 0xd5, 0x4b, 0x62, 0xdf, 0x4b, 0x21, 0xe9, 0x00, 0x6f,
+	0x16, 0x28, 0x0d, 0x26, 0xfa, 0xa0, 0x54, 0x64, 0xc7, 0x9d, 0x76, 0xa2, 0x94, 0x66, 0x04, 0x83,
+	0xe4, 0xf5, 0xbf, 0xbe, 0xcf, 0x50, 0x48, 0x07, 0x48, 0xb7, 0xe7, 0x55, 0xf7, 0x1b, 0x0d, 0xe2,
+	0xfb, 0x9f, 0x84, 0x8a, 0x2a, 0x1f, 0x8d, 0xf1, 0xb3, 0x25, 0xc5, 0x51, 0x33, 0x62, 0xdc, 0x6f,
+	0xcb, 0xf5, 0xf6, 0x7a, 0x6e, 0x8f, 0xca, 0xef, 0x14, 0xd9, 0x53, 0xcb, 0xf5, 0x5e, 0xd8, 0x2d,
+	0xd7, 0x54, 0x23, 0x1c, 0x9a, 0xa0, 0xc4, 0x18, 0x35, 0xb7, 0xd5, 0xeb, 0x3a, 0x5a, 0x26, 0x46,
+	0x18, 0x96, 0xd5, 0x7e, 0x25, 0x11, 0xd9, 0x18, 0x51, 0x6b, 0x9b, 0x86, 0x2d, 0x11, 0x1b, 0x42,
+	0xaf, 0xa9, 0x5e, 0xd1, 0x36, 0x49, 0x52, 0xad, 0x15, 0x92, 0xfa, 0x8b, 0xb8, 0xa1, 0xc5, 0x8f,
+	0xc5, 0x28, 0xa1, 0x68, 0xd4, 0x12, 0x99, 0x4a, 0xa3, 0x26, 0xf2, 0x12, 0x11, 0xa9, 0x25, 0xc4,
+	0x73, 0x5c, 0xbb, 0x55, 0x83, 0xf2, 0x5c, 0x92, 0x52, 0x52, 0x93, 0x89, 0x49, 0x11, 0x22, 0x48,
+	0xb3, 0x95, 0x7f, 0x48, 0x6f, 0x8e, 0xe4, 0xec, 0x68, 0xef, 0x28, 0xcc, 0x86, 0x9a, 0x82, 0x12,
+	0x8b, 0x86, 0xe7, 0x98, 0xdd, 0xba, 0x2c, 0x9c, 0xe3, 0x65, 0x34, 0xbc, 0x5a, 0xd3, 0xac, 0x3d,
+	0xf3, 0x7a, 0x07, 0xa6, 0xdd, 0x36, 0x2c, 0x99, 0x30, 0x34, 0x1a, 0x1e, 0x38, 0x18, 0xb0, 0xa4,
+	0xfd, 0xae, 0x1b, 0x0b, 0xad, 0xd1, 0xe0, 0xa9, 0xf6, 0x33, 0x89, 0xc8, 0x27, 0x10, 0xd5, 0x57,
+	0x12, 0xa1, 0x55, 0x1c, 0x2c, 0x7d, 0xf0, 0xb3, 0x5e, 0xdc, 0xdd, 0xde, 0x52, 0x23, 0x66, 0x4f,
+	0x69, 0xc4, 0x08, 0x48, 0xdc, 0x35, 0x91, 0x10, 0xd9, 0x08, 0xf9, 0x2e, 0xbe, 0x9d, 0x59, 0xfa,
+	0xfc, 0x8a, 0x04, 0xbf, 0x97, 0x14, 0xfc, 0x9e, 0x22, 0x78, 0x09, 0x21, 0xf9, 0xa6, 0x2b, 0x8e,
+	0xfa, 0x2e, 0x9e, 0xab, 0x23, 0x31, 0xc1, 0xea, 0x4b, 0x32, 0x01, 0x23, 0x6b, 0x9b, 0x35, 0xf0,
+	0x95, 0x68, 0x06, 0x7b, 0xa0, 0xaf, 0xf5, 0x96, 0x6d, 0xf2, 0x83, 0xdb, 0xc2, 0x45, 0xba, 0x5e,
+	0xa3, 0xa1, 0x65, 0x2a, 0x16, 0x2a, 0xc6, 0xe2, 0x47, 0x4a, 0x74, 0x38, 0x36, 0x48, 0xa9, 0x63,
+	0xb8, 0xb5, 0xa6, 0x76, 0x89, 0xd4, 0x4d, 0x28, 0xa0, 0x2c, 0xd8, 0x6c, 0x21, 0x24, 0x6e, 0xea,
+	0xe9, 0xca, 0xdf, 0x48, 0x61, 0x67, 0x7d, 0xc5, 0xe7, 0x3f, 0x74, 0x5a, 0xb6, 0xed, 0xb5, 0xea,
+	0x6d, 0xd3, 0x73, 0x5b, 0x1d, 0xb3, 0xa7, 0x78, 0x48, 0xdb, 0xf6, 0x9a, 0x86, 0x5d, 0x97, 0x70,
+	0x21, 0x04, 0x5b, 0x66, 0xce, 0xe9, 0x98, 0x12, 0x4b, 0x3f, 0xa9, 0x7c, 0x12, 0x8e, 0xb5, 0x3b,
+	0xc1, 0xb3, 0x95, 0x29, 0xfd, 0x8f, 0x27, 0xfe, 0x3a, 0x92, 0xd2, 0x67, 0xef, 0x97, 0x4c, 0xbb,
+	0x27, 0x8f, 0xb4, 0x83, 0x47, 0xfa, 0xee, 0x07, 0xef, 0x73, 0xfa, 0x75, 0xbe, 0xeb, 0x8e, 0xe7,
+	0xb4, 0x7b, 0x2f, 0x2c, 0xc3, 0x6d, 0x52, 0xd3, 0x0b, 0xbb, 0x61, 0x1d, 0xb5, 0x1b, 0xa6, 0x76,
+	0xbe, 0x3a, 0x58, 0xfd, 0xf2, 0x03, 0x9f, 0x2c, 0x7d, 0x2a, 0xa3, 0x26, 0xf3, 0x55, 0xd5, 0x73,
+	0xa0, 0x3c, 0x01, 0x46, 0x75, 0x3e, 0xee, 0x81, 0x03, 0x9c, 0x1a, 0xd4, 0xb0, 0x1d, 0xc3, 0x7e,
+	0xa6, 0x89, 0xa4, 0x1c, 0xe0, 0x4b, 0x76, 0xfd, 0x5d, 0xf5, 0x6b, 0xa1, 0x65, 0xfd, 0xea, 0x24,
+	0xf5, 0xab, 0xb3, 0xa4, 0x5f, 0x1d, 0x45, 0xbf, 0x8e, 0xd4, 0x57, 0xf0, 0xaa, 0x89, 0x76, 0x1a,
+	0x89, 0x0e, 0x00, 0x43, 0xd0, 0xb3, 0xaa, 0x05, 0x55, 0x3b, 0xed, 0xa2, 0x01, 0x56, 0x66, 0x39,
+	0x32, 0x1e, 0x77, 0x1a, 0x5e, 0x75, 0xdf, 0x76, 0x5c, 0x19, 0x8f, 0x3b, 0x0d, 0x51, 0xa7, 0x57,
+	0x7e, 0x9f, 0x6e, 0x77, 0xe1, 0x07, 0x18, 0x5c, 0x3e, 0xb8, 0x75, 0x93, 0x9a, 0x84, 0x5e, 0xc3,
+	0x68, 0xb5, 0x4d, 0x98, 0x0d, 0x43, 0xa4, 0xe9, 0x7a, 0x55, 0xa3, 0x2e, 0xdb, 0x3a, 0x42, 0xf3,
+	0x08, 0x4c, 0xfa, 0x98, 0xa6, 0x4c, 0x89, 0xa0, 0xad, 0xae, 0xe3, 0xda, 0xfb, 0x88, 0xca, 0x50,
+	0xfc, 0x21, 0x14, 0x2a, 0x74, 0x36, 0xa6, 0x17, 0xfd, 0x35, 0x31, 0xef, 0x06, 0x65, 0x3d, 0xa6,
+	0xd2, 0x67, 0x13, 0xb8, 0xcd, 0x78, 0x98, 0xe8, 0xb7, 0x09, 0x54, 0x2e, 0x1e, 0x26, 0xfb, 0x6e,
+	0x02, 0x97, 0x8f, 0x87, 0x61, 0x2f, 0xa2, 0x67, 0x09, 0x54, 0x41, 0xff, 0x80, 0xdd, 0x46, 0x94,
+	0xf3, 0xa2, 0xe5, 0xd6, 0x9a, 0xa2, 0x19, 0x46, 0x78, 0x46, 0x99, 0xa5, 0x99, 0x6c, 0x87, 0x09,
+	0x74, 0x31, 0x9e, 0x55, 0xf6, 0xad, 0x04, 0x6e, 0x8b, 0x3a, 0x6d, 0x72, 0x45, 0xb2, 0x0b, 0x4a,
+	0x04, 0xdb, 0x14, 0x33, 0xcc, 0x15, 0xba, 0x55, 0x55, 0xff, 0x83, 0xe3, 0xeb, 0xfe, 0x68, 0xcc,
+	0x6f, 0xf9, 0xf1, 0x7f, 0x80, 0x04, 0xfa, 0xd8, 0x6c, 0xd4, 0xbc, 0x56, 0xb7, 0xd6, 0xeb, 0x58,
+	0x86, 0xdb, 0x82, 0xa8, 0x27, 0xb4, 0x0c, 0x10, 0xa6, 0x65, 0xda, 0x50, 0xa1, 0xfe, 0x49, 0x1a,
+	0xfd, 0xcb, 0x61, 0x7f, 0x28, 0xde, 0x17, 0x21, 0x0f, 0x3c, 0xf0, 0xaa, 0x5d, 0xe3, 0x27, 0x42,
+	0xfd, 0x32, 0xd9, 0xe5, 0x10, 0x70, 0x9e, 0x75, 0x8b, 0x68, 0x2a, 0x80, 0xb2, 0x47, 0xa9, 0xa5,
+	0xa9, 0x89, 0x2b, 0x30, 0x89, 0x2d, 0x88, 0x80, 0xa4, 0x20, 0x91, 0x9f, 0xe8, 0xcc, 0x00, 0x02,
+	0xd7, 0xb9, 0x41, 0xf6, 0x29, 0x48, 0xdb, 0x66, 0x57, 0x56, 0x8a, 0x1c, 0xc6, 0x53, 0x03, 0xcf,
+	0xec, 0x58, 0xee, 0x2b, 0xd9, 0x1c, 0x56, 0x10, 0xfb, 0xdd, 0x67, 0xdd, 0xde, 0x8b, 0xae, 0x8c,
+	0x2e, 0x72, 0xf9, 0x5c, 0xe6, 0x2d, 0x38, 0xe2, 0x78, 0x5f, 0x2d, 0xc7, 0x73, 0xda, 0xc6, 0x81,
+	0xa9, 0xb1, 0x85, 0xcd, 0xf2, 0xda, 0x58, 0x64, 0x85, 0x12, 0xc8, 0xdb, 0x44, 0xda, 0x96, 0xfe,
+	0x90, 0xdd, 0x27, 0x70, 0xdc, 0xa3, 0xa5, 0xe9, 0x21, 0x1a, 0x82, 0x0a, 0x6b, 0xdb, 0x95, 0xdf,
+	0xcd, 0xa0, 0xff, 0x01, 0x79, 0x53, 0x52, 0xca, 0xc5, 0x4d, 0x33, 0x19, 0x8a, 0x58, 0x45, 0xaf,
+	0x51, 0x00, 0x61, 0xd3, 0x29, 0x21, 0x50, 0x63, 0x85, 0x40, 0x45, 0xee, 0xa2, 0x20, 0x91, 0x53,
+	0x66, 0x01, 0xd1, 0xdb, 0x47, 0xdb, 0x90, 0x61, 0x58, 0x20, 0x0c, 0x7b, 0x6f, 0x1f, 0x98, 0x69,
+	0x1b, 0xe2, 0x08, 0x0c, 0x71, 0x04, 0x9b, 0xca, 0x12, 0xdd, 0x1e, 0x04, 0x9d, 0x2e, 0x88, 0x1a,
+	0x0d, 0x5d, 0x8c, 0xc7, 0x54, 0x34, 0x2f, 0xf4, 0x41, 0x99, 0x0e, 0x73, 0xd2, 0x02, 0x59, 0x0a,
+	0x60, 0xb8, 0x91, 0x73, 0x05, 0xed, 0x3a, 0x2d, 0xc7, 0x85, 0x59, 0x99, 0x7e, 0x87, 0x95, 0x08,
+	0xbd, 0xdf, 0x75, 0xf6, 0x2d, 0x58, 0xa4, 0x59, 0xf7, 0x7a, 0x76, 0xdd, 0xb4, 0xb5, 0xe2, 0x82,
+	0x3c, 0x5c, 0x63, 0x4f, 0xdb, 0x5a, 0xd8, 0x00, 0xa4, 0x18, 0x7c, 0xcb, 0xa2, 0x38, 0x57, 0x11,
+	0x20, 0xc0, 0x9d, 0x05, 0x01, 0xf2, 0xee, 0xb2, 0xd8, 0xf5, 0xe5, 0xca, 0x9f, 0xa6, 0x58, 0x49,
+	0x1c, 0x8f, 0x9a, 0x5c, 0x2a, 0x66, 0x55, 0x6d, 0xd5, 0x84, 0x3e, 0x71, 0x1f, 0x26, 0x9d, 0x20,
+	0x22, 0x9c, 0x7d, 0x0b, 0xc1, 0x29, 0x85, 0x3e, 0xa1, 0x6b, 0xc2, 0x0f, 0xc6, 0xf4, 0x32, 0xfb,
+	0xcc, 0x90, 0xa7, 0x59, 0x46, 0x61, 0xff, 0x37, 0x2b, 0x56, 0xdf, 0x5a, 0x71, 0xfc, 0x1b, 0x0b,
+	0x13, 0xca, 0xe3, 0xdf, 0x14, 0x82, 0x6b, 0xc5, 0x8a, 0x94, 0x13, 0x07, 0xdc, 0x12, 0x07, 0x9c,
+	0xaf, 0xfc, 0x23, 0xba, 0xb7, 0x0d, 0x9b, 0xc7, 0x3e, 0x97, 0xaa, 0x9a, 0x9d, 0x55, 0xaa, 0xd9,
+	0x51, 0x55, 0x33, 0x09, 0x83, 0xe3, 0x91, 0xf6, 0x4f, 0xb0, 0x7a, 0x1b, 0xc2, 0x9d, 0x4d, 0xcd,
+	0xec, 0x05, 0x64, 0xf7, 0x85, 0x82, 0xcc, 0x0a, 0x1d, 0x22, 0xe4, 0x8b, 0x56, 0xbb, 0x5e, 0x33,
+	0xec, 0x3a, 0xa4, 0xd5, 0xa4, 0x73, 0x84, 0xc1, 0x62, 0x65, 0x73, 0x01, 0x7a, 0x60, 0xb4, 0xf7,
+	0x4d, 0x2d, 0xb7, 0xb0, 0x78, 0xce, 0x5a, 0x74, 0x8c, 0x04, 0xd0, 0xb2, 0x4d, 0xdb, 0x7c, 0xae,
+	0x15, 0x14, 0x0e, 0xf5, 0x7d, 0x8b, 0xf8, 0x32, 0x21, 0xa7, 0x8e, 0x90, 0x53, 0xb1, 0xf2, 0x07,
+	0xa4, 0x24, 0x71, 0xba, 0xac, 0xf8, 0x5e, 0x9c, 0xb0, 0xd1, 0x69, 0x48, 0x2d, 0x91, 0xe9, 0x13,
+	0x07, 0x92, 0x9b, 0xdf, 0x6f, 0xb7, 0xa5, 0xdf, 0xe4, 0xf0, 0x05, 0x15, 0x51, 0xd8, 0x88, 0x5c,
+	0x3a, 0x23, 0x12, 0xf2, 0x8e, 0xf4, 0xdf, 0x32, 0x8d, 0x96, 0x1c, 0x28, 0x33, 0xdb, 0x58, 0x44,
+	0xd4, 0x7a, 0x9d, 0x8e, 0xd1, 0x05, 0x39, 0xe1, 0xe6, 0x25, 0xa2, 0xd1, 0x36, 0xf6, 0x1c, 0x2d,
+	0x57, 0xf9, 0xbd, 0x0c, 0x7e, 0xf8, 0x13, 0x67, 0xc2, 0xea, 0xae, 0x70, 0xa1, 0x7b, 0x30, 0x08,
+	0x03, 0xae, 0xf9, 0xb2, 0xe5, 0xb8, 0x8e, 0x7c, 0x57, 0xc1, 0x31, 0x22, 0xcd, 0x44, 0x5b, 0x4f,
+	0x91, 0x2e, 0x73, 0xd4, 0x0b, 0xb3, 0xb5, 0xd7, 0x74, 0x55, 0xa3, 0x96, 0x66, 0xc0, 0xf1, 0xe0,
+	0x22, 0x7a, 0x0d, 0x1c, 0x09, 0xb5, 0x16, 0x46, 0x4c, 0x15, 0x55, 0xdd, 0x07, 0x3f, 0x0b, 0x95,
+	0xc3, 0x7d, 0x76, 0x47, 0xe0, 0x6a, 0x4d, 0xa3, 0xd5, 0x6d, 0x75, 0xf7, 0x12, 0x8c, 0x37, 0xc8,
+	0xc9, 0xe0, 0xc4, 0xdc, 0xcb, 0xa8, 0xe8, 0x4d, 0x91, 0x86, 0x03, 0xba, 0xdd, 0xeb, 0x59, 0x32,
+	0x60, 0xec, 0x29, 0x87, 0x46, 0x9b, 0xc8, 0xab, 0x28, 0x3e, 0x9b, 0x59, 0x97, 0xbe, 0x0c, 0xf5,
+	0x65, 0x4f, 0xca, 0x1e, 0x2c, 0x43, 0xb4, 0x17, 0xf7, 0x16, 0x05, 0x5f, 0x24, 0x25, 0x90, 0x08,
+	0xdc, 0x90, 0xb6, 0x45, 0x07, 0x22, 0xe1, 0x7c, 0xc5, 0xf2, 0xdd, 0xe2, 0x5e, 0x7c, 0xd8, 0x3b,
+	0x95, 0xdf, 0x26, 0xc5, 0x13, 0xff, 0x9c, 0x35, 0x71, 0x44, 0xb8, 0x1a, 0x4b, 0xb0, 0xa1, 0x26,
+	0x2f, 0xae, 0x46, 0x42, 0x9b, 0x68, 0x63, 0x32, 0x97, 0xb5, 0xe2, 0x65, 0xf2, 0x17, 0xa5, 0xe2,
+	0x50, 0x24, 0xdc, 0xa8, 0x1f, 0x98, 0xb6, 0xdb, 0x72, 0x4c, 0xa9, 0x7e, 0x96, 0xa2, 0x7e, 0x95,
+	0x5f, 0x46, 0xa5, 0x91, 0xff, 0xc1, 0x38, 0xb1, 0x22, 0x7a, 0x47, 0x98, 0xd0, 0x6e, 0x69, 0x0c,
+	0xee, 0xc2, 0xcc, 0xe2, 0x5d, 0x86, 0x1b, 0xb3, 0x4f, 0x57, 0x7e, 0x09, 0xf7, 0x8b, 0x77, 0x71,
+	0x66, 0xf3, 0x15, 0xfb, 0x7d, 0xde, 0x4b, 0xee, 0x17, 0xe7, 0x94, 0x50, 0x0c, 0x48, 0x82, 0x37,
+	0x07, 0x0b, 0xde, 0x7f, 0x81, 0xdd, 0x5d, 0xfa, 0x5f, 0xce, 0x2b, 0x96, 0xef, 0xd4, 0x12, 0x86,
+	0x22, 0x12, 0x20, 0x09, 0x46, 0xd7, 0x87, 0xfc, 0x39, 0x30, 0x5e, 0xfb, 0x9d, 0xc5, 0x9b, 0x38,
+	0x09, 0xf6, 0x54, 0xc0, 0xd9, 0x8d, 0x1a, 0xe4, 0xdd, 0x5c, 0x32, 0x0a, 0x88, 0x6b, 0x6c, 0x5c,
+	0xc2, 0xd9, 0x34, 0x1b, 0xe4, 0x97, 0x5a, 0xba, 0xf2, 0xaf, 0xd3, 0x28, 0xf7, 0xb8, 0xac, 0x58,
+	0x76, 0x41, 0x9d, 0xa4, 0x0b, 0x42, 0x0b, 0xe6, 0x40, 0xcc, 0x42, 0xc9, 0x82, 0x53, 0x74, 0xe2,
+	0x1d, 0xd5, 0x82, 0xb1, 0x5f, 0x91, 0x56, 0x51, 0xc2, 0x2e, 0x10, 0x25, 0x32, 0x8a, 0xce, 0xa2,
+	0x9a, 0x67, 0x49, 0x6c, 0x9d, 0xa4, 0x7f, 0x11, 0x4e, 0x5b, 0x82, 0x6d, 0xc3, 0x35, 0xa5, 0x33,
+	0xea, 0xc4, 0x36, 0x61, 0xf3, 0xb7, 0xfb, 0x0b, 0xc4, 0x55, 0xe0, 0x9c, 0x27, 0xa7, 0x90, 0x80,
+	0x92, 0x9f, 0x2f, 0xa8, 0x2b, 0x25, 0x87, 0xc1, 0x17, 0xea, 0x68, 0x4c, 0xdd, 0xb9, 0xf0, 0x25,
+	0x46, 0xb7, 0xee, 0x68, 0xc5, 0xca, 0x3f, 0x4e, 0xad, 0xf8, 0x92, 0x2b, 0x5c, 0xa5, 0xc3, 0x8d,
+	0x05, 0x1d, 0xa6, 0xd7, 0xd6, 0x02, 0x2c, 0x03, 0xb8, 0x38, 0xb0, 0x78, 0x00, 0x38, 0x05, 0x79,
+	0x57, 0xa2, 0xa1, 0x28, 0x4d, 0x66, 0x91, 0x89, 0x4c, 0x43, 0xb2, 0xc2, 0x14, 0x1a, 0x52, 0x9d,
+	0x36, 0x2a, 0xff, 0x91, 0x82, 0x73, 0xf2, 0x3b, 0x6f, 0x51, 0xed, 0x41, 0xa1, 0xed, 0xd4, 0xe2,
+	0xea, 0x8f, 0x5f, 0x1f, 0x79, 0x21, 0x5f, 0x4d, 0x77, 0x2c, 0xcf, 0xd8, 0xdb, 0xb3, 0xcd, 0x3d,
+	0x83, 0xd7, 0xe8, 0x54, 0xf0, 0x89, 0xcb, 0x28, 0x19, 0x21, 0x6f, 0x2b, 0xf9, 0x12, 0x57, 0x92,
+	0xa1, 0x15, 0x6d, 0xc4, 0x00, 0xf4, 0x80, 0x9b, 0xf1, 0x38, 0x51, 0xec, 0x3b, 0x35, 0x2d, 0x27,
+	0x04, 0x2e, 0xa0, 0xa2, 0xa4, 0x91, 0x8d, 0xde, 0x8e, 0x45, 0x5a, 0x54, 0x10, 0x15, 0x35, 0x01,
+	0x84, 0x2f, 0x60, 0x31, 0x0b, 0x84, 0x4b, 0x16, 0xc5, 0x18, 0x93, 0xac, 0x97, 0xe4, 0x0d, 0x0d,
+	0xb1, 0x09, 0xbe, 0x16, 0x51, 0x3d, 0x75, 0xac, 0x55, 0x95, 0xf9, 0xee, 0xca, 0xef, 0xfb, 0x3d,
+	0xf1, 0xad, 0x32, 0x0e, 0x6c, 0x40, 0x39, 0xb7, 0xf4, 0x96, 0x57, 0xc0, 0x3b, 0x3d, 0xdb, 0xd4,
+	0x52, 0x95, 0x36, 0x99, 0x63, 0xf2, 0x9b, 0x7d, 0xe2, 0x24, 0x56, 0xdc, 0xc0, 0xab, 0x0d, 0x0a,
+	0x2f, 0xd2, 0x7e, 0x89, 0x21, 0x6e, 0x7f, 0x9c, 0xc1, 0xa5, 0xad, 0xf9, 0x9a, 0x55, 0xea, 0x8d,
+	0xe5, 0xaa, 0x45, 0x34, 0xf8, 0x26, 0x0c, 0x7c, 0x4b, 0x18, 0xaf, 0xd3, 0x72, 0x1c, 0x99, 0x90,
+	0x72, 0x74, 0xd7, 0x7c, 0x49, 0x25, 0xa7, 0xa3, 0xa5, 0x29, 0xed, 0x5e, 0x44, 0xe0, 0xb0, 0x8c,
+	0xb8, 0x8e, 0x00, 0xd8, 0x64, 0x4f, 0x34, 0x4b, 0x21, 0x7e, 0x19, 0x85, 0x43, 0x37, 0xd4, 0xa1,
+	0xc9, 0xae, 0xe9, 0xa6, 0x3a, 0x34, 0x81, 0xc2, 0xa1, 0x39, 0x69, 0x03, 0x96, 0x4b, 0xfd, 0x80,
+	0xbc, 0x34, 0x46, 0x98, 0x4d, 0xe6, 0x83, 0x4c, 0xdc, 0x2f, 0x89, 0x17, 0xe1, 0x98, 0x2e, 0x66,
+	0x6f, 0xa2, 0xbc, 0x5e, 0x81, 0xc3, 0x69, 0xb6, 0xd5, 0xc1, 0xb8, 0x0c, 0x39, 0x78, 0x47, 0x1d,
+	0x9c, 0xc4, 0xe1, 0xe0, 0xcb, 0xfa, 0xed, 0xf8, 0x24, 0x12, 0xfa, 0xf5, 0xc3, 0xf7, 0x19, 0xfd,
+	0x5e, 0x7c, 0x16, 0x2a, 0x0e, 0x87, 0x82, 0x02, 0xfe, 0x0e, 0xfd, 0x83, 0x03, 0xcc, 0xb8, 0x12,
+	0x17, 0x32, 0xa8, 0x2d, 0xd8, 0xa8, 0x2d, 0x5d, 0x5e, 0x01, 0x18, 0x76, 0x0f, 0x29, 0xa7, 0xd2,
+	0x52, 0x22, 0x59, 0x8a, 0x31, 0xed, 0xd6, 0x81, 0xd9, 0x35, 0x9d, 0xf8, 0x76, 0xc6, 0x9e, 0x92,
+	0x2b, 0x69, 0x59, 0x65, 0x80, 0x4c, 0xa0, 0x78, 0xdb, 0xd6, 0xd1, 0xf2, 0x95, 0xcf, 0xb1, 0x1f,
+	0x10, 0xdf, 0x3f, 0xc6, 0x2b, 0xc7, 0x22, 0x82, 0xaa, 0xfd, 0x31, 0x5c, 0xe5, 0x73, 0xd7, 0xeb,
+	0xb4, 0xba, 0xe8, 0xd0, 0x53, 0x0a, 0xcc, 0x78, 0x89, 0xb0, 0x34, 0xd9, 0xe0, 0xf3, 0x15, 0x1d,
+	0x8c, 0xef, 0x61, 0x31, 0xbc, 0x70, 0x01, 0x95, 0xf4, 0xb4, 0x66, 0x63, 0x3b, 0xa5, 0xdb, 0xab,
+	0x35, 0x8d, 0xee, 0x9e, 0x29, 0x7b, 0xf9, 0x02, 0x61, 0x3e, 0xdf, 0x37, 0xda, 0xf2, 0x7e, 0x9a,
+	0x80, 0x76, 0x0c, 0x07, 0x83, 0x57, 0x92, 0x18, 0x4b, 0xfa, 0x8c, 0x95, 0x3a, 0xdc, 0xe4, 0xff,
+	0x5c, 0xfb, 0xb3, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xcb, 0xda, 0xf6, 0x7f, 0xb9, 0x63, 0x00,
+	0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/ponsim/ponsim.pb.go b/netopeer/voltha-grpc-client/voltha/ponsim/ponsim.pb.go
new file mode 100644
index 0000000..6831013
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/ponsim/ponsim.pb.go
@@ -0,0 +1,337 @@
+// Code generated by protoc-gen-go.
+// source: ponsim.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	ponsim.proto
+
+It has these top-level messages:
+	PonSimDeviceInfo
+	FlowTable
+	PonSimPacketCounter
+	PonSimPortMetrics
+	PonSimMetrics
+*/
+package ponsim
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf "github.com/golang/protobuf/ptypes/empty"
+import openflow_13 "github.com/opencord/voltha/netconf/translator/voltha/openflow_13"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type PonSimDeviceInfo struct {
+	NniPort  int32   `protobuf:"varint,1,opt,name=nni_port,json=nniPort" json:"nni_port,omitempty"`
+	UniPorts []int32 `protobuf:"varint,2,rep,packed,name=uni_ports,json=uniPorts" json:"uni_ports,omitempty"`
+}
+
+func (m *PonSimDeviceInfo) Reset()                    { *m = PonSimDeviceInfo{} }
+func (m *PonSimDeviceInfo) String() string            { return proto.CompactTextString(m) }
+func (*PonSimDeviceInfo) ProtoMessage()               {}
+func (*PonSimDeviceInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *PonSimDeviceInfo) GetNniPort() int32 {
+	if m != nil {
+		return m.NniPort
+	}
+	return 0
+}
+
+func (m *PonSimDeviceInfo) GetUniPorts() []int32 {
+	if m != nil {
+		return m.UniPorts
+	}
+	return nil
+}
+
+type FlowTable struct {
+	Port  int32                       `protobuf:"varint,1,opt,name=port" json:"port,omitempty"`
+	Flows []*openflow_13.OfpFlowStats `protobuf:"bytes,2,rep,name=flows" json:"flows,omitempty"`
+}
+
+func (m *FlowTable) Reset()                    { *m = FlowTable{} }
+func (m *FlowTable) String() string            { return proto.CompactTextString(m) }
+func (*FlowTable) ProtoMessage()               {}
+func (*FlowTable) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+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 PonSimPacketCounter struct {
+	Name  string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Value int64  `protobuf:"varint,2,opt,name=value" json:"value,omitempty"`
+}
+
+func (m *PonSimPacketCounter) Reset()                    { *m = PonSimPacketCounter{} }
+func (m *PonSimPacketCounter) String() string            { return proto.CompactTextString(m) }
+func (*PonSimPacketCounter) ProtoMessage()               {}
+func (*PonSimPacketCounter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+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" json:"port_name,omitempty"`
+	Packets  []*PonSimPacketCounter `protobuf:"bytes,2,rep,name=packets" json:"packets,omitempty"`
+}
+
+func (m *PonSimPortMetrics) Reset()                    { *m = PonSimPortMetrics{} }
+func (m *PonSimPortMetrics) String() string            { return proto.CompactTextString(m) }
+func (*PonSimPortMetrics) ProtoMessage()               {}
+func (*PonSimPortMetrics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+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" json:"device,omitempty"`
+	Metrics []*PonSimPortMetrics `protobuf:"bytes,2,rep,name=metrics" json:"metrics,omitempty"`
+}
+
+func (m *PonSimMetrics) Reset()                    { *m = PonSimMetrics{} }
+func (m *PonSimMetrics) String() string            { return proto.CompactTextString(m) }
+func (*PonSimMetrics) ProtoMessage()               {}
+func (*PonSimMetrics) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+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
+}
+
+func init() {
+	proto.RegisterType((*PonSimDeviceInfo)(nil), "voltha.PonSimDeviceInfo")
+	proto.RegisterType((*FlowTable)(nil), "voltha.FlowTable")
+	proto.RegisterType((*PonSimPacketCounter)(nil), "voltha.PonSimPacketCounter")
+	proto.RegisterType((*PonSimPortMetrics)(nil), "voltha.PonSimPortMetrics")
+	proto.RegisterType((*PonSimMetrics)(nil), "voltha.PonSimMetrics")
+}
+
+// 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
+
+// Client API for PonSim service
+
+type PonSimClient interface {
+	GetDeviceInfo(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*PonSimDeviceInfo, error)
+	UpdateFlowTable(ctx context.Context, in *FlowTable, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	GetStats(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*PonSimMetrics, error)
+}
+
+type ponSimClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewPonSimClient(cc *grpc.ClientConn) PonSimClient {
+	return &ponSimClient{cc}
+}
+
+func (c *ponSimClient) GetDeviceInfo(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*PonSimDeviceInfo, error) {
+	out := new(PonSimDeviceInfo)
+	err := grpc.Invoke(ctx, "/voltha.PonSim/GetDeviceInfo", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *ponSimClient) UpdateFlowTable(ctx context.Context, in *FlowTable, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.PonSim/UpdateFlowTable", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *ponSimClient) GetStats(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*PonSimMetrics, error) {
+	out := new(PonSimMetrics)
+	err := grpc.Invoke(ctx, "/voltha.PonSim/GetStats", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// Server API for PonSim service
+
+type PonSimServer interface {
+	GetDeviceInfo(context.Context, *google_protobuf.Empty) (*PonSimDeviceInfo, error)
+	UpdateFlowTable(context.Context, *FlowTable) (*google_protobuf.Empty, error)
+	GetStats(context.Context, *google_protobuf.Empty) (*PonSimMetrics, error)
+}
+
+func RegisterPonSimServer(s *grpc.Server, srv PonSimServer) {
+	s.RegisterService(&_PonSim_serviceDesc, srv)
+}
+
+func _PonSim_GetDeviceInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.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.(*google_protobuf.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(google_protobuf.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.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _PonSim_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "voltha.PonSim",
+	HandlerType: (*PonSimServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetDeviceInfo",
+			Handler:    _PonSim_GetDeviceInfo_Handler,
+		},
+		{
+			MethodName: "UpdateFlowTable",
+			Handler:    _PonSim_UpdateFlowTable_Handler,
+		},
+		{
+			MethodName: "GetStats",
+			Handler:    _PonSim_GetStats_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "ponsim.proto",
+}
+
+func init() { proto.RegisterFile("ponsim.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 391 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x41, 0x8f, 0xd3, 0x30,
+	0x10, 0x85, 0x9b, 0x5d, 0x92, 0xa6, 0x03, 0x2b, 0xa8, 0x81, 0x55, 0x36, 0xbd, 0x54, 0x3e, 0xf5,
+	0x94, 0xd5, 0xb6, 0xe2, 0x84, 0x04, 0x87, 0x02, 0x15, 0x48, 0xa0, 0xca, 0x85, 0x1b, 0x52, 0x94,
+	0xb6, 0x4e, 0x89, 0x48, 0x3c, 0x56, 0xe2, 0xb4, 0xe2, 0x2f, 0xf2, 0xab, 0x90, 0xed, 0x84, 0xa4,
+	0x88, 0xde, 0xc6, 0x33, 0xcf, 0xdf, 0x3c, 0xfb, 0xc1, 0x13, 0x89, 0xa2, 0xca, 0x8a, 0x48, 0x96,
+	0xa8, 0x90, 0x78, 0x47, 0xcc, 0xd5, 0x8f, 0x24, 0x9c, 0x1c, 0x10, 0x0f, 0x39, 0xbf, 0x37, 0xdd,
+	0x6d, 0x9d, 0xde, 0xf3, 0x42, 0xaa, 0x5f, 0x56, 0x14, 0x8e, 0x51, 0x72, 0x91, 0xe6, 0x78, 0x8a,
+	0x1f, 0x16, 0xb6, 0x45, 0x3f, 0xc1, 0xb3, 0x35, 0x8a, 0x4d, 0x56, 0xbc, 0xe3, 0xc7, 0x6c, 0xc7,
+	0x3f, 0x8a, 0x14, 0xc9, 0x1d, 0xf8, 0x42, 0x64, 0xb1, 0xc4, 0x52, 0x05, 0xce, 0xd4, 0x99, 0xb9,
+	0x6c, 0x28, 0x44, 0xb6, 0xc6, 0x52, 0x91, 0x09, 0x8c, 0xea, 0x66, 0x54, 0x05, 0x57, 0xd3, 0xeb,
+	0x99, 0xcb, 0xfc, 0xda, 0xce, 0x2a, 0xca, 0x60, 0xf4, 0x21, 0xc7, 0xd3, 0xd7, 0x64, 0x9b, 0x73,
+	0x42, 0xe0, 0x51, 0x0f, 0x60, 0x6a, 0xf2, 0x00, 0xae, 0xde, 0x6e, 0x6f, 0x3e, 0x9e, 0x4f, 0xa2,
+	0xbe, 0x1f, 0x4c, 0x65, 0x6c, 0xea, 0x4a, 0x25, 0xaa, 0x62, 0x56, 0x49, 0xdf, 0xc2, 0x73, 0xeb,
+	0x6f, 0x9d, 0xec, 0x7e, 0x72, 0xb5, 0xc4, 0x5a, 0x28, 0x5e, 0x6a, 0xba, 0x48, 0x0a, 0x6e, 0xe8,
+	0x23, 0x66, 0x6a, 0xf2, 0x02, 0xdc, 0x63, 0x92, 0xd7, 0x3c, 0xb8, 0x9a, 0x3a, 0xb3, 0x6b, 0x66,
+	0x0f, 0xf4, 0x00, 0xe3, 0x06, 0x80, 0xa5, 0xfa, 0xcc, 0x55, 0x99, 0xed, 0x2a, 0xfd, 0x0c, 0x6d,
+	0x28, 0xee, 0x31, 0x7c, 0xdd, 0xf8, 0xa2, 0x39, 0xaf, 0x60, 0x28, 0xcd, 0xb2, 0xce, 0xa7, 0xfd,
+	0xdc, 0xe8, 0x3f, 0x4e, 0x58, 0xab, 0xa5, 0xdf, 0xe1, 0xc6, 0xce, 0xdb, 0x25, 0xb7, 0xe0, 0xed,
+	0xcd, 0xa7, 0x36, 0x1b, 0x9a, 0x13, 0x59, 0xc0, 0xb0, 0xb0, 0x92, 0x86, 0x7f, 0xf7, 0x0f, 0xbf,
+	0x33, 0xca, 0x5a, 0xe5, 0xfc, 0xb7, 0x03, 0x9e, 0x1d, 0x93, 0x25, 0xdc, 0xac, 0xb8, 0xea, 0xe5,
+	0x75, 0x1b, 0xd9, 0xd0, 0xa3, 0x36, 0xf4, 0xe8, 0xbd, 0x0e, 0x3d, 0x0c, 0xce, 0xb9, 0xdd, 0x0d,
+	0x3a, 0x20, 0x6f, 0xe0, 0xe9, 0x37, 0xb9, 0x4f, 0x14, 0xef, 0x12, 0x1b, 0xb7, 0xf2, 0xbf, 0xad,
+	0xf0, 0x02, 0x99, 0x0e, 0xc8, 0x6b, 0xf0, 0x57, 0x5c, 0x6d, 0x74, 0x54, 0x17, 0xf7, 0xbf, 0x3c,
+	0xdf, 0xdf, 0xbc, 0x89, 0x0e, 0xb6, 0x9e, 0x11, 0x2e, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x68,
+	0x97, 0xc4, 0x14, 0xc3, 0x02, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/schema/schema.pb.go b/netopeer/voltha-grpc-client/voltha/schema/schema.pb.go
new file mode 100644
index 0000000..d46e1a4
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/schema/schema.pb.go
@@ -0,0 +1,208 @@
+// Code generated by protoc-gen-go.
+// source: schema.proto
+// DO NOT EDIT!
+
+/*
+Package schema is a generated protocol buffer package.
+
+It is generated from these files:
+	schema.proto
+
+It has these top-level messages:
+	ProtoFile
+	Schemas
+*/
+package schema
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf1 "github.com/golang/protobuf/ptypes/empty"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Contains the name and content of a *.proto file
+type ProtoFile struct {
+	FileName    string `protobuf:"bytes,1,opt,name=file_name,json=fileName" json:"file_name,omitempty"`
+	Proto       string `protobuf:"bytes,2,opt,name=proto" json:"proto,omitempty"`
+	Descriptor_ []byte `protobuf:"bytes,3,opt,name=descriptor,proto3" json:"descriptor,omitempty"`
+}
+
+func (m *ProtoFile) Reset()                    { *m = ProtoFile{} }
+func (m *ProtoFile) String() string            { return proto.CompactTextString(m) }
+func (*ProtoFile) ProtoMessage()               {}
+func (*ProtoFile) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *ProtoFile) GetFileName() string {
+	if m != nil {
+		return m.FileName
+	}
+	return ""
+}
+
+func (m *ProtoFile) GetProto() string {
+	if m != nil {
+		return m.Proto
+	}
+	return ""
+}
+
+func (m *ProtoFile) GetDescriptor_() []byte {
+	if m != nil {
+		return m.Descriptor_
+	}
+	return nil
+}
+
+// Proto files and compiled descriptors for this interface
+type Schemas struct {
+	// Proto files
+	Protos []*ProtoFile `protobuf:"bytes,1,rep,name=protos" json:"protos,omitempty"`
+	// Proto file name from which swagger.json shall be generated
+	SwaggerFrom string `protobuf:"bytes,2,opt,name=swagger_from,json=swaggerFrom" json:"swagger_from,omitempty"`
+	// Proto file name from which yang schemas shall be generated
+	YangFrom string `protobuf:"bytes,3,opt,name=yang_from,json=yangFrom" json:"yang_from,omitempty"`
+}
+
+func (m *Schemas) Reset()                    { *m = Schemas{} }
+func (m *Schemas) String() string            { return proto.CompactTextString(m) }
+func (*Schemas) ProtoMessage()               {}
+func (*Schemas) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (m *Schemas) GetProtos() []*ProtoFile {
+	if m != nil {
+		return m.Protos
+	}
+	return nil
+}
+
+func (m *Schemas) GetSwaggerFrom() string {
+	if m != nil {
+		return m.SwaggerFrom
+	}
+	return ""
+}
+
+func (m *Schemas) GetYangFrom() string {
+	if m != nil {
+		return m.YangFrom
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*ProtoFile)(nil), "schema.ProtoFile")
+	proto.RegisterType((*Schemas)(nil), "schema.Schemas")
+}
+
+// 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
+
+// Client API for SchemaService service
+
+type SchemaServiceClient interface {
+	// Return active grpc schemas
+	GetSchema(ctx context.Context, in *google_protobuf1.Empty, opts ...grpc.CallOption) (*Schemas, error)
+}
+
+type schemaServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewSchemaServiceClient(cc *grpc.ClientConn) SchemaServiceClient {
+	return &schemaServiceClient{cc}
+}
+
+func (c *schemaServiceClient) GetSchema(ctx context.Context, in *google_protobuf1.Empty, opts ...grpc.CallOption) (*Schemas, error) {
+	out := new(Schemas)
+	err := grpc.Invoke(ctx, "/schema.SchemaService/GetSchema", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// Server API for SchemaService service
+
+type SchemaServiceServer interface {
+	// Return active grpc schemas
+	GetSchema(context.Context, *google_protobuf1.Empty) (*Schemas, error)
+}
+
+func RegisterSchemaServiceServer(s *grpc.Server, srv SchemaServiceServer) {
+	s.RegisterService(&_SchemaService_serviceDesc, srv)
+}
+
+func _SchemaService_GetSchema_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf1.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SchemaServiceServer).GetSchema(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/schema.SchemaService/GetSchema",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SchemaServiceServer).GetSchema(ctx, req.(*google_protobuf1.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _SchemaService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "schema.SchemaService",
+	HandlerType: (*SchemaServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSchema",
+			Handler:    _SchemaService_GetSchema_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "schema.proto",
+}
+
+func init() { proto.RegisterFile("schema.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 278 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xc1, 0x4a, 0xc3, 0x40,
+	0x10, 0x86, 0x49, 0x8b, 0xad, 0x99, 0x56, 0x8a, 0x8b, 0x48, 0x48, 0x45, 0x62, 0x4e, 0xf1, 0x92,
+	0x40, 0x7d, 0x86, 0xd6, 0x9b, 0x48, 0x0a, 0x1e, 0x2d, 0xdb, 0x38, 0x89, 0x0b, 0xd9, 0x6c, 0xd8,
+	0x5d, 0x95, 0x5e, 0x7d, 0x05, 0x1f, 0xcd, 0x57, 0xf0, 0x41, 0x64, 0x33, 0x5b, 0xf1, 0xb6, 0xf3,
+	0x7f, 0x33, 0xcc, 0xb7, 0x03, 0x73, 0x53, 0xbd, 0xa2, 0xe4, 0x79, 0xaf, 0x95, 0x55, 0x6c, 0x42,
+	0x55, 0x7c, 0xd5, 0x28, 0xd5, 0xb4, 0x58, 0xf0, 0x5e, 0x14, 0xbc, 0xeb, 0x94, 0xe5, 0x56, 0xa8,
+	0xce, 0x50, 0x57, 0xbc, 0xf4, 0x74, 0xa8, 0xf6, 0x6f, 0x75, 0x81, 0xb2, 0xb7, 0x07, 0x82, 0xe9,
+	0x33, 0x84, 0x8f, 0xee, 0xb1, 0x11, 0x2d, 0xb2, 0x25, 0x84, 0xb5, 0x68, 0x71, 0xd7, 0x71, 0x89,
+	0x51, 0x90, 0x04, 0x59, 0x58, 0x9e, 0xba, 0xe0, 0x81, 0x4b, 0x64, 0x17, 0x70, 0x32, 0x8c, 0x44,
+	0xa3, 0x01, 0x50, 0xc1, 0xae, 0x01, 0x5e, 0xd0, 0x54, 0x5a, 0xf4, 0x56, 0xe9, 0x68, 0x9c, 0x04,
+	0xd9, 0xbc, 0xfc, 0x97, 0xa4, 0x16, 0xa6, 0xdb, 0x41, 0xd2, 0xb0, 0x5b, 0x98, 0x0c, 0x33, 0x26,
+	0x0a, 0x92, 0x71, 0x36, 0x5b, 0x9d, 0xe7, 0xfe, 0x33, 0x7f, 0x02, 0xa5, 0x6f, 0x60, 0x37, 0x30,
+	0x37, 0x1f, 0xbc, 0x69, 0x50, 0xef, 0x6a, 0xad, 0xa4, 0x5f, 0x39, 0xf3, 0xd9, 0x46, 0x2b, 0xe9,
+	0x5c, 0x0f, 0xbc, 0x6b, 0x88, 0x8f, 0xc9, 0xd5, 0x05, 0x0e, 0xae, 0x9e, 0xe0, 0x8c, 0xb6, 0x6e,
+	0x51, 0xbf, 0x8b, 0x0a, 0xd9, 0x1a, 0xc2, 0x7b, 0xb4, 0x94, 0xb1, 0xcb, 0x9c, 0x2e, 0x92, 0x1f,
+	0x2f, 0x92, 0xaf, 0xdd, 0x45, 0xe2, 0xc5, 0x51, 0xc8, 0x1b, 0xa7, 0x8b, 0xcf, 0xef, 0x9f, 0xaf,
+	0x51, 0xc8, 0xa6, 0x05, 0x81, 0x3d, 0xf9, 0xdd, 0xfd, 0x06, 0x00, 0x00, 0xff, 0xff, 0xae, 0xf9,
+	0x7e, 0x49, 0x87, 0x01, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/voltha.pb.go b/netopeer/voltha-grpc-client/voltha/voltha.pb.go
new file mode 100644
index 0000000..f1656f6
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/voltha.pb.go
@@ -0,0 +1,6114 @@
+// Code generated by protoc-gen-go.
+// source: voltha.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	voltha.proto
+
+It has these top-level messages:
+	DeviceGroup
+	DeviceGroups
+	AlarmFilterRuleKey
+	AlarmFilterRule
+	AlarmFilter
+	AlarmFilters
+	VolthaInstance
+	VolthaInstances
+	Voltha
+*/
+package voltha
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf "github.com/golang/protobuf/ptypes/empty"
+import _ "github.com/golang/protobuf/ptypes/any"
+import voltha2 "github.com/opencord/voltha/netconf/translator/voltha/meta"
+import voltha3 "github.com/opencord/voltha/netconf/translator/voltha/common"
+import voltha4 "github.com/opencord/voltha/netconf/translator/voltha/health"
+import voltha5 "github.com/opencord/voltha/netconf/translator/voltha/logical_device"
+import voltha6 "github.com/opencord/voltha/netconf/translator/voltha/device"
+import voltha7 "github.com/opencord/voltha/netconf/translator/voltha/adapter"
+import openflow_13 "github.com/opencord/voltha/netconf/translator/voltha/openflow_13"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// 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.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// ChildNode from public import meta.proto
+type ChildNode voltha2.ChildNode
+
+func (m *ChildNode) Reset()         { (*voltha2.ChildNode)(m).Reset() }
+func (m *ChildNode) String() string { return (*voltha2.ChildNode)(m).String() }
+func (*ChildNode) ProtoMessage()    {}
+func (m *ChildNode) GetKey() string { return (*voltha2.ChildNode)(m).GetKey() }
+
+// Access from public import meta.proto
+type Access voltha2.Access
+
+var Access_name = voltha2.Access_name
+var Access_value = voltha2.Access_value
+
+func (x Access) String() string { return (voltha2.Access)(x).String() }
+
+const Access_CONFIG = Access(voltha2.Access_CONFIG)
+const Access_READ_ONLY = Access(voltha2.Access_READ_ONLY)
+const Access_REAL_TIME = Access(voltha2.Access_REAL_TIME)
+
+// child_node from public import meta.proto
+var E_ChildNode = voltha2.E_ChildNode
+
+// access from public import meta.proto
+var E_Access = voltha2.E_Access
+
+// ID from public import common.proto
+type ID voltha3.ID
+
+func (m *ID) Reset()         { (*voltha3.ID)(m).Reset() }
+func (m *ID) String() string { return (*voltha3.ID)(m).String() }
+func (*ID) ProtoMessage()    {}
+func (m *ID) GetId() string  { return (*voltha3.ID)(m).GetId() }
+
+// LogLevel from public import common.proto
+type LogLevel voltha3.LogLevel
+
+func (m *LogLevel) Reset()         { (*voltha3.LogLevel)(m).Reset() }
+func (m *LogLevel) String() string { return (*voltha3.LogLevel)(m).String() }
+func (*LogLevel) ProtoMessage()    {}
+
+// AdminState from public import common.proto
+type AdminState voltha3.AdminState
+
+func (m *AdminState) Reset()         { (*voltha3.AdminState)(m).Reset() }
+func (m *AdminState) String() string { return (*voltha3.AdminState)(m).String() }
+func (*AdminState) ProtoMessage()    {}
+
+// OperStatus from public import common.proto
+type OperStatus voltha3.OperStatus
+
+func (m *OperStatus) Reset()         { (*voltha3.OperStatus)(m).Reset() }
+func (m *OperStatus) String() string { return (*voltha3.OperStatus)(m).String() }
+func (*OperStatus) ProtoMessage()    {}
+
+// ConnectStatus from public import common.proto
+type ConnectStatus voltha3.ConnectStatus
+
+func (m *ConnectStatus) Reset()         { (*voltha3.ConnectStatus)(m).Reset() }
+func (m *ConnectStatus) String() string { return (*voltha3.ConnectStatus)(m).String() }
+func (*ConnectStatus) ProtoMessage()    {}
+
+// LogLevel from public import common.proto
+type LogLevel_LogLevel voltha3.LogLevel_LogLevel
+
+var LogLevel_LogLevel_name = voltha3.LogLevel_LogLevel_name
+var LogLevel_LogLevel_value = voltha3.LogLevel_LogLevel_value
+
+func (x LogLevel_LogLevel) String() string { return (voltha3.LogLevel_LogLevel)(x).String() }
+
+const LogLevel_DEBUG = LogLevel_LogLevel(voltha3.LogLevel_DEBUG)
+const LogLevel_INFO = LogLevel_LogLevel(voltha3.LogLevel_INFO)
+const LogLevel_WARNING = LogLevel_LogLevel(voltha3.LogLevel_WARNING)
+const LogLevel_ERROR = LogLevel_LogLevel(voltha3.LogLevel_ERROR)
+const LogLevel_CRITICAL = LogLevel_LogLevel(voltha3.LogLevel_CRITICAL)
+
+// AdminState from public import common.proto
+type AdminState_AdminState voltha3.AdminState_AdminState
+
+var AdminState_AdminState_name = voltha3.AdminState_AdminState_name
+var AdminState_AdminState_value = voltha3.AdminState_AdminState_value
+
+func (x AdminState_AdminState) String() string { return (voltha3.AdminState_AdminState)(x).String() }
+
+const AdminState_UNKNOWN = AdminState_AdminState(voltha3.AdminState_UNKNOWN)
+const AdminState_PREPROVISIONED = AdminState_AdminState(voltha3.AdminState_PREPROVISIONED)
+const AdminState_ENABLED = AdminState_AdminState(voltha3.AdminState_ENABLED)
+const AdminState_DISABLED = AdminState_AdminState(voltha3.AdminState_DISABLED)
+
+// OperStatus from public import common.proto
+type OperStatus_OperStatus voltha3.OperStatus_OperStatus
+
+var OperStatus_OperStatus_name = voltha3.OperStatus_OperStatus_name
+var OperStatus_OperStatus_value = voltha3.OperStatus_OperStatus_value
+
+func (x OperStatus_OperStatus) String() string { return (voltha3.OperStatus_OperStatus)(x).String() }
+
+const OperStatus_UNKNOWN = OperStatus_OperStatus(voltha3.OperStatus_UNKNOWN)
+const OperStatus_DISCOVERED = OperStatus_OperStatus(voltha3.OperStatus_DISCOVERED)
+const OperStatus_ACTIVATING = OperStatus_OperStatus(voltha3.OperStatus_ACTIVATING)
+const OperStatus_TESTING = OperStatus_OperStatus(voltha3.OperStatus_TESTING)
+const OperStatus_ACTIVE = OperStatus_OperStatus(voltha3.OperStatus_ACTIVE)
+const OperStatus_FAILED = OperStatus_OperStatus(voltha3.OperStatus_FAILED)
+
+// ConnectStatus from public import common.proto
+type ConnectStatus_ConnectStatus voltha3.ConnectStatus_ConnectStatus
+
+var ConnectStatus_ConnectStatus_name = voltha3.ConnectStatus_ConnectStatus_name
+var ConnectStatus_ConnectStatus_value = voltha3.ConnectStatus_ConnectStatus_value
+
+func (x ConnectStatus_ConnectStatus) String() string {
+	return (voltha3.ConnectStatus_ConnectStatus)(x).String()
+}
+
+const ConnectStatus_UNKNOWN = ConnectStatus_ConnectStatus(voltha3.ConnectStatus_UNKNOWN)
+const ConnectStatus_UNREACHABLE = ConnectStatus_ConnectStatus(voltha3.ConnectStatus_UNREACHABLE)
+const ConnectStatus_REACHABLE = ConnectStatus_ConnectStatus(voltha3.ConnectStatus_REACHABLE)
+
+// HealthStatus from public import health.proto
+type HealthStatus voltha4.HealthStatus
+
+func (m *HealthStatus) Reset()         { (*voltha4.HealthStatus)(m).Reset() }
+func (m *HealthStatus) String() string { return (*voltha4.HealthStatus)(m).String() }
+func (*HealthStatus) ProtoMessage()    {}
+func (m *HealthStatus) GetState() HealthStatus_HealthState {
+	return (HealthStatus_HealthState)((*voltha4.HealthStatus)(m).GetState())
+}
+
+// HealthState from public import health.proto
+type HealthStatus_HealthState voltha4.HealthStatus_HealthState
+
+var HealthStatus_HealthState_name = voltha4.HealthStatus_HealthState_name
+var HealthStatus_HealthState_value = voltha4.HealthStatus_HealthState_value
+
+func (x HealthStatus_HealthState) String() string {
+	return (voltha4.HealthStatus_HealthState)(x).String()
+}
+
+const HealthStatus_HEALTHY = HealthStatus_HealthState(voltha4.HealthStatus_HEALTHY)
+const HealthStatus_OVERLOADED = HealthStatus_HealthState(voltha4.HealthStatus_OVERLOADED)
+const HealthStatus_DYING = HealthStatus_HealthState(voltha4.HealthStatus_DYING)
+
+// LogicalPort from public import logical_device.proto
+type LogicalPort voltha5.LogicalPort
+
+func (m *LogicalPort) Reset()                  { (*voltha5.LogicalPort)(m).Reset() }
+func (m *LogicalPort) String() string          { return (*voltha5.LogicalPort)(m).String() }
+func (*LogicalPort) ProtoMessage()             {}
+func (m *LogicalPort) GetId() string           { return (*voltha5.LogicalPort)(m).GetId() }
+func (m *LogicalPort) GetDeviceId() string     { return (*voltha5.LogicalPort)(m).GetDeviceId() }
+func (m *LogicalPort) GetDevicePortNo() uint32 { return (*voltha5.LogicalPort)(m).GetDevicePortNo() }
+func (m *LogicalPort) GetRootPort() bool       { return (*voltha5.LogicalPort)(m).GetRootPort() }
+
+// LogicalPorts from public import logical_device.proto
+type LogicalPorts voltha5.LogicalPorts
+
+func (m *LogicalPorts) Reset()         { (*voltha5.LogicalPorts)(m).Reset() }
+func (m *LogicalPorts) String() string { return (*voltha5.LogicalPorts)(m).String() }
+func (*LogicalPorts) ProtoMessage()    {}
+func (m *LogicalPorts) GetItems() []*LogicalPort {
+	o := (*voltha5.LogicalPorts)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*LogicalPort, len(o))
+	for i, x := range o {
+		s[i] = (*LogicalPort)(x)
+	}
+	return s
+}
+
+// LogicalDevice from public import logical_device.proto
+type LogicalDevice voltha5.LogicalDevice
+
+func (m *LogicalDevice) Reset()                  { (*voltha5.LogicalDevice)(m).Reset() }
+func (m *LogicalDevice) String() string          { return (*voltha5.LogicalDevice)(m).String() }
+func (*LogicalDevice) ProtoMessage()             {}
+func (m *LogicalDevice) GetId() string           { return (*voltha5.LogicalDevice)(m).GetId() }
+func (m *LogicalDevice) GetDatapathId() uint64   { return (*voltha5.LogicalDevice)(m).GetDatapathId() }
+func (m *LogicalDevice) GetRootDeviceId() string { return (*voltha5.LogicalDevice)(m).GetRootDeviceId() }
+func (m *LogicalDevice) GetPorts() []*LogicalPort {
+	o := (*voltha5.LogicalDevice)(m).GetPorts()
+	if o == nil {
+		return nil
+	}
+	s := make([]*LogicalPort, len(o))
+	for i, x := range o {
+		s[i] = (*LogicalPort)(x)
+	}
+	return s
+}
+
+// LogicalDevices from public import logical_device.proto
+type LogicalDevices voltha5.LogicalDevices
+
+func (m *LogicalDevices) Reset()         { (*voltha5.LogicalDevices)(m).Reset() }
+func (m *LogicalDevices) String() string { return (*voltha5.LogicalDevices)(m).String() }
+func (*LogicalDevices) ProtoMessage()    {}
+func (m *LogicalDevices) GetItems() []*LogicalDevice {
+	o := (*voltha5.LogicalDevices)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*LogicalDevice, len(o))
+	for i, x := range o {
+		s[i] = (*LogicalDevice)(x)
+	}
+	return s
+}
+
+// DeviceType from public import device.proto
+type DeviceType voltha6.DeviceType
+
+func (m *DeviceType) Reset()             { (*voltha6.DeviceType)(m).Reset() }
+func (m *DeviceType) String() string     { return (*voltha6.DeviceType)(m).String() }
+func (*DeviceType) ProtoMessage()        {}
+func (m *DeviceType) GetId() string      { return (*voltha6.DeviceType)(m).GetId() }
+func (m *DeviceType) GetAdapter() string { return (*voltha6.DeviceType)(m).GetAdapter() }
+func (m *DeviceType) GetAcceptsBulkFlowUpdate() bool {
+	return (*voltha6.DeviceType)(m).GetAcceptsBulkFlowUpdate()
+}
+func (m *DeviceType) GetAcceptsAddRemoveFlowUpdates() bool {
+	return (*voltha6.DeviceType)(m).GetAcceptsAddRemoveFlowUpdates()
+}
+
+// DeviceTypes from public import device.proto
+type DeviceTypes voltha6.DeviceTypes
+
+func (m *DeviceTypes) Reset()         { (*voltha6.DeviceTypes)(m).Reset() }
+func (m *DeviceTypes) String() string { return (*voltha6.DeviceTypes)(m).String() }
+func (*DeviceTypes) ProtoMessage()    {}
+func (m *DeviceTypes) GetItems() []*DeviceType {
+	o := (*voltha6.DeviceTypes)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*DeviceType, len(o))
+	for i, x := range o {
+		s[i] = (*DeviceType)(x)
+	}
+	return s
+}
+
+// PmConfig from public import device.proto
+type PmConfig voltha6.PmConfig
+
+func (m *PmConfig) Reset()          { (*voltha6.PmConfig)(m).Reset() }
+func (m *PmConfig) String() string  { return (*voltha6.PmConfig)(m).String() }
+func (*PmConfig) ProtoMessage()     {}
+func (m *PmConfig) GetName() string { return (*voltha6.PmConfig)(m).GetName() }
+func (m *PmConfig) GetType() PmConfig_PmType {
+	return (PmConfig_PmType)((*voltha6.PmConfig)(m).GetType())
+}
+func (m *PmConfig) GetEnabled() bool      { return (*voltha6.PmConfig)(m).GetEnabled() }
+func (m *PmConfig) GetSampleFreq() uint32 { return (*voltha6.PmConfig)(m).GetSampleFreq() }
+
+// PmGroupConfig from public import device.proto
+type PmGroupConfig voltha6.PmGroupConfig
+
+func (m *PmGroupConfig) Reset()               { (*voltha6.PmGroupConfig)(m).Reset() }
+func (m *PmGroupConfig) String() string       { return (*voltha6.PmGroupConfig)(m).String() }
+func (*PmGroupConfig) ProtoMessage()          {}
+func (m *PmGroupConfig) GetGroupName() string { return (*voltha6.PmGroupConfig)(m).GetGroupName() }
+func (m *PmGroupConfig) GetGroupFreq() uint32 { return (*voltha6.PmGroupConfig)(m).GetGroupFreq() }
+func (m *PmGroupConfig) GetEnabled() bool     { return (*voltha6.PmGroupConfig)(m).GetEnabled() }
+func (m *PmGroupConfig) GetMetrics() []*PmConfig {
+	o := (*voltha6.PmGroupConfig)(m).GetMetrics()
+	if o == nil {
+		return nil
+	}
+	s := make([]*PmConfig, len(o))
+	for i, x := range o {
+		s[i] = (*PmConfig)(x)
+	}
+	return s
+}
+
+// PmConfigs from public import device.proto
+type PmConfigs voltha6.PmConfigs
+
+func (m *PmConfigs) Reset()                 { (*voltha6.PmConfigs)(m).Reset() }
+func (m *PmConfigs) String() string         { return (*voltha6.PmConfigs)(m).String() }
+func (*PmConfigs) ProtoMessage()            {}
+func (m *PmConfigs) GetId() string          { return (*voltha6.PmConfigs)(m).GetId() }
+func (m *PmConfigs) GetDefaultFreq() uint32 { return (*voltha6.PmConfigs)(m).GetDefaultFreq() }
+func (m *PmConfigs) GetGrouped() bool       { return (*voltha6.PmConfigs)(m).GetGrouped() }
+func (m *PmConfigs) GetFreqOverride() bool  { return (*voltha6.PmConfigs)(m).GetFreqOverride() }
+func (m *PmConfigs) GetGroups() []*PmGroupConfig {
+	o := (*voltha6.PmConfigs)(m).GetGroups()
+	if o == nil {
+		return nil
+	}
+	s := make([]*PmGroupConfig, len(o))
+	for i, x := range o {
+		s[i] = (*PmGroupConfig)(x)
+	}
+	return s
+}
+func (m *PmConfigs) GetMetrics() []*PmConfig {
+	o := (*voltha6.PmConfigs)(m).GetMetrics()
+	if o == nil {
+		return nil
+	}
+	s := make([]*PmConfig, len(o))
+	for i, x := range o {
+		s[i] = (*PmConfig)(x)
+	}
+	return s
+}
+
+// Port from public import device.proto
+type Port voltha6.Port
+
+func (m *Port) Reset()                 { (*voltha6.Port)(m).Reset() }
+func (m *Port) String() string         { return (*voltha6.Port)(m).String() }
+func (*Port) ProtoMessage()            {}
+func (m *Port) GetPortNo() uint32      { return (*voltha6.Port)(m).GetPortNo() }
+func (m *Port) GetLabel() string       { return (*voltha6.Port)(m).GetLabel() }
+func (m *Port) GetType() Port_PortType { return (Port_PortType)((*voltha6.Port)(m).GetType()) }
+func (m *Port) GetDeviceId() string    { return (*voltha6.Port)(m).GetDeviceId() }
+func (m *Port) GetPeers() []*Port_PeerPort {
+	o := (*voltha6.Port)(m).GetPeers()
+	if o == nil {
+		return nil
+	}
+	s := make([]*Port_PeerPort, len(o))
+	for i, x := range o {
+		s[i] = (*Port_PeerPort)(x)
+	}
+	return s
+}
+
+// PeerPort from public import device.proto
+type Port_PeerPort voltha6.Port_PeerPort
+
+func (m *Port_PeerPort) Reset()              { (*voltha6.Port_PeerPort)(m).Reset() }
+func (m *Port_PeerPort) String() string      { return (*voltha6.Port_PeerPort)(m).String() }
+func (*Port_PeerPort) ProtoMessage()         {}
+func (m *Port_PeerPort) GetDeviceId() string { return (*voltha6.Port_PeerPort)(m).GetDeviceId() }
+func (m *Port_PeerPort) GetPortNo() uint32   { return (*voltha6.Port_PeerPort)(m).GetPortNo() }
+
+// Ports from public import device.proto
+type Ports voltha6.Ports
+
+func (m *Ports) Reset()         { (*voltha6.Ports)(m).Reset() }
+func (m *Ports) String() string { return (*voltha6.Ports)(m).String() }
+func (*Ports) ProtoMessage()    {}
+func (m *Ports) GetItems() []*Port {
+	o := (*voltha6.Ports)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*Port, len(o))
+	for i, x := range o {
+		s[i] = (*Port)(x)
+	}
+	return s
+}
+
+// Device from public import device.proto
+type Device voltha6.Device
+
+func (m *Device) Reset()         { (*voltha6.Device)(m).Reset() }
+func (m *Device) String() string { return (*voltha6.Device)(m).String() }
+func (*Device) ProtoMessage()    {}
+func (m *Device) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _Device_OneofMarshaler, _Device_OneofUnmarshaler, _Device_OneofSizer, nil
+}
+func _Device_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Device)
+	m0 := (*voltha6.Device)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _Device_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Device)
+	m0 := (*voltha6.Device)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _Device_OneofSizer(msg proto.Message) int {
+	m := msg.(*Device)
+	m0 := (*voltha6.Device)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *Device) GetId() string              { return (*voltha6.Device)(m).GetId() }
+func (m *Device) GetType() string            { return (*voltha6.Device)(m).GetType() }
+func (m *Device) GetRoot() bool              { return (*voltha6.Device)(m).GetRoot() }
+func (m *Device) GetParentId() string        { return (*voltha6.Device)(m).GetParentId() }
+func (m *Device) GetParentPortNo() uint32    { return (*voltha6.Device)(m).GetParentPortNo() }
+func (m *Device) GetVendor() string          { return (*voltha6.Device)(m).GetVendor() }
+func (m *Device) GetModel() string           { return (*voltha6.Device)(m).GetModel() }
+func (m *Device) GetHardwareVersion() string { return (*voltha6.Device)(m).GetHardwareVersion() }
+func (m *Device) GetFirmwareVersion() string { return (*voltha6.Device)(m).GetFirmwareVersion() }
+func (m *Device) GetSoftwareVersion() string { return (*voltha6.Device)(m).GetSoftwareVersion() }
+func (m *Device) GetSerialNumber() string    { return (*voltha6.Device)(m).GetSerialNumber() }
+func (m *Device) GetAdapter() string         { return (*voltha6.Device)(m).GetAdapter() }
+func (m *Device) GetVlan() uint32            { return (*voltha6.Device)(m).GetVlan() }
+func (m *Device) GetMacAddress() string      { return (*voltha6.Device)(m).GetMacAddress() }
+func (m *Device) GetIpv4Address() string     { return (*voltha6.Device)(m).GetIpv4Address() }
+func (m *Device) GetIpv6Address() string     { return (*voltha6.Device)(m).GetIpv6Address() }
+func (m *Device) GetHostAndPort() string     { return (*voltha6.Device)(m).GetHostAndPort() }
+func (m *Device) GetProxyAddress() *Device_ProxyAddress {
+	return (*Device_ProxyAddress)((*voltha6.Device)(m).GetProxyAddress())
+}
+func (m *Device) GetReason() string { return (*voltha6.Device)(m).GetReason() }
+func (m *Device) GetPorts() []*Port {
+	o := (*voltha6.Device)(m).GetPorts()
+	if o == nil {
+		return nil
+	}
+	s := make([]*Port, len(o))
+	for i, x := range o {
+		s[i] = (*Port)(x)
+	}
+	return s
+}
+func (m *Device) GetPmConfigs() *PmConfigs { return (*PmConfigs)((*voltha6.Device)(m).GetPmConfigs()) }
+
+// ProxyAddress from public import device.proto
+type Device_ProxyAddress voltha6.Device_ProxyAddress
+
+func (m *Device_ProxyAddress) Reset()         { (*voltha6.Device_ProxyAddress)(m).Reset() }
+func (m *Device_ProxyAddress) String() string { return (*voltha6.Device_ProxyAddress)(m).String() }
+func (*Device_ProxyAddress) ProtoMessage()    {}
+func (m *Device_ProxyAddress) GetDeviceId() string {
+	return (*voltha6.Device_ProxyAddress)(m).GetDeviceId()
+}
+func (m *Device_ProxyAddress) GetChannelId() uint32 {
+	return (*voltha6.Device_ProxyAddress)(m).GetChannelId()
+}
+func (m *Device_ProxyAddress) GetOnuId() uint32 { return (*voltha6.Device_ProxyAddress)(m).GetOnuId() }
+func (m *Device_ProxyAddress) GetOnuSessionId() uint32 {
+	return (*voltha6.Device_ProxyAddress)(m).GetOnuSessionId()
+}
+
+// Devices from public import device.proto
+type Devices voltha6.Devices
+
+func (m *Devices) Reset()         { (*voltha6.Devices)(m).Reset() }
+func (m *Devices) String() string { return (*voltha6.Devices)(m).String() }
+func (*Devices) ProtoMessage()    {}
+func (m *Devices) GetItems() []*Device {
+	o := (*voltha6.Devices)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*Device, len(o))
+	for i, x := range o {
+		s[i] = (*Device)(x)
+	}
+	return s
+}
+
+// PmType from public import device.proto
+type PmConfig_PmType voltha6.PmConfig_PmType
+
+var PmConfig_PmType_name = voltha6.PmConfig_PmType_name
+var PmConfig_PmType_value = voltha6.PmConfig_PmType_value
+
+func (x PmConfig_PmType) String() string { return (voltha6.PmConfig_PmType)(x).String() }
+
+const PmConfig_COUNTER = PmConfig_PmType(voltha6.PmConfig_COUNTER)
+const PmConfig_GUAGE = PmConfig_PmType(voltha6.PmConfig_GUAGE)
+const PmConfig_STATE = PmConfig_PmType(voltha6.PmConfig_STATE)
+
+// PortType from public import device.proto
+type Port_PortType voltha6.Port_PortType
+
+var Port_PortType_name = voltha6.Port_PortType_name
+var Port_PortType_value = voltha6.Port_PortType_value
+
+func (x Port_PortType) String() string { return (voltha6.Port_PortType)(x).String() }
+
+const Port_UNKNOWN = Port_PortType(voltha6.Port_UNKNOWN)
+const Port_ETHERNET_NNI = Port_PortType(voltha6.Port_ETHERNET_NNI)
+const Port_ETHERNET_UNI = Port_PortType(voltha6.Port_ETHERNET_UNI)
+const Port_PON_OLT = Port_PortType(voltha6.Port_PON_OLT)
+const Port_PON_ONU = Port_PortType(voltha6.Port_PON_ONU)
+
+// AdapterConfig from public import adapter.proto
+type AdapterConfig voltha7.AdapterConfig
+
+func (m *AdapterConfig) Reset()         { (*voltha7.AdapterConfig)(m).Reset() }
+func (m *AdapterConfig) String() string { return (*voltha7.AdapterConfig)(m).String() }
+func (*AdapterConfig) ProtoMessage()    {}
+
+// Adapter from public import adapter.proto
+type Adapter voltha7.Adapter
+
+func (m *Adapter) Reset()             { (*voltha7.Adapter)(m).Reset() }
+func (m *Adapter) String() string     { return (*voltha7.Adapter)(m).String() }
+func (*Adapter) ProtoMessage()        {}
+func (m *Adapter) GetId() string      { return (*voltha7.Adapter)(m).GetId() }
+func (m *Adapter) GetVendor() string  { return (*voltha7.Adapter)(m).GetVendor() }
+func (m *Adapter) GetVersion() string { return (*voltha7.Adapter)(m).GetVersion() }
+func (m *Adapter) GetConfig() *AdapterConfig {
+	return (*AdapterConfig)((*voltha7.Adapter)(m).GetConfig())
+}
+func (m *Adapter) GetLogicalDeviceIds() []string { return (*voltha7.Adapter)(m).GetLogicalDeviceIds() }
+
+// Adapters from public import adapter.proto
+type Adapters voltha7.Adapters
+
+func (m *Adapters) Reset()         { (*voltha7.Adapters)(m).Reset() }
+func (m *Adapters) String() string { return (*voltha7.Adapters)(m).String() }
+func (*Adapters) ProtoMessage()    {}
+func (m *Adapters) GetItems() []*Adapter {
+	o := (*voltha7.Adapters)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*Adapter, len(o))
+	for i, x := range o {
+		s[i] = (*Adapter)(x)
+	}
+	return s
+}
+
+// ofp_header from public import openflow_13.proto
+type OfpHeader openflow_13.OfpHeader
+
+func (m *OfpHeader) Reset()             { (*openflow_13.OfpHeader)(m).Reset() }
+func (m *OfpHeader) String() string     { return (*openflow_13.OfpHeader)(m).String() }
+func (*OfpHeader) ProtoMessage()        {}
+func (m *OfpHeader) GetVersion() uint32 { return (*openflow_13.OfpHeader)(m).GetVersion() }
+func (m *OfpHeader) GetType() OfpType   { return (OfpType)((*openflow_13.OfpHeader)(m).GetType()) }
+func (m *OfpHeader) GetXid() uint32     { return (*openflow_13.OfpHeader)(m).GetXid() }
+
+// ofp_hello_elem_header from public import openflow_13.proto
+type OfpHelloElemHeader openflow_13.OfpHelloElemHeader
+
+func (m *OfpHelloElemHeader) Reset()         { (*openflow_13.OfpHelloElemHeader)(m).Reset() }
+func (m *OfpHelloElemHeader) String() string { return (*openflow_13.OfpHelloElemHeader)(m).String() }
+func (*OfpHelloElemHeader) ProtoMessage()    {}
+func (m *OfpHelloElemHeader) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _OfpHelloElemHeader_OneofMarshaler, _OfpHelloElemHeader_OneofUnmarshaler, _OfpHelloElemHeader_OneofSizer, nil
+}
+func _OfpHelloElemHeader_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpHelloElemHeader)
+	m0 := (*openflow_13.OfpHelloElemHeader)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _OfpHelloElemHeader_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpHelloElemHeader)
+	m0 := (*openflow_13.OfpHelloElemHeader)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _OfpHelloElemHeader_OneofSizer(msg proto.Message) int {
+	m := msg.(*OfpHelloElemHeader)
+	m0 := (*openflow_13.OfpHelloElemHeader)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *OfpHelloElemHeader) GetType() OfpHelloElemType {
+	return (OfpHelloElemType)((*openflow_13.OfpHelloElemHeader)(m).GetType())
+}
+func (m *OfpHelloElemHeader) GetVersionbitmap() *OfpHelloElemVersionbitmap {
+	return (*OfpHelloElemVersionbitmap)((*openflow_13.OfpHelloElemHeader)(m).GetVersionbitmap())
+}
+
+// ofp_hello_elem_versionbitmap from public import openflow_13.proto
+type OfpHelloElemVersionbitmap openflow_13.OfpHelloElemVersionbitmap
+
+func (m *OfpHelloElemVersionbitmap) Reset() { (*openflow_13.OfpHelloElemVersionbitmap)(m).Reset() }
+func (m *OfpHelloElemVersionbitmap) String() string {
+	return (*openflow_13.OfpHelloElemVersionbitmap)(m).String()
+}
+func (*OfpHelloElemVersionbitmap) ProtoMessage() {}
+func (m *OfpHelloElemVersionbitmap) GetBitmaps() []uint32 {
+	return (*openflow_13.OfpHelloElemVersionbitmap)(m).GetBitmaps()
+}
+
+// ofp_hello from public import openflow_13.proto
+type OfpHello openflow_13.OfpHello
+
+func (m *OfpHello) Reset()         { (*openflow_13.OfpHello)(m).Reset() }
+func (m *OfpHello) String() string { return (*openflow_13.OfpHello)(m).String() }
+func (*OfpHello) ProtoMessage()    {}
+func (m *OfpHello) GetElements() []*OfpHelloElemHeader {
+	o := (*openflow_13.OfpHello)(m).GetElements()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpHelloElemHeader, len(o))
+	for i, x := range o {
+		s[i] = (*OfpHelloElemHeader)(x)
+	}
+	return s
+}
+
+// ofp_switch_config from public import openflow_13.proto
+type OfpSwitchConfig openflow_13.OfpSwitchConfig
+
+func (m *OfpSwitchConfig) Reset()           { (*openflow_13.OfpSwitchConfig)(m).Reset() }
+func (m *OfpSwitchConfig) String() string   { return (*openflow_13.OfpSwitchConfig)(m).String() }
+func (*OfpSwitchConfig) ProtoMessage()      {}
+func (m *OfpSwitchConfig) GetFlags() uint32 { return (*openflow_13.OfpSwitchConfig)(m).GetFlags() }
+func (m *OfpSwitchConfig) GetMissSendLen() uint32 {
+	return (*openflow_13.OfpSwitchConfig)(m).GetMissSendLen()
+}
+
+// ofp_table_mod from public import openflow_13.proto
+type OfpTableMod openflow_13.OfpTableMod
+
+func (m *OfpTableMod) Reset()             { (*openflow_13.OfpTableMod)(m).Reset() }
+func (m *OfpTableMod) String() string     { return (*openflow_13.OfpTableMod)(m).String() }
+func (*OfpTableMod) ProtoMessage()        {}
+func (m *OfpTableMod) GetTableId() uint32 { return (*openflow_13.OfpTableMod)(m).GetTableId() }
+func (m *OfpTableMod) GetConfig() uint32  { return (*openflow_13.OfpTableMod)(m).GetConfig() }
+
+// ofp_port from public import openflow_13.proto
+type OfpPort openflow_13.OfpPort
+
+func (m *OfpPort) Reset()                { (*openflow_13.OfpPort)(m).Reset() }
+func (m *OfpPort) String() string        { return (*openflow_13.OfpPort)(m).String() }
+func (*OfpPort) ProtoMessage()           {}
+func (m *OfpPort) GetPortNo() uint32     { return (*openflow_13.OfpPort)(m).GetPortNo() }
+func (m *OfpPort) GetHwAddr() []uint32   { return (*openflow_13.OfpPort)(m).GetHwAddr() }
+func (m *OfpPort) GetName() string       { return (*openflow_13.OfpPort)(m).GetName() }
+func (m *OfpPort) GetConfig() uint32     { return (*openflow_13.OfpPort)(m).GetConfig() }
+func (m *OfpPort) GetState() uint32      { return (*openflow_13.OfpPort)(m).GetState() }
+func (m *OfpPort) GetCurr() uint32       { return (*openflow_13.OfpPort)(m).GetCurr() }
+func (m *OfpPort) GetAdvertised() uint32 { return (*openflow_13.OfpPort)(m).GetAdvertised() }
+func (m *OfpPort) GetSupported() uint32  { return (*openflow_13.OfpPort)(m).GetSupported() }
+func (m *OfpPort) GetPeer() uint32       { return (*openflow_13.OfpPort)(m).GetPeer() }
+func (m *OfpPort) GetCurrSpeed() uint32  { return (*openflow_13.OfpPort)(m).GetCurrSpeed() }
+func (m *OfpPort) GetMaxSpeed() uint32   { return (*openflow_13.OfpPort)(m).GetMaxSpeed() }
+
+// ofp_switch_features from public import openflow_13.proto
+type OfpSwitchFeatures openflow_13.OfpSwitchFeatures
+
+func (m *OfpSwitchFeatures) Reset()         { (*openflow_13.OfpSwitchFeatures)(m).Reset() }
+func (m *OfpSwitchFeatures) String() string { return (*openflow_13.OfpSwitchFeatures)(m).String() }
+func (*OfpSwitchFeatures) ProtoMessage()    {}
+func (m *OfpSwitchFeatures) GetDatapathId() uint64 {
+	return (*openflow_13.OfpSwitchFeatures)(m).GetDatapathId()
+}
+func (m *OfpSwitchFeatures) GetNBuffers() uint32 {
+	return (*openflow_13.OfpSwitchFeatures)(m).GetNBuffers()
+}
+func (m *OfpSwitchFeatures) GetNTables() uint32 {
+	return (*openflow_13.OfpSwitchFeatures)(m).GetNTables()
+}
+func (m *OfpSwitchFeatures) GetAuxiliaryId() uint32 {
+	return (*openflow_13.OfpSwitchFeatures)(m).GetAuxiliaryId()
+}
+func (m *OfpSwitchFeatures) GetCapabilities() uint32 {
+	return (*openflow_13.OfpSwitchFeatures)(m).GetCapabilities()
+}
+
+// ofp_port_status from public import openflow_13.proto
+type OfpPortStatus openflow_13.OfpPortStatus
+
+func (m *OfpPortStatus) Reset()         { (*openflow_13.OfpPortStatus)(m).Reset() }
+func (m *OfpPortStatus) String() string { return (*openflow_13.OfpPortStatus)(m).String() }
+func (*OfpPortStatus) ProtoMessage()    {}
+func (m *OfpPortStatus) GetReason() OfpPortReason {
+	return (OfpPortReason)((*openflow_13.OfpPortStatus)(m).GetReason())
+}
+func (m *OfpPortStatus) GetDesc() *OfpPort {
+	return (*OfpPort)((*openflow_13.OfpPortStatus)(m).GetDesc())
+}
+
+// ofp_port_mod from public import openflow_13.proto
+type OfpPortMod openflow_13.OfpPortMod
+
+func (m *OfpPortMod) Reset()               { (*openflow_13.OfpPortMod)(m).Reset() }
+func (m *OfpPortMod) String() string       { return (*openflow_13.OfpPortMod)(m).String() }
+func (*OfpPortMod) ProtoMessage()          {}
+func (m *OfpPortMod) GetPortNo() uint32    { return (*openflow_13.OfpPortMod)(m).GetPortNo() }
+func (m *OfpPortMod) GetHwAddr() []uint32  { return (*openflow_13.OfpPortMod)(m).GetHwAddr() }
+func (m *OfpPortMod) GetConfig() uint32    { return (*openflow_13.OfpPortMod)(m).GetConfig() }
+func (m *OfpPortMod) GetMask() uint32      { return (*openflow_13.OfpPortMod)(m).GetMask() }
+func (m *OfpPortMod) GetAdvertise() uint32 { return (*openflow_13.OfpPortMod)(m).GetAdvertise() }
+
+// ofp_match from public import openflow_13.proto
+type OfpMatch openflow_13.OfpMatch
+
+func (m *OfpMatch) Reset()                { (*openflow_13.OfpMatch)(m).Reset() }
+func (m *OfpMatch) String() string        { return (*openflow_13.OfpMatch)(m).String() }
+func (*OfpMatch) ProtoMessage()           {}
+func (m *OfpMatch) GetType() OfpMatchType { return (OfpMatchType)((*openflow_13.OfpMatch)(m).GetType()) }
+func (m *OfpMatch) GetOxmFields() []*OfpOxmField {
+	o := (*openflow_13.OfpMatch)(m).GetOxmFields()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpOxmField, len(o))
+	for i, x := range o {
+		s[i] = (*OfpOxmField)(x)
+	}
+	return s
+}
+
+// ofp_oxm_field from public import openflow_13.proto
+type OfpOxmField openflow_13.OfpOxmField
+
+func (m *OfpOxmField) Reset()         { (*openflow_13.OfpOxmField)(m).Reset() }
+func (m *OfpOxmField) String() string { return (*openflow_13.OfpOxmField)(m).String() }
+func (*OfpOxmField) ProtoMessage()    {}
+func (m *OfpOxmField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _OfpOxmField_OneofMarshaler, _OfpOxmField_OneofUnmarshaler, _OfpOxmField_OneofSizer, nil
+}
+func _OfpOxmField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpOxmField)
+	m0 := (*openflow_13.OfpOxmField)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _OfpOxmField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpOxmField)
+	m0 := (*openflow_13.OfpOxmField)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _OfpOxmField_OneofSizer(msg proto.Message) int {
+	m := msg.(*OfpOxmField)
+	m0 := (*openflow_13.OfpOxmField)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *OfpOxmField) GetOxmClass() OfpOxmClass {
+	return (OfpOxmClass)((*openflow_13.OfpOxmField)(m).GetOxmClass())
+}
+func (m *OfpOxmField) GetOfbField() *OfpOxmOfbField {
+	return (*OfpOxmOfbField)((*openflow_13.OfpOxmField)(m).GetOfbField())
+}
+func (m *OfpOxmField) GetExperimenterField() *OfpOxmExperimenterField {
+	return (*OfpOxmExperimenterField)((*openflow_13.OfpOxmField)(m).GetExperimenterField())
+}
+
+// ofp_oxm_ofb_field from public import openflow_13.proto
+type OfpOxmOfbField openflow_13.OfpOxmOfbField
+
+func (m *OfpOxmOfbField) Reset()         { (*openflow_13.OfpOxmOfbField)(m).Reset() }
+func (m *OfpOxmOfbField) String() string { return (*openflow_13.OfpOxmOfbField)(m).String() }
+func (*OfpOxmOfbField) ProtoMessage()    {}
+func (m *OfpOxmOfbField) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _OfpOxmOfbField_OneofMarshaler, _OfpOxmOfbField_OneofUnmarshaler, _OfpOxmOfbField_OneofSizer, nil
+}
+func _OfpOxmOfbField_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpOxmOfbField)
+	m0 := (*openflow_13.OfpOxmOfbField)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _OfpOxmOfbField_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpOxmOfbField)
+	m0 := (*openflow_13.OfpOxmOfbField)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _OfpOxmOfbField_OneofSizer(msg proto.Message) int {
+	m := msg.(*OfpOxmOfbField)
+	m0 := (*openflow_13.OfpOxmOfbField)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *OfpOxmOfbField) GetType() OxmOfbFieldTypes {
+	return (OxmOfbFieldTypes)((*openflow_13.OfpOxmOfbField)(m).GetType())
+}
+func (m *OfpOxmOfbField) GetHasMask() bool { return (*openflow_13.OfpOxmOfbField)(m).GetHasMask() }
+func (m *OfpOxmOfbField) GetPort() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetPort() }
+func (m *OfpOxmOfbField) GetPhysicalPort() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetPhysicalPort()
+}
+func (m *OfpOxmOfbField) GetTableMetadata() uint64 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetTableMetadata()
+}
+func (m *OfpOxmOfbField) GetEthDst() []byte  { return (*openflow_13.OfpOxmOfbField)(m).GetEthDst() }
+func (m *OfpOxmOfbField) GetEthSrc() []byte  { return (*openflow_13.OfpOxmOfbField)(m).GetEthSrc() }
+func (m *OfpOxmOfbField) GetEthType() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetEthType() }
+func (m *OfpOxmOfbField) GetVlanVid() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetVlanVid() }
+func (m *OfpOxmOfbField) GetVlanPcp() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetVlanPcp() }
+func (m *OfpOxmOfbField) GetIpDscp() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetIpDscp() }
+func (m *OfpOxmOfbField) GetIpEcn() uint32   { return (*openflow_13.OfpOxmOfbField)(m).GetIpEcn() }
+func (m *OfpOxmOfbField) GetIpProto() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetIpProto() }
+func (m *OfpOxmOfbField) GetIpv4Src() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetIpv4Src() }
+func (m *OfpOxmOfbField) GetIpv4Dst() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetIpv4Dst() }
+func (m *OfpOxmOfbField) GetTcpSrc() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetTcpSrc() }
+func (m *OfpOxmOfbField) GetTcpDst() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetTcpDst() }
+func (m *OfpOxmOfbField) GetUdpSrc() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetUdpSrc() }
+func (m *OfpOxmOfbField) GetUdpDst() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetUdpDst() }
+func (m *OfpOxmOfbField) GetSctpSrc() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetSctpSrc() }
+func (m *OfpOxmOfbField) GetSctpDst() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetSctpDst() }
+func (m *OfpOxmOfbField) GetIcmpv4Type() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIcmpv4Type()
+}
+func (m *OfpOxmOfbField) GetIcmpv4Code() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIcmpv4Code()
+}
+func (m *OfpOxmOfbField) GetArpOp() uint32   { return (*openflow_13.OfpOxmOfbField)(m).GetArpOp() }
+func (m *OfpOxmOfbField) GetArpSpa() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetArpSpa() }
+func (m *OfpOxmOfbField) GetArpTpa() uint32  { return (*openflow_13.OfpOxmOfbField)(m).GetArpTpa() }
+func (m *OfpOxmOfbField) GetArpSha() []byte  { return (*openflow_13.OfpOxmOfbField)(m).GetArpSha() }
+func (m *OfpOxmOfbField) GetArpTha() []byte  { return (*openflow_13.OfpOxmOfbField)(m).GetArpTha() }
+func (m *OfpOxmOfbField) GetIpv6Src() []byte { return (*openflow_13.OfpOxmOfbField)(m).GetIpv6Src() }
+func (m *OfpOxmOfbField) GetIpv6Dst() []byte { return (*openflow_13.OfpOxmOfbField)(m).GetIpv6Dst() }
+func (m *OfpOxmOfbField) GetIpv6Flabel() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv6Flabel()
+}
+func (m *OfpOxmOfbField) GetIcmpv6Type() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIcmpv6Type()
+}
+func (m *OfpOxmOfbField) GetIcmpv6Code() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIcmpv6Code()
+}
+func (m *OfpOxmOfbField) GetIpv6NdTarget() []byte {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv6NdTarget()
+}
+func (m *OfpOxmOfbField) GetIpv6NdSsl() []byte { return (*openflow_13.OfpOxmOfbField)(m).GetIpv6NdSsl() }
+func (m *OfpOxmOfbField) GetIpv6NdTll() []byte { return (*openflow_13.OfpOxmOfbField)(m).GetIpv6NdTll() }
+func (m *OfpOxmOfbField) GetMplsLabel() uint32 { return (*openflow_13.OfpOxmOfbField)(m).GetMplsLabel() }
+func (m *OfpOxmOfbField) GetMplsTc() uint32    { return (*openflow_13.OfpOxmOfbField)(m).GetMplsTc() }
+func (m *OfpOxmOfbField) GetMplsBos() uint32   { return (*openflow_13.OfpOxmOfbField)(m).GetMplsBos() }
+func (m *OfpOxmOfbField) GetPbbIsid() uint32   { return (*openflow_13.OfpOxmOfbField)(m).GetPbbIsid() }
+func (m *OfpOxmOfbField) GetTunnelId() uint64  { return (*openflow_13.OfpOxmOfbField)(m).GetTunnelId() }
+func (m *OfpOxmOfbField) GetIpv6Exthdr() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv6Exthdr()
+}
+func (m *OfpOxmOfbField) GetTableMetadataMask() uint64 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetTableMetadataMask()
+}
+func (m *OfpOxmOfbField) GetEthDstMask() []byte {
+	return (*openflow_13.OfpOxmOfbField)(m).GetEthDstMask()
+}
+func (m *OfpOxmOfbField) GetEthSrcMask() []byte {
+	return (*openflow_13.OfpOxmOfbField)(m).GetEthSrcMask()
+}
+func (m *OfpOxmOfbField) GetVlanVidMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetVlanVidMask()
+}
+func (m *OfpOxmOfbField) GetIpv4SrcMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv4SrcMask()
+}
+func (m *OfpOxmOfbField) GetIpv4DstMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv4DstMask()
+}
+func (m *OfpOxmOfbField) GetArpSpaMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetArpSpaMask()
+}
+func (m *OfpOxmOfbField) GetArpTpaMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetArpTpaMask()
+}
+func (m *OfpOxmOfbField) GetIpv6SrcMask() []byte {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv6SrcMask()
+}
+func (m *OfpOxmOfbField) GetIpv6DstMask() []byte {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv6DstMask()
+}
+func (m *OfpOxmOfbField) GetIpv6FlabelMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv6FlabelMask()
+}
+func (m *OfpOxmOfbField) GetPbbIsidMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetPbbIsidMask()
+}
+func (m *OfpOxmOfbField) GetTunnelIdMask() uint64 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetTunnelIdMask()
+}
+func (m *OfpOxmOfbField) GetIpv6ExthdrMask() uint32 {
+	return (*openflow_13.OfpOxmOfbField)(m).GetIpv6ExthdrMask()
+}
+
+// ofp_oxm_experimenter_field from public import openflow_13.proto
+type OfpOxmExperimenterField openflow_13.OfpOxmExperimenterField
+
+func (m *OfpOxmExperimenterField) Reset() { (*openflow_13.OfpOxmExperimenterField)(m).Reset() }
+func (m *OfpOxmExperimenterField) String() string {
+	return (*openflow_13.OfpOxmExperimenterField)(m).String()
+}
+func (*OfpOxmExperimenterField) ProtoMessage() {}
+func (m *OfpOxmExperimenterField) GetOxmHeader() uint32 {
+	return (*openflow_13.OfpOxmExperimenterField)(m).GetOxmHeader()
+}
+func (m *OfpOxmExperimenterField) GetExperimenter() uint32 {
+	return (*openflow_13.OfpOxmExperimenterField)(m).GetExperimenter()
+}
+
+// ofp_action from public import openflow_13.proto
+type OfpAction openflow_13.OfpAction
+
+func (m *OfpAction) Reset()         { (*openflow_13.OfpAction)(m).Reset() }
+func (m *OfpAction) String() string { return (*openflow_13.OfpAction)(m).String() }
+func (*OfpAction) ProtoMessage()    {}
+func (m *OfpAction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _OfpAction_OneofMarshaler, _OfpAction_OneofUnmarshaler, _OfpAction_OneofSizer, nil
+}
+func _OfpAction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpAction)
+	m0 := (*openflow_13.OfpAction)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _OfpAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpAction)
+	m0 := (*openflow_13.OfpAction)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _OfpAction_OneofSizer(msg proto.Message) int {
+	m := msg.(*OfpAction)
+	m0 := (*openflow_13.OfpAction)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *OfpAction) GetType() OfpActionType {
+	return (OfpActionType)((*openflow_13.OfpAction)(m).GetType())
+}
+func (m *OfpAction) GetOutput() *OfpActionOutput {
+	return (*OfpActionOutput)((*openflow_13.OfpAction)(m).GetOutput())
+}
+func (m *OfpAction) GetMplsTtl() *OfpActionMplsTtl {
+	return (*OfpActionMplsTtl)((*openflow_13.OfpAction)(m).GetMplsTtl())
+}
+func (m *OfpAction) GetPush() *OfpActionPush {
+	return (*OfpActionPush)((*openflow_13.OfpAction)(m).GetPush())
+}
+func (m *OfpAction) GetPopMpls() *OfpActionPopMpls {
+	return (*OfpActionPopMpls)((*openflow_13.OfpAction)(m).GetPopMpls())
+}
+func (m *OfpAction) GetGroup() *OfpActionGroup {
+	return (*OfpActionGroup)((*openflow_13.OfpAction)(m).GetGroup())
+}
+func (m *OfpAction) GetNwTtl() *OfpActionNwTtl {
+	return (*OfpActionNwTtl)((*openflow_13.OfpAction)(m).GetNwTtl())
+}
+func (m *OfpAction) GetSetField() *OfpActionSetField {
+	return (*OfpActionSetField)((*openflow_13.OfpAction)(m).GetSetField())
+}
+func (m *OfpAction) GetExperimenter() *OfpActionExperimenter {
+	return (*OfpActionExperimenter)((*openflow_13.OfpAction)(m).GetExperimenter())
+}
+
+// ofp_action_output from public import openflow_13.proto
+type OfpActionOutput openflow_13.OfpActionOutput
+
+func (m *OfpActionOutput) Reset()            { (*openflow_13.OfpActionOutput)(m).Reset() }
+func (m *OfpActionOutput) String() string    { return (*openflow_13.OfpActionOutput)(m).String() }
+func (*OfpActionOutput) ProtoMessage()       {}
+func (m *OfpActionOutput) GetPort() uint32   { return (*openflow_13.OfpActionOutput)(m).GetPort() }
+func (m *OfpActionOutput) GetMaxLen() uint32 { return (*openflow_13.OfpActionOutput)(m).GetMaxLen() }
+
+// ofp_action_mpls_ttl from public import openflow_13.proto
+type OfpActionMplsTtl openflow_13.OfpActionMplsTtl
+
+func (m *OfpActionMplsTtl) Reset()             { (*openflow_13.OfpActionMplsTtl)(m).Reset() }
+func (m *OfpActionMplsTtl) String() string     { return (*openflow_13.OfpActionMplsTtl)(m).String() }
+func (*OfpActionMplsTtl) ProtoMessage()        {}
+func (m *OfpActionMplsTtl) GetMplsTtl() uint32 { return (*openflow_13.OfpActionMplsTtl)(m).GetMplsTtl() }
+
+// ofp_action_push from public import openflow_13.proto
+type OfpActionPush openflow_13.OfpActionPush
+
+func (m *OfpActionPush) Reset()               { (*openflow_13.OfpActionPush)(m).Reset() }
+func (m *OfpActionPush) String() string       { return (*openflow_13.OfpActionPush)(m).String() }
+func (*OfpActionPush) ProtoMessage()          {}
+func (m *OfpActionPush) GetEthertype() uint32 { return (*openflow_13.OfpActionPush)(m).GetEthertype() }
+
+// ofp_action_pop_mpls from public import openflow_13.proto
+type OfpActionPopMpls openflow_13.OfpActionPopMpls
+
+func (m *OfpActionPopMpls) Reset()         { (*openflow_13.OfpActionPopMpls)(m).Reset() }
+func (m *OfpActionPopMpls) String() string { return (*openflow_13.OfpActionPopMpls)(m).String() }
+func (*OfpActionPopMpls) ProtoMessage()    {}
+func (m *OfpActionPopMpls) GetEthertype() uint32 {
+	return (*openflow_13.OfpActionPopMpls)(m).GetEthertype()
+}
+
+// ofp_action_group from public import openflow_13.proto
+type OfpActionGroup openflow_13.OfpActionGroup
+
+func (m *OfpActionGroup) Reset()             { (*openflow_13.OfpActionGroup)(m).Reset() }
+func (m *OfpActionGroup) String() string     { return (*openflow_13.OfpActionGroup)(m).String() }
+func (*OfpActionGroup) ProtoMessage()        {}
+func (m *OfpActionGroup) GetGroupId() uint32 { return (*openflow_13.OfpActionGroup)(m).GetGroupId() }
+
+// ofp_action_nw_ttl from public import openflow_13.proto
+type OfpActionNwTtl openflow_13.OfpActionNwTtl
+
+func (m *OfpActionNwTtl) Reset()           { (*openflow_13.OfpActionNwTtl)(m).Reset() }
+func (m *OfpActionNwTtl) String() string   { return (*openflow_13.OfpActionNwTtl)(m).String() }
+func (*OfpActionNwTtl) ProtoMessage()      {}
+func (m *OfpActionNwTtl) GetNwTtl() uint32 { return (*openflow_13.OfpActionNwTtl)(m).GetNwTtl() }
+
+// ofp_action_set_field from public import openflow_13.proto
+type OfpActionSetField openflow_13.OfpActionSetField
+
+func (m *OfpActionSetField) Reset()         { (*openflow_13.OfpActionSetField)(m).Reset() }
+func (m *OfpActionSetField) String() string { return (*openflow_13.OfpActionSetField)(m).String() }
+func (*OfpActionSetField) ProtoMessage()    {}
+func (m *OfpActionSetField) GetField() *OfpOxmField {
+	return (*OfpOxmField)((*openflow_13.OfpActionSetField)(m).GetField())
+}
+
+// ofp_action_experimenter from public import openflow_13.proto
+type OfpActionExperimenter openflow_13.OfpActionExperimenter
+
+func (m *OfpActionExperimenter) Reset() { (*openflow_13.OfpActionExperimenter)(m).Reset() }
+func (m *OfpActionExperimenter) String() string {
+	return (*openflow_13.OfpActionExperimenter)(m).String()
+}
+func (*OfpActionExperimenter) ProtoMessage() {}
+func (m *OfpActionExperimenter) GetExperimenter() uint32 {
+	return (*openflow_13.OfpActionExperimenter)(m).GetExperimenter()
+}
+func (m *OfpActionExperimenter) GetData() []byte {
+	return (*openflow_13.OfpActionExperimenter)(m).GetData()
+}
+
+// ofp_instruction from public import openflow_13.proto
+type OfpInstruction openflow_13.OfpInstruction
+
+func (m *OfpInstruction) Reset()         { (*openflow_13.OfpInstruction)(m).Reset() }
+func (m *OfpInstruction) String() string { return (*openflow_13.OfpInstruction)(m).String() }
+func (*OfpInstruction) ProtoMessage()    {}
+func (m *OfpInstruction) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _OfpInstruction_OneofMarshaler, _OfpInstruction_OneofUnmarshaler, _OfpInstruction_OneofSizer, nil
+}
+func _OfpInstruction_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpInstruction)
+	m0 := (*openflow_13.OfpInstruction)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _OfpInstruction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpInstruction)
+	m0 := (*openflow_13.OfpInstruction)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _OfpInstruction_OneofSizer(msg proto.Message) int {
+	m := msg.(*OfpInstruction)
+	m0 := (*openflow_13.OfpInstruction)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *OfpInstruction) GetType() uint32 { return (*openflow_13.OfpInstruction)(m).GetType() }
+func (m *OfpInstruction) GetGotoTable() *OfpInstructionGotoTable {
+	return (*OfpInstructionGotoTable)((*openflow_13.OfpInstruction)(m).GetGotoTable())
+}
+func (m *OfpInstruction) GetWriteMetadata() *OfpInstructionWriteMetadata {
+	return (*OfpInstructionWriteMetadata)((*openflow_13.OfpInstruction)(m).GetWriteMetadata())
+}
+func (m *OfpInstruction) GetActions() *OfpInstructionActions {
+	return (*OfpInstructionActions)((*openflow_13.OfpInstruction)(m).GetActions())
+}
+func (m *OfpInstruction) GetMeter() *OfpInstructionMeter {
+	return (*OfpInstructionMeter)((*openflow_13.OfpInstruction)(m).GetMeter())
+}
+func (m *OfpInstruction) GetExperimenter() *OfpInstructionExperimenter {
+	return (*OfpInstructionExperimenter)((*openflow_13.OfpInstruction)(m).GetExperimenter())
+}
+
+// ofp_instruction_goto_table from public import openflow_13.proto
+type OfpInstructionGotoTable openflow_13.OfpInstructionGotoTable
+
+func (m *OfpInstructionGotoTable) Reset() { (*openflow_13.OfpInstructionGotoTable)(m).Reset() }
+func (m *OfpInstructionGotoTable) String() string {
+	return (*openflow_13.OfpInstructionGotoTable)(m).String()
+}
+func (*OfpInstructionGotoTable) ProtoMessage() {}
+func (m *OfpInstructionGotoTable) GetTableId() uint32 {
+	return (*openflow_13.OfpInstructionGotoTable)(m).GetTableId()
+}
+
+// ofp_instruction_write_metadata from public import openflow_13.proto
+type OfpInstructionWriteMetadata openflow_13.OfpInstructionWriteMetadata
+
+func (m *OfpInstructionWriteMetadata) Reset() { (*openflow_13.OfpInstructionWriteMetadata)(m).Reset() }
+func (m *OfpInstructionWriteMetadata) String() string {
+	return (*openflow_13.OfpInstructionWriteMetadata)(m).String()
+}
+func (*OfpInstructionWriteMetadata) ProtoMessage() {}
+func (m *OfpInstructionWriteMetadata) GetMetadata() uint64 {
+	return (*openflow_13.OfpInstructionWriteMetadata)(m).GetMetadata()
+}
+func (m *OfpInstructionWriteMetadata) GetMetadataMask() uint64 {
+	return (*openflow_13.OfpInstructionWriteMetadata)(m).GetMetadataMask()
+}
+
+// ofp_instruction_actions from public import openflow_13.proto
+type OfpInstructionActions openflow_13.OfpInstructionActions
+
+func (m *OfpInstructionActions) Reset() { (*openflow_13.OfpInstructionActions)(m).Reset() }
+func (m *OfpInstructionActions) String() string {
+	return (*openflow_13.OfpInstructionActions)(m).String()
+}
+func (*OfpInstructionActions) ProtoMessage() {}
+func (m *OfpInstructionActions) GetActions() []*OfpAction {
+	o := (*openflow_13.OfpInstructionActions)(m).GetActions()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpAction, len(o))
+	for i, x := range o {
+		s[i] = (*OfpAction)(x)
+	}
+	return s
+}
+
+// ofp_instruction_meter from public import openflow_13.proto
+type OfpInstructionMeter openflow_13.OfpInstructionMeter
+
+func (m *OfpInstructionMeter) Reset()         { (*openflow_13.OfpInstructionMeter)(m).Reset() }
+func (m *OfpInstructionMeter) String() string { return (*openflow_13.OfpInstructionMeter)(m).String() }
+func (*OfpInstructionMeter) ProtoMessage()    {}
+func (m *OfpInstructionMeter) GetMeterId() uint32 {
+	return (*openflow_13.OfpInstructionMeter)(m).GetMeterId()
+}
+
+// ofp_instruction_experimenter from public import openflow_13.proto
+type OfpInstructionExperimenter openflow_13.OfpInstructionExperimenter
+
+func (m *OfpInstructionExperimenter) Reset() { (*openflow_13.OfpInstructionExperimenter)(m).Reset() }
+func (m *OfpInstructionExperimenter) String() string {
+	return (*openflow_13.OfpInstructionExperimenter)(m).String()
+}
+func (*OfpInstructionExperimenter) ProtoMessage() {}
+func (m *OfpInstructionExperimenter) GetExperimenter() uint32 {
+	return (*openflow_13.OfpInstructionExperimenter)(m).GetExperimenter()
+}
+func (m *OfpInstructionExperimenter) GetData() []byte {
+	return (*openflow_13.OfpInstructionExperimenter)(m).GetData()
+}
+
+// ofp_flow_mod from public import openflow_13.proto
+type OfpFlowMod openflow_13.OfpFlowMod
+
+func (m *OfpFlowMod) Reset()                { (*openflow_13.OfpFlowMod)(m).Reset() }
+func (m *OfpFlowMod) String() string        { return (*openflow_13.OfpFlowMod)(m).String() }
+func (*OfpFlowMod) ProtoMessage()           {}
+func (m *OfpFlowMod) GetCookie() uint64     { return (*openflow_13.OfpFlowMod)(m).GetCookie() }
+func (m *OfpFlowMod) GetCookieMask() uint64 { return (*openflow_13.OfpFlowMod)(m).GetCookieMask() }
+func (m *OfpFlowMod) GetTableId() uint32    { return (*openflow_13.OfpFlowMod)(m).GetTableId() }
+func (m *OfpFlowMod) GetCommand() OfpFlowModCommand {
+	return (OfpFlowModCommand)((*openflow_13.OfpFlowMod)(m).GetCommand())
+}
+func (m *OfpFlowMod) GetIdleTimeout() uint32 { return (*openflow_13.OfpFlowMod)(m).GetIdleTimeout() }
+func (m *OfpFlowMod) GetHardTimeout() uint32 { return (*openflow_13.OfpFlowMod)(m).GetHardTimeout() }
+func (m *OfpFlowMod) GetPriority() uint32    { return (*openflow_13.OfpFlowMod)(m).GetPriority() }
+func (m *OfpFlowMod) GetBufferId() uint32    { return (*openflow_13.OfpFlowMod)(m).GetBufferId() }
+func (m *OfpFlowMod) GetOutPort() uint32     { return (*openflow_13.OfpFlowMod)(m).GetOutPort() }
+func (m *OfpFlowMod) GetOutGroup() uint32    { return (*openflow_13.OfpFlowMod)(m).GetOutGroup() }
+func (m *OfpFlowMod) GetFlags() uint32       { return (*openflow_13.OfpFlowMod)(m).GetFlags() }
+func (m *OfpFlowMod) GetMatch() *OfpMatch    { return (*OfpMatch)((*openflow_13.OfpFlowMod)(m).GetMatch()) }
+func (m *OfpFlowMod) GetInstructions() []*OfpInstruction {
+	o := (*openflow_13.OfpFlowMod)(m).GetInstructions()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpInstruction, len(o))
+	for i, x := range o {
+		s[i] = (*OfpInstruction)(x)
+	}
+	return s
+}
+
+// ofp_bucket from public import openflow_13.proto
+type OfpBucket openflow_13.OfpBucket
+
+func (m *OfpBucket) Reset()                { (*openflow_13.OfpBucket)(m).Reset() }
+func (m *OfpBucket) String() string        { return (*openflow_13.OfpBucket)(m).String() }
+func (*OfpBucket) ProtoMessage()           {}
+func (m *OfpBucket) GetWeight() uint32     { return (*openflow_13.OfpBucket)(m).GetWeight() }
+func (m *OfpBucket) GetWatchPort() uint32  { return (*openflow_13.OfpBucket)(m).GetWatchPort() }
+func (m *OfpBucket) GetWatchGroup() uint32 { return (*openflow_13.OfpBucket)(m).GetWatchGroup() }
+func (m *OfpBucket) GetActions() []*OfpAction {
+	o := (*openflow_13.OfpBucket)(m).GetActions()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpAction, len(o))
+	for i, x := range o {
+		s[i] = (*OfpAction)(x)
+	}
+	return s
+}
+
+// ofp_group_mod from public import openflow_13.proto
+type OfpGroupMod openflow_13.OfpGroupMod
+
+func (m *OfpGroupMod) Reset()         { (*openflow_13.OfpGroupMod)(m).Reset() }
+func (m *OfpGroupMod) String() string { return (*openflow_13.OfpGroupMod)(m).String() }
+func (*OfpGroupMod) ProtoMessage()    {}
+func (m *OfpGroupMod) GetCommand() OfpGroupModCommand {
+	return (OfpGroupModCommand)((*openflow_13.OfpGroupMod)(m).GetCommand())
+}
+func (m *OfpGroupMod) GetType() OfpGroupType {
+	return (OfpGroupType)((*openflow_13.OfpGroupMod)(m).GetType())
+}
+func (m *OfpGroupMod) GetGroupId() uint32 { return (*openflow_13.OfpGroupMod)(m).GetGroupId() }
+func (m *OfpGroupMod) GetBuckets() []*OfpBucket {
+	o := (*openflow_13.OfpGroupMod)(m).GetBuckets()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpBucket, len(o))
+	for i, x := range o {
+		s[i] = (*OfpBucket)(x)
+	}
+	return s
+}
+
+// ofp_packet_out from public import openflow_13.proto
+type OfpPacketOut openflow_13.OfpPacketOut
+
+func (m *OfpPacketOut) Reset()              { (*openflow_13.OfpPacketOut)(m).Reset() }
+func (m *OfpPacketOut) String() string      { return (*openflow_13.OfpPacketOut)(m).String() }
+func (*OfpPacketOut) ProtoMessage()         {}
+func (m *OfpPacketOut) GetBufferId() uint32 { return (*openflow_13.OfpPacketOut)(m).GetBufferId() }
+func (m *OfpPacketOut) GetInPort() uint32   { return (*openflow_13.OfpPacketOut)(m).GetInPort() }
+func (m *OfpPacketOut) GetActions() []*OfpAction {
+	o := (*openflow_13.OfpPacketOut)(m).GetActions()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpAction, len(o))
+	for i, x := range o {
+		s[i] = (*OfpAction)(x)
+	}
+	return s
+}
+func (m *OfpPacketOut) GetData() []byte { return (*openflow_13.OfpPacketOut)(m).GetData() }
+
+// ofp_packet_in from public import openflow_13.proto
+type OfpPacketIn openflow_13.OfpPacketIn
+
+func (m *OfpPacketIn) Reset()              { (*openflow_13.OfpPacketIn)(m).Reset() }
+func (m *OfpPacketIn) String() string      { return (*openflow_13.OfpPacketIn)(m).String() }
+func (*OfpPacketIn) ProtoMessage()         {}
+func (m *OfpPacketIn) GetBufferId() uint32 { return (*openflow_13.OfpPacketIn)(m).GetBufferId() }
+func (m *OfpPacketIn) GetReason() OfpPacketInReason {
+	return (OfpPacketInReason)((*openflow_13.OfpPacketIn)(m).GetReason())
+}
+func (m *OfpPacketIn) GetTableId() uint32 { return (*openflow_13.OfpPacketIn)(m).GetTableId() }
+func (m *OfpPacketIn) GetCookie() uint64  { return (*openflow_13.OfpPacketIn)(m).GetCookie() }
+func (m *OfpPacketIn) GetMatch() *OfpMatch {
+	return (*OfpMatch)((*openflow_13.OfpPacketIn)(m).GetMatch())
+}
+func (m *OfpPacketIn) GetData() []byte { return (*openflow_13.OfpPacketIn)(m).GetData() }
+
+// ofp_flow_removed from public import openflow_13.proto
+type OfpFlowRemoved openflow_13.OfpFlowRemoved
+
+func (m *OfpFlowRemoved) Reset()              { (*openflow_13.OfpFlowRemoved)(m).Reset() }
+func (m *OfpFlowRemoved) String() string      { return (*openflow_13.OfpFlowRemoved)(m).String() }
+func (*OfpFlowRemoved) ProtoMessage()         {}
+func (m *OfpFlowRemoved) GetCookie() uint64   { return (*openflow_13.OfpFlowRemoved)(m).GetCookie() }
+func (m *OfpFlowRemoved) GetPriority() uint32 { return (*openflow_13.OfpFlowRemoved)(m).GetPriority() }
+func (m *OfpFlowRemoved) GetReason() OfpFlowRemovedReason {
+	return (OfpFlowRemovedReason)((*openflow_13.OfpFlowRemoved)(m).GetReason())
+}
+func (m *OfpFlowRemoved) GetTableId() uint32 { return (*openflow_13.OfpFlowRemoved)(m).GetTableId() }
+func (m *OfpFlowRemoved) GetDurationSec() uint32 {
+	return (*openflow_13.OfpFlowRemoved)(m).GetDurationSec()
+}
+func (m *OfpFlowRemoved) GetDurationNsec() uint32 {
+	return (*openflow_13.OfpFlowRemoved)(m).GetDurationNsec()
+}
+func (m *OfpFlowRemoved) GetIdleTimeout() uint32 {
+	return (*openflow_13.OfpFlowRemoved)(m).GetIdleTimeout()
+}
+func (m *OfpFlowRemoved) GetHardTimeout() uint32 {
+	return (*openflow_13.OfpFlowRemoved)(m).GetHardTimeout()
+}
+func (m *OfpFlowRemoved) GetPacketCount() uint64 {
+	return (*openflow_13.OfpFlowRemoved)(m).GetPacketCount()
+}
+func (m *OfpFlowRemoved) GetByteCount() uint64 { return (*openflow_13.OfpFlowRemoved)(m).GetByteCount() }
+func (m *OfpFlowRemoved) GetMatch() *OfpMatch {
+	return (*OfpMatch)((*openflow_13.OfpFlowRemoved)(m).GetMatch())
+}
+
+// ofp_meter_band_header from public import openflow_13.proto
+type OfpMeterBandHeader openflow_13.OfpMeterBandHeader
+
+func (m *OfpMeterBandHeader) Reset()         { (*openflow_13.OfpMeterBandHeader)(m).Reset() }
+func (m *OfpMeterBandHeader) String() string { return (*openflow_13.OfpMeterBandHeader)(m).String() }
+func (*OfpMeterBandHeader) ProtoMessage()    {}
+func (m *OfpMeterBandHeader) GetType() OfpMeterBandType {
+	return (OfpMeterBandType)((*openflow_13.OfpMeterBandHeader)(m).GetType())
+}
+func (m *OfpMeterBandHeader) GetLen() uint32  { return (*openflow_13.OfpMeterBandHeader)(m).GetLen() }
+func (m *OfpMeterBandHeader) GetRate() uint32 { return (*openflow_13.OfpMeterBandHeader)(m).GetRate() }
+func (m *OfpMeterBandHeader) GetBurstSize() uint32 {
+	return (*openflow_13.OfpMeterBandHeader)(m).GetBurstSize()
+}
+
+// ofp_meter_band_drop from public import openflow_13.proto
+type OfpMeterBandDrop openflow_13.OfpMeterBandDrop
+
+func (m *OfpMeterBandDrop) Reset()          { (*openflow_13.OfpMeterBandDrop)(m).Reset() }
+func (m *OfpMeterBandDrop) String() string  { return (*openflow_13.OfpMeterBandDrop)(m).String() }
+func (*OfpMeterBandDrop) ProtoMessage()     {}
+func (m *OfpMeterBandDrop) GetType() uint32 { return (*openflow_13.OfpMeterBandDrop)(m).GetType() }
+func (m *OfpMeterBandDrop) GetLen() uint32  { return (*openflow_13.OfpMeterBandDrop)(m).GetLen() }
+func (m *OfpMeterBandDrop) GetRate() uint32 { return (*openflow_13.OfpMeterBandDrop)(m).GetRate() }
+func (m *OfpMeterBandDrop) GetBurstSize() uint32 {
+	return (*openflow_13.OfpMeterBandDrop)(m).GetBurstSize()
+}
+
+// ofp_meter_band_dscp_remark from public import openflow_13.proto
+type OfpMeterBandDscpRemark openflow_13.OfpMeterBandDscpRemark
+
+func (m *OfpMeterBandDscpRemark) Reset() { (*openflow_13.OfpMeterBandDscpRemark)(m).Reset() }
+func (m *OfpMeterBandDscpRemark) String() string {
+	return (*openflow_13.OfpMeterBandDscpRemark)(m).String()
+}
+func (*OfpMeterBandDscpRemark) ProtoMessage() {}
+func (m *OfpMeterBandDscpRemark) GetType() uint32 {
+	return (*openflow_13.OfpMeterBandDscpRemark)(m).GetType()
+}
+func (m *OfpMeterBandDscpRemark) GetLen() uint32 {
+	return (*openflow_13.OfpMeterBandDscpRemark)(m).GetLen()
+}
+func (m *OfpMeterBandDscpRemark) GetRate() uint32 {
+	return (*openflow_13.OfpMeterBandDscpRemark)(m).GetRate()
+}
+func (m *OfpMeterBandDscpRemark) GetBurstSize() uint32 {
+	return (*openflow_13.OfpMeterBandDscpRemark)(m).GetBurstSize()
+}
+func (m *OfpMeterBandDscpRemark) GetPrecLevel() uint32 {
+	return (*openflow_13.OfpMeterBandDscpRemark)(m).GetPrecLevel()
+}
+
+// ofp_meter_band_experimenter from public import openflow_13.proto
+type OfpMeterBandExperimenter openflow_13.OfpMeterBandExperimenter
+
+func (m *OfpMeterBandExperimenter) Reset() { (*openflow_13.OfpMeterBandExperimenter)(m).Reset() }
+func (m *OfpMeterBandExperimenter) String() string {
+	return (*openflow_13.OfpMeterBandExperimenter)(m).String()
+}
+func (*OfpMeterBandExperimenter) ProtoMessage() {}
+func (m *OfpMeterBandExperimenter) GetType() OfpMeterBandType {
+	return (OfpMeterBandType)((*openflow_13.OfpMeterBandExperimenter)(m).GetType())
+}
+func (m *OfpMeterBandExperimenter) GetLen() uint32 {
+	return (*openflow_13.OfpMeterBandExperimenter)(m).GetLen()
+}
+func (m *OfpMeterBandExperimenter) GetRate() uint32 {
+	return (*openflow_13.OfpMeterBandExperimenter)(m).GetRate()
+}
+func (m *OfpMeterBandExperimenter) GetBurstSize() uint32 {
+	return (*openflow_13.OfpMeterBandExperimenter)(m).GetBurstSize()
+}
+func (m *OfpMeterBandExperimenter) GetExperimenter() uint32 {
+	return (*openflow_13.OfpMeterBandExperimenter)(m).GetExperimenter()
+}
+
+// ofp_meter_mod from public import openflow_13.proto
+type OfpMeterMod openflow_13.OfpMeterMod
+
+func (m *OfpMeterMod) Reset()         { (*openflow_13.OfpMeterMod)(m).Reset() }
+func (m *OfpMeterMod) String() string { return (*openflow_13.OfpMeterMod)(m).String() }
+func (*OfpMeterMod) ProtoMessage()    {}
+func (m *OfpMeterMod) GetCommand() OfpMeterModCommand {
+	return (OfpMeterModCommand)((*openflow_13.OfpMeterMod)(m).GetCommand())
+}
+func (m *OfpMeterMod) GetFlags() uint32   { return (*openflow_13.OfpMeterMod)(m).GetFlags() }
+func (m *OfpMeterMod) GetMeterId() uint32 { return (*openflow_13.OfpMeterMod)(m).GetMeterId() }
+func (m *OfpMeterMod) GetBands() []*OfpMeterBandHeader {
+	o := (*openflow_13.OfpMeterMod)(m).GetBands()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpMeterBandHeader, len(o))
+	for i, x := range o {
+		s[i] = (*OfpMeterBandHeader)(x)
+	}
+	return s
+}
+
+// ofp_error_msg from public import openflow_13.proto
+type OfpErrorMsg openflow_13.OfpErrorMsg
+
+func (m *OfpErrorMsg) Reset()          { (*openflow_13.OfpErrorMsg)(m).Reset() }
+func (m *OfpErrorMsg) String() string  { return (*openflow_13.OfpErrorMsg)(m).String() }
+func (*OfpErrorMsg) ProtoMessage()     {}
+func (m *OfpErrorMsg) GetType() uint32 { return (*openflow_13.OfpErrorMsg)(m).GetType() }
+func (m *OfpErrorMsg) GetCode() uint32 { return (*openflow_13.OfpErrorMsg)(m).GetCode() }
+func (m *OfpErrorMsg) GetData() []byte { return (*openflow_13.OfpErrorMsg)(m).GetData() }
+
+// ofp_error_experimenter_msg from public import openflow_13.proto
+type OfpErrorExperimenterMsg openflow_13.OfpErrorExperimenterMsg
+
+func (m *OfpErrorExperimenterMsg) Reset() { (*openflow_13.OfpErrorExperimenterMsg)(m).Reset() }
+func (m *OfpErrorExperimenterMsg) String() string {
+	return (*openflow_13.OfpErrorExperimenterMsg)(m).String()
+}
+func (*OfpErrorExperimenterMsg) ProtoMessage() {}
+func (m *OfpErrorExperimenterMsg) GetType() uint32 {
+	return (*openflow_13.OfpErrorExperimenterMsg)(m).GetType()
+}
+func (m *OfpErrorExperimenterMsg) GetExpType() uint32 {
+	return (*openflow_13.OfpErrorExperimenterMsg)(m).GetExpType()
+}
+func (m *OfpErrorExperimenterMsg) GetExperimenter() uint32 {
+	return (*openflow_13.OfpErrorExperimenterMsg)(m).GetExperimenter()
+}
+func (m *OfpErrorExperimenterMsg) GetData() []byte {
+	return (*openflow_13.OfpErrorExperimenterMsg)(m).GetData()
+}
+
+// ofp_multipart_request from public import openflow_13.proto
+type OfpMultipartRequest openflow_13.OfpMultipartRequest
+
+func (m *OfpMultipartRequest) Reset()         { (*openflow_13.OfpMultipartRequest)(m).Reset() }
+func (m *OfpMultipartRequest) String() string { return (*openflow_13.OfpMultipartRequest)(m).String() }
+func (*OfpMultipartRequest) ProtoMessage()    {}
+func (m *OfpMultipartRequest) GetType() OfpMultipartType {
+	return (OfpMultipartType)((*openflow_13.OfpMultipartRequest)(m).GetType())
+}
+func (m *OfpMultipartRequest) GetFlags() uint32 {
+	return (*openflow_13.OfpMultipartRequest)(m).GetFlags()
+}
+func (m *OfpMultipartRequest) GetBody() []byte { return (*openflow_13.OfpMultipartRequest)(m).GetBody() }
+
+// ofp_multipart_reply from public import openflow_13.proto
+type OfpMultipartReply openflow_13.OfpMultipartReply
+
+func (m *OfpMultipartReply) Reset()         { (*openflow_13.OfpMultipartReply)(m).Reset() }
+func (m *OfpMultipartReply) String() string { return (*openflow_13.OfpMultipartReply)(m).String() }
+func (*OfpMultipartReply) ProtoMessage()    {}
+func (m *OfpMultipartReply) GetType() OfpMultipartType {
+	return (OfpMultipartType)((*openflow_13.OfpMultipartReply)(m).GetType())
+}
+func (m *OfpMultipartReply) GetFlags() uint32 { return (*openflow_13.OfpMultipartReply)(m).GetFlags() }
+func (m *OfpMultipartReply) GetBody() []byte  { return (*openflow_13.OfpMultipartReply)(m).GetBody() }
+
+// ofp_desc from public import openflow_13.proto
+type OfpDesc openflow_13.OfpDesc
+
+func (m *OfpDesc) Reset()               { (*openflow_13.OfpDesc)(m).Reset() }
+func (m *OfpDesc) String() string       { return (*openflow_13.OfpDesc)(m).String() }
+func (*OfpDesc) ProtoMessage()          {}
+func (m *OfpDesc) GetMfrDesc() string   { return (*openflow_13.OfpDesc)(m).GetMfrDesc() }
+func (m *OfpDesc) GetHwDesc() string    { return (*openflow_13.OfpDesc)(m).GetHwDesc() }
+func (m *OfpDesc) GetSwDesc() string    { return (*openflow_13.OfpDesc)(m).GetSwDesc() }
+func (m *OfpDesc) GetSerialNum() string { return (*openflow_13.OfpDesc)(m).GetSerialNum() }
+func (m *OfpDesc) GetDpDesc() string    { return (*openflow_13.OfpDesc)(m).GetDpDesc() }
+
+// ofp_flow_stats_request from public import openflow_13.proto
+type OfpFlowStatsRequest openflow_13.OfpFlowStatsRequest
+
+func (m *OfpFlowStatsRequest) Reset()         { (*openflow_13.OfpFlowStatsRequest)(m).Reset() }
+func (m *OfpFlowStatsRequest) String() string { return (*openflow_13.OfpFlowStatsRequest)(m).String() }
+func (*OfpFlowStatsRequest) ProtoMessage()    {}
+func (m *OfpFlowStatsRequest) GetTableId() uint32 {
+	return (*openflow_13.OfpFlowStatsRequest)(m).GetTableId()
+}
+func (m *OfpFlowStatsRequest) GetOutPort() uint32 {
+	return (*openflow_13.OfpFlowStatsRequest)(m).GetOutPort()
+}
+func (m *OfpFlowStatsRequest) GetOutGroup() uint32 {
+	return (*openflow_13.OfpFlowStatsRequest)(m).GetOutGroup()
+}
+func (m *OfpFlowStatsRequest) GetCookie() uint64 {
+	return (*openflow_13.OfpFlowStatsRequest)(m).GetCookie()
+}
+func (m *OfpFlowStatsRequest) GetCookieMask() uint64 {
+	return (*openflow_13.OfpFlowStatsRequest)(m).GetCookieMask()
+}
+func (m *OfpFlowStatsRequest) GetMatch() *OfpMatch {
+	return (*OfpMatch)((*openflow_13.OfpFlowStatsRequest)(m).GetMatch())
+}
+
+// ofp_flow_stats from public import openflow_13.proto
+type OfpFlowStats openflow_13.OfpFlowStats
+
+func (m *OfpFlowStats) Reset()                 { (*openflow_13.OfpFlowStats)(m).Reset() }
+func (m *OfpFlowStats) String() string         { return (*openflow_13.OfpFlowStats)(m).String() }
+func (*OfpFlowStats) ProtoMessage()            {}
+func (m *OfpFlowStats) GetId() uint64          { return (*openflow_13.OfpFlowStats)(m).GetId() }
+func (m *OfpFlowStats) GetTableId() uint32     { return (*openflow_13.OfpFlowStats)(m).GetTableId() }
+func (m *OfpFlowStats) GetDurationSec() uint32 { return (*openflow_13.OfpFlowStats)(m).GetDurationSec() }
+func (m *OfpFlowStats) GetDurationNsec() uint32 {
+	return (*openflow_13.OfpFlowStats)(m).GetDurationNsec()
+}
+func (m *OfpFlowStats) GetPriority() uint32    { return (*openflow_13.OfpFlowStats)(m).GetPriority() }
+func (m *OfpFlowStats) GetIdleTimeout() uint32 { return (*openflow_13.OfpFlowStats)(m).GetIdleTimeout() }
+func (m *OfpFlowStats) GetHardTimeout() uint32 { return (*openflow_13.OfpFlowStats)(m).GetHardTimeout() }
+func (m *OfpFlowStats) GetFlags() uint32       { return (*openflow_13.OfpFlowStats)(m).GetFlags() }
+func (m *OfpFlowStats) GetCookie() uint64      { return (*openflow_13.OfpFlowStats)(m).GetCookie() }
+func (m *OfpFlowStats) GetPacketCount() uint64 { return (*openflow_13.OfpFlowStats)(m).GetPacketCount() }
+func (m *OfpFlowStats) GetByteCount() uint64   { return (*openflow_13.OfpFlowStats)(m).GetByteCount() }
+func (m *OfpFlowStats) GetMatch() *OfpMatch {
+	return (*OfpMatch)((*openflow_13.OfpFlowStats)(m).GetMatch())
+}
+func (m *OfpFlowStats) GetInstructions() []*OfpInstruction {
+	o := (*openflow_13.OfpFlowStats)(m).GetInstructions()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpInstruction, len(o))
+	for i, x := range o {
+		s[i] = (*OfpInstruction)(x)
+	}
+	return s
+}
+
+// ofp_aggregate_stats_request from public import openflow_13.proto
+type OfpAggregateStatsRequest openflow_13.OfpAggregateStatsRequest
+
+func (m *OfpAggregateStatsRequest) Reset() { (*openflow_13.OfpAggregateStatsRequest)(m).Reset() }
+func (m *OfpAggregateStatsRequest) String() string {
+	return (*openflow_13.OfpAggregateStatsRequest)(m).String()
+}
+func (*OfpAggregateStatsRequest) ProtoMessage() {}
+func (m *OfpAggregateStatsRequest) GetTableId() uint32 {
+	return (*openflow_13.OfpAggregateStatsRequest)(m).GetTableId()
+}
+func (m *OfpAggregateStatsRequest) GetOutPort() uint32 {
+	return (*openflow_13.OfpAggregateStatsRequest)(m).GetOutPort()
+}
+func (m *OfpAggregateStatsRequest) GetOutGroup() uint32 {
+	return (*openflow_13.OfpAggregateStatsRequest)(m).GetOutGroup()
+}
+func (m *OfpAggregateStatsRequest) GetCookie() uint64 {
+	return (*openflow_13.OfpAggregateStatsRequest)(m).GetCookie()
+}
+func (m *OfpAggregateStatsRequest) GetCookieMask() uint64 {
+	return (*openflow_13.OfpAggregateStatsRequest)(m).GetCookieMask()
+}
+func (m *OfpAggregateStatsRequest) GetMatch() *OfpMatch {
+	return (*OfpMatch)((*openflow_13.OfpAggregateStatsRequest)(m).GetMatch())
+}
+
+// ofp_aggregate_stats_reply from public import openflow_13.proto
+type OfpAggregateStatsReply openflow_13.OfpAggregateStatsReply
+
+func (m *OfpAggregateStatsReply) Reset() { (*openflow_13.OfpAggregateStatsReply)(m).Reset() }
+func (m *OfpAggregateStatsReply) String() string {
+	return (*openflow_13.OfpAggregateStatsReply)(m).String()
+}
+func (*OfpAggregateStatsReply) ProtoMessage() {}
+func (m *OfpAggregateStatsReply) GetPacketCount() uint64 {
+	return (*openflow_13.OfpAggregateStatsReply)(m).GetPacketCount()
+}
+func (m *OfpAggregateStatsReply) GetByteCount() uint64 {
+	return (*openflow_13.OfpAggregateStatsReply)(m).GetByteCount()
+}
+func (m *OfpAggregateStatsReply) GetFlowCount() uint32 {
+	return (*openflow_13.OfpAggregateStatsReply)(m).GetFlowCount()
+}
+
+// ofp_table_feature_property from public import openflow_13.proto
+type OfpTableFeatureProperty openflow_13.OfpTableFeatureProperty
+
+func (m *OfpTableFeatureProperty) Reset() { (*openflow_13.OfpTableFeatureProperty)(m).Reset() }
+func (m *OfpTableFeatureProperty) String() string {
+	return (*openflow_13.OfpTableFeatureProperty)(m).String()
+}
+func (*OfpTableFeatureProperty) ProtoMessage() {}
+func (m *OfpTableFeatureProperty) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _OfpTableFeatureProperty_OneofMarshaler, _OfpTableFeatureProperty_OneofUnmarshaler, _OfpTableFeatureProperty_OneofSizer, nil
+}
+func _OfpTableFeatureProperty_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*OfpTableFeatureProperty)
+	m0 := (*openflow_13.OfpTableFeatureProperty)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _OfpTableFeatureProperty_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*OfpTableFeatureProperty)
+	m0 := (*openflow_13.OfpTableFeatureProperty)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _OfpTableFeatureProperty_OneofSizer(msg proto.Message) int {
+	m := msg.(*OfpTableFeatureProperty)
+	m0 := (*openflow_13.OfpTableFeatureProperty)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *OfpTableFeatureProperty) GetType() OfpTableFeaturePropType {
+	return (OfpTableFeaturePropType)((*openflow_13.OfpTableFeatureProperty)(m).GetType())
+}
+func (m *OfpTableFeatureProperty) GetInstructions() *OfpTableFeaturePropInstructions {
+	return (*OfpTableFeaturePropInstructions)((*openflow_13.OfpTableFeatureProperty)(m).GetInstructions())
+}
+func (m *OfpTableFeatureProperty) GetNextTables() *OfpTableFeaturePropNextTables {
+	return (*OfpTableFeaturePropNextTables)((*openflow_13.OfpTableFeatureProperty)(m).GetNextTables())
+}
+func (m *OfpTableFeatureProperty) GetActions() *OfpTableFeaturePropActions {
+	return (*OfpTableFeaturePropActions)((*openflow_13.OfpTableFeatureProperty)(m).GetActions())
+}
+func (m *OfpTableFeatureProperty) GetOxm() *OfpTableFeaturePropOxm {
+	return (*OfpTableFeaturePropOxm)((*openflow_13.OfpTableFeatureProperty)(m).GetOxm())
+}
+func (m *OfpTableFeatureProperty) GetExperimenter() *OfpTableFeaturePropExperimenter {
+	return (*OfpTableFeaturePropExperimenter)((*openflow_13.OfpTableFeatureProperty)(m).GetExperimenter())
+}
+
+// ofp_table_feature_prop_instructions from public import openflow_13.proto
+type OfpTableFeaturePropInstructions openflow_13.OfpTableFeaturePropInstructions
+
+func (m *OfpTableFeaturePropInstructions) Reset() {
+	(*openflow_13.OfpTableFeaturePropInstructions)(m).Reset()
+}
+func (m *OfpTableFeaturePropInstructions) String() string {
+	return (*openflow_13.OfpTableFeaturePropInstructions)(m).String()
+}
+func (*OfpTableFeaturePropInstructions) ProtoMessage() {}
+func (m *OfpTableFeaturePropInstructions) GetInstructions() []*OfpInstruction {
+	o := (*openflow_13.OfpTableFeaturePropInstructions)(m).GetInstructions()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpInstruction, len(o))
+	for i, x := range o {
+		s[i] = (*OfpInstruction)(x)
+	}
+	return s
+}
+
+// ofp_table_feature_prop_next_tables from public import openflow_13.proto
+type OfpTableFeaturePropNextTables openflow_13.OfpTableFeaturePropNextTables
+
+func (m *OfpTableFeaturePropNextTables) Reset() {
+	(*openflow_13.OfpTableFeaturePropNextTables)(m).Reset()
+}
+func (m *OfpTableFeaturePropNextTables) String() string {
+	return (*openflow_13.OfpTableFeaturePropNextTables)(m).String()
+}
+func (*OfpTableFeaturePropNextTables) ProtoMessage() {}
+func (m *OfpTableFeaturePropNextTables) GetNextTableIds() []uint32 {
+	return (*openflow_13.OfpTableFeaturePropNextTables)(m).GetNextTableIds()
+}
+
+// ofp_table_feature_prop_actions from public import openflow_13.proto
+type OfpTableFeaturePropActions openflow_13.OfpTableFeaturePropActions
+
+func (m *OfpTableFeaturePropActions) Reset() { (*openflow_13.OfpTableFeaturePropActions)(m).Reset() }
+func (m *OfpTableFeaturePropActions) String() string {
+	return (*openflow_13.OfpTableFeaturePropActions)(m).String()
+}
+func (*OfpTableFeaturePropActions) ProtoMessage() {}
+func (m *OfpTableFeaturePropActions) GetActions() []*OfpAction {
+	o := (*openflow_13.OfpTableFeaturePropActions)(m).GetActions()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpAction, len(o))
+	for i, x := range o {
+		s[i] = (*OfpAction)(x)
+	}
+	return s
+}
+
+// ofp_table_feature_prop_oxm from public import openflow_13.proto
+type OfpTableFeaturePropOxm openflow_13.OfpTableFeaturePropOxm
+
+func (m *OfpTableFeaturePropOxm) Reset() { (*openflow_13.OfpTableFeaturePropOxm)(m).Reset() }
+func (m *OfpTableFeaturePropOxm) String() string {
+	return (*openflow_13.OfpTableFeaturePropOxm)(m).String()
+}
+func (*OfpTableFeaturePropOxm) ProtoMessage() {}
+func (m *OfpTableFeaturePropOxm) GetOxmIds() []uint32 {
+	return (*openflow_13.OfpTableFeaturePropOxm)(m).GetOxmIds()
+}
+
+// ofp_table_feature_prop_experimenter from public import openflow_13.proto
+type OfpTableFeaturePropExperimenter openflow_13.OfpTableFeaturePropExperimenter
+
+func (m *OfpTableFeaturePropExperimenter) Reset() {
+	(*openflow_13.OfpTableFeaturePropExperimenter)(m).Reset()
+}
+func (m *OfpTableFeaturePropExperimenter) String() string {
+	return (*openflow_13.OfpTableFeaturePropExperimenter)(m).String()
+}
+func (*OfpTableFeaturePropExperimenter) ProtoMessage() {}
+func (m *OfpTableFeaturePropExperimenter) GetExperimenter() uint32 {
+	return (*openflow_13.OfpTableFeaturePropExperimenter)(m).GetExperimenter()
+}
+func (m *OfpTableFeaturePropExperimenter) GetExpType() uint32 {
+	return (*openflow_13.OfpTableFeaturePropExperimenter)(m).GetExpType()
+}
+func (m *OfpTableFeaturePropExperimenter) GetExperimenterData() []uint32 {
+	return (*openflow_13.OfpTableFeaturePropExperimenter)(m).GetExperimenterData()
+}
+
+// ofp_table_features from public import openflow_13.proto
+type OfpTableFeatures openflow_13.OfpTableFeatures
+
+func (m *OfpTableFeatures) Reset()             { (*openflow_13.OfpTableFeatures)(m).Reset() }
+func (m *OfpTableFeatures) String() string     { return (*openflow_13.OfpTableFeatures)(m).String() }
+func (*OfpTableFeatures) ProtoMessage()        {}
+func (m *OfpTableFeatures) GetTableId() uint32 { return (*openflow_13.OfpTableFeatures)(m).GetTableId() }
+func (m *OfpTableFeatures) GetName() string    { return (*openflow_13.OfpTableFeatures)(m).GetName() }
+func (m *OfpTableFeatures) GetMetadataMatch() uint64 {
+	return (*openflow_13.OfpTableFeatures)(m).GetMetadataMatch()
+}
+func (m *OfpTableFeatures) GetMetadataWrite() uint64 {
+	return (*openflow_13.OfpTableFeatures)(m).GetMetadataWrite()
+}
+func (m *OfpTableFeatures) GetConfig() uint32 { return (*openflow_13.OfpTableFeatures)(m).GetConfig() }
+func (m *OfpTableFeatures) GetMaxEntries() uint32 {
+	return (*openflow_13.OfpTableFeatures)(m).GetMaxEntries()
+}
+func (m *OfpTableFeatures) GetProperties() []*OfpTableFeatureProperty {
+	o := (*openflow_13.OfpTableFeatures)(m).GetProperties()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpTableFeatureProperty, len(o))
+	for i, x := range o {
+		s[i] = (*OfpTableFeatureProperty)(x)
+	}
+	return s
+}
+
+// ofp_table_stats from public import openflow_13.proto
+type OfpTableStats openflow_13.OfpTableStats
+
+func (m *OfpTableStats) Reset()             { (*openflow_13.OfpTableStats)(m).Reset() }
+func (m *OfpTableStats) String() string     { return (*openflow_13.OfpTableStats)(m).String() }
+func (*OfpTableStats) ProtoMessage()        {}
+func (m *OfpTableStats) GetTableId() uint32 { return (*openflow_13.OfpTableStats)(m).GetTableId() }
+func (m *OfpTableStats) GetActiveCount() uint32 {
+	return (*openflow_13.OfpTableStats)(m).GetActiveCount()
+}
+func (m *OfpTableStats) GetLookupCount() uint64 {
+	return (*openflow_13.OfpTableStats)(m).GetLookupCount()
+}
+func (m *OfpTableStats) GetMatchedCount() uint64 {
+	return (*openflow_13.OfpTableStats)(m).GetMatchedCount()
+}
+
+// ofp_port_stats_request from public import openflow_13.proto
+type OfpPortStatsRequest openflow_13.OfpPortStatsRequest
+
+func (m *OfpPortStatsRequest) Reset()         { (*openflow_13.OfpPortStatsRequest)(m).Reset() }
+func (m *OfpPortStatsRequest) String() string { return (*openflow_13.OfpPortStatsRequest)(m).String() }
+func (*OfpPortStatsRequest) ProtoMessage()    {}
+func (m *OfpPortStatsRequest) GetPortNo() uint32 {
+	return (*openflow_13.OfpPortStatsRequest)(m).GetPortNo()
+}
+
+// ofp_port_stats from public import openflow_13.proto
+type OfpPortStats openflow_13.OfpPortStats
+
+func (m *OfpPortStats) Reset()                 { (*openflow_13.OfpPortStats)(m).Reset() }
+func (m *OfpPortStats) String() string         { return (*openflow_13.OfpPortStats)(m).String() }
+func (*OfpPortStats) ProtoMessage()            {}
+func (m *OfpPortStats) GetPortNo() uint32      { return (*openflow_13.OfpPortStats)(m).GetPortNo() }
+func (m *OfpPortStats) GetRxPackets() uint64   { return (*openflow_13.OfpPortStats)(m).GetRxPackets() }
+func (m *OfpPortStats) GetTxPackets() uint64   { return (*openflow_13.OfpPortStats)(m).GetTxPackets() }
+func (m *OfpPortStats) GetRxBytes() uint64     { return (*openflow_13.OfpPortStats)(m).GetRxBytes() }
+func (m *OfpPortStats) GetTxBytes() uint64     { return (*openflow_13.OfpPortStats)(m).GetTxBytes() }
+func (m *OfpPortStats) GetRxDropped() uint64   { return (*openflow_13.OfpPortStats)(m).GetRxDropped() }
+func (m *OfpPortStats) GetTxDropped() uint64   { return (*openflow_13.OfpPortStats)(m).GetTxDropped() }
+func (m *OfpPortStats) GetRxErrors() uint64    { return (*openflow_13.OfpPortStats)(m).GetRxErrors() }
+func (m *OfpPortStats) GetTxErrors() uint64    { return (*openflow_13.OfpPortStats)(m).GetTxErrors() }
+func (m *OfpPortStats) GetRxFrameErr() uint64  { return (*openflow_13.OfpPortStats)(m).GetRxFrameErr() }
+func (m *OfpPortStats) GetRxOverErr() uint64   { return (*openflow_13.OfpPortStats)(m).GetRxOverErr() }
+func (m *OfpPortStats) GetRxCrcErr() uint64    { return (*openflow_13.OfpPortStats)(m).GetRxCrcErr() }
+func (m *OfpPortStats) GetCollisions() uint64  { return (*openflow_13.OfpPortStats)(m).GetCollisions() }
+func (m *OfpPortStats) GetDurationSec() uint32 { return (*openflow_13.OfpPortStats)(m).GetDurationSec() }
+func (m *OfpPortStats) GetDurationNsec() uint32 {
+	return (*openflow_13.OfpPortStats)(m).GetDurationNsec()
+}
+
+// ofp_group_stats_request from public import openflow_13.proto
+type OfpGroupStatsRequest openflow_13.OfpGroupStatsRequest
+
+func (m *OfpGroupStatsRequest) Reset()         { (*openflow_13.OfpGroupStatsRequest)(m).Reset() }
+func (m *OfpGroupStatsRequest) String() string { return (*openflow_13.OfpGroupStatsRequest)(m).String() }
+func (*OfpGroupStatsRequest) ProtoMessage()    {}
+func (m *OfpGroupStatsRequest) GetGroupId() uint32 {
+	return (*openflow_13.OfpGroupStatsRequest)(m).GetGroupId()
+}
+
+// ofp_bucket_counter from public import openflow_13.proto
+type OfpBucketCounter openflow_13.OfpBucketCounter
+
+func (m *OfpBucketCounter) Reset()         { (*openflow_13.OfpBucketCounter)(m).Reset() }
+func (m *OfpBucketCounter) String() string { return (*openflow_13.OfpBucketCounter)(m).String() }
+func (*OfpBucketCounter) ProtoMessage()    {}
+func (m *OfpBucketCounter) GetPacketCount() uint64 {
+	return (*openflow_13.OfpBucketCounter)(m).GetPacketCount()
+}
+func (m *OfpBucketCounter) GetByteCount() uint64 {
+	return (*openflow_13.OfpBucketCounter)(m).GetByteCount()
+}
+
+// ofp_group_stats from public import openflow_13.proto
+type OfpGroupStats openflow_13.OfpGroupStats
+
+func (m *OfpGroupStats) Reset()              { (*openflow_13.OfpGroupStats)(m).Reset() }
+func (m *OfpGroupStats) String() string      { return (*openflow_13.OfpGroupStats)(m).String() }
+func (*OfpGroupStats) ProtoMessage()         {}
+func (m *OfpGroupStats) GetGroupId() uint32  { return (*openflow_13.OfpGroupStats)(m).GetGroupId() }
+func (m *OfpGroupStats) GetRefCount() uint32 { return (*openflow_13.OfpGroupStats)(m).GetRefCount() }
+func (m *OfpGroupStats) GetPacketCount() uint64 {
+	return (*openflow_13.OfpGroupStats)(m).GetPacketCount()
+}
+func (m *OfpGroupStats) GetByteCount() uint64 { return (*openflow_13.OfpGroupStats)(m).GetByteCount() }
+func (m *OfpGroupStats) GetDurationSec() uint32 {
+	return (*openflow_13.OfpGroupStats)(m).GetDurationSec()
+}
+func (m *OfpGroupStats) GetDurationNsec() uint32 {
+	return (*openflow_13.OfpGroupStats)(m).GetDurationNsec()
+}
+func (m *OfpGroupStats) GetBucketStats() []*OfpBucketCounter {
+	o := (*openflow_13.OfpGroupStats)(m).GetBucketStats()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpBucketCounter, len(o))
+	for i, x := range o {
+		s[i] = (*OfpBucketCounter)(x)
+	}
+	return s
+}
+
+// ofp_group_desc from public import openflow_13.proto
+type OfpGroupDesc openflow_13.OfpGroupDesc
+
+func (m *OfpGroupDesc) Reset()         { (*openflow_13.OfpGroupDesc)(m).Reset() }
+func (m *OfpGroupDesc) String() string { return (*openflow_13.OfpGroupDesc)(m).String() }
+func (*OfpGroupDesc) ProtoMessage()    {}
+func (m *OfpGroupDesc) GetType() OfpGroupType {
+	return (OfpGroupType)((*openflow_13.OfpGroupDesc)(m).GetType())
+}
+func (m *OfpGroupDesc) GetGroupId() uint32 { return (*openflow_13.OfpGroupDesc)(m).GetGroupId() }
+func (m *OfpGroupDesc) GetBuckets() []*OfpBucket {
+	o := (*openflow_13.OfpGroupDesc)(m).GetBuckets()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpBucket, len(o))
+	for i, x := range o {
+		s[i] = (*OfpBucket)(x)
+	}
+	return s
+}
+
+// ofp_group_entry from public import openflow_13.proto
+type OfpGroupEntry openflow_13.OfpGroupEntry
+
+func (m *OfpGroupEntry) Reset()         { (*openflow_13.OfpGroupEntry)(m).Reset() }
+func (m *OfpGroupEntry) String() string { return (*openflow_13.OfpGroupEntry)(m).String() }
+func (*OfpGroupEntry) ProtoMessage()    {}
+func (m *OfpGroupEntry) GetDesc() *OfpGroupDesc {
+	return (*OfpGroupDesc)((*openflow_13.OfpGroupEntry)(m).GetDesc())
+}
+func (m *OfpGroupEntry) GetStats() *OfpGroupStats {
+	return (*OfpGroupStats)((*openflow_13.OfpGroupEntry)(m).GetStats())
+}
+
+// ofp_group_features from public import openflow_13.proto
+type OfpGroupFeatures openflow_13.OfpGroupFeatures
+
+func (m *OfpGroupFeatures) Reset()           { (*openflow_13.OfpGroupFeatures)(m).Reset() }
+func (m *OfpGroupFeatures) String() string   { return (*openflow_13.OfpGroupFeatures)(m).String() }
+func (*OfpGroupFeatures) ProtoMessage()      {}
+func (m *OfpGroupFeatures) GetTypes() uint32 { return (*openflow_13.OfpGroupFeatures)(m).GetTypes() }
+func (m *OfpGroupFeatures) GetCapabilities() uint32 {
+	return (*openflow_13.OfpGroupFeatures)(m).GetCapabilities()
+}
+func (m *OfpGroupFeatures) GetMaxGroups() []uint32 {
+	return (*openflow_13.OfpGroupFeatures)(m).GetMaxGroups()
+}
+func (m *OfpGroupFeatures) GetActions() []uint32 {
+	return (*openflow_13.OfpGroupFeatures)(m).GetActions()
+}
+
+// ofp_meter_multipart_request from public import openflow_13.proto
+type OfpMeterMultipartRequest openflow_13.OfpMeterMultipartRequest
+
+func (m *OfpMeterMultipartRequest) Reset() { (*openflow_13.OfpMeterMultipartRequest)(m).Reset() }
+func (m *OfpMeterMultipartRequest) String() string {
+	return (*openflow_13.OfpMeterMultipartRequest)(m).String()
+}
+func (*OfpMeterMultipartRequest) ProtoMessage() {}
+func (m *OfpMeterMultipartRequest) GetMeterId() uint32 {
+	return (*openflow_13.OfpMeterMultipartRequest)(m).GetMeterId()
+}
+
+// ofp_meter_band_stats from public import openflow_13.proto
+type OfpMeterBandStats openflow_13.OfpMeterBandStats
+
+func (m *OfpMeterBandStats) Reset()         { (*openflow_13.OfpMeterBandStats)(m).Reset() }
+func (m *OfpMeterBandStats) String() string { return (*openflow_13.OfpMeterBandStats)(m).String() }
+func (*OfpMeterBandStats) ProtoMessage()    {}
+func (m *OfpMeterBandStats) GetPacketBandCount() uint64 {
+	return (*openflow_13.OfpMeterBandStats)(m).GetPacketBandCount()
+}
+func (m *OfpMeterBandStats) GetByteBandCount() uint64 {
+	return (*openflow_13.OfpMeterBandStats)(m).GetByteBandCount()
+}
+
+// ofp_meter_stats from public import openflow_13.proto
+type OfpMeterStats openflow_13.OfpMeterStats
+
+func (m *OfpMeterStats) Reset()               { (*openflow_13.OfpMeterStats)(m).Reset() }
+func (m *OfpMeterStats) String() string       { return (*openflow_13.OfpMeterStats)(m).String() }
+func (*OfpMeterStats) ProtoMessage()          {}
+func (m *OfpMeterStats) GetMeterId() uint32   { return (*openflow_13.OfpMeterStats)(m).GetMeterId() }
+func (m *OfpMeterStats) GetFlowCount() uint32 { return (*openflow_13.OfpMeterStats)(m).GetFlowCount() }
+func (m *OfpMeterStats) GetPacketInCount() uint64 {
+	return (*openflow_13.OfpMeterStats)(m).GetPacketInCount()
+}
+func (m *OfpMeterStats) GetByteInCount() uint64 {
+	return (*openflow_13.OfpMeterStats)(m).GetByteInCount()
+}
+func (m *OfpMeterStats) GetDurationSec() uint32 {
+	return (*openflow_13.OfpMeterStats)(m).GetDurationSec()
+}
+func (m *OfpMeterStats) GetDurationNsec() uint32 {
+	return (*openflow_13.OfpMeterStats)(m).GetDurationNsec()
+}
+func (m *OfpMeterStats) GetBandStats() []*OfpMeterBandStats {
+	o := (*openflow_13.OfpMeterStats)(m).GetBandStats()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpMeterBandStats, len(o))
+	for i, x := range o {
+		s[i] = (*OfpMeterBandStats)(x)
+	}
+	return s
+}
+
+// ofp_meter_config from public import openflow_13.proto
+type OfpMeterConfig openflow_13.OfpMeterConfig
+
+func (m *OfpMeterConfig) Reset()             { (*openflow_13.OfpMeterConfig)(m).Reset() }
+func (m *OfpMeterConfig) String() string     { return (*openflow_13.OfpMeterConfig)(m).String() }
+func (*OfpMeterConfig) ProtoMessage()        {}
+func (m *OfpMeterConfig) GetFlags() uint32   { return (*openflow_13.OfpMeterConfig)(m).GetFlags() }
+func (m *OfpMeterConfig) GetMeterId() uint32 { return (*openflow_13.OfpMeterConfig)(m).GetMeterId() }
+func (m *OfpMeterConfig) GetBands() []*OfpMeterBandHeader {
+	o := (*openflow_13.OfpMeterConfig)(m).GetBands()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpMeterBandHeader, len(o))
+	for i, x := range o {
+		s[i] = (*OfpMeterBandHeader)(x)
+	}
+	return s
+}
+
+// ofp_meter_features from public import openflow_13.proto
+type OfpMeterFeatures openflow_13.OfpMeterFeatures
+
+func (m *OfpMeterFeatures) Reset()         { (*openflow_13.OfpMeterFeatures)(m).Reset() }
+func (m *OfpMeterFeatures) String() string { return (*openflow_13.OfpMeterFeatures)(m).String() }
+func (*OfpMeterFeatures) ProtoMessage()    {}
+func (m *OfpMeterFeatures) GetMaxMeter() uint32 {
+	return (*openflow_13.OfpMeterFeatures)(m).GetMaxMeter()
+}
+func (m *OfpMeterFeatures) GetBandTypes() uint32 {
+	return (*openflow_13.OfpMeterFeatures)(m).GetBandTypes()
+}
+func (m *OfpMeterFeatures) GetCapabilities() uint32 {
+	return (*openflow_13.OfpMeterFeatures)(m).GetCapabilities()
+}
+func (m *OfpMeterFeatures) GetMaxBands() uint32 {
+	return (*openflow_13.OfpMeterFeatures)(m).GetMaxBands()
+}
+func (m *OfpMeterFeatures) GetMaxColor() uint32 {
+	return (*openflow_13.OfpMeterFeatures)(m).GetMaxColor()
+}
+
+// ofp_experimenter_multipart_header from public import openflow_13.proto
+type OfpExperimenterMultipartHeader openflow_13.OfpExperimenterMultipartHeader
+
+func (m *OfpExperimenterMultipartHeader) Reset() {
+	(*openflow_13.OfpExperimenterMultipartHeader)(m).Reset()
+}
+func (m *OfpExperimenterMultipartHeader) String() string {
+	return (*openflow_13.OfpExperimenterMultipartHeader)(m).String()
+}
+func (*OfpExperimenterMultipartHeader) ProtoMessage() {}
+func (m *OfpExperimenterMultipartHeader) GetExperimenter() uint32 {
+	return (*openflow_13.OfpExperimenterMultipartHeader)(m).GetExperimenter()
+}
+func (m *OfpExperimenterMultipartHeader) GetExpType() uint32 {
+	return (*openflow_13.OfpExperimenterMultipartHeader)(m).GetExpType()
+}
+func (m *OfpExperimenterMultipartHeader) GetData() []byte {
+	return (*openflow_13.OfpExperimenterMultipartHeader)(m).GetData()
+}
+
+// ofp_experimenter_header from public import openflow_13.proto
+type OfpExperimenterHeader openflow_13.OfpExperimenterHeader
+
+func (m *OfpExperimenterHeader) Reset() { (*openflow_13.OfpExperimenterHeader)(m).Reset() }
+func (m *OfpExperimenterHeader) String() string {
+	return (*openflow_13.OfpExperimenterHeader)(m).String()
+}
+func (*OfpExperimenterHeader) ProtoMessage() {}
+func (m *OfpExperimenterHeader) GetExperimenter() uint32 {
+	return (*openflow_13.OfpExperimenterHeader)(m).GetExperimenter()
+}
+func (m *OfpExperimenterHeader) GetExpType() uint32 {
+	return (*openflow_13.OfpExperimenterHeader)(m).GetExpType()
+}
+func (m *OfpExperimenterHeader) GetData() []byte {
+	return (*openflow_13.OfpExperimenterHeader)(m).GetData()
+}
+
+// ofp_queue_prop_header from public import openflow_13.proto
+type OfpQueuePropHeader openflow_13.OfpQueuePropHeader
+
+func (m *OfpQueuePropHeader) Reset()         { (*openflow_13.OfpQueuePropHeader)(m).Reset() }
+func (m *OfpQueuePropHeader) String() string { return (*openflow_13.OfpQueuePropHeader)(m).String() }
+func (*OfpQueuePropHeader) ProtoMessage()    {}
+func (m *OfpQueuePropHeader) GetProperty() uint32 {
+	return (*openflow_13.OfpQueuePropHeader)(m).GetProperty()
+}
+func (m *OfpQueuePropHeader) GetLen() uint32 { return (*openflow_13.OfpQueuePropHeader)(m).GetLen() }
+
+// ofp_queue_prop_min_rate from public import openflow_13.proto
+type OfpQueuePropMinRate openflow_13.OfpQueuePropMinRate
+
+func (m *OfpQueuePropMinRate) Reset()         { (*openflow_13.OfpQueuePropMinRate)(m).Reset() }
+func (m *OfpQueuePropMinRate) String() string { return (*openflow_13.OfpQueuePropMinRate)(m).String() }
+func (*OfpQueuePropMinRate) ProtoMessage()    {}
+func (m *OfpQueuePropMinRate) GetPropHeader() *OfpQueuePropHeader {
+	return (*OfpQueuePropHeader)((*openflow_13.OfpQueuePropMinRate)(m).GetPropHeader())
+}
+func (m *OfpQueuePropMinRate) GetRate() uint32 { return (*openflow_13.OfpQueuePropMinRate)(m).GetRate() }
+
+// ofp_queue_prop_max_rate from public import openflow_13.proto
+type OfpQueuePropMaxRate openflow_13.OfpQueuePropMaxRate
+
+func (m *OfpQueuePropMaxRate) Reset()         { (*openflow_13.OfpQueuePropMaxRate)(m).Reset() }
+func (m *OfpQueuePropMaxRate) String() string { return (*openflow_13.OfpQueuePropMaxRate)(m).String() }
+func (*OfpQueuePropMaxRate) ProtoMessage()    {}
+func (m *OfpQueuePropMaxRate) GetPropHeader() *OfpQueuePropHeader {
+	return (*OfpQueuePropHeader)((*openflow_13.OfpQueuePropMaxRate)(m).GetPropHeader())
+}
+func (m *OfpQueuePropMaxRate) GetRate() uint32 { return (*openflow_13.OfpQueuePropMaxRate)(m).GetRate() }
+
+// ofp_queue_prop_experimenter from public import openflow_13.proto
+type OfpQueuePropExperimenter openflow_13.OfpQueuePropExperimenter
+
+func (m *OfpQueuePropExperimenter) Reset() { (*openflow_13.OfpQueuePropExperimenter)(m).Reset() }
+func (m *OfpQueuePropExperimenter) String() string {
+	return (*openflow_13.OfpQueuePropExperimenter)(m).String()
+}
+func (*OfpQueuePropExperimenter) ProtoMessage() {}
+func (m *OfpQueuePropExperimenter) GetPropHeader() *OfpQueuePropHeader {
+	return (*OfpQueuePropHeader)((*openflow_13.OfpQueuePropExperimenter)(m).GetPropHeader())
+}
+func (m *OfpQueuePropExperimenter) GetExperimenter() uint32 {
+	return (*openflow_13.OfpQueuePropExperimenter)(m).GetExperimenter()
+}
+func (m *OfpQueuePropExperimenter) GetData() []byte {
+	return (*openflow_13.OfpQueuePropExperimenter)(m).GetData()
+}
+
+// ofp_packet_queue from public import openflow_13.proto
+type OfpPacketQueue openflow_13.OfpPacketQueue
+
+func (m *OfpPacketQueue) Reset()             { (*openflow_13.OfpPacketQueue)(m).Reset() }
+func (m *OfpPacketQueue) String() string     { return (*openflow_13.OfpPacketQueue)(m).String() }
+func (*OfpPacketQueue) ProtoMessage()        {}
+func (m *OfpPacketQueue) GetQueueId() uint32 { return (*openflow_13.OfpPacketQueue)(m).GetQueueId() }
+func (m *OfpPacketQueue) GetPort() uint32    { return (*openflow_13.OfpPacketQueue)(m).GetPort() }
+func (m *OfpPacketQueue) GetProperties() []*OfpQueuePropHeader {
+	o := (*openflow_13.OfpPacketQueue)(m).GetProperties()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpQueuePropHeader, len(o))
+	for i, x := range o {
+		s[i] = (*OfpQueuePropHeader)(x)
+	}
+	return s
+}
+
+// ofp_queue_get_config_request from public import openflow_13.proto
+type OfpQueueGetConfigRequest openflow_13.OfpQueueGetConfigRequest
+
+func (m *OfpQueueGetConfigRequest) Reset() { (*openflow_13.OfpQueueGetConfigRequest)(m).Reset() }
+func (m *OfpQueueGetConfigRequest) String() string {
+	return (*openflow_13.OfpQueueGetConfigRequest)(m).String()
+}
+func (*OfpQueueGetConfigRequest) ProtoMessage() {}
+func (m *OfpQueueGetConfigRequest) GetPort() uint32 {
+	return (*openflow_13.OfpQueueGetConfigRequest)(m).GetPort()
+}
+
+// ofp_queue_get_config_reply from public import openflow_13.proto
+type OfpQueueGetConfigReply openflow_13.OfpQueueGetConfigReply
+
+func (m *OfpQueueGetConfigReply) Reset() { (*openflow_13.OfpQueueGetConfigReply)(m).Reset() }
+func (m *OfpQueueGetConfigReply) String() string {
+	return (*openflow_13.OfpQueueGetConfigReply)(m).String()
+}
+func (*OfpQueueGetConfigReply) ProtoMessage() {}
+func (m *OfpQueueGetConfigReply) GetPort() uint32 {
+	return (*openflow_13.OfpQueueGetConfigReply)(m).GetPort()
+}
+func (m *OfpQueueGetConfigReply) GetQueues() []*OfpPacketQueue {
+	o := (*openflow_13.OfpQueueGetConfigReply)(m).GetQueues()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpPacketQueue, len(o))
+	for i, x := range o {
+		s[i] = (*OfpPacketQueue)(x)
+	}
+	return s
+}
+
+// ofp_action_set_queue from public import openflow_13.proto
+type OfpActionSetQueue openflow_13.OfpActionSetQueue
+
+func (m *OfpActionSetQueue) Reset()          { (*openflow_13.OfpActionSetQueue)(m).Reset() }
+func (m *OfpActionSetQueue) String() string  { return (*openflow_13.OfpActionSetQueue)(m).String() }
+func (*OfpActionSetQueue) ProtoMessage()     {}
+func (m *OfpActionSetQueue) GetType() uint32 { return (*openflow_13.OfpActionSetQueue)(m).GetType() }
+func (m *OfpActionSetQueue) GetQueueId() uint32 {
+	return (*openflow_13.OfpActionSetQueue)(m).GetQueueId()
+}
+
+// ofp_queue_stats_request from public import openflow_13.proto
+type OfpQueueStatsRequest openflow_13.OfpQueueStatsRequest
+
+func (m *OfpQueueStatsRequest) Reset()         { (*openflow_13.OfpQueueStatsRequest)(m).Reset() }
+func (m *OfpQueueStatsRequest) String() string { return (*openflow_13.OfpQueueStatsRequest)(m).String() }
+func (*OfpQueueStatsRequest) ProtoMessage()    {}
+func (m *OfpQueueStatsRequest) GetPortNo() uint32 {
+	return (*openflow_13.OfpQueueStatsRequest)(m).GetPortNo()
+}
+func (m *OfpQueueStatsRequest) GetQueueId() uint32 {
+	return (*openflow_13.OfpQueueStatsRequest)(m).GetQueueId()
+}
+
+// ofp_queue_stats from public import openflow_13.proto
+type OfpQueueStats openflow_13.OfpQueueStats
+
+func (m *OfpQueueStats) Reset()               { (*openflow_13.OfpQueueStats)(m).Reset() }
+func (m *OfpQueueStats) String() string       { return (*openflow_13.OfpQueueStats)(m).String() }
+func (*OfpQueueStats) ProtoMessage()          {}
+func (m *OfpQueueStats) GetPortNo() uint32    { return (*openflow_13.OfpQueueStats)(m).GetPortNo() }
+func (m *OfpQueueStats) GetQueueId() uint32   { return (*openflow_13.OfpQueueStats)(m).GetQueueId() }
+func (m *OfpQueueStats) GetTxBytes() uint64   { return (*openflow_13.OfpQueueStats)(m).GetTxBytes() }
+func (m *OfpQueueStats) GetTxPackets() uint64 { return (*openflow_13.OfpQueueStats)(m).GetTxPackets() }
+func (m *OfpQueueStats) GetTxErrors() uint64  { return (*openflow_13.OfpQueueStats)(m).GetTxErrors() }
+func (m *OfpQueueStats) GetDurationSec() uint32 {
+	return (*openflow_13.OfpQueueStats)(m).GetDurationSec()
+}
+func (m *OfpQueueStats) GetDurationNsec() uint32 {
+	return (*openflow_13.OfpQueueStats)(m).GetDurationNsec()
+}
+
+// ofp_role_request from public import openflow_13.proto
+type OfpRoleRequest openflow_13.OfpRoleRequest
+
+func (m *OfpRoleRequest) Reset()         { (*openflow_13.OfpRoleRequest)(m).Reset() }
+func (m *OfpRoleRequest) String() string { return (*openflow_13.OfpRoleRequest)(m).String() }
+func (*OfpRoleRequest) ProtoMessage()    {}
+func (m *OfpRoleRequest) GetRole() OfpControllerRole {
+	return (OfpControllerRole)((*openflow_13.OfpRoleRequest)(m).GetRole())
+}
+func (m *OfpRoleRequest) GetGenerationId() uint64 {
+	return (*openflow_13.OfpRoleRequest)(m).GetGenerationId()
+}
+
+// ofp_async_config from public import openflow_13.proto
+type OfpAsyncConfig openflow_13.OfpAsyncConfig
+
+func (m *OfpAsyncConfig) Reset()         { (*openflow_13.OfpAsyncConfig)(m).Reset() }
+func (m *OfpAsyncConfig) String() string { return (*openflow_13.OfpAsyncConfig)(m).String() }
+func (*OfpAsyncConfig) ProtoMessage()    {}
+func (m *OfpAsyncConfig) GetPacketInMask() []uint32 {
+	return (*openflow_13.OfpAsyncConfig)(m).GetPacketInMask()
+}
+func (m *OfpAsyncConfig) GetPortStatusMask() []uint32 {
+	return (*openflow_13.OfpAsyncConfig)(m).GetPortStatusMask()
+}
+func (m *OfpAsyncConfig) GetFlowRemovedMask() []uint32 {
+	return (*openflow_13.OfpAsyncConfig)(m).GetFlowRemovedMask()
+}
+
+// FlowTableUpdate from public import openflow_13.proto
+type FlowTableUpdate openflow_13.FlowTableUpdate
+
+func (m *FlowTableUpdate) Reset()         { (*openflow_13.FlowTableUpdate)(m).Reset() }
+func (m *FlowTableUpdate) String() string { return (*openflow_13.FlowTableUpdate)(m).String() }
+func (*FlowTableUpdate) ProtoMessage()    {}
+func (m *FlowTableUpdate) GetId() string  { return (*openflow_13.FlowTableUpdate)(m).GetId() }
+func (m *FlowTableUpdate) GetFlowMod() *OfpFlowMod {
+	return (*OfpFlowMod)((*openflow_13.FlowTableUpdate)(m).GetFlowMod())
+}
+
+// FlowGroupTableUpdate from public import openflow_13.proto
+type FlowGroupTableUpdate openflow_13.FlowGroupTableUpdate
+
+func (m *FlowGroupTableUpdate) Reset()         { (*openflow_13.FlowGroupTableUpdate)(m).Reset() }
+func (m *FlowGroupTableUpdate) String() string { return (*openflow_13.FlowGroupTableUpdate)(m).String() }
+func (*FlowGroupTableUpdate) ProtoMessage()    {}
+func (m *FlowGroupTableUpdate) GetId() string  { return (*openflow_13.FlowGroupTableUpdate)(m).GetId() }
+func (m *FlowGroupTableUpdate) GetGroupMod() *OfpGroupMod {
+	return (*OfpGroupMod)((*openflow_13.FlowGroupTableUpdate)(m).GetGroupMod())
+}
+
+// Flows from public import openflow_13.proto
+type Flows openflow_13.Flows
+
+func (m *Flows) Reset()         { (*openflow_13.Flows)(m).Reset() }
+func (m *Flows) String() string { return (*openflow_13.Flows)(m).String() }
+func (*Flows) ProtoMessage()    {}
+func (m *Flows) GetItems() []*OfpFlowStats {
+	o := (*openflow_13.Flows)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpFlowStats, len(o))
+	for i, x := range o {
+		s[i] = (*OfpFlowStats)(x)
+	}
+	return s
+}
+
+// FlowGroups from public import openflow_13.proto
+type FlowGroups openflow_13.FlowGroups
+
+func (m *FlowGroups) Reset()         { (*openflow_13.FlowGroups)(m).Reset() }
+func (m *FlowGroups) String() string { return (*openflow_13.FlowGroups)(m).String() }
+func (*FlowGroups) ProtoMessage()    {}
+func (m *FlowGroups) GetItems() []*OfpGroupEntry {
+	o := (*openflow_13.FlowGroups)(m).GetItems()
+	if o == nil {
+		return nil
+	}
+	s := make([]*OfpGroupEntry, len(o))
+	for i, x := range o {
+		s[i] = (*OfpGroupEntry)(x)
+	}
+	return s
+}
+
+// PacketIn from public import openflow_13.proto
+type PacketIn openflow_13.PacketIn
+
+func (m *PacketIn) Reset()         { (*openflow_13.PacketIn)(m).Reset() }
+func (m *PacketIn) String() string { return (*openflow_13.PacketIn)(m).String() }
+func (*PacketIn) ProtoMessage()    {}
+func (m *PacketIn) GetId() string  { return (*openflow_13.PacketIn)(m).GetId() }
+func (m *PacketIn) GetPacketIn() *OfpPacketIn {
+	return (*OfpPacketIn)((*openflow_13.PacketIn)(m).GetPacketIn())
+}
+
+// PacketOut from public import openflow_13.proto
+type PacketOut openflow_13.PacketOut
+
+func (m *PacketOut) Reset()         { (*openflow_13.PacketOut)(m).Reset() }
+func (m *PacketOut) String() string { return (*openflow_13.PacketOut)(m).String() }
+func (*PacketOut) ProtoMessage()    {}
+func (m *PacketOut) GetId() string  { return (*openflow_13.PacketOut)(m).GetId() }
+func (m *PacketOut) GetPacketOut() *OfpPacketOut {
+	return (*OfpPacketOut)((*openflow_13.PacketOut)(m).GetPacketOut())
+}
+
+// ChangeEvent from public import openflow_13.proto
+type ChangeEvent openflow_13.ChangeEvent
+
+func (m *ChangeEvent) Reset()         { (*openflow_13.ChangeEvent)(m).Reset() }
+func (m *ChangeEvent) String() string { return (*openflow_13.ChangeEvent)(m).String() }
+func (*ChangeEvent) ProtoMessage()    {}
+func (m *ChangeEvent) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) int, []interface{}) {
+	return _ChangeEvent_OneofMarshaler, _ChangeEvent_OneofUnmarshaler, _ChangeEvent_OneofSizer, nil
+}
+func _ChangeEvent_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*ChangeEvent)
+	m0 := (*openflow_13.ChangeEvent)(m)
+	enc, _, _, _ := m0.XXX_OneofFuncs()
+	return enc(m0, b)
+}
+func _ChangeEvent_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*ChangeEvent)
+	m0 := (*openflow_13.ChangeEvent)(m)
+	_, dec, _, _ := m0.XXX_OneofFuncs()
+	return dec(m0, tag, wire, b)
+}
+func _ChangeEvent_OneofSizer(msg proto.Message) int {
+	m := msg.(*ChangeEvent)
+	m0 := (*openflow_13.ChangeEvent)(m)
+	_, _, size, _ := m0.XXX_OneofFuncs()
+	return size(m0)
+}
+func (m *ChangeEvent) GetId() string { return (*openflow_13.ChangeEvent)(m).GetId() }
+func (m *ChangeEvent) GetPortStatus() *OfpPortStatus {
+	return (*OfpPortStatus)((*openflow_13.ChangeEvent)(m).GetPortStatus())
+}
+
+// ofp_port_no from public import openflow_13.proto
+type OfpPortNo openflow_13.OfpPortNo
+
+var OfpPortNo_name = openflow_13.OfpPortNo_name
+var OfpPortNo_value = openflow_13.OfpPortNo_value
+
+func (x OfpPortNo) String() string { return (openflow_13.OfpPortNo)(x).String() }
+
+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)
+
+// ofp_type from public import openflow_13.proto
+type OfpType openflow_13.OfpType
+
+var OfpType_name = openflow_13.OfpType_name
+var OfpType_value = openflow_13.OfpType_value
+
+func (x OfpType) String() string { return (openflow_13.OfpType)(x).String() }
+
+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)
+
+// ofp_hello_elem_type from public import openflow_13.proto
+type OfpHelloElemType openflow_13.OfpHelloElemType
+
+var OfpHelloElemType_name = openflow_13.OfpHelloElemType_name
+var OfpHelloElemType_value = openflow_13.OfpHelloElemType_value
+
+func (x OfpHelloElemType) String() string { return (openflow_13.OfpHelloElemType)(x).String() }
+
+const OfpHelloElemType_OFPHET_INVALID = OfpHelloElemType(openflow_13.OfpHelloElemType_OFPHET_INVALID)
+const OfpHelloElemType_OFPHET_VERSIONBITMAP = OfpHelloElemType(openflow_13.OfpHelloElemType_OFPHET_VERSIONBITMAP)
+
+// ofp_config_flags from public import openflow_13.proto
+type OfpConfigFlags openflow_13.OfpConfigFlags
+
+var OfpConfigFlags_name = openflow_13.OfpConfigFlags_name
+var OfpConfigFlags_value = openflow_13.OfpConfigFlags_value
+
+func (x OfpConfigFlags) String() string { return (openflow_13.OfpConfigFlags)(x).String() }
+
+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)
+
+// ofp_table_config from public import openflow_13.proto
+type OfpTableConfig openflow_13.OfpTableConfig
+
+var OfpTableConfig_name = openflow_13.OfpTableConfig_name
+var OfpTableConfig_value = openflow_13.OfpTableConfig_value
+
+func (x OfpTableConfig) String() string { return (openflow_13.OfpTableConfig)(x).String() }
+
+const OfpTableConfig_OFPTC_INVALID = OfpTableConfig(openflow_13.OfpTableConfig_OFPTC_INVALID)
+const OfpTableConfig_OFPTC_DEPRECATED_MASK = OfpTableConfig(openflow_13.OfpTableConfig_OFPTC_DEPRECATED_MASK)
+
+// ofp_table from public import openflow_13.proto
+type OfpTable openflow_13.OfpTable
+
+var OfpTable_name = openflow_13.OfpTable_name
+var OfpTable_value = openflow_13.OfpTable_value
+
+func (x OfpTable) String() string { return (openflow_13.OfpTable)(x).String() }
+
+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)
+
+// ofp_capabilities from public import openflow_13.proto
+type OfpCapabilities openflow_13.OfpCapabilities
+
+var OfpCapabilities_name = openflow_13.OfpCapabilities_name
+var OfpCapabilities_value = openflow_13.OfpCapabilities_value
+
+func (x OfpCapabilities) String() string { return (openflow_13.OfpCapabilities)(x).String() }
+
+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)
+
+// ofp_port_config from public import openflow_13.proto
+type OfpPortConfig openflow_13.OfpPortConfig
+
+var OfpPortConfig_name = openflow_13.OfpPortConfig_name
+var OfpPortConfig_value = openflow_13.OfpPortConfig_value
+
+func (x OfpPortConfig) String() string { return (openflow_13.OfpPortConfig)(x).String() }
+
+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)
+
+// ofp_port_state from public import openflow_13.proto
+type OfpPortState openflow_13.OfpPortState
+
+var OfpPortState_name = openflow_13.OfpPortState_name
+var OfpPortState_value = openflow_13.OfpPortState_value
+
+func (x OfpPortState) String() string { return (openflow_13.OfpPortState)(x).String() }
+
+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)
+
+// ofp_port_features from public import openflow_13.proto
+type OfpPortFeatures openflow_13.OfpPortFeatures
+
+var OfpPortFeatures_name = openflow_13.OfpPortFeatures_name
+var OfpPortFeatures_value = openflow_13.OfpPortFeatures_value
+
+func (x OfpPortFeatures) String() string { return (openflow_13.OfpPortFeatures)(x).String() }
+
+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)
+
+// ofp_port_reason from public import openflow_13.proto
+type OfpPortReason openflow_13.OfpPortReason
+
+var OfpPortReason_name = openflow_13.OfpPortReason_name
+var OfpPortReason_value = openflow_13.OfpPortReason_value
+
+func (x OfpPortReason) String() string { return (openflow_13.OfpPortReason)(x).String() }
+
+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)
+
+// ofp_match_type from public import openflow_13.proto
+type OfpMatchType openflow_13.OfpMatchType
+
+var OfpMatchType_name = openflow_13.OfpMatchType_name
+var OfpMatchType_value = openflow_13.OfpMatchType_value
+
+func (x OfpMatchType) String() string { return (openflow_13.OfpMatchType)(x).String() }
+
+const OfpMatchType_OFPMT_STANDARD = OfpMatchType(openflow_13.OfpMatchType_OFPMT_STANDARD)
+const OfpMatchType_OFPMT_OXM = OfpMatchType(openflow_13.OfpMatchType_OFPMT_OXM)
+
+// ofp_oxm_class from public import openflow_13.proto
+type OfpOxmClass openflow_13.OfpOxmClass
+
+var OfpOxmClass_name = openflow_13.OfpOxmClass_name
+var OfpOxmClass_value = openflow_13.OfpOxmClass_value
+
+func (x OfpOxmClass) String() string { return (openflow_13.OfpOxmClass)(x).String() }
+
+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)
+
+// oxm_ofb_field_types from public import openflow_13.proto
+type OxmOfbFieldTypes openflow_13.OxmOfbFieldTypes
+
+var OxmOfbFieldTypes_name = openflow_13.OxmOfbFieldTypes_name
+var OxmOfbFieldTypes_value = openflow_13.OxmOfbFieldTypes_value
+
+func (x OxmOfbFieldTypes) String() string { return (openflow_13.OxmOfbFieldTypes)(x).String() }
+
+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)
+
+// ofp_vlan_id from public import openflow_13.proto
+type OfpVlanId openflow_13.OfpVlanId
+
+var OfpVlanId_name = openflow_13.OfpVlanId_name
+var OfpVlanId_value = openflow_13.OfpVlanId_value
+
+func (x OfpVlanId) String() string { return (openflow_13.OfpVlanId)(x).String() }
+
+const OfpVlanId_OFPVID_NONE = OfpVlanId(openflow_13.OfpVlanId_OFPVID_NONE)
+const OfpVlanId_OFPVID_PRESENT = OfpVlanId(openflow_13.OfpVlanId_OFPVID_PRESENT)
+
+// ofp_ipv6exthdr_flags from public import openflow_13.proto
+type OfpIpv6ExthdrFlags openflow_13.OfpIpv6ExthdrFlags
+
+var OfpIpv6ExthdrFlags_name = openflow_13.OfpIpv6ExthdrFlags_name
+var OfpIpv6ExthdrFlags_value = openflow_13.OfpIpv6ExthdrFlags_value
+
+func (x OfpIpv6ExthdrFlags) String() string { return (openflow_13.OfpIpv6ExthdrFlags)(x).String() }
+
+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)
+
+// ofp_action_type from public import openflow_13.proto
+type OfpActionType openflow_13.OfpActionType
+
+var OfpActionType_name = openflow_13.OfpActionType_name
+var OfpActionType_value = openflow_13.OfpActionType_value
+
+func (x OfpActionType) String() string { return (openflow_13.OfpActionType)(x).String() }
+
+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)
+
+// ofp_controller_max_len from public import openflow_13.proto
+type OfpControllerMaxLen openflow_13.OfpControllerMaxLen
+
+var OfpControllerMaxLen_name = openflow_13.OfpControllerMaxLen_name
+var OfpControllerMaxLen_value = openflow_13.OfpControllerMaxLen_value
+
+func (x OfpControllerMaxLen) String() string { return (openflow_13.OfpControllerMaxLen)(x).String() }
+
+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)
+
+// ofp_instruction_type from public import openflow_13.proto
+type OfpInstructionType openflow_13.OfpInstructionType
+
+var OfpInstructionType_name = openflow_13.OfpInstructionType_name
+var OfpInstructionType_value = openflow_13.OfpInstructionType_value
+
+func (x OfpInstructionType) String() string { return (openflow_13.OfpInstructionType)(x).String() }
+
+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)
+
+// ofp_flow_mod_command from public import openflow_13.proto
+type OfpFlowModCommand openflow_13.OfpFlowModCommand
+
+var OfpFlowModCommand_name = openflow_13.OfpFlowModCommand_name
+var OfpFlowModCommand_value = openflow_13.OfpFlowModCommand_value
+
+func (x OfpFlowModCommand) String() string { return (openflow_13.OfpFlowModCommand)(x).String() }
+
+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)
+
+// ofp_flow_mod_flags from public import openflow_13.proto
+type OfpFlowModFlags openflow_13.OfpFlowModFlags
+
+var OfpFlowModFlags_name = openflow_13.OfpFlowModFlags_name
+var OfpFlowModFlags_value = openflow_13.OfpFlowModFlags_value
+
+func (x OfpFlowModFlags) String() string { return (openflow_13.OfpFlowModFlags)(x).String() }
+
+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)
+
+// ofp_group from public import openflow_13.proto
+type OfpGroup openflow_13.OfpGroup
+
+var OfpGroup_name = openflow_13.OfpGroup_name
+var OfpGroup_value = openflow_13.OfpGroup_value
+
+func (x OfpGroup) String() string { return (openflow_13.OfpGroup)(x).String() }
+
+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)
+
+// ofp_group_mod_command from public import openflow_13.proto
+type OfpGroupModCommand openflow_13.OfpGroupModCommand
+
+var OfpGroupModCommand_name = openflow_13.OfpGroupModCommand_name
+var OfpGroupModCommand_value = openflow_13.OfpGroupModCommand_value
+
+func (x OfpGroupModCommand) String() string { return (openflow_13.OfpGroupModCommand)(x).String() }
+
+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)
+
+// ofp_group_type from public import openflow_13.proto
+type OfpGroupType openflow_13.OfpGroupType
+
+var OfpGroupType_name = openflow_13.OfpGroupType_name
+var OfpGroupType_value = openflow_13.OfpGroupType_value
+
+func (x OfpGroupType) String() string { return (openflow_13.OfpGroupType)(x).String() }
+
+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)
+
+// ofp_packet_in_reason from public import openflow_13.proto
+type OfpPacketInReason openflow_13.OfpPacketInReason
+
+var OfpPacketInReason_name = openflow_13.OfpPacketInReason_name
+var OfpPacketInReason_value = openflow_13.OfpPacketInReason_value
+
+func (x OfpPacketInReason) String() string { return (openflow_13.OfpPacketInReason)(x).String() }
+
+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)
+
+// ofp_flow_removed_reason from public import openflow_13.proto
+type OfpFlowRemovedReason openflow_13.OfpFlowRemovedReason
+
+var OfpFlowRemovedReason_name = openflow_13.OfpFlowRemovedReason_name
+var OfpFlowRemovedReason_value = openflow_13.OfpFlowRemovedReason_value
+
+func (x OfpFlowRemovedReason) String() string { return (openflow_13.OfpFlowRemovedReason)(x).String() }
+
+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)
+
+// ofp_meter from public import openflow_13.proto
+type OfpMeter openflow_13.OfpMeter
+
+var OfpMeter_name = openflow_13.OfpMeter_name
+var OfpMeter_value = openflow_13.OfpMeter_value
+
+func (x OfpMeter) String() string { return (openflow_13.OfpMeter)(x).String() }
+
+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)
+
+// ofp_meter_band_type from public import openflow_13.proto
+type OfpMeterBandType openflow_13.OfpMeterBandType
+
+var OfpMeterBandType_name = openflow_13.OfpMeterBandType_name
+var OfpMeterBandType_value = openflow_13.OfpMeterBandType_value
+
+func (x OfpMeterBandType) String() string { return (openflow_13.OfpMeterBandType)(x).String() }
+
+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)
+
+// ofp_meter_mod_command from public import openflow_13.proto
+type OfpMeterModCommand openflow_13.OfpMeterModCommand
+
+var OfpMeterModCommand_name = openflow_13.OfpMeterModCommand_name
+var OfpMeterModCommand_value = openflow_13.OfpMeterModCommand_value
+
+func (x OfpMeterModCommand) String() string { return (openflow_13.OfpMeterModCommand)(x).String() }
+
+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)
+
+// ofp_meter_flags from public import openflow_13.proto
+type OfpMeterFlags openflow_13.OfpMeterFlags
+
+var OfpMeterFlags_name = openflow_13.OfpMeterFlags_name
+var OfpMeterFlags_value = openflow_13.OfpMeterFlags_value
+
+func (x OfpMeterFlags) String() string { return (openflow_13.OfpMeterFlags)(x).String() }
+
+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)
+
+// ofp_error_type from public import openflow_13.proto
+type OfpErrorType openflow_13.OfpErrorType
+
+var OfpErrorType_name = openflow_13.OfpErrorType_name
+var OfpErrorType_value = openflow_13.OfpErrorType_value
+
+func (x OfpErrorType) String() string { return (openflow_13.OfpErrorType)(x).String() }
+
+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)
+
+// ofp_hello_failed_code from public import openflow_13.proto
+type OfpHelloFailedCode openflow_13.OfpHelloFailedCode
+
+var OfpHelloFailedCode_name = openflow_13.OfpHelloFailedCode_name
+var OfpHelloFailedCode_value = openflow_13.OfpHelloFailedCode_value
+
+func (x OfpHelloFailedCode) String() string { return (openflow_13.OfpHelloFailedCode)(x).String() }
+
+const OfpHelloFailedCode_OFPHFC_INCOMPATIBLE = OfpHelloFailedCode(openflow_13.OfpHelloFailedCode_OFPHFC_INCOMPATIBLE)
+const OfpHelloFailedCode_OFPHFC_EPERM = OfpHelloFailedCode(openflow_13.OfpHelloFailedCode_OFPHFC_EPERM)
+
+// ofp_bad_request_code from public import openflow_13.proto
+type OfpBadRequestCode openflow_13.OfpBadRequestCode
+
+var OfpBadRequestCode_name = openflow_13.OfpBadRequestCode_name
+var OfpBadRequestCode_value = openflow_13.OfpBadRequestCode_value
+
+func (x OfpBadRequestCode) String() string { return (openflow_13.OfpBadRequestCode)(x).String() }
+
+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)
+
+// ofp_bad_action_code from public import openflow_13.proto
+type OfpBadActionCode openflow_13.OfpBadActionCode
+
+var OfpBadActionCode_name = openflow_13.OfpBadActionCode_name
+var OfpBadActionCode_value = openflow_13.OfpBadActionCode_value
+
+func (x OfpBadActionCode) String() string { return (openflow_13.OfpBadActionCode)(x).String() }
+
+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)
+
+// ofp_bad_instruction_code from public import openflow_13.proto
+type OfpBadInstructionCode openflow_13.OfpBadInstructionCode
+
+var OfpBadInstructionCode_name = openflow_13.OfpBadInstructionCode_name
+var OfpBadInstructionCode_value = openflow_13.OfpBadInstructionCode_value
+
+func (x OfpBadInstructionCode) String() string { return (openflow_13.OfpBadInstructionCode)(x).String() }
+
+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)
+
+// ofp_bad_match_code from public import openflow_13.proto
+type OfpBadMatchCode openflow_13.OfpBadMatchCode
+
+var OfpBadMatchCode_name = openflow_13.OfpBadMatchCode_name
+var OfpBadMatchCode_value = openflow_13.OfpBadMatchCode_value
+
+func (x OfpBadMatchCode) String() string { return (openflow_13.OfpBadMatchCode)(x).String() }
+
+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)
+
+// ofp_flow_mod_failed_code from public import openflow_13.proto
+type OfpFlowModFailedCode openflow_13.OfpFlowModFailedCode
+
+var OfpFlowModFailedCode_name = openflow_13.OfpFlowModFailedCode_name
+var OfpFlowModFailedCode_value = openflow_13.OfpFlowModFailedCode_value
+
+func (x OfpFlowModFailedCode) String() string { return (openflow_13.OfpFlowModFailedCode)(x).String() }
+
+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)
+
+// ofp_group_mod_failed_code from public import openflow_13.proto
+type OfpGroupModFailedCode openflow_13.OfpGroupModFailedCode
+
+var OfpGroupModFailedCode_name = openflow_13.OfpGroupModFailedCode_name
+var OfpGroupModFailedCode_value = openflow_13.OfpGroupModFailedCode_value
+
+func (x OfpGroupModFailedCode) String() string { return (openflow_13.OfpGroupModFailedCode)(x).String() }
+
+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)
+
+// ofp_port_mod_failed_code from public import openflow_13.proto
+type OfpPortModFailedCode openflow_13.OfpPortModFailedCode
+
+var OfpPortModFailedCode_name = openflow_13.OfpPortModFailedCode_name
+var OfpPortModFailedCode_value = openflow_13.OfpPortModFailedCode_value
+
+func (x OfpPortModFailedCode) String() string { return (openflow_13.OfpPortModFailedCode)(x).String() }
+
+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)
+
+// ofp_table_mod_failed_code from public import openflow_13.proto
+type OfpTableModFailedCode openflow_13.OfpTableModFailedCode
+
+var OfpTableModFailedCode_name = openflow_13.OfpTableModFailedCode_name
+var OfpTableModFailedCode_value = openflow_13.OfpTableModFailedCode_value
+
+func (x OfpTableModFailedCode) String() string { return (openflow_13.OfpTableModFailedCode)(x).String() }
+
+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)
+
+// ofp_queue_op_failed_code from public import openflow_13.proto
+type OfpQueueOpFailedCode openflow_13.OfpQueueOpFailedCode
+
+var OfpQueueOpFailedCode_name = openflow_13.OfpQueueOpFailedCode_name
+var OfpQueueOpFailedCode_value = openflow_13.OfpQueueOpFailedCode_value
+
+func (x OfpQueueOpFailedCode) String() string { return (openflow_13.OfpQueueOpFailedCode)(x).String() }
+
+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)
+
+// ofp_switch_config_failed_code from public import openflow_13.proto
+type OfpSwitchConfigFailedCode openflow_13.OfpSwitchConfigFailedCode
+
+var OfpSwitchConfigFailedCode_name = openflow_13.OfpSwitchConfigFailedCode_name
+var OfpSwitchConfigFailedCode_value = openflow_13.OfpSwitchConfigFailedCode_value
+
+func (x OfpSwitchConfigFailedCode) String() string {
+	return (openflow_13.OfpSwitchConfigFailedCode)(x).String()
+}
+
+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)
+
+// ofp_role_request_failed_code from public import openflow_13.proto
+type OfpRoleRequestFailedCode openflow_13.OfpRoleRequestFailedCode
+
+var OfpRoleRequestFailedCode_name = openflow_13.OfpRoleRequestFailedCode_name
+var OfpRoleRequestFailedCode_value = openflow_13.OfpRoleRequestFailedCode_value
+
+func (x OfpRoleRequestFailedCode) String() string {
+	return (openflow_13.OfpRoleRequestFailedCode)(x).String()
+}
+
+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)
+
+// ofp_meter_mod_failed_code from public import openflow_13.proto
+type OfpMeterModFailedCode openflow_13.OfpMeterModFailedCode
+
+var OfpMeterModFailedCode_name = openflow_13.OfpMeterModFailedCode_name
+var OfpMeterModFailedCode_value = openflow_13.OfpMeterModFailedCode_value
+
+func (x OfpMeterModFailedCode) String() string { return (openflow_13.OfpMeterModFailedCode)(x).String() }
+
+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)
+
+// ofp_table_features_failed_code from public import openflow_13.proto
+type OfpTableFeaturesFailedCode openflow_13.OfpTableFeaturesFailedCode
+
+var OfpTableFeaturesFailedCode_name = openflow_13.OfpTableFeaturesFailedCode_name
+var OfpTableFeaturesFailedCode_value = openflow_13.OfpTableFeaturesFailedCode_value
+
+func (x OfpTableFeaturesFailedCode) String() string {
+	return (openflow_13.OfpTableFeaturesFailedCode)(x).String()
+}
+
+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)
+
+// ofp_multipart_type from public import openflow_13.proto
+type OfpMultipartType openflow_13.OfpMultipartType
+
+var OfpMultipartType_name = openflow_13.OfpMultipartType_name
+var OfpMultipartType_value = openflow_13.OfpMultipartType_value
+
+func (x OfpMultipartType) String() string { return (openflow_13.OfpMultipartType)(x).String() }
+
+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)
+
+// ofp_multipart_request_flags from public import openflow_13.proto
+type OfpMultipartRequestFlags openflow_13.OfpMultipartRequestFlags
+
+var OfpMultipartRequestFlags_name = openflow_13.OfpMultipartRequestFlags_name
+var OfpMultipartRequestFlags_value = openflow_13.OfpMultipartRequestFlags_value
+
+func (x OfpMultipartRequestFlags) String() string {
+	return (openflow_13.OfpMultipartRequestFlags)(x).String()
+}
+
+const OfpMultipartRequestFlags_OFPMPF_REQ_INVALID = OfpMultipartRequestFlags(openflow_13.OfpMultipartRequestFlags_OFPMPF_REQ_INVALID)
+const OfpMultipartRequestFlags_OFPMPF_REQ_MORE = OfpMultipartRequestFlags(openflow_13.OfpMultipartRequestFlags_OFPMPF_REQ_MORE)
+
+// ofp_multipart_reply_flags from public import openflow_13.proto
+type OfpMultipartReplyFlags openflow_13.OfpMultipartReplyFlags
+
+var OfpMultipartReplyFlags_name = openflow_13.OfpMultipartReplyFlags_name
+var OfpMultipartReplyFlags_value = openflow_13.OfpMultipartReplyFlags_value
+
+func (x OfpMultipartReplyFlags) String() string {
+	return (openflow_13.OfpMultipartReplyFlags)(x).String()
+}
+
+const OfpMultipartReplyFlags_OFPMPF_REPLY_INVALID = OfpMultipartReplyFlags(openflow_13.OfpMultipartReplyFlags_OFPMPF_REPLY_INVALID)
+const OfpMultipartReplyFlags_OFPMPF_REPLY_MORE = OfpMultipartReplyFlags(openflow_13.OfpMultipartReplyFlags_OFPMPF_REPLY_MORE)
+
+// ofp_table_feature_prop_type from public import openflow_13.proto
+type OfpTableFeaturePropType openflow_13.OfpTableFeaturePropType
+
+var OfpTableFeaturePropType_name = openflow_13.OfpTableFeaturePropType_name
+var OfpTableFeaturePropType_value = openflow_13.OfpTableFeaturePropType_value
+
+func (x OfpTableFeaturePropType) String() string {
+	return (openflow_13.OfpTableFeaturePropType)(x).String()
+}
+
+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)
+
+// ofp_group_capabilities from public import openflow_13.proto
+type OfpGroupCapabilities openflow_13.OfpGroupCapabilities
+
+var OfpGroupCapabilities_name = openflow_13.OfpGroupCapabilities_name
+var OfpGroupCapabilities_value = openflow_13.OfpGroupCapabilities_value
+
+func (x OfpGroupCapabilities) String() string { return (openflow_13.OfpGroupCapabilities)(x).String() }
+
+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)
+
+// ofp_queue_properties from public import openflow_13.proto
+type OfpQueueProperties openflow_13.OfpQueueProperties
+
+var OfpQueueProperties_name = openflow_13.OfpQueueProperties_name
+var OfpQueueProperties_value = openflow_13.OfpQueueProperties_value
+
+func (x OfpQueueProperties) String() string { return (openflow_13.OfpQueueProperties)(x).String() }
+
+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)
+
+// ofp_controller_role from public import openflow_13.proto
+type OfpControllerRole openflow_13.OfpControllerRole
+
+var OfpControllerRole_name = openflow_13.OfpControllerRole_name
+var OfpControllerRole_value = openflow_13.OfpControllerRole_value
+
+func (x OfpControllerRole) String() string { return (openflow_13.OfpControllerRole)(x).String() }
+
+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 fileDescriptor0, []int{2, 0}
+}
+
+type DeviceGroup struct {
+	Id             string                   `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	LogicalDevices []*voltha5.LogicalDevice `protobuf:"bytes,2,rep,name=logical_devices,json=logicalDevices" json:"logical_devices,omitempty"`
+	Devices        []*voltha6.Device        `protobuf:"bytes,3,rep,name=devices" json:"devices,omitempty"`
+}
+
+func (m *DeviceGroup) Reset()                    { *m = DeviceGroup{} }
+func (m *DeviceGroup) String() string            { return proto.CompactTextString(m) }
+func (*DeviceGroup) ProtoMessage()               {}
+func (*DeviceGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *DeviceGroup) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *DeviceGroup) GetLogicalDevices() []*voltha5.LogicalDevice {
+	if m != nil {
+		return m.LogicalDevices
+	}
+	return nil
+}
+
+func (m *DeviceGroup) GetDevices() []*voltha6.Device {
+	if m != nil {
+		return m.Devices
+	}
+	return nil
+}
+
+type DeviceGroups struct {
+	Items []*DeviceGroup `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
+}
+
+func (m *DeviceGroups) Reset()                    { *m = DeviceGroups{} }
+func (m *DeviceGroups) String() string            { return proto.CompactTextString(m) }
+func (*DeviceGroups) ProtoMessage()               {}
+func (*DeviceGroups) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func (m *DeviceGroups) GetItems() []*DeviceGroup {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+type AlarmFilterRuleKey struct {
+}
+
+func (m *AlarmFilterRuleKey) Reset()                    { *m = AlarmFilterRuleKey{} }
+func (m *AlarmFilterRuleKey) String() string            { return proto.CompactTextString(m) }
+func (*AlarmFilterRuleKey) ProtoMessage()               {}
+func (*AlarmFilterRuleKey) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+type AlarmFilterRule struct {
+	Key   AlarmFilterRuleKey_AlarmFilterRuleKey `protobuf:"varint,1,opt,name=key,enum=voltha.AlarmFilterRuleKey_AlarmFilterRuleKey" json:"key,omitempty"`
+	Value string                                `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+}
+
+func (m *AlarmFilterRule) Reset()                    { *m = AlarmFilterRule{} }
+func (m *AlarmFilterRule) String() string            { return proto.CompactTextString(m) }
+func (*AlarmFilterRule) ProtoMessage()               {}
+func (*AlarmFilterRule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+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" json:"id,omitempty"`
+	Rules []*AlarmFilterRule `protobuf:"bytes,2,rep,name=rules" json:"rules,omitempty"`
+}
+
+func (m *AlarmFilter) Reset()                    { *m = AlarmFilter{} }
+func (m *AlarmFilter) String() string            { return proto.CompactTextString(m) }
+func (*AlarmFilter) ProtoMessage()               {}
+func (*AlarmFilter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+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" json:"filters,omitempty"`
+}
+
+func (m *AlarmFilters) Reset()                    { *m = AlarmFilters{} }
+func (m *AlarmFilters) String() string            { return proto.CompactTextString(m) }
+func (*AlarmFilters) ProtoMessage()               {}
+func (*AlarmFilters) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+func (m *AlarmFilters) GetFilters() []*AlarmFilter {
+	if m != nil {
+		return m.Filters
+	}
+	return nil
+}
+
+// Top-level (root) node for a Voltha Instance
+type VolthaInstance struct {
+	InstanceId     string                    `protobuf:"bytes,1,opt,name=instance_id,json=instanceId" json:"instance_id,omitempty"`
+	Version        string                    `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"`
+	LogLevel       voltha3.LogLevel_LogLevel `protobuf:"varint,3,opt,name=log_level,json=logLevel,enum=voltha.LogLevel_LogLevel" json:"log_level,omitempty"`
+	Health         *voltha4.HealthStatus     `protobuf:"bytes,10,opt,name=health" json:"health,omitempty"`
+	Adapters       []*voltha7.Adapter        `protobuf:"bytes,11,rep,name=adapters" json:"adapters,omitempty"`
+	LogicalDevices []*voltha5.LogicalDevice  `protobuf:"bytes,12,rep,name=logical_devices,json=logicalDevices" json:"logical_devices,omitempty"`
+	Devices        []*voltha6.Device         `protobuf:"bytes,13,rep,name=devices" json:"devices,omitempty"`
+	DeviceTypes    []*voltha6.DeviceType     `protobuf:"bytes,14,rep,name=device_types,json=deviceTypes" json:"device_types,omitempty"`
+	DeviceGroups   []*DeviceGroup            `protobuf:"bytes,15,rep,name=device_groups,json=deviceGroups" json:"device_groups,omitempty"`
+	AlarmFilters   []*AlarmFilter            `protobuf:"bytes,16,rep,name=alarm_filters,json=alarmFilters" json:"alarm_filters,omitempty"`
+}
+
+func (m *VolthaInstance) Reset()                    { *m = VolthaInstance{} }
+func (m *VolthaInstance) String() string            { return proto.CompactTextString(m) }
+func (*VolthaInstance) ProtoMessage()               {}
+func (*VolthaInstance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+func (m *VolthaInstance) GetInstanceId() string {
+	if m != nil {
+		return m.InstanceId
+	}
+	return ""
+}
+
+func (m *VolthaInstance) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *VolthaInstance) GetLogLevel() voltha3.LogLevel_LogLevel {
+	if m != nil {
+		return m.LogLevel
+	}
+	return voltha3.LogLevel_DEBUG
+}
+
+func (m *VolthaInstance) GetHealth() *voltha4.HealthStatus {
+	if m != nil {
+		return m.Health
+	}
+	return nil
+}
+
+func (m *VolthaInstance) GetAdapters() []*voltha7.Adapter {
+	if m != nil {
+		return m.Adapters
+	}
+	return nil
+}
+
+func (m *VolthaInstance) GetLogicalDevices() []*voltha5.LogicalDevice {
+	if m != nil {
+		return m.LogicalDevices
+	}
+	return nil
+}
+
+func (m *VolthaInstance) GetDevices() []*voltha6.Device {
+	if m != nil {
+		return m.Devices
+	}
+	return nil
+}
+
+func (m *VolthaInstance) GetDeviceTypes() []*voltha6.DeviceType {
+	if m != nil {
+		return m.DeviceTypes
+	}
+	return nil
+}
+
+func (m *VolthaInstance) GetDeviceGroups() []*DeviceGroup {
+	if m != nil {
+		return m.DeviceGroups
+	}
+	return nil
+}
+
+func (m *VolthaInstance) GetAlarmFilters() []*AlarmFilter {
+	if m != nil {
+		return m.AlarmFilters
+	}
+	return nil
+}
+
+type VolthaInstances struct {
+	Items []string `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"`
+}
+
+func (m *VolthaInstances) Reset()                    { *m = VolthaInstances{} }
+func (m *VolthaInstances) String() string            { return proto.CompactTextString(m) }
+func (*VolthaInstances) ProtoMessage()               {}
+func (*VolthaInstances) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+func (m *VolthaInstances) GetItems() []string {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
+// Voltha representing the entire Voltha cluster
+type Voltha struct {
+	Version        string                    `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"`
+	LogLevel       voltha3.LogLevel_LogLevel `protobuf:"varint,2,opt,name=log_level,json=logLevel,enum=voltha.LogLevel_LogLevel" json:"log_level,omitempty"`
+	Instances      []*VolthaInstance         `protobuf:"bytes,3,rep,name=instances" json:"instances,omitempty"`
+	Adapters       []*voltha7.Adapter        `protobuf:"bytes,11,rep,name=adapters" json:"adapters,omitempty"`
+	LogicalDevices []*voltha5.LogicalDevice  `protobuf:"bytes,12,rep,name=logical_devices,json=logicalDevices" json:"logical_devices,omitempty"`
+	Devices        []*voltha6.Device         `protobuf:"bytes,13,rep,name=devices" json:"devices,omitempty"`
+	DeviceGroups   []*DeviceGroup            `protobuf:"bytes,15,rep,name=device_groups,json=deviceGroups" json:"device_groups,omitempty"`
+}
+
+func (m *Voltha) Reset()                    { *m = Voltha{} }
+func (m *Voltha) String() string            { return proto.CompactTextString(m) }
+func (*Voltha) ProtoMessage()               {}
+func (*Voltha) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+
+func (m *Voltha) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *Voltha) GetLogLevel() voltha3.LogLevel_LogLevel {
+	if m != nil {
+		return m.LogLevel
+	}
+	return voltha3.LogLevel_DEBUG
+}
+
+func (m *Voltha) GetInstances() []*VolthaInstance {
+	if m != nil {
+		return m.Instances
+	}
+	return nil
+}
+
+func (m *Voltha) GetAdapters() []*voltha7.Adapter {
+	if m != nil {
+		return m.Adapters
+	}
+	return nil
+}
+
+func (m *Voltha) GetLogicalDevices() []*voltha5.LogicalDevice {
+	if m != nil {
+		return m.LogicalDevices
+	}
+	return nil
+}
+
+func (m *Voltha) GetDevices() []*voltha6.Device {
+	if m != nil {
+		return m.Devices
+	}
+	return nil
+}
+
+func (m *Voltha) GetDeviceGroups() []*DeviceGroup {
+	if m != nil {
+		return m.DeviceGroups
+	}
+	return nil
+}
+
+func init() {
+	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((*VolthaInstance)(nil), "voltha.VolthaInstance")
+	proto.RegisterType((*VolthaInstances)(nil), "voltha.VolthaInstances")
+	proto.RegisterType((*Voltha)(nil), "voltha.Voltha")
+	proto.RegisterEnum("voltha.AlarmFilterRuleKey_AlarmFilterRuleKey", AlarmFilterRuleKey_AlarmFilterRuleKey_name, AlarmFilterRuleKey_AlarmFilterRuleKey_value)
+}
+
+// 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
+
+// Client API for VolthaGlobalService service
+
+type VolthaGlobalServiceClient interface {
+	// Get high level information on the Voltha cluster
+	GetVoltha(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*Voltha, error)
+	// List all Voltha cluster instances
+	ListVolthaInstances(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*VolthaInstances, error)
+	// Get details on a Voltha cluster instance
+	GetVolthaInstance(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*VolthaInstance, error)
+	// List all logical devices managed by the Voltha cluster
+	ListLogicalDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha5.LogicalDevices, error)
+	// Get additional information on a given logical device
+	GetLogicalDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalDevice, error)
+	// List ports of a logical device
+	ListLogicalDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalPorts, error)
+	// List all flows of a logical device
+	ListLogicalDeviceFlows(ctx context.Context, in *voltha3.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) (*google_protobuf.Empty, error)
+	// List all flow groups of a logical device
+	ListLogicalDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error)
+	// Update group table for device
+	UpdateLogicalDeviceFlowGroupTable(ctx context.Context, in *openflow_13.FlowGroupTableUpdate, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// List all physical devices controlled by the Voltha cluster
+	ListDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.Devices, error)
+	// Get more information on a given physical device
+	GetDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Device, error)
+	// Pre-provision a new physical device
+	CreateDevice(ctx context.Context, in *voltha6.Device, opts ...grpc.CallOption) (*voltha6.Device, error)
+	// Enable a device.  If the device was in pre-provisioned state then it
+	// will tansition to ENABLED state.  If it was is DISABLED state then it
+	// will tansition to ENABLED state as well.
+	EnableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// Disable a device
+	DisableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// Reboot a device
+	RebootDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// Delete a device
+	DeleteDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// List ports of a device
+	ListDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Ports, error)
+	// List pm config of a device
+	ListDevicePmConfigs(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.PmConfigs, error)
+	// Update the pm config of a device
+	UpdateDevicePmConfigs(ctx context.Context, in *voltha6.PmConfigs, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// List all flows of a device
+	ListDeviceFlows(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error)
+	// List all flow groups of a device
+	ListDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error)
+	// List device types known to Voltha
+	ListDeviceTypes(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.DeviceTypes, error)
+	// Get additional information on a device type
+	GetDeviceType(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.DeviceType, error)
+	// List all device sharding groups
+	ListDeviceGroups(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*DeviceGroups, error)
+	// Get additional information on a device group
+	GetDeviceGroup(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*DeviceGroup, error)
+	CreateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error)
+	GetAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*AlarmFilter, error)
+	UpdateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error)
+	DeleteAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	ListAlarmFilters(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*AlarmFilters, error)
+}
+
+type volthaGlobalServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewVolthaGlobalServiceClient(cc *grpc.ClientConn) VolthaGlobalServiceClient {
+	return &volthaGlobalServiceClient{cc}
+}
+
+func (c *volthaGlobalServiceClient) GetVoltha(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*Voltha, error) {
+	out := new(Voltha)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/GetVoltha", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListVolthaInstances(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*VolthaInstances, error) {
+	out := new(VolthaInstances)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListVolthaInstances", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) GetVolthaInstance(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*VolthaInstance, error) {
+	out := new(VolthaInstance)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/GetVolthaInstance", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListLogicalDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha5.LogicalDevices, error) {
+	out := new(voltha5.LogicalDevices)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListLogicalDevices", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) GetLogicalDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalDevice, error) {
+	out := new(voltha5.LogicalDevice)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/GetLogicalDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListLogicalDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalPorts, error) {
+	out := new(voltha5.LogicalPorts)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListLogicalDevicePorts", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListLogicalDeviceFlows(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error) {
+	out := new(openflow_13.Flows)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListLogicalDeviceFlows", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) UpdateLogicalDeviceFlowTable(ctx context.Context, in *openflow_13.FlowTableUpdate, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/UpdateLogicalDeviceFlowTable", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListLogicalDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error) {
+	out := new(openflow_13.FlowGroups)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListLogicalDeviceFlowGroups", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) UpdateLogicalDeviceFlowGroupTable(ctx context.Context, in *openflow_13.FlowGroupTableUpdate, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/UpdateLogicalDeviceFlowGroupTable", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.Devices, error) {
+	out := new(voltha6.Devices)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListDevices", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) GetDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Device, error) {
+	out := new(voltha6.Device)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/GetDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) CreateDevice(ctx context.Context, in *voltha6.Device, opts ...grpc.CallOption) (*voltha6.Device, error) {
+	out := new(voltha6.Device)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/CreateDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) EnableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/EnableDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) DisableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/DisableDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) RebootDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/RebootDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) DeleteDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/DeleteDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Ports, error) {
+	out := new(voltha6.Ports)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListDevicePorts", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListDevicePmConfigs(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.PmConfigs, error) {
+	out := new(voltha6.PmConfigs)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListDevicePmConfigs", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) UpdateDevicePmConfigs(ctx context.Context, in *voltha6.PmConfigs, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/UpdateDevicePmConfigs", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListDeviceFlows(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error) {
+	out := new(openflow_13.Flows)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListDeviceFlows", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error) {
+	out := new(openflow_13.FlowGroups)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListDeviceFlowGroups", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListDeviceTypes(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.DeviceTypes, error) {
+	out := new(voltha6.DeviceTypes)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListDeviceTypes", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) GetDeviceType(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.DeviceType, error) {
+	out := new(voltha6.DeviceType)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/GetDeviceType", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListDeviceGroups(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*DeviceGroups, error) {
+	out := new(DeviceGroups)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListDeviceGroups", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) GetDeviceGroup(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*DeviceGroup, error) {
+	out := new(DeviceGroup)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/GetDeviceGroup", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) CreateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/CreateAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) GetAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/GetAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) UpdateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/UpdateAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) DeleteAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/DeleteAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaGlobalServiceClient) ListAlarmFilters(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*AlarmFilters, error) {
+	out := new(AlarmFilters)
+	err := grpc.Invoke(ctx, "/voltha.VolthaGlobalService/ListAlarmFilters", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// Server API for VolthaGlobalService service
+
+type VolthaGlobalServiceServer interface {
+	// Get high level information on the Voltha cluster
+	GetVoltha(context.Context, *google_protobuf.Empty) (*Voltha, error)
+	// List all Voltha cluster instances
+	ListVolthaInstances(context.Context, *google_protobuf.Empty) (*VolthaInstances, error)
+	// Get details on a Voltha cluster instance
+	GetVolthaInstance(context.Context, *voltha3.ID) (*VolthaInstance, error)
+	// List all logical devices managed by the Voltha cluster
+	ListLogicalDevices(context.Context, *google_protobuf.Empty) (*voltha5.LogicalDevices, error)
+	// Get additional information on a given logical device
+	GetLogicalDevice(context.Context, *voltha3.ID) (*voltha5.LogicalDevice, error)
+	// List ports of a logical device
+	ListLogicalDevicePorts(context.Context, *voltha3.ID) (*voltha5.LogicalPorts, error)
+	// List all flows of a logical device
+	ListLogicalDeviceFlows(context.Context, *voltha3.ID) (*openflow_13.Flows, error)
+	// Update flow table for logical device
+	UpdateLogicalDeviceFlowTable(context.Context, *openflow_13.FlowTableUpdate) (*google_protobuf.Empty, error)
+	// List all flow groups of a logical device
+	ListLogicalDeviceFlowGroups(context.Context, *voltha3.ID) (*openflow_13.FlowGroups, error)
+	// Update group table for device
+	UpdateLogicalDeviceFlowGroupTable(context.Context, *openflow_13.FlowGroupTableUpdate) (*google_protobuf.Empty, error)
+	// List all physical devices controlled by the Voltha cluster
+	ListDevices(context.Context, *google_protobuf.Empty) (*voltha6.Devices, error)
+	// Get more information on a given physical device
+	GetDevice(context.Context, *voltha3.ID) (*voltha6.Device, error)
+	// Pre-provision a new physical device
+	CreateDevice(context.Context, *voltha6.Device) (*voltha6.Device, error)
+	// Enable a device.  If the device was in pre-provisioned state then it
+	// will tansition to ENABLED state.  If it was is DISABLED state then it
+	// will tansition to ENABLED state as well.
+	EnableDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// Disable a device
+	DisableDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// Reboot a device
+	RebootDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// Delete a device
+	DeleteDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// List ports of a device
+	ListDevicePorts(context.Context, *voltha3.ID) (*voltha6.Ports, error)
+	// List pm config of a device
+	ListDevicePmConfigs(context.Context, *voltha3.ID) (*voltha6.PmConfigs, error)
+	// Update the pm config of a device
+	UpdateDevicePmConfigs(context.Context, *voltha6.PmConfigs) (*google_protobuf.Empty, error)
+	// List all flows of a device
+	ListDeviceFlows(context.Context, *voltha3.ID) (*openflow_13.Flows, error)
+	// List all flow groups of a device
+	ListDeviceFlowGroups(context.Context, *voltha3.ID) (*openflow_13.FlowGroups, error)
+	// List device types known to Voltha
+	ListDeviceTypes(context.Context, *google_protobuf.Empty) (*voltha6.DeviceTypes, error)
+	// Get additional information on a device type
+	GetDeviceType(context.Context, *voltha3.ID) (*voltha6.DeviceType, error)
+	// List all device sharding groups
+	ListDeviceGroups(context.Context, *google_protobuf.Empty) (*DeviceGroups, error)
+	// Get additional information on a device group
+	GetDeviceGroup(context.Context, *voltha3.ID) (*DeviceGroup, error)
+	CreateAlarmFilter(context.Context, *AlarmFilter) (*AlarmFilter, error)
+	GetAlarmFilter(context.Context, *voltha3.ID) (*AlarmFilter, error)
+	UpdateAlarmFilter(context.Context, *AlarmFilter) (*AlarmFilter, error)
+	DeleteAlarmFilter(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	ListAlarmFilters(context.Context, *google_protobuf.Empty) (*AlarmFilters, error)
+}
+
+func RegisterVolthaGlobalServiceServer(s *grpc.Server, srv VolthaGlobalServiceServer) {
+	s.RegisterService(&_VolthaGlobalService_serviceDesc, srv)
+}
+
+func _VolthaGlobalService_GetVoltha_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).GetVoltha(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/GetVoltha",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).GetVoltha(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListVolthaInstances_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListVolthaInstances(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListVolthaInstances",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListVolthaInstances(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_GetVolthaInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).GetVolthaInstance(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/GetVolthaInstance",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).GetVolthaInstance(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListLogicalDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDevices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListLogicalDevices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDevices(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_GetLogicalDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).GetLogicalDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/GetLogicalDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).GetLogicalDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListLogicalDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDevicePorts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListLogicalDevicePorts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDevicePorts(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListLogicalDeviceFlows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDeviceFlows(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListLogicalDeviceFlows",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDeviceFlows(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_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.(VolthaGlobalServiceServer).UpdateLogicalDeviceFlowTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/UpdateLogicalDeviceFlowTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).UpdateLogicalDeviceFlowTable(ctx, req.(*openflow_13.FlowTableUpdate))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListLogicalDeviceFlowGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDeviceFlowGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListLogicalDeviceFlowGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListLogicalDeviceFlowGroups(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_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.(VolthaGlobalServiceServer).UpdateLogicalDeviceFlowGroupTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/UpdateLogicalDeviceFlowGroupTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).UpdateLogicalDeviceFlowGroupTable(ctx, req.(*openflow_13.FlowGroupTableUpdate))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListDevices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListDevices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListDevices(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_GetDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).GetDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/GetDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).GetDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_CreateDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha6.Device)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).CreateDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/CreateDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).CreateDevice(ctx, req.(*voltha6.Device))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_EnableDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).EnableDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/EnableDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).EnableDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_DisableDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).DisableDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/DisableDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).DisableDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_RebootDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).RebootDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/RebootDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).RebootDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_DeleteDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).DeleteDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/DeleteDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).DeleteDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListDevicePorts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListDevicePorts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListDevicePorts(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListDevicePmConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListDevicePmConfigs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListDevicePmConfigs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListDevicePmConfigs(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_UpdateDevicePmConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha6.PmConfigs)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).UpdateDevicePmConfigs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/UpdateDevicePmConfigs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).UpdateDevicePmConfigs(ctx, req.(*voltha6.PmConfigs))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListDeviceFlows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListDeviceFlows(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListDeviceFlows",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListDeviceFlows(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListDeviceFlowGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListDeviceFlowGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListDeviceFlowGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListDeviceFlowGroups(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListDeviceTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListDeviceTypes(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListDeviceTypes",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListDeviceTypes(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_GetDeviceType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).GetDeviceType(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/GetDeviceType",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).GetDeviceType(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListDeviceGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListDeviceGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListDeviceGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListDeviceGroups(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_GetDeviceGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).GetDeviceGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/GetDeviceGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).GetDeviceGroup(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_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.(VolthaGlobalServiceServer).CreateAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/CreateAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).CreateAlarmFilter(ctx, req.(*AlarmFilter))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_GetAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).GetAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/GetAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).GetAlarmFilter(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_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.(VolthaGlobalServiceServer).UpdateAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/UpdateAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).UpdateAlarmFilter(ctx, req.(*AlarmFilter))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_DeleteAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).DeleteAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/DeleteAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).DeleteAlarmFilter(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaGlobalService_ListAlarmFilters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaGlobalServiceServer).ListAlarmFilters(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaGlobalService/ListAlarmFilters",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaGlobalServiceServer).ListAlarmFilters(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _VolthaGlobalService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "voltha.VolthaGlobalService",
+	HandlerType: (*VolthaGlobalServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetVoltha",
+			Handler:    _VolthaGlobalService_GetVoltha_Handler,
+		},
+		{
+			MethodName: "ListVolthaInstances",
+			Handler:    _VolthaGlobalService_ListVolthaInstances_Handler,
+		},
+		{
+			MethodName: "GetVolthaInstance",
+			Handler:    _VolthaGlobalService_GetVolthaInstance_Handler,
+		},
+		{
+			MethodName: "ListLogicalDevices",
+			Handler:    _VolthaGlobalService_ListLogicalDevices_Handler,
+		},
+		{
+			MethodName: "GetLogicalDevice",
+			Handler:    _VolthaGlobalService_GetLogicalDevice_Handler,
+		},
+		{
+			MethodName: "ListLogicalDevicePorts",
+			Handler:    _VolthaGlobalService_ListLogicalDevicePorts_Handler,
+		},
+		{
+			MethodName: "ListLogicalDeviceFlows",
+			Handler:    _VolthaGlobalService_ListLogicalDeviceFlows_Handler,
+		},
+		{
+			MethodName: "UpdateLogicalDeviceFlowTable",
+			Handler:    _VolthaGlobalService_UpdateLogicalDeviceFlowTable_Handler,
+		},
+		{
+			MethodName: "ListLogicalDeviceFlowGroups",
+			Handler:    _VolthaGlobalService_ListLogicalDeviceFlowGroups_Handler,
+		},
+		{
+			MethodName: "UpdateLogicalDeviceFlowGroupTable",
+			Handler:    _VolthaGlobalService_UpdateLogicalDeviceFlowGroupTable_Handler,
+		},
+		{
+			MethodName: "ListDevices",
+			Handler:    _VolthaGlobalService_ListDevices_Handler,
+		},
+		{
+			MethodName: "GetDevice",
+			Handler:    _VolthaGlobalService_GetDevice_Handler,
+		},
+		{
+			MethodName: "CreateDevice",
+			Handler:    _VolthaGlobalService_CreateDevice_Handler,
+		},
+		{
+			MethodName: "EnableDevice",
+			Handler:    _VolthaGlobalService_EnableDevice_Handler,
+		},
+		{
+			MethodName: "DisableDevice",
+			Handler:    _VolthaGlobalService_DisableDevice_Handler,
+		},
+		{
+			MethodName: "RebootDevice",
+			Handler:    _VolthaGlobalService_RebootDevice_Handler,
+		},
+		{
+			MethodName: "DeleteDevice",
+			Handler:    _VolthaGlobalService_DeleteDevice_Handler,
+		},
+		{
+			MethodName: "ListDevicePorts",
+			Handler:    _VolthaGlobalService_ListDevicePorts_Handler,
+		},
+		{
+			MethodName: "ListDevicePmConfigs",
+			Handler:    _VolthaGlobalService_ListDevicePmConfigs_Handler,
+		},
+		{
+			MethodName: "UpdateDevicePmConfigs",
+			Handler:    _VolthaGlobalService_UpdateDevicePmConfigs_Handler,
+		},
+		{
+			MethodName: "ListDeviceFlows",
+			Handler:    _VolthaGlobalService_ListDeviceFlows_Handler,
+		},
+		{
+			MethodName: "ListDeviceFlowGroups",
+			Handler:    _VolthaGlobalService_ListDeviceFlowGroups_Handler,
+		},
+		{
+			MethodName: "ListDeviceTypes",
+			Handler:    _VolthaGlobalService_ListDeviceTypes_Handler,
+		},
+		{
+			MethodName: "GetDeviceType",
+			Handler:    _VolthaGlobalService_GetDeviceType_Handler,
+		},
+		{
+			MethodName: "ListDeviceGroups",
+			Handler:    _VolthaGlobalService_ListDeviceGroups_Handler,
+		},
+		{
+			MethodName: "GetDeviceGroup",
+			Handler:    _VolthaGlobalService_GetDeviceGroup_Handler,
+		},
+		{
+			MethodName: "CreateAlarmFilter",
+			Handler:    _VolthaGlobalService_CreateAlarmFilter_Handler,
+		},
+		{
+			MethodName: "GetAlarmFilter",
+			Handler:    _VolthaGlobalService_GetAlarmFilter_Handler,
+		},
+		{
+			MethodName: "UpdateAlarmFilter",
+			Handler:    _VolthaGlobalService_UpdateAlarmFilter_Handler,
+		},
+		{
+			MethodName: "DeleteAlarmFilter",
+			Handler:    _VolthaGlobalService_DeleteAlarmFilter_Handler,
+		},
+		{
+			MethodName: "ListAlarmFilters",
+			Handler:    _VolthaGlobalService_ListAlarmFilters_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "voltha.proto",
+}
+
+// Client API for VolthaLocalService service
+
+type VolthaLocalServiceClient interface {
+	// Get information on this Voltha instance
+	GetVolthaInstance(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*VolthaInstance, error)
+	// Get the health state of the Voltha instance
+	GetHealth(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha4.HealthStatus, error)
+	// List all active adapters (plugins) in this Voltha instance
+	ListAdapters(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha7.Adapters, error)
+	// List all logical devices managed by this Voltha instance
+	ListLogicalDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha5.LogicalDevices, error)
+	// Get additional information on given logical device
+	GetLogicalDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalDevice, error)
+	// List ports of a logical device
+	ListLogicalDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalPorts, error)
+	// List all flows of a logical device
+	ListLogicalDeviceFlows(ctx context.Context, in *voltha3.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) (*google_protobuf.Empty, error)
+	// List all flow groups of a logical device
+	ListLogicalDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error)
+	// Update group table for logical device
+	UpdateLogicalDeviceFlowGroupTable(ctx context.Context, in *openflow_13.FlowGroupTableUpdate, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// List all physical devices managed by this Voltha instance
+	ListDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.Devices, error)
+	// Get additional information on this device
+	GetDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Device, error)
+	// Pre-provision a new physical device
+	CreateDevice(ctx context.Context, in *voltha6.Device, opts ...grpc.CallOption) (*voltha6.Device, error)
+	// Enable a device.  If the device was in pre-provisioned state then it
+	// will tansition to ENABLED state.  If it was is DISABLED state then it
+	// will tansition to ENABLED state as well.
+	EnableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// Disable a device
+	DisableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// Reboot a device
+	RebootDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// Delete a device
+	DeleteDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// List ports of a device
+	ListDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Ports, error)
+	// List pm config of a device
+	ListDevicePmConfigs(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.PmConfigs, error)
+	// Update the pm config of a device
+	UpdateDevicePmConfigs(ctx context.Context, in *voltha6.PmConfigs, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	// List all flows of a device
+	ListDeviceFlows(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error)
+	// List all flow groups of a device
+	ListDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error)
+	// List device types know to Voltha instance
+	ListDeviceTypes(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.DeviceTypes, error)
+	// Get additional information on given device type
+	GetDeviceType(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.DeviceType, error)
+	// List device sharding groups managed by this Voltha instance
+	ListDeviceGroups(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*DeviceGroups, error)
+	// Get more information on given device shard
+	GetDeviceGroup(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*DeviceGroup, error)
+	// Stream control packets to the dataplane
+	StreamPacketsOut(ctx context.Context, opts ...grpc.CallOption) (VolthaLocalService_StreamPacketsOutClient, error)
+	// Receive control packet stream
+	ReceivePacketsIn(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (VolthaLocalService_ReceivePacketsInClient, error)
+	ReceiveChangeEvents(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (VolthaLocalService_ReceiveChangeEventsClient, error)
+	CreateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error)
+	GetAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*AlarmFilter, error)
+	UpdateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error)
+	DeleteAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
+	ListAlarmFilters(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*AlarmFilters, error)
+}
+
+type volthaLocalServiceClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewVolthaLocalServiceClient(cc *grpc.ClientConn) VolthaLocalServiceClient {
+	return &volthaLocalServiceClient{cc}
+}
+
+func (c *volthaLocalServiceClient) GetVolthaInstance(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*VolthaInstance, error) {
+	out := new(VolthaInstance)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/GetVolthaInstance", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) GetHealth(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha4.HealthStatus, error) {
+	out := new(voltha4.HealthStatus)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/GetHealth", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListAdapters(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha7.Adapters, error) {
+	out := new(voltha7.Adapters)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListAdapters", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListLogicalDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha5.LogicalDevices, error) {
+	out := new(voltha5.LogicalDevices)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListLogicalDevices", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) GetLogicalDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalDevice, error) {
+	out := new(voltha5.LogicalDevice)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/GetLogicalDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListLogicalDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha5.LogicalPorts, error) {
+	out := new(voltha5.LogicalPorts)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListLogicalDevicePorts", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListLogicalDeviceFlows(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error) {
+	out := new(openflow_13.Flows)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListLogicalDeviceFlows", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) UpdateLogicalDeviceFlowTable(ctx context.Context, in *openflow_13.FlowTableUpdate, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/UpdateLogicalDeviceFlowTable", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListLogicalDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error) {
+	out := new(openflow_13.FlowGroups)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListLogicalDeviceFlowGroups", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) UpdateLogicalDeviceFlowGroupTable(ctx context.Context, in *openflow_13.FlowGroupTableUpdate, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/UpdateLogicalDeviceFlowGroupTable", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListDevices(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.Devices, error) {
+	out := new(voltha6.Devices)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListDevices", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) GetDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Device, error) {
+	out := new(voltha6.Device)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/GetDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) CreateDevice(ctx context.Context, in *voltha6.Device, opts ...grpc.CallOption) (*voltha6.Device, error) {
+	out := new(voltha6.Device)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/CreateDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) EnableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/EnableDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) DisableDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/DisableDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) RebootDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/RebootDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) DeleteDevice(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/DeleteDevice", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListDevicePorts(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.Ports, error) {
+	out := new(voltha6.Ports)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListDevicePorts", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListDevicePmConfigs(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.PmConfigs, error) {
+	out := new(voltha6.PmConfigs)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListDevicePmConfigs", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) UpdateDevicePmConfigs(ctx context.Context, in *voltha6.PmConfigs, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/UpdateDevicePmConfigs", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListDeviceFlows(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.Flows, error) {
+	out := new(openflow_13.Flows)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListDeviceFlows", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListDeviceFlowGroups(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*openflow_13.FlowGroups, error) {
+	out := new(openflow_13.FlowGroups)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListDeviceFlowGroups", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListDeviceTypes(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*voltha6.DeviceTypes, error) {
+	out := new(voltha6.DeviceTypes)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListDeviceTypes", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) GetDeviceType(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*voltha6.DeviceType, error) {
+	out := new(voltha6.DeviceType)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/GetDeviceType", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListDeviceGroups(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*DeviceGroups, error) {
+	out := new(DeviceGroups)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListDeviceGroups", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) GetDeviceGroup(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*DeviceGroup, error) {
+	out := new(DeviceGroup)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/GetDeviceGroup", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) StreamPacketsOut(ctx context.Context, opts ...grpc.CallOption) (VolthaLocalService_StreamPacketsOutClient, error) {
+	stream, err := grpc.NewClientStream(ctx, &_VolthaLocalService_serviceDesc.Streams[0], c.cc, "/voltha.VolthaLocalService/StreamPacketsOut", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &volthaLocalServiceStreamPacketsOutClient{stream}
+	return x, nil
+}
+
+type VolthaLocalService_StreamPacketsOutClient interface {
+	Send(*openflow_13.PacketOut) error
+	CloseAndRecv() (*google_protobuf.Empty, error)
+	grpc.ClientStream
+}
+
+type volthaLocalServiceStreamPacketsOutClient struct {
+	grpc.ClientStream
+}
+
+func (x *volthaLocalServiceStreamPacketsOutClient) Send(m *openflow_13.PacketOut) error {
+	return x.ClientStream.SendMsg(m)
+}
+
+func (x *volthaLocalServiceStreamPacketsOutClient) CloseAndRecv() (*google_protobuf.Empty, error) {
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	m := new(google_protobuf.Empty)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+func (c *volthaLocalServiceClient) ReceivePacketsIn(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (VolthaLocalService_ReceivePacketsInClient, error) {
+	stream, err := grpc.NewClientStream(ctx, &_VolthaLocalService_serviceDesc.Streams[1], c.cc, "/voltha.VolthaLocalService/ReceivePacketsIn", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &volthaLocalServiceReceivePacketsInClient{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 VolthaLocalService_ReceivePacketsInClient interface {
+	Recv() (*openflow_13.PacketIn, error)
+	grpc.ClientStream
+}
+
+type volthaLocalServiceReceivePacketsInClient struct {
+	grpc.ClientStream
+}
+
+func (x *volthaLocalServiceReceivePacketsInClient) 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 *volthaLocalServiceClient) ReceiveChangeEvents(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (VolthaLocalService_ReceiveChangeEventsClient, error) {
+	stream, err := grpc.NewClientStream(ctx, &_VolthaLocalService_serviceDesc.Streams[2], c.cc, "/voltha.VolthaLocalService/ReceiveChangeEvents", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &volthaLocalServiceReceiveChangeEventsClient{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 VolthaLocalService_ReceiveChangeEventsClient interface {
+	Recv() (*openflow_13.ChangeEvent, error)
+	grpc.ClientStream
+}
+
+type volthaLocalServiceReceiveChangeEventsClient struct {
+	grpc.ClientStream
+}
+
+func (x *volthaLocalServiceReceiveChangeEventsClient) 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 *volthaLocalServiceClient) CreateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/CreateAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) GetAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/GetAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) UpdateAlarmFilter(ctx context.Context, in *AlarmFilter, opts ...grpc.CallOption) (*AlarmFilter, error) {
+	out := new(AlarmFilter)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/UpdateAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) DeleteAlarmFilter(ctx context.Context, in *voltha3.ID, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
+	out := new(google_protobuf.Empty)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/DeleteAlarmFilter", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaLocalServiceClient) ListAlarmFilters(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*AlarmFilters, error) {
+	out := new(AlarmFilters)
+	err := grpc.Invoke(ctx, "/voltha.VolthaLocalService/ListAlarmFilters", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// Server API for VolthaLocalService service
+
+type VolthaLocalServiceServer interface {
+	// Get information on this Voltha instance
+	GetVolthaInstance(context.Context, *google_protobuf.Empty) (*VolthaInstance, error)
+	// Get the health state of the Voltha instance
+	GetHealth(context.Context, *google_protobuf.Empty) (*voltha4.HealthStatus, error)
+	// List all active adapters (plugins) in this Voltha instance
+	ListAdapters(context.Context, *google_protobuf.Empty) (*voltha7.Adapters, error)
+	// List all logical devices managed by this Voltha instance
+	ListLogicalDevices(context.Context, *google_protobuf.Empty) (*voltha5.LogicalDevices, error)
+	// Get additional information on given logical device
+	GetLogicalDevice(context.Context, *voltha3.ID) (*voltha5.LogicalDevice, error)
+	// List ports of a logical device
+	ListLogicalDevicePorts(context.Context, *voltha3.ID) (*voltha5.LogicalPorts, error)
+	// List all flows of a logical device
+	ListLogicalDeviceFlows(context.Context, *voltha3.ID) (*openflow_13.Flows, error)
+	// Update flow table for logical device
+	UpdateLogicalDeviceFlowTable(context.Context, *openflow_13.FlowTableUpdate) (*google_protobuf.Empty, error)
+	// List all flow groups of a logical device
+	ListLogicalDeviceFlowGroups(context.Context, *voltha3.ID) (*openflow_13.FlowGroups, error)
+	// Update group table for logical device
+	UpdateLogicalDeviceFlowGroupTable(context.Context, *openflow_13.FlowGroupTableUpdate) (*google_protobuf.Empty, error)
+	// List all physical devices managed by this Voltha instance
+	ListDevices(context.Context, *google_protobuf.Empty) (*voltha6.Devices, error)
+	// Get additional information on this device
+	GetDevice(context.Context, *voltha3.ID) (*voltha6.Device, error)
+	// Pre-provision a new physical device
+	CreateDevice(context.Context, *voltha6.Device) (*voltha6.Device, error)
+	// Enable a device.  If the device was in pre-provisioned state then it
+	// will tansition to ENABLED state.  If it was is DISABLED state then it
+	// will tansition to ENABLED state as well.
+	EnableDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// Disable a device
+	DisableDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// Reboot a device
+	RebootDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// Delete a device
+	DeleteDevice(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	// List ports of a device
+	ListDevicePorts(context.Context, *voltha3.ID) (*voltha6.Ports, error)
+	// List pm config of a device
+	ListDevicePmConfigs(context.Context, *voltha3.ID) (*voltha6.PmConfigs, error)
+	// Update the pm config of a device
+	UpdateDevicePmConfigs(context.Context, *voltha6.PmConfigs) (*google_protobuf.Empty, error)
+	// List all flows of a device
+	ListDeviceFlows(context.Context, *voltha3.ID) (*openflow_13.Flows, error)
+	// List all flow groups of a device
+	ListDeviceFlowGroups(context.Context, *voltha3.ID) (*openflow_13.FlowGroups, error)
+	// List device types know to Voltha instance
+	ListDeviceTypes(context.Context, *google_protobuf.Empty) (*voltha6.DeviceTypes, error)
+	// Get additional information on given device type
+	GetDeviceType(context.Context, *voltha3.ID) (*voltha6.DeviceType, error)
+	// List device sharding groups managed by this Voltha instance
+	ListDeviceGroups(context.Context, *google_protobuf.Empty) (*DeviceGroups, error)
+	// Get more information on given device shard
+	GetDeviceGroup(context.Context, *voltha3.ID) (*DeviceGroup, error)
+	// Stream control packets to the dataplane
+	StreamPacketsOut(VolthaLocalService_StreamPacketsOutServer) error
+	// Receive control packet stream
+	ReceivePacketsIn(*google_protobuf.Empty, VolthaLocalService_ReceivePacketsInServer) error
+	ReceiveChangeEvents(*google_protobuf.Empty, VolthaLocalService_ReceiveChangeEventsServer) error
+	CreateAlarmFilter(context.Context, *AlarmFilter) (*AlarmFilter, error)
+	GetAlarmFilter(context.Context, *voltha3.ID) (*AlarmFilter, error)
+	UpdateAlarmFilter(context.Context, *AlarmFilter) (*AlarmFilter, error)
+	DeleteAlarmFilter(context.Context, *voltha3.ID) (*google_protobuf.Empty, error)
+	ListAlarmFilters(context.Context, *google_protobuf.Empty) (*AlarmFilters, error)
+}
+
+func RegisterVolthaLocalServiceServer(s *grpc.Server, srv VolthaLocalServiceServer) {
+	s.RegisterService(&_VolthaLocalService_serviceDesc, srv)
+}
+
+func _VolthaLocalService_GetVolthaInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).GetVolthaInstance(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/GetVolthaInstance",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).GetVolthaInstance(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_GetHealth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).GetHealth(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/GetHealth",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).GetHealth(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListAdapters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListAdapters(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListAdapters",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListAdapters(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListLogicalDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListLogicalDevices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListLogicalDevices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListLogicalDevices(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_GetLogicalDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).GetLogicalDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/GetLogicalDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).GetLogicalDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListLogicalDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListLogicalDevicePorts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListLogicalDevicePorts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListLogicalDevicePorts(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListLogicalDeviceFlows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListLogicalDeviceFlows(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListLogicalDeviceFlows",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListLogicalDeviceFlows(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_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.(VolthaLocalServiceServer).UpdateLogicalDeviceFlowTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/UpdateLogicalDeviceFlowTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).UpdateLogicalDeviceFlowTable(ctx, req.(*openflow_13.FlowTableUpdate))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListLogicalDeviceFlowGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListLogicalDeviceFlowGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListLogicalDeviceFlowGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListLogicalDeviceFlowGroups(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_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.(VolthaLocalServiceServer).UpdateLogicalDeviceFlowGroupTable(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/UpdateLogicalDeviceFlowGroupTable",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).UpdateLogicalDeviceFlowGroupTable(ctx, req.(*openflow_13.FlowGroupTableUpdate))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListDevices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListDevices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListDevices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListDevices(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_GetDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).GetDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/GetDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).GetDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_CreateDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha6.Device)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).CreateDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/CreateDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).CreateDevice(ctx, req.(*voltha6.Device))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_EnableDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).EnableDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/EnableDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).EnableDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_DisableDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).DisableDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/DisableDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).DisableDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_RebootDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).RebootDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/RebootDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).RebootDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_DeleteDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).DeleteDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/DeleteDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).DeleteDevice(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListDevicePorts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListDevicePorts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListDevicePorts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListDevicePorts(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListDevicePmConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListDevicePmConfigs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListDevicePmConfigs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListDevicePmConfigs(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_UpdateDevicePmConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha6.PmConfigs)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).UpdateDevicePmConfigs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/UpdateDevicePmConfigs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).UpdateDevicePmConfigs(ctx, req.(*voltha6.PmConfigs))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListDeviceFlows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListDeviceFlows(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListDeviceFlows",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListDeviceFlows(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListDeviceFlowGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListDeviceFlowGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListDeviceFlowGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListDeviceFlowGroups(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListDeviceTypes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListDeviceTypes(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListDeviceTypes",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListDeviceTypes(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_GetDeviceType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).GetDeviceType(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/GetDeviceType",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).GetDeviceType(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListDeviceGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListDeviceGroups(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListDeviceGroups",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListDeviceGroups(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_GetDeviceGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).GetDeviceGroup(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/GetDeviceGroup",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).GetDeviceGroup(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_StreamPacketsOut_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(VolthaLocalServiceServer).StreamPacketsOut(&volthaLocalServiceStreamPacketsOutServer{stream})
+}
+
+type VolthaLocalService_StreamPacketsOutServer interface {
+	SendAndClose(*google_protobuf.Empty) error
+	Recv() (*openflow_13.PacketOut, error)
+	grpc.ServerStream
+}
+
+type volthaLocalServiceStreamPacketsOutServer struct {
+	grpc.ServerStream
+}
+
+func (x *volthaLocalServiceStreamPacketsOutServer) SendAndClose(m *google_protobuf.Empty) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func (x *volthaLocalServiceStreamPacketsOutServer) 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 _VolthaLocalService_ReceivePacketsIn_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(google_protobuf.Empty)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(VolthaLocalServiceServer).ReceivePacketsIn(m, &volthaLocalServiceReceivePacketsInServer{stream})
+}
+
+type VolthaLocalService_ReceivePacketsInServer interface {
+	Send(*openflow_13.PacketIn) error
+	grpc.ServerStream
+}
+
+type volthaLocalServiceReceivePacketsInServer struct {
+	grpc.ServerStream
+}
+
+func (x *volthaLocalServiceReceivePacketsInServer) Send(m *openflow_13.PacketIn) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func _VolthaLocalService_ReceiveChangeEvents_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(google_protobuf.Empty)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(VolthaLocalServiceServer).ReceiveChangeEvents(m, &volthaLocalServiceReceiveChangeEventsServer{stream})
+}
+
+type VolthaLocalService_ReceiveChangeEventsServer interface {
+	Send(*openflow_13.ChangeEvent) error
+	grpc.ServerStream
+}
+
+type volthaLocalServiceReceiveChangeEventsServer struct {
+	grpc.ServerStream
+}
+
+func (x *volthaLocalServiceReceiveChangeEventsServer) Send(m *openflow_13.ChangeEvent) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func _VolthaLocalService_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.(VolthaLocalServiceServer).CreateAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/CreateAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).CreateAlarmFilter(ctx, req.(*AlarmFilter))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_GetAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).GetAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/GetAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).GetAlarmFilter(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_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.(VolthaLocalServiceServer).UpdateAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/UpdateAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).UpdateAlarmFilter(ctx, req.(*AlarmFilter))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_DeleteAlarmFilter_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voltha3.ID)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).DeleteAlarmFilter(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/DeleteAlarmFilter",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).DeleteAlarmFilter(ctx, req.(*voltha3.ID))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaLocalService_ListAlarmFilters_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(google_protobuf.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaLocalServiceServer).ListAlarmFilters(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaLocalService/ListAlarmFilters",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaLocalServiceServer).ListAlarmFilters(ctx, req.(*google_protobuf.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _VolthaLocalService_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "voltha.VolthaLocalService",
+	HandlerType: (*VolthaLocalServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetVolthaInstance",
+			Handler:    _VolthaLocalService_GetVolthaInstance_Handler,
+		},
+		{
+			MethodName: "GetHealth",
+			Handler:    _VolthaLocalService_GetHealth_Handler,
+		},
+		{
+			MethodName: "ListAdapters",
+			Handler:    _VolthaLocalService_ListAdapters_Handler,
+		},
+		{
+			MethodName: "ListLogicalDevices",
+			Handler:    _VolthaLocalService_ListLogicalDevices_Handler,
+		},
+		{
+			MethodName: "GetLogicalDevice",
+			Handler:    _VolthaLocalService_GetLogicalDevice_Handler,
+		},
+		{
+			MethodName: "ListLogicalDevicePorts",
+			Handler:    _VolthaLocalService_ListLogicalDevicePorts_Handler,
+		},
+		{
+			MethodName: "ListLogicalDeviceFlows",
+			Handler:    _VolthaLocalService_ListLogicalDeviceFlows_Handler,
+		},
+		{
+			MethodName: "UpdateLogicalDeviceFlowTable",
+			Handler:    _VolthaLocalService_UpdateLogicalDeviceFlowTable_Handler,
+		},
+		{
+			MethodName: "ListLogicalDeviceFlowGroups",
+			Handler:    _VolthaLocalService_ListLogicalDeviceFlowGroups_Handler,
+		},
+		{
+			MethodName: "UpdateLogicalDeviceFlowGroupTable",
+			Handler:    _VolthaLocalService_UpdateLogicalDeviceFlowGroupTable_Handler,
+		},
+		{
+			MethodName: "ListDevices",
+			Handler:    _VolthaLocalService_ListDevices_Handler,
+		},
+		{
+			MethodName: "GetDevice",
+			Handler:    _VolthaLocalService_GetDevice_Handler,
+		},
+		{
+			MethodName: "CreateDevice",
+			Handler:    _VolthaLocalService_CreateDevice_Handler,
+		},
+		{
+			MethodName: "EnableDevice",
+			Handler:    _VolthaLocalService_EnableDevice_Handler,
+		},
+		{
+			MethodName: "DisableDevice",
+			Handler:    _VolthaLocalService_DisableDevice_Handler,
+		},
+		{
+			MethodName: "RebootDevice",
+			Handler:    _VolthaLocalService_RebootDevice_Handler,
+		},
+		{
+			MethodName: "DeleteDevice",
+			Handler:    _VolthaLocalService_DeleteDevice_Handler,
+		},
+		{
+			MethodName: "ListDevicePorts",
+			Handler:    _VolthaLocalService_ListDevicePorts_Handler,
+		},
+		{
+			MethodName: "ListDevicePmConfigs",
+			Handler:    _VolthaLocalService_ListDevicePmConfigs_Handler,
+		},
+		{
+			MethodName: "UpdateDevicePmConfigs",
+			Handler:    _VolthaLocalService_UpdateDevicePmConfigs_Handler,
+		},
+		{
+			MethodName: "ListDeviceFlows",
+			Handler:    _VolthaLocalService_ListDeviceFlows_Handler,
+		},
+		{
+			MethodName: "ListDeviceFlowGroups",
+			Handler:    _VolthaLocalService_ListDeviceFlowGroups_Handler,
+		},
+		{
+			MethodName: "ListDeviceTypes",
+			Handler:    _VolthaLocalService_ListDeviceTypes_Handler,
+		},
+		{
+			MethodName: "GetDeviceType",
+			Handler:    _VolthaLocalService_GetDeviceType_Handler,
+		},
+		{
+			MethodName: "ListDeviceGroups",
+			Handler:    _VolthaLocalService_ListDeviceGroups_Handler,
+		},
+		{
+			MethodName: "GetDeviceGroup",
+			Handler:    _VolthaLocalService_GetDeviceGroup_Handler,
+		},
+		{
+			MethodName: "CreateAlarmFilter",
+			Handler:    _VolthaLocalService_CreateAlarmFilter_Handler,
+		},
+		{
+			MethodName: "GetAlarmFilter",
+			Handler:    _VolthaLocalService_GetAlarmFilter_Handler,
+		},
+		{
+			MethodName: "UpdateAlarmFilter",
+			Handler:    _VolthaLocalService_UpdateAlarmFilter_Handler,
+		},
+		{
+			MethodName: "DeleteAlarmFilter",
+			Handler:    _VolthaLocalService_DeleteAlarmFilter_Handler,
+		},
+		{
+			MethodName: "ListAlarmFilters",
+			Handler:    _VolthaLocalService_ListAlarmFilters_Handler,
+		},
+	},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "StreamPacketsOut",
+			Handler:       _VolthaLocalService_StreamPacketsOut_Handler,
+			ClientStreams: true,
+		},
+		{
+			StreamName:    "ReceivePacketsIn",
+			Handler:       _VolthaLocalService_ReceivePacketsIn_Handler,
+			ServerStreams: true,
+		},
+		{
+			StreamName:    "ReceiveChangeEvents",
+			Handler:       _VolthaLocalService_ReceiveChangeEvents_Handler,
+			ServerStreams: true,
+		},
+	},
+	Metadata: "voltha.proto",
+}
+
+func init() { proto.RegisterFile("voltha.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 2029 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4b, 0x73, 0x1b, 0x59,
+	0x15, 0x4e, 0xfb, 0xad, 0x23, 0xc9, 0x92, 0xae, 0x5f, 0xb2, 0x6c, 0x4f, 0xec, 0x9b, 0x49, 0xc6,
+	0xf1, 0x94, 0xa5, 0xc4, 0x66, 0x42, 0x4d, 0x18, 0x8a, 0xc1, 0x8f, 0x24, 0x26, 0x2e, 0xa2, 0x52,
+	0x32, 0x33, 0x40, 0x48, 0xa9, 0xda, 0xd2, 0x8d, 0xdc, 0x4c, 0xab, 0x5b, 0xd5, 0xdd, 0xd2, 0x8c,
+	0x6a, 0x60, 0xc1, 0xb0, 0x82, 0x25, 0xd9, 0xc0, 0x9e, 0x0d, 0x6c, 0xf8, 0x25, 0x59, 0x50, 0xfc,
+	0x03, 0x8a, 0x05, 0xbf, 0x60, 0x60, 0x49, 0xdd, 0x97, 0xd4, 0x8f, 0xdb, 0x7a, 0xd9, 0xb3, 0x98,
+	0x5d, 0xf7, 0x7d, 0x7c, 0xdf, 0x39, 0xa7, 0xcf, 0x39, 0xf7, 0x7e, 0x0d, 0xa9, 0x8e, 0x6d, 0x7a,
+	0x97, 0x7a, 0xb1, 0xe5, 0xd8, 0x9e, 0x8d, 0xe6, 0xf8, 0x5b, 0x61, 0xa3, 0x61, 0xdb, 0x0d, 0x93,
+	0x94, 0xd8, 0xe8, 0x45, 0xfb, 0x75, 0x89, 0x34, 0x5b, 0x5e, 0x97, 0x2f, 0x2a, 0xac, 0x87, 0x27,
+	0x75, 0x4b, 0x4e, 0x6d, 0x8a, 0x29, 0xbd, 0x65, 0x94, 0x74, 0xcb, 0xb2, 0x3d, 0xdd, 0x33, 0x6c,
+	0xcb, 0x15, 0xb3, 0xa8, 0xab, 0x5b, 0x8d, 0xaa, 0xdd, 0xf2, 0x8f, 0x41, 0x93, 0x78, 0x82, 0xbd,
+	0x90, 0xaa, 0xd9, 0xcd, 0xa6, 0x6d, 0xc9, 0xb7, 0x4b, 0xa2, 0x9b, 0xde, 0xa5, 0x78, 0x5b, 0x36,
+	0xed, 0x86, 0x51, 0xd3, 0xcd, 0x6a, 0x9d, 0x74, 0x8c, 0x1a, 0x91, 0x6b, 0x02, 0x6f, 0x69, 0xbd,
+	0xae, 0xb7, 0x3c, 0xe2, 0x88, 0xd7, 0x9c, 0xdd, 0x22, 0xd6, 0x6b, 0xd3, 0xfe, 0xa2, 0x7a, 0xff,
+	0x90, 0x0f, 0xe1, 0xbf, 0x68, 0x90, 0x3c, 0x61, 0x5b, 0x1e, 0x3b, 0x76, 0xbb, 0x85, 0x56, 0x60,
+	0xca, 0xa8, 0xe7, 0xb5, 0x6d, 0x6d, 0x37, 0x71, 0x34, 0xfb, 0x9f, 0x6f, 0xde, 0x6e, 0x69, 0x95,
+	0x29, 0xa3, 0x8e, 0xce, 0x20, 0x13, 0xa4, 0x73, 0xf3, 0x53, 0xdb, 0xd3, 0xbb, 0xc9, 0x83, 0x95,
+	0xa2, 0x08, 0xd7, 0x39, 0x9f, 0xe6, 0x58, 0x47, 0x89, 0x7f, 0x7d, 0xf3, 0x76, 0x6b, 0x86, 0x62,
+	0x55, 0x16, 0x4d, 0xff, 0x8c, 0x8b, 0x0e, 0x61, 0x5e, 0x42, 0x4c, 0x33, 0x88, 0x45, 0x09, 0x11,
+	0xdd, 0x2b, 0x57, 0xe2, 0x0f, 0x21, 0xe5, 0xb3, 0xd2, 0x45, 0x77, 0x61, 0xd6, 0xf0, 0x48, 0xd3,
+	0xcd, 0x6b, 0x0c, 0x62, 0x29, 0x08, 0xc1, 0x16, 0x55, 0xf8, 0x0a, 0xfc, 0x25, 0xa0, 0x1f, 0x9b,
+	0xba, 0xd3, 0x7c, 0x64, 0x98, 0x1e, 0x71, 0x2a, 0x6d, 0x93, 0x3c, 0x25, 0x5d, 0x7c, 0xa1, 0x1a,
+	0x45, 0x73, 0x94, 0x35, 0x7b, 0x03, 0x2d, 0xc0, 0x8c, 0xd7, 0x6d, 0x91, 0xac, 0x86, 0x52, 0xb0,
+	0xe0, 0x92, 0x0e, 0x71, 0x0c, 0xaf, 0x9b, 0x9d, 0x42, 0x19, 0x48, 0x3a, 0xc4, 0xb5, 0xdb, 0x4e,
+	0x8d, 0x54, 0x8d, 0x7a, 0x76, 0x9a, 0x4e, 0xd7, 0x74, 0x8f, 0x34, 0x6c, 0xa7, 0x9b, 0x9d, 0x41,
+	0x69, 0x48, 0x70, 0x83, 0xe9, 0xe4, 0x2c, 0xbe, 0x84, 0x4c, 0x88, 0x03, 0xfd, 0x08, 0xa6, 0x3f,
+	0x27, 0x5d, 0x16, 0xdf, 0xc5, 0x83, 0x7d, 0x69, 0x75, 0xd4, 0x12, 0xc5, 0x50, 0x85, 0xee, 0x44,
+	0xcb, 0x30, 0xdb, 0xd1, 0xcd, 0x36, 0xc9, 0x4f, 0xd1, 0x4f, 0x54, 0xe1, 0x2f, 0xf8, 0x39, 0x24,
+	0x7d, 0x1b, 0xe2, 0x3e, 0xe2, 0x3e, 0xcc, 0x3a, 0x6d, 0xb3, 0xf7, 0xe9, 0xd6, 0x62, 0xe8, 0x2b,
+	0x7c, 0x15, 0xfe, 0x21, 0xa4, 0x7c, 0x33, 0x2e, 0xda, 0x87, 0xf9, 0xd7, 0xfc, 0x31, 0x1c, 0x75,
+	0x3f, 0x80, 0x5c, 0x83, 0xff, 0x31, 0x03, 0x8b, 0x9f, 0xb2, 0xf9, 0x33, 0xcb, 0xf5, 0x74, 0xab,
+	0x46, 0xd0, 0x1d, 0x48, 0x1a, 0xe2, 0xb9, 0x1a, 0x36, 0x10, 0xe4, 0xcc, 0x59, 0x1d, 0xdd, 0x84,
+	0xf9, 0x0e, 0x71, 0x5c, 0xc3, 0xb6, 0xb8, 0x9b, 0x72, 0x8d, 0x1c, 0x45, 0x0f, 0x20, 0x61, 0xda,
+	0x8d, 0xaa, 0x49, 0x3a, 0xc4, 0xcc, 0x4f, 0xb3, 0x60, 0xae, 0xfb, 0x12, 0xf1, 0x9c, 0x8e, 0xf7,
+	0x1e, 0x2a, 0x0b, 0xa6, 0x78, 0x42, 0x87, 0x30, 0xc7, 0x6b, 0x28, 0x0f, 0xdb, 0xda, 0x6e, 0xf2,
+	0x60, 0x59, 0x6e, 0x7a, 0xc2, 0x46, 0x9f, 0x7b, 0xba, 0xd7, 0x76, 0x8f, 0x66, 0x69, 0x02, 0xde,
+	0xa8, 0x88, 0xa5, 0xe8, 0x01, 0x2c, 0x88, 0x32, 0x72, 0xf3, 0x49, 0xe6, 0x78, 0xa6, 0xe7, 0x38,
+	0x1f, 0xf7, 0xa7, 0x6c, 0x6f, 0xad, 0xaa, 0x66, 0x52, 0x57, 0xaf, 0x99, 0xf4, 0xa8, 0x35, 0x83,
+	0x3e, 0x06, 0xd1, 0x0c, 0xaa, 0x34, 0x97, 0xdd, 0xfc, 0x22, 0xdb, 0x89, 0x82, 0x3b, 0x5f, 0x74,
+	0x5b, 0x81, 0xdd, 0xc9, 0x7a, 0x6f, 0xd8, 0x45, 0xc7, 0x90, 0x16, 0x08, 0x0d, 0x56, 0x76, 0xf9,
+	0x4c, 0x6c, 0xb5, 0xf9, 0x31, 0x04, 0xad, 0x28, 0xd5, 0x63, 0x48, 0xeb, 0x34, 0x3f, 0xaa, 0x32,
+	0x79, 0xb2, 0xb1, 0xc9, 0x13, 0x00, 0xd1, 0x7d, 0xb9, 0xf7, 0x70, 0xf6, 0x7f, 0x34, 0x01, 0x70,
+	0x11, 0x32, 0xc1, 0x94, 0x72, 0x69, 0x41, 0xf4, 0x3b, 0x41, 0x42, 0x14, 0xbd, 0x5c, 0xff, 0xf7,
+	0x69, 0x98, 0xe3, 0x1b, 0xfc, 0x39, 0xa5, 0x0d, 0xcf, 0xa9, 0xa9, 0xd1, 0x73, 0xea, 0x09, 0x24,
+	0x64, 0xea, 0xca, 0x8e, 0xb6, 0x2a, 0xf7, 0x05, 0x8d, 0x3d, 0x42, 0xd4, 0xbd, 0x74, 0xa0, 0x08,
+	0x2a, 0xfd, 0xcd, 0xdf, 0xd9, 0x44, 0xbb, 0x8e, 0x34, 0x11, 0x5f, 0xec, 0xe0, 0xcd, 0x3a, 0x2c,
+	0xf1, 0xa8, 0x3d, 0x36, 0xed, 0x0b, 0xdd, 0x7c, 0x4e, 0x1c, 0xba, 0x08, 0x9d, 0x40, 0xe2, 0x31,
+	0xf1, 0xc4, 0xb7, 0x5c, 0x2d, 0xf2, 0x53, 0xb5, 0x28, 0x0f, 0xdc, 0xe2, 0x29, 0x3d, 0x8d, 0x0b,
+	0x8b, 0xc1, 0xb8, 0xe3, 0xcc, 0xd7, 0xff, 0xfc, 0xf7, 0x9b, 0xa9, 0x04, 0x9a, 0x67, 0xc7, 0x6f,
+	0xe7, 0x3e, 0xea, 0xc2, 0xd2, 0xb9, 0xe1, 0x7a, 0xe1, 0x1c, 0x8a, 0xc3, 0x5b, 0x53, 0x7f, 0x47,
+	0x17, 0xdf, 0xff, 0xc3, 0x7f, 0xdf, 0x6e, 0xcd, 0x8b, 0xcc, 0x63, 0xcf, 0x88, 0x3f, 0x33, 0xc2,
+	0x25, 0x94, 0x13, 0x84, 0xa5, 0xfe, 0xc7, 0xfd, 0x0c, 0x72, 0x3d, 0x07, 0x7a, 0x0d, 0x11, 0x24,
+	0xc1, 0xd9, 0x49, 0x21, 0x26, 0x69, 0xf0, 0x3b, 0x0c, 0x33, 0x8f, 0x56, 0x23, 0x98, 0xa5, 0xaf,
+	0x8c, 0xfa, 0x6f, 0xd0, 0x57, 0x80, 0xa8, 0x4f, 0xe7, 0xc1, 0x0f, 0x19, 0xe7, 0xd2, 0xaa, 0x32,
+	0x25, 0x5c, 0xfc, 0x01, 0xf5, 0x22, 0x17, 0x49, 0x24, 0xc6, 0xbd, 0x8e, 0xd6, 0x24, 0x77, 0x68,
+	0x1a, 0xbd, 0x84, 0xec, 0x63, 0x12, 0xe4, 0x0e, 0x38, 0xa5, 0xce, 0x40, 0xfc, 0x2e, 0xc3, 0x7d,
+	0x07, 0x6d, 0xc6, 0xe0, 0x72, 0xcf, 0x1c, 0x58, 0x8d, 0x78, 0x56, 0xb6, 0x1d, 0xcf, 0x0d, 0x50,
+	0x2c, 0x87, 0x28, 0xd8, 0x0a, 0xfc, 0x40, 0x7c, 0xa1, 0x16, 0x7d, 0x63, 0x6c, 0xef, 0x22, 0x3c,
+	0x88, 0xad, 0xc4, 0x56, 0xa2, 0x5f, 0x2b, 0x38, 0x1f, 0x99, 0xf6, 0x17, 0x41, 0x4e, 0x54, 0xf4,
+	0xdf, 0xa4, 0xd8, 0x3c, 0x3e, 0x12, 0x8c, 0x74, 0x34, 0x9a, 0x13, 0xc3, 0xd8, 0xd9, 0x2e, 0xf4,
+	0x3b, 0x0d, 0x36, 0x3f, 0x69, 0xd5, 0x75, 0x8f, 0x44, 0x0c, 0x78, 0xa1, 0x5f, 0x98, 0x04, 0x6d,
+	0x46, 0x88, 0xd9, 0x38, 0xdf, 0x53, 0x88, 0xf9, 0xe8, 0x78, 0x9f, 0x99, 0xf0, 0x1e, 0x1e, 0xc1,
+	0x84, 0x87, 0xda, 0x1e, 0xfa, 0xa3, 0x06, 0x1b, 0xca, 0x20, 0x88, 0x8e, 0xee, 0x8f, 0xc4, 0x5a,
+	0xc4, 0x20, 0xbe, 0x08, 0xff, 0x94, 0x86, 0x20, 0x0d, 0x49, 0x36, 0xc5, 0xfb, 0x42, 0x24, 0x28,
+	0x7b, 0x68, 0x77, 0xa8, 0x45, 0x62, 0x2f, 0x7a, 0xa3, 0xc1, 0x4e, 0x4c, 0x68, 0x18, 0x23, 0x8f,
+	0xcf, 0x8e, 0xda, 0x9c, 0x51, 0x82, 0x74, 0xc8, 0x4c, 0xda, 0xc7, 0x23, 0x9b, 0x44, 0x43, 0xf5,
+	0x0a, 0x92, 0x34, 0x52, 0xc3, 0xaa, 0x2e, 0x13, 0x6c, 0x85, 0x2e, 0xbe, 0x4d, 0x63, 0x91, 0xe8,
+	0x35, 0x5b, 0x46, 0x9d, 0x43, 0x19, 0x49, 0x2d, 0xcb, 0xeb, 0x94, 0x75, 0x3d, 0x45, 0x5d, 0x85,
+	0xda, 0x32, 0xde, 0x64, 0x08, 0xab, 0x68, 0x39, 0x84, 0xc0, 0x0b, 0xe9, 0x27, 0x90, 0x3a, 0x76,
+	0x88, 0xee, 0x11, 0x81, 0x14, 0xda, 0x1d, 0x41, 0x2b, 0x30, 0xb4, 0x65, 0x1c, 0xb6, 0x87, 0x7a,
+	0xfc, 0x19, 0xa4, 0x4e, 0x2d, 0x1a, 0x4e, 0x85, 0x55, 0x71, 0xa1, 0xbd, 0xc5, 0xf0, 0xb6, 0xf0,
+	0x86, 0xca, 0xba, 0x12, 0x61, 0x70, 0xe8, 0xe7, 0x90, 0x3e, 0x31, 0xdc, 0x31, 0x91, 0x45, 0x23,
+	0xc1, 0x9b, 0x4a, 0xe4, 0x3a, 0xc7, 0xa3, 0x36, 0x57, 0xc8, 0x85, 0x6d, 0x7b, 0xd7, 0x66, 0xb3,
+	0xc3, 0xe0, 0x28, 0xf0, 0x09, 0x31, 0x89, 0x37, 0x41, 0x30, 0xf6, 0xd4, 0xc0, 0x75, 0x06, 0x87,
+	0x7e, 0x09, 0x99, 0x7e, 0x5e, 0x45, 0x7b, 0x5e, 0x5a, 0x3e, 0xf3, 0x66, 0x57, 0x8c, 0x34, 0xbb,
+	0x4d, 0x54, 0x50, 0xc2, 0xf3, 0x26, 0xf7, 0x8a, 0x1f, 0x83, 0x02, 0xbd, 0x79, 0x6c, 0x5b, 0xaf,
+	0x8d, 0x46, 0x90, 0x21, 0xd7, 0x63, 0x90, 0xd3, 0xf8, 0x3d, 0x86, 0xbc, 0x83, 0x6e, 0xaa, 0x91,
+	0x9b, 0xd5, 0x9a, 0xc0, 0xb1, 0x60, 0x85, 0xd7, 0x5a, 0x98, 0x20, 0x0a, 0x1a, 0x1b, 0xa5, 0x3d,
+	0xde, 0x35, 0xf1, 0x30, 0x32, 0x9a, 0x92, 0x4d, 0x7f, 0xb0, 0x46, 0x6b, 0xd6, 0x0f, 0x07, 0x36,
+	0xeb, 0xb8, 0xe8, 0xf5, 0x9a, 0xf4, 0x72, 0x90, 0x6f, 0x9c, 0xbe, 0xf8, 0x68, 0x84, 0xbe, 0x88,
+	0xd1, 0x76, 0x2c, 0xbf, 0xec, 0x87, 0xb6, 0xdf, 0x69, 0x7e, 0x5d, 0x8f, 0xeb, 0x3e, 0x4b, 0xd1,
+	0x2b, 0xbf, 0x8b, 0x4b, 0x94, 0x75, 0x31, 0x28, 0x11, 0xd4, 0x4d, 0x84, 0xcf, 0xa1, 0x0a, 0xa4,
+	0x7b, 0xbd, 0x88, 0x42, 0x84, 0x62, 0x1c, 0xa1, 0xc0, 0x3b, 0x0c, 0x6e, 0x03, 0xad, 0xab, 0xe0,
+	0x78, 0x63, 0x72, 0x21, 0xdb, 0x77, 0x42, 0x44, 0x31, 0xce, 0x8b, 0x65, 0xc5, 0x75, 0x52, 0xdc,
+	0xc4, 0x32, 0xa1, 0x0b, 0x28, 0x23, 0x5e, 0x43, 0x2b, 0x21, 0x62, 0x11, 0xb9, 0x4f, 0x60, 0xb1,
+	0xe7, 0x08, 0xff, 0xe9, 0xe1, 0xf7, 0x44, 0x75, 0x6b, 0xc5, 0x58, 0x9d, 0x16, 0x02, 0x91, 0xfb,
+	0x52, 0x85, 0x1c, 0x6f, 0xb2, 0x7e, 0x25, 0xae, 0x52, 0x39, 0x05, 0xd5, 0x20, 0xde, 0x66, 0x14,
+	0x05, 0xdc, 0x33, 0x3a, 0x20, 0x9a, 0x68, 0x9a, 0x73, 0xbb, 0xfd, 0xe8, 0x4a, 0xbb, 0xfd, 0xa0,
+	0x11, 0xbb, 0x03, 0xa0, 0xdc, 0xee, 0x3a, 0xe4, 0x78, 0xb5, 0x4e, 0x66, 0xf7, 0x6d, 0x46, 0x71,
+	0xb3, 0x30, 0x80, 0x82, 0x1a, 0xff, 0x12, 0x72, 0xbc, 0x53, 0xc6, 0xd9, 0x1f, 0xd7, 0x08, 0x84,
+	0x0b, 0x7b, 0x83, 0x5c, 0xa8, 0xf2, 0x34, 0x0a, 0xfc, 0xad, 0x18, 0x9a, 0x46, 0xfe, 0xd5, 0x78,
+	0x2b, 0x9c, 0x32, 0x01, 0x96, 0x83, 0xbf, 0x6e, 0x02, 0xe2, 0xd7, 0xf2, 0x73, 0xbb, 0xd6, 0x17,
+	0x25, 0xbf, 0x50, 0xdd, 0xe9, 0x87, 0xde, 0xbc, 0x43, 0xf7, 0xfb, 0x15, 0x46, 0x9d, 0x41, 0xe9,
+	0xfe, 0xbd, 0xa3, 0xa6, 0x9b, 0xa8, 0xce, 0x8e, 0x7e, 0xfe, 0x5f, 0x62, 0xb8, 0x33, 0xfe, 0xff,
+	0x17, 0xf8, 0x2e, 0xad, 0x89, 0x05, 0xf9, 0xab, 0x23, 0x5c, 0xd4, 0x0c, 0xbe, 0x24, 0xfe, 0x6d,
+	0x34, 0x20, 0xc5, 0x22, 0x27, 0xa5, 0x64, 0x1c, 0x51, 0x36, 0x24, 0x44, 0x5d, 0xbc, 0x4f, 0x49,
+	0xa0, 0xaf, 0x58, 0xc3, 0x2a, 0x85, 0xd3, 0xf4, 0x34, 0xea, 0x6f, 0xb5, 0x6b, 0x91, 0x29, 0x3f,
+	0x18, 0x20, 0x53, 0x6e, 0xa2, 0xad, 0x20, 0x79, 0x58, 0xac, 0xe8, 0x93, 0x89, 0x95, 0xbd, 0xe8,
+	0x05, 0x5e, 0x81, 0xce, 0x33, 0xf1, 0xcb, 0x2b, 0x48, 0x96, 0x8f, 0x22, 0xa7, 0x78, 0xe0, 0x7e,
+	0x1c, 0xc7, 0x29, 0xce, 0xf4, 0xaf, 0xb5, 0x89, 0x95, 0xcb, 0x93, 0x81, 0x87, 0xe1, 0x68, 0x46,
+	0xf0, 0xa3, 0xf1, 0xf7, 0xdf, 0x8e, 0x7e, 0x51, 0x5c, 0xcd, 0x07, 0x1b, 0x42, 0x3b, 0xce, 0x9f,
+	0xae, 0x43, 0xc5, 0xbc, 0x18, 0xe1, 0xb4, 0xbe, 0x87, 0x8a, 0x23, 0xda, 0x25, 0x4f, 0xa0, 0x3f,
+	0x7f, 0xdb, 0x5a, 0xe6, 0x43, 0x66, 0xd8, 0x21, 0x1e, 0xd3, 0x30, 0x1a, 0xb6, 0xda, 0x84, 0x8a,
+	0xe6, 0x7d, 0x85, 0xa2, 0xf1, 0xf5, 0x53, 0x6e, 0x80, 0xac, 0xc4, 0xa7, 0xa3, 0xea, 0x9a, 0xc8,
+	0x01, 0x16, 0xc0, 0xe1, 0x35, 0x57, 0x1e, 0x53, 0xdd, 0x44, 0x4e, 0xda, 0x00, 0x26, 0x57, 0x75,
+	0xe3, 0x6b, 0x9c, 0xbb, 0x0c, 0xf5, 0x16, 0xde, 0x89, 0xb7, 0x54, 0x2a, 0x9d, 0xea, 0x24, 0x4a,
+	0x47, 0x5e, 0x88, 0xf1, 0x00, 0x7c, 0xa9, 0x77, 0x5e, 0x4d, 0xa0, 0x77, 0x46, 0xb1, 0x5f, 0xa8,
+	0x9e, 0x57, 0x13, 0xa8, 0x1e, 0x01, 0xbf, 0x37, 0x08, 0x5e, 0x68, 0x9f, 0x8b, 0xb1, 0xb4, 0xcf,
+	0xf7, 0x22, 0x5d, 0xd3, 0x77, 0x7b, 0x56, 0x90, 0xf0, 0x6e, 0x59, 0x9b, 0x48, 0x01, 0x89, 0xff,
+	0x28, 0xe8, 0xf6, 0x20, 0xfc, 0xbe, 0x0e, 0xf2, 0xae, 0x41, 0x07, 0xdd, 0xe3, 0x3d, 0x18, 0x8f,
+	0x46, 0x49, 0x93, 0xd7, 0x1d, 0x5f, 0x0d, 0x7d, 0x3c, 0xf0, 0x00, 0x18, 0x1c, 0xcf, 0x5e, 0xe3,
+	0xbf, 0x82, 0x26, 0x3a, 0x1f, 0xa1, 0xcb, 0xee, 0xa2, 0x3b, 0x43, 0xac, 0x90, 0xdd, 0xb5, 0x7d,
+	0x45, 0x65, 0xf4, 0x41, 0x9c, 0x32, 0x8a, 0x69, 0x43, 0x42, 0x1f, 0xfd, 0x6c, 0x5c, 0x7d, 0x14,
+	0xd1, 0xd3, 0x51, 0x50, 0xde, 0xe0, 0xba, 0x57, 0x56, 0x49, 0xdf, 0x8f, 0x55, 0x49, 0x5b, 0x68,
+	0x43, 0x49, 0x2f, 0x62, 0xf9, 0x72, 0x7c, 0xad, 0xb4, 0x3b, 0x28, 0x69, 0x02, 0x8a, 0xe9, 0x11,
+	0x64, 0x9f, 0x7b, 0x0e, 0xd1, 0x9b, 0x65, 0xbd, 0xf6, 0x39, 0xf1, 0xdc, 0x67, 0x6d, 0x0f, 0xad,
+	0x06, 0x72, 0x84, 0x4f, 0x3c, 0x6b, 0x7b, 0xb1, 0xf5, 0x71, 0x63, 0x57, 0x43, 0xa7, 0x90, 0xad,
+	0x90, 0x1a, 0x31, 0x3a, 0x44, 0x00, 0x9d, 0x59, 0xb1, 0xf1, 0x59, 0x51, 0xe0, 0x9f, 0x59, 0xf8,
+	0xc6, 0x3d, 0x0d, 0x3d, 0x85, 0x25, 0x01, 0x73, 0x7c, 0xa9, 0x5b, 0x0d, 0x72, 0xda, 0x21, 0x96,
+	0x17, 0x1f, 0xe9, 0x7c, 0x00, 0xc9, 0xb7, 0x85, 0x81, 0x91, 0xab, 0xa9, 0xc1, 0x3b, 0x2c, 0x88,
+	0xdb, 0x38, 0xf4, 0x71, 0x22, 0x9a, 0xf0, 0xe5, 0xf8, 0x9a, 0x30, 0xe6, 0xfb, 0x28, 0x64, 0xd5,
+	0xaf, 0xae, 0xa6, 0x0c, 0xdf, 0x67, 0x44, 0xb7, 0x0b, 0x43, 0x89, 0xa8, 0x23, 0xfa, 0xa4, 0xfa,
+	0x50, 0xb8, 0xb3, 0x37, 0xdc, 0x1d, 0x72, 0x65, 0x95, 0x78, 0x4b, 0x5d, 0x32, 0x01, 0xae, 0xa3,
+	0x8f, 0x60, 0xc9, 0x76, 0x1a, 0x2c, 0x39, 0x6a, 0xb6, 0x53, 0x17, 0x40, 0x47, 0x29, 0x2e, 0xfb,
+	0xca, 0x94, 0xc7, 0xfd, 0xdb, 0xd4, 0xea, 0x33, 0x39, 0xff, 0xa9, 0x5f, 0x15, 0x96, 0x67, 0xca,
+	0xb3, 0xe5, 0xb9, 0xf2, 0x7c, 0x79, 0xa1, 0x9c, 0x28, 0xc3, 0xc5, 0x1c, 0x33, 0xeb, 0xf0, 0xff,
+	0x01, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x33, 0xad, 0xd7, 0x94, 0x22, 0x00, 0x00,
+}
diff --git a/netopeer/voltha-grpc-client/voltha/yang_options/yang_options.pb.go b/netopeer/voltha-grpc-client/voltha/yang_options/yang_options.pb.go
new file mode 100644
index 0000000..4876a98
--- /dev/null
+++ b/netopeer/voltha-grpc-client/voltha/yang_options/yang_options.pb.go
@@ -0,0 +1,193 @@
+// Code generated by protoc-gen-go.
+// source: yang_options.proto
+// DO NOT EDIT!
+
+/*
+Package voltha is a generated protocol buffer package.
+
+It is generated from these files:
+	yang_options.proto
+
+It has these top-level messages:
+	InlineNode
+	RpcReturnDef
+*/
+package yang_options
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor"
+
+// 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.ProtoPackageIsVersion2 // 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 fileDescriptor0, []int{0} }
+
+type InlineNode struct {
+	Id   string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
+	Type string `protobuf:"bytes,2,opt,name=type" json:"type,omitempty"`
+}
+
+func (m *InlineNode) Reset()                    { *m = InlineNode{} }
+func (m *InlineNode) String() string            { return proto.CompactTextString(m) }
+func (*InlineNode) ProtoMessage()               {}
+func (*InlineNode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+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" 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" json:"list_items_name,omitempty"`
+}
+
+func (m *RpcReturnDef) Reset()                    { *m = RpcReturnDef{} }
+func (m *RpcReturnDef) String() string            { return proto.CompactTextString(m) }
+func (*RpcReturnDef) ProtoMessage()               {}
+func (*RpcReturnDef) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+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:  (*google_protobuf.MessageOptions)(nil),
+	ExtensionType: (*MessageParserOption)(nil),
+	Field:         7761774,
+	Name:          "voltha.yang_child_rule",
+	Tag:           "varint,7761774,opt,name=yang_child_rule,json=yangChildRule,enum=voltha.MessageParserOption",
+	Filename:      "yang_options.proto",
+}
+
+var E_YangMessageRule = &proto.ExtensionDesc{
+	ExtendedType:  (*google_protobuf.MessageOptions)(nil),
+	ExtensionType: (*MessageParserOption)(nil),
+	Field:         7761775,
+	Name:          "voltha.yang_message_rule",
+	Tag:           "varint,7761775,opt,name=yang_message_rule,json=yangMessageRule,enum=voltha.MessageParserOption",
+	Filename:      "yang_options.proto",
+}
+
+var E_YangInlineNode = &proto.ExtensionDesc{
+	ExtendedType:  (*google_protobuf.FieldOptions)(nil),
+	ExtensionType: (*InlineNode)(nil),
+	Field:         7761776,
+	Name:          "voltha.yang_inline_node",
+	Tag:           "bytes,7761776,opt,name=yang_inline_node,json=yangInlineNode",
+	Filename:      "yang_options.proto",
+}
+
+var E_YangXmlTag = &proto.ExtensionDesc{
+	ExtendedType:  (*google_protobuf.MethodOptions)(nil),
+	ExtensionType: (*RpcReturnDef)(nil),
+	Field:         7761777,
+	Name:          "voltha.yang_xml_tag",
+	Tag:           "bytes,7761777,opt,name=yang_xml_tag,json=yangXmlTag",
+	Filename:      "yang_options.proto",
+}
+
+func init() {
+	proto.RegisterType((*InlineNode)(nil), "voltha.InlineNode")
+	proto.RegisterType((*RpcReturnDef)(nil), "voltha.RpcReturnDef")
+	proto.RegisterEnum("voltha.MessageParserOption", MessageParserOption_name, MessageParserOption_value)
+	proto.RegisterExtension(E_YangChildRule)
+	proto.RegisterExtension(E_YangMessageRule)
+	proto.RegisterExtension(E_YangInlineNode)
+	proto.RegisterExtension(E_YangXmlTag)
+}
+
+func init() { proto.RegisterFile("yang_options.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 416 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcf, 0x8e, 0xd3, 0x30,
+	0x10, 0x87, 0x49, 0x41, 0x45, 0x0c, 0xbb, 0xdd, 0x62, 0x56, 0x22, 0x02, 0x01, 0x55, 0x0f, 0xab,
+	0x15, 0x87, 0x2c, 0x5a, 0x6e, 0xbd, 0x85, 0x6e, 0x28, 0x91, 0xda, 0xa4, 0xb2, 0x42, 0x81, 0x0b,
+	0x96, 0xdb, 0xb8, 0xa9, 0x85, 0x13, 0x47, 0xb1, 0x83, 0xda, 0x47, 0xe5, 0xc2, 0x23, 0xf0, 0xe7,
+	0x0d, 0x50, 0x9c, 0x84, 0x22, 0x6d, 0x0f, 0xbd, 0x25, 0x13, 0xe7, 0xfb, 0x3c, 0xf3, 0x1b, 0x40,
+	0x3b, 0x9a, 0x25, 0x44, 0xe6, 0x9a, 0xcb, 0x4c, 0x39, 0x79, 0x21, 0xb5, 0x44, 0xdd, 0x6f, 0x52,
+	0xe8, 0x0d, 0x7d, 0x3a, 0x48, 0xa4, 0x4c, 0x04, 0xbb, 0x32, 0xd5, 0x65, 0xb9, 0xbe, 0x8a, 0x99,
+	0x5a, 0x15, 0x3c, 0xd7, 0xb2, 0xa8, 0x4f, 0x0e, 0x5f, 0x03, 0xf8, 0x99, 0xe0, 0x19, 0x0b, 0x64,
+	0xcc, 0x50, 0x0f, 0x3a, 0x3c, 0xb6, 0xad, 0x81, 0x75, 0xf9, 0x00, 0x77, 0x78, 0x8c, 0x10, 0xdc,
+	0xd3, 0xbb, 0x9c, 0xd9, 0x1d, 0x53, 0x31, 0xcf, 0xc3, 0x10, 0x4e, 0x70, 0xbe, 0xc2, 0x4c, 0x97,
+	0x45, 0x76, 0xc3, 0xd6, 0xe8, 0x09, 0xdc, 0xdf, 0xa6, 0x82, 0x68, 0x9a, 0x34, 0x3f, 0x76, 0xb7,
+	0xa9, 0x88, 0x68, 0x82, 0x2e, 0xe0, 0x4c, 0x70, 0xa5, 0x09, 0xd7, 0x2c, 0x55, 0x24, 0xa3, 0x69,
+	0xcb, 0x39, 0xad, 0xca, 0x7e, 0x55, 0x0d, 0x68, 0xca, 0x5e, 0x7d, 0x84, 0xc7, 0x33, 0xa6, 0x14,
+	0x4d, 0xd8, 0x9c, 0x16, 0x8a, 0x15, 0xa1, 0x69, 0x05, 0xd9, 0x70, 0x3e, 0x0b, 0x17, 0x1e, 0x89,
+	0x42, 0x32, 0x77, 0xb1, 0x17, 0x44, 0x64, 0xea, 0x2d, 0xbc, 0x69, 0xff, 0x0e, 0xba, 0x80, 0xe1,
+	0x18, 0x7b, 0x6e, 0xe4, 0x91, 0xb7, 0x61, 0xf4, 0x9e, 0x4c, 0x70, 0xf8, 0x61, 0xee, 0x07, 0x13,
+	0xe2, 0x06, 0x37, 0x64, 0x1c, 0x06, 0x91, 0xeb, 0x07, 0x1e, 0xee, 0x5b, 0xa3, 0x04, 0xce, 0xcc,
+	0x6c, 0x56, 0x1b, 0x2e, 0x62, 0x52, 0x94, 0x82, 0xa1, 0x97, 0x4e, 0x3d, 0x11, 0xa7, 0x9d, 0x88,
+	0xd3, 0xa8, 0x6b, 0xa9, 0xb2, 0x7f, 0xfe, 0xf8, 0x7e, 0x77, 0x60, 0x5d, 0xf6, 0xae, 0x9f, 0x39,
+	0xf5, 0x0c, 0x9d, 0x03, 0x77, 0xc3, 0xa7, 0x15, 0x77, 0x5c, 0x61, 0x71, 0x29, 0xd8, 0xe8, 0x2b,
+	0x3c, 0x32, 0xa2, 0xb4, 0x3e, 0x7a, 0xa4, 0xea, 0xd7, 0x51, 0x2a, 0xd3, 0x42, 0xf3, 0xc1, 0xc8,
+	0xbe, 0x40, 0xdf, 0xc8, 0xb8, 0x89, 0x8d, 0x64, 0x55, 0x6e, 0xcf, 0x6f, 0xb9, 0xde, 0x71, 0x26,
+	0xe2, 0xd6, 0xf4, 0xbb, 0x36, 0x3d, 0xbc, 0x46, 0xad, 0x69, 0x9f, 0x39, 0xee, 0x55, 0xb4, 0xfd,
+	0xfb, 0xe8, 0x33, 0x9c, 0x18, 0x7e, 0x13, 0x2a, 0x7a, 0x71, 0xa0, 0x0f, 0xbd, 0x91, 0xff, 0xe0,
+	0x7f, 0x5a, 0xf8, 0x79, 0x0b, 0xff, 0x7f, 0x3d, 0x30, 0x54, 0xb0, 0x4f, 0x66, 0x23, 0x96, 0x5d,
+	0x83, 0x78, 0xf3, 0x37, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x8b, 0xcb, 0x68, 0xb3, 0x02, 0x00, 0x00,
+}