All olt-oftest flow and group commands propagate

Change-Id: Iddde6ddddd5a0ca5100ee95d55fedd247ab7f263
diff --git a/ofagent/converter.py b/ofagent/converter.py
index 772e5d7..f18d07e 100644
--- a/ofagent/converter.py
+++ b/ofagent/converter.py
@@ -57,7 +57,6 @@
 
 def ofp_flow_stats_to_loxi_flow_stats(pb):
     kw = pb2dict(pb)
-    print 'QQQQQQQQQQQ', kw
 
     def make_loxi_match(match):
         assert match['type'] == pb2.OFPMT_OXM
@@ -75,7 +74,6 @@
         return of13.match_v3(oxm_list=loxi_match_fields)
 
     def make_loxi_action(a):
-        print 'AAAAAAAAAA', a
         type = a.get('type', 0)
         if type == pb2.OFPAT_OUTPUT:
             output = a['output']
@@ -85,7 +83,6 @@
                 'Action decoder for action OFPAT_* %d' % type)
 
     def make_loxi_instruction(inst):
-        print 'IIIIIIIIIIIIIIII', inst
         type = inst['type']
         if type == pb2.OFPIT_APPLY_ACTIONS:
             return of13.instruction.apply_actions(
@@ -98,32 +95,50 @@
     kw['instructions'] = [make_loxi_instruction(i) for i in kw['instructions']]
     return of13.flow_stats_entry(**kw)
 
+
 to_loxi_converters = {
     pb2.ofp_port: ofp_port_to_loxi_port_desc,
     pb2.ofp_flow_stats: ofp_flow_stats_to_loxi_flow_stats
 }
 
-def loxi_flow_mod_to_ofp_flow_mod(loxi_flow_mod):
-    return pb2.ofp_flow_mod(
-        cookie=loxi_flow_mod.cookie,
-        cookie_mask=loxi_flow_mod.cookie_mask,
-        table_id=loxi_flow_mod.table_id,
-        command=loxi_flow_mod._command,
-        idle_timeout=loxi_flow_mod.idle_timeout,
-        hard_timeout=loxi_flow_mod.hard_timeout,
-        priority=loxi_flow_mod.priority,
-        buffer_id=loxi_flow_mod.buffer_id,
-        out_port=loxi_flow_mod.out_port,
-        out_group=loxi_flow_mod.out_group,
-        flags=loxi_flow_mod.flags,
-        match=to_grpc(loxi_flow_mod.match),
-        instructions=[to_grpc(i) for i in loxi_flow_mod.instructions]
-    )
 
-def loxi_match_v3_to_ofp_match(loxi_match):
+def loxi_flow_mod_to_ofp_flow_mod(lo):
+    return pb2.ofp_flow_mod(
+        cookie=lo.cookie,
+        cookie_mask=lo.cookie_mask,
+        table_id=lo.table_id,
+        command=lo._command,
+        idle_timeout=lo.idle_timeout,
+        hard_timeout=lo.hard_timeout,
+        priority=lo.priority,
+        buffer_id=lo.buffer_id,
+        out_port=lo.out_port,
+        out_group=lo.out_group,
+        flags=lo.flags,
+        match=to_grpc(lo.match),
+        instructions=[to_grpc(i) for i in lo.instructions])
+
+
+def loxi_group_mod_to_ofp_group_mod(lo):
+    return pb2.ofp_group_mod(
+        command=lo.command,
+        type=lo.type,
+        group_id=lo.group_id,
+        buckets=[to_grpc(b) for b in lo.buckets])
+
+
+def loxi_match_v3_to_ofp_match(lo):
     return pb2.ofp_match(
         type=pb2.OFPMT_OXM,
-        oxm_fields=[to_grpc(f) for f in loxi_match.oxm_list]
+        oxm_fields=[to_grpc(f) for f in lo.oxm_list])
+
+
+def loxi_bucket_to_ofp_bucket(lo):
+    return pb2.ofp_bucket(
+        weight=lo.weight,
+        watch_port=lo.watch_port,
+        watch_group=lo.watch_group,
+        actions=[to_grpc(a) for a in lo.actions]
     )
 
 def loxi_oxm_eth_type_to_ofp_oxm(lo):
@@ -131,31 +146,118 @@
         oxm_class=pb2.OFPXMC_OPENFLOW_BASIC,
         ofb_field=pb2.ofp_oxm_ofb_field(
             type=pb2.OFPXMT_OFB_ETH_TYPE,
-            eth_type=lo.value
-        )
-    )
+            eth_type=lo.value))
+
+
+def loxi_oxm_in_port_to_ofp_oxm(lo):
+    return pb2.ofp_oxm_field(
+        oxm_class=pb2.OFPXMC_OPENFLOW_BASIC,
+        ofb_field=pb2.ofp_oxm_ofb_field(
+            type=pb2.OFPXMT_OFB_IN_PORT,
+            port=lo.value))
+
+
+def loxi_oxm_ip_proto_to_ofp_oxm(lo):
+    return pb2.ofp_oxm_field(
+        oxm_class=pb2.OFPXMC_OPENFLOW_BASIC,
+        ofb_field=pb2.ofp_oxm_ofb_field(
+            type=pb2.OFPXMT_OFB_IP_PROTO,
+            ip_proto=lo.value))
+
+
+def loxi_oxm_vlan_vid_to_ofp_oxm(lo):
+    return pb2.ofp_oxm_field(
+        oxm_class=pb2.OFPXMC_OPENFLOW_BASIC,
+        ofb_field=pb2.ofp_oxm_ofb_field(
+            type=pb2.OFPXMT_OFB_VLAN_VID,
+            vlan_vid=lo.value))
+
+
+def loxi_oxm_vlan_pcp_to_ofp_oxm(lo):
+    return pb2.ofp_oxm_field(
+        oxm_class=pb2.OFPXMC_OPENFLOW_BASIC,
+        ofb_field=pb2.ofp_oxm_ofb_field(
+            type=pb2.OFPXMT_OFB_VLAN_PCP,
+            vlan_pcp=lo.value))
+
+
+def loxi_oxm_ipv4_dst_to_ofp_oxm(lo):
+    return pb2.ofp_oxm_field(
+        oxm_class=pb2.OFPXMC_OPENFLOW_BASIC,
+        ofb_field=pb2.ofp_oxm_ofb_field(
+            type=pb2.OFPXMT_OFB_IPV4_DST,
+            ipv4_dst=lo.value))
+
 
 def loxi_apply_actions_to_ofp_instruction(lo):
     return pb2.ofp_instruction(
         type=pb2.OFPIT_APPLY_ACTIONS,
         actions=pb2.ofp_instruction_actions(
-            actions=[to_grpc(a) for a in lo.actions]
-        )
-    )
+            actions=[to_grpc(a) for a in lo.actions]))
+
+
+def loxi_goto_table_to_ofp_instruction(lo):
+    return pb2.ofp_instruction(
+        type=pb2.OFPIT_GOTO_TABLE,
+        goto_table=pb2.ofp_instruction_goto_table(table_id=lo.table_id))
+
 
 def loxi_output_action_to_ofp_action(lo):
     return pb2.ofp_action(
         type=pb2.OFPAT_OUTPUT,
-        output=pb2.ofp_action_output(
-            port=lo.port,
-            max_len=lo.max_len
-        )
-    )
+        output=pb2.ofp_action_output(port=lo.port, max_len=lo.max_len))
+
+
+def loxi_group_action_to_ofp_action(lo):
+    return pb2.ofp_action(
+        type=pb2.OFPAT_GROUP,
+        group=pb2.ofp_action_group(group_id=lo.group_id))
+
+
+def loxi_set_field_action_to_ofp_action(lo):
+    return pb2.ofp_action(
+        type=pb2.OFPAT_SET_FIELD,
+        set_field=pb2.ofp_action_set_field(field=to_grpc(lo.field)))
+
+
+def loxi_pop_vlan_action_to_ofp_action(lo):
+    return pb2.ofp_action(type=pb2.OFPAT_POP_VLAN)
+
+
+def loxi_push_vlan_action_to_ofp_action(lo):
+    return pb2.ofp_action(
+        type=pb2.OFPAT_PUSH_VLAN,
+        push=pb2.ofp_action_push(ethertype=lo.ethertype))
+
 
 to_grpc_converters = {
+
     of13.message.flow_add: loxi_flow_mod_to_ofp_flow_mod,
+    of13.message.flow_delete: loxi_flow_mod_to_ofp_flow_mod,
+    of13.message.flow_delete_strict: loxi_flow_mod_to_ofp_flow_mod,
+    of13.message.flow_modify: loxi_flow_mod_to_ofp_flow_mod,
+    of13.message.flow_modify_strict: loxi_flow_mod_to_ofp_flow_mod,
+
+    of13.message.group_add: loxi_group_mod_to_ofp_group_mod,
+    of13.message.group_delete: loxi_group_mod_to_ofp_group_mod,
+    of13.message.group_modify: loxi_group_mod_to_ofp_group_mod,
+
     of13.common.match_v3: loxi_match_v3_to_ofp_match,
+    of13.common.bucket: loxi_bucket_to_ofp_bucket,
+
     of13.oxm.eth_type: loxi_oxm_eth_type_to_ofp_oxm,
+    of13.oxm.in_port: loxi_oxm_in_port_to_ofp_oxm,
+    of13.oxm.ip_proto: loxi_oxm_ip_proto_to_ofp_oxm,
+    of13.oxm.vlan_vid: loxi_oxm_vlan_vid_to_ofp_oxm,
+    of13.oxm.vlan_pcp: loxi_oxm_vlan_pcp_to_ofp_oxm,
+    of13.oxm.ipv4_dst: loxi_oxm_ipv4_dst_to_ofp_oxm,
+
     of13.instruction.apply_actions: loxi_apply_actions_to_ofp_instruction,
-    of13.action.output: loxi_output_action_to_ofp_action
+    of13.instruction.goto_table: loxi_goto_table_to_ofp_instruction,
+
+    of13.action.output: loxi_output_action_to_ofp_action,
+    of13.action.group: loxi_group_action_to_ofp_action,
+    of13.action.set_field: loxi_set_field_action_to_ofp_action,
+    of13.action.pop_vlan: loxi_pop_vlan_action_to_ofp_action,
+    of13.action.push_vlan: loxi_push_vlan_action_to_ofp_action,
 }
diff --git a/ofagent/grpc_client.py b/ofagent/grpc_client.py
index e3a64d1..a17d104 100644
--- a/ofagent/grpc_client.py
+++ b/ofagent/grpc_client.py
@@ -20,7 +20,8 @@
 from twisted.internet import threads
 from twisted.internet.defer import inlineCallbacks, returnValue
 
-from protos.voltha_pb2 import ID, VolthaLogicalLayerStub, FlowTableUpdate
+from protos.voltha_pb2 import ID, VolthaLogicalLayerStub, FlowTableUpdate, \
+    GroupTableUpdate
 
 
 class GrpcClient(object):
@@ -58,9 +59,28 @@
         returnValue(res)
 
     @inlineCallbacks
+    def update_group_table(self, datapath_id, group_mod):
+        device_id = self.device_id_map[datapath_id]
+        req = GroupTableUpdate(
+            id=device_id,
+            group_mod=group_mod
+        )
+        res = yield threads.deferToThread(
+            self.logical_stub.UpdateGroupTable, req)
+        returnValue(res)
+
+    @inlineCallbacks
     def list_flows(self, datapath_id):
         device_id = self.device_id_map[datapath_id]
         req = ID(id=device_id)
         res = yield threads.deferToThread(
             self.logical_stub.ListDeviceFlows, req)
         returnValue(res.items)
+
+    @inlineCallbacks
+    def list_group(self, datapath_id):
+        device_id = self.device_id_map[datapath_id]
+        req = ID(id=device_id)
+        res = yield threads.deferToThread(
+            self.logical_stub.ListDeviceFlowGroups, req)
+        returnValue(res.items)
diff --git a/ofagent/main.py b/ofagent/main.py
index a8bfe7f..0d8c8d4 100755
--- a/ofagent/main.py
+++ b/ofagent/main.py
@@ -16,17 +16,36 @@
 #
 
 """TODO This is a POC placeholder """
+import os
+
 import grpc
+import yaml
 from twisted.internet import reactor
 
 from agent import Agent
+from common.utils.structlog_setup import setup_logging
 from protos import voltha_pb2
 
 from grpc_client import GrpcClient
 
 
+def load_config(path):
+    if path.startswith('.'):
+        dir = os.path.dirname(os.path.abspath(__file__))
+        path = os.path.join(dir, path)
+    path = os.path.abspath(path)
+    with open(path) as fd:
+        config = yaml.load(fd)
+    return config
+
+
 if __name__ == '__main__':
 
+    # Load config and setup logging
+    config = load_config('./ofagent.yml')
+    setup_logging(config.get('logging', {}), '1')
+
+
     # Create grpc channel to Voltha and grab client stub
     channel = grpc.insecure_channel('localhost:50055')
 
diff --git a/ofagent/of_protocol_handler.py b/ofagent/of_protocol_handler.py
index 5d1191a..a74f205 100644
--- a/ofagent/of_protocol_handler.py
+++ b/ofagent/of_protocol_handler.py
@@ -106,9 +106,9 @@
             miss_send_len=ofp.OFPCML_NO_BUFFER
         ))
 
+    @inlineCallbacks
     def handle_group_mod_request(self, req):
-        # TODO do not do anything yet
-        pass
+        yield self.rpc.update_group_table(self.datapath_id, to_grpc(req))
 
     def handle_meter_mod_request(self, req):
         raise NotImplementedError()
@@ -158,10 +158,11 @@
         self.cxn.send(ofp.message.flow_stats_reply(
             xid=req.xid, entries=[to_loxi(f) for f in flow_stats]))
 
+    @inlineCallbacks
     def handle_group_stats_request(self, req):
-        group_stats = []  # TODO
+        group_stats = yield self.rpc.list_groups(self.datapath_id)
         self.cxn.send(ofp.message.group_stats_reply(
-            xid=req.xid, entries=group_stats))
+            xid=req.xid, entries=[to_loxi(g) for g  in group_stats]))
 
     def handle_group_descriptor_request(self, req):
         group_list = []  # TODO
diff --git a/ofagent/ofagent.yml b/ofagent/ofagent.yml
new file mode 100644
index 0000000..2b1d69e
--- /dev/null
+++ b/ofagent/ofagent.yml
@@ -0,0 +1,44 @@
+logging:
+    version: 1
+
+    formatters:
+      brief:
+        format: '%(message)s'
+      default:
+        format: '%(asctime)s.%(msecs)03d %(levelname)-8s %(module)s.%(funcName)s %(message)s'
+        datefmt: '%Y%m%dT%H%M%S'
+      fluent_fmt:
+        '()': fluent.handler.FluentRecordFormatter
+        format:
+          level: '%(levelname)s'
+          hostname: '%(hostname)s'
+          where: '%(module)s.%(funcName)s'
+
+    handlers:
+        console:
+            class : logging.StreamHandler
+            level: DEBUG
+            formatter: default
+            stream: ext://sys.stdout
+        fluent:
+            class: fluent.handler.FluentHandler
+            host: localhost
+            port: 24224
+            tag: voltha.logging
+            formatter: fluent_fmt
+            level: DEBUG
+        null:
+            class: logging.NullHandler
+
+    loggers:
+        amqp:
+            handlers: [null]
+            propagate: False
+        conf:
+            handlers: [null]
+            propagate: False
+        '': # root logger
+            handlers: [console, fluent]
+            level: INFO # this can be bumped up/down by -q and -v command line
+                        # options
+            propagate: False
diff --git a/ofagent/protos/openflow_13_pb2.py b/ofagent/protos/openflow_13_pb2.py
index 4839318..ddc1ad1 100644
--- a/ofagent/protos/openflow_13_pb2.py
+++ b/ofagent/protos/openflow_13_pb2.py
@@ -20,7 +20,7 @@
   name='openflow_13.proto',
   package='openflow_13',
   syntax='proto3',
-  serialized_pb=_b('\n\x11openflow_13.proto\x12\x0bopenflow_13\"O\n\nofp_header\x12\x0f\n\x07version\x18\x01 \x01(\r\x12#\n\x04type\x18\x02 \x01(\x0e\x32\x15.openflow_13.ofp_type\x12\x0b\n\x03xid\x18\x03 \x01(\r\"\x96\x01\n\x15ofp_hello_elem_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_hello_elem_type\x12\x42\n\rversionbitmap\x18\x02 \x01(\x0b\x32).openflow_13.ofp_hello_elem_versionbitmapH\x00\x42\t\n\x07\x65lement\"/\n\x1cofp_hello_elem_versionbitmap\x12\x0f\n\x07\x62itmaps\x18\x02 \x03(\r\"A\n\tofp_hello\x12\x34\n\x08\x65lements\x18\x02 \x03(\x0b\x32\".openflow_13.ofp_hello_elem_header\"9\n\x11ofp_switch_config\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x15\n\rmiss_send_len\x18\x03 \x01(\r\"1\n\rofp_table_mod\x12\x10\n\x08table_id\x18\x02 \x01(\r\x12\x0e\n\x06\x63onfig\x18\x03 \x01(\r\"\xc3\x01\n\x08ofp_port\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x0f\n\x07hw_addr\x18\x02 \x03(\r\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\r\n\x05state\x18\x05 \x01(\r\x12\x0c\n\x04\x63urr\x18\x06 \x01(\r\x12\x12\n\nadvertised\x18\x07 \x01(\r\x12\x11\n\tsupported\x18\x08 \x01(\r\x12\x0c\n\x04peer\x18\t \x01(\r\x12\x12\n\ncurr_speed\x18\n \x01(\r\x12\x11\n\tmax_speed\x18\x0b \x01(\r\"{\n\x13ofp_switch_features\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12\x11\n\tn_buffers\x18\x03 \x01(\r\x12\x10\n\x08n_tables\x18\x04 \x01(\r\x12\x14\n\x0c\x61uxiliary_id\x18\x05 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x06 \x01(\r\"d\n\x0fofp_port_status\x12,\n\x06reason\x18\x02 \x01(\x0e\x32\x1c.openflow_13.ofp_port_reason\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_port\"a\n\x0cofp_port_mod\x12\x0f\n\x07port_no\x18\x02 \x01(\r\x12\x0f\n\x07hw_addr\x18\x03 \x03(\r\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\x0c\n\x04mask\x18\x05 \x01(\r\x12\x11\n\tadvertise\x18\x06 \x01(\r\"f\n\tofp_match\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_match_type\x12.\n\noxm_fields\x18\x02 \x03(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"\xc3\x01\n\rofp_oxm_field\x12-\n\toxm_class\x18\x01 \x01(\x0e\x32\x1a.openflow_13.ofp_oxm_class\x12\x33\n\tofb_field\x18\x04 \x01(\x0b\x32\x1e.openflow_13.ofp_oxm_ofb_fieldH\x00\x12\x45\n\x12\x65xperimenter_field\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_oxm_experimenter_fieldH\x00\x42\x07\n\x05\x66ield\"\x8b\n\n\x11ofp_oxm_ofb_field\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.oxm_ofb_field_types\x12\x10\n\x08has_mask\x18\x02 \x01(\x08\x12\x0e\n\x04port\x18\x03 \x01(\rH\x00\x12\x17\n\rphysical_port\x18\x04 \x01(\rH\x00\x12\x18\n\x0etable_metadata\x18\x05 \x01(\x04H\x00\x12\x11\n\x07\x65th_dst\x18\x06 \x01(\x0cH\x00\x12\x11\n\x07\x65th_src\x18\x07 \x01(\x0cH\x00\x12\x12\n\x08\x65th_type\x18\x08 \x01(\rH\x00\x12\x12\n\x08vlan_vid\x18\t \x01(\rH\x00\x12\x12\n\x08vlan_pcp\x18\n \x01(\rH\x00\x12\x11\n\x07ip_dscp\x18\x0b \x01(\rH\x00\x12\x10\n\x06ip_ecn\x18\x0c \x01(\rH\x00\x12\x12\n\x08ip_proto\x18\r \x01(\rH\x00\x12\x12\n\x08ipv4_src\x18\x0e \x01(\rH\x00\x12\x12\n\x08ipv4_dst\x18\x0f \x01(\rH\x00\x12\x11\n\x07tcp_src\x18\x10 \x01(\rH\x00\x12\x11\n\x07tcp_dst\x18\x11 \x01(\rH\x00\x12\x11\n\x07udp_src\x18\x12 \x01(\rH\x00\x12\x11\n\x07udp_dst\x18\x13 \x01(\rH\x00\x12\x12\n\x08sctp_src\x18\x14 \x01(\rH\x00\x12\x12\n\x08sctp_dst\x18\x15 \x01(\rH\x00\x12\x15\n\x0bicmpv4_type\x18\x16 \x01(\rH\x00\x12\x15\n\x0bicmpv4_code\x18\x17 \x01(\rH\x00\x12\x10\n\x06\x61rp_op\x18\x18 \x01(\rH\x00\x12\x11\n\x07\x61rp_spa\x18\x19 \x01(\rH\x00\x12\x11\n\x07\x61rp_tpa\x18\x1a \x01(\rH\x00\x12\x11\n\x07\x61rp_sha\x18\x1b \x01(\x0cH\x00\x12\x11\n\x07\x61rp_tha\x18\x1c \x01(\x0cH\x00\x12\x12\n\x08ipv6_src\x18\x1d \x01(\x0cH\x00\x12\x12\n\x08ipv6_dst\x18\x1e \x01(\x0cH\x00\x12\x15\n\x0bipv6_flabel\x18\x1f \x01(\rH\x00\x12\x15\n\x0bicmpv6_type\x18  \x01(\rH\x00\x12\x15\n\x0bicmpv6_code\x18! \x01(\rH\x00\x12\x18\n\x0eipv6_nd_target\x18\" \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_ssl\x18# \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_tll\x18$ \x01(\x0cH\x00\x12\x14\n\nmpls_label\x18% \x01(\rH\x00\x12\x11\n\x07mpls_tc\x18& \x01(\rH\x00\x12\x12\n\x08mpls_bos\x18\' \x01(\rH\x00\x12\x12\n\x08pbb_isid\x18( \x01(\rH\x00\x12\x13\n\ttunnel_id\x18) \x01(\x04H\x00\x12\x15\n\x0bipv6_exthdr\x18* \x01(\rH\x00\x12\x1d\n\x13table_metadata_mask\x18i \x01(\x04H\x01\x12\x16\n\x0c\x65th_dst_mask\x18j \x01(\x0cH\x01\x12\x16\n\x0c\x65th_src_mask\x18k \x01(\x0cH\x01\x12\x17\n\rvlan_vid_mask\x18m \x01(\rH\x01\x12\x17\n\ripv4_src_mask\x18r \x01(\rH\x01\x12\x17\n\ripv4_dst_mask\x18s \x01(\rH\x01\x12\x16\n\x0c\x61rp_spa_mask\x18} \x01(\rH\x01\x12\x16\n\x0c\x61rp_tpa_mask\x18~ \x01(\rH\x01\x12\x18\n\ripv6_src_mask\x18\x81\x01 \x01(\x0cH\x01\x12\x18\n\ripv6_dst_mask\x18\x82\x01 \x01(\x0cH\x01\x12\x1b\n\x10ipv6_flabel_mask\x18\x83\x01 \x01(\rH\x01\x12\x18\n\rpbb_isid_mask\x18\x8c\x01 \x01(\rH\x01\x12\x19\n\x0etunnel_id_mask\x18\x8d\x01 \x01(\x04H\x01\x12\x1b\n\x10ipv6_exthdr_mask\x18\x8e\x01 \x01(\rH\x01\x42\x07\n\x05valueB\x06\n\x04mask\"F\n\x1aofp_oxm_experimenter_field\x12\x12\n\noxm_header\x18\x01 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\"\xe6\x03\n\nofp_action\x12*\n\x04type\x18\x01 \x01(\x0e\x32\x1c.openflow_13.ofp_action_type\x12\x30\n\x06output\x18\x02 \x01(\x0b\x32\x1e.openflow_13.ofp_action_outputH\x00\x12\x34\n\x08mpls_ttl\x18\x03 \x01(\x0b\x32 .openflow_13.ofp_action_mpls_ttlH\x00\x12,\n\x04push\x18\x04 \x01(\x0b\x32\x1c.openflow_13.ofp_action_pushH\x00\x12\x34\n\x08pop_mpls\x18\x05 \x01(\x0b\x32 .openflow_13.ofp_action_pop_mplsH\x00\x12.\n\x05group\x18\x06 \x01(\x0b\x32\x1d.openflow_13.ofp_action_groupH\x00\x12\x30\n\x06nw_ttl\x18\x07 \x01(\x0b\x32\x1e.openflow_13.ofp_action_nw_ttlH\x00\x12\x36\n\tset_field\x18\x08 \x01(\x0b\x32!.openflow_13.ofp_action_set_fieldH\x00\x12<\n\x0c\x65xperimenter\x18\t \x01(\x0b\x32$.openflow_13.ofp_action_experimenterH\x00\x42\x08\n\x06\x61\x63tion\"2\n\x11ofp_action_output\x12\x0c\n\x04port\x18\x01 \x01(\r\x12\x0f\n\x07max_len\x18\x02 \x01(\r\"\'\n\x13ofp_action_mpls_ttl\x12\x10\n\x08mpls_ttl\x18\x01 \x01(\r\"$\n\x0fofp_action_push\x12\x11\n\tethertype\x18\x01 \x01(\r\"(\n\x13ofp_action_pop_mpls\x12\x11\n\tethertype\x18\x01 \x01(\r\"$\n\x10ofp_action_group\x12\x10\n\x08group_id\x18\x01 \x01(\r\"#\n\x11ofp_action_nw_ttl\x12\x0e\n\x06nw_ttl\x18\x01 \x01(\r\"A\n\x14ofp_action_set_field\x12)\n\x05\x66ield\x18\x01 \x01(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"=\n\x17ofp_action_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xde\x02\n\x0fofp_instruction\x12\x0c\n\x04type\x18\x01 \x01(\r\x12=\n\ngoto_table\x18\x02 \x01(\x0b\x32\'.openflow_13.ofp_instruction_goto_tableH\x00\x12\x45\n\x0ewrite_metadata\x18\x03 \x01(\x0b\x32+.openflow_13.ofp_instruction_write_metadataH\x00\x12\x37\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32$.openflow_13.ofp_instruction_actionsH\x00\x12\x33\n\x05meter\x18\x05 \x01(\x0b\x32\".openflow_13.ofp_instruction_meterH\x00\x12\x41\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32).openflow_13.ofp_instruction_experimenterH\x00\x42\x06\n\x04\x64\x61ta\".\n\x1aofp_instruction_goto_table\x12\x10\n\x08table_id\x18\x01 \x01(\r\"I\n\x1eofp_instruction_write_metadata\x12\x10\n\x08metadata\x18\x01 \x01(\x04\x12\x15\n\rmetadata_mask\x18\x02 \x01(\x04\"C\n\x17ofp_instruction_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\")\n\x15ofp_instruction_meter\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"B\n\x1cofp_instruction_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xd9\x02\n\x0cofp_flow_mod\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x03 \x01(\x04\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x32\n\x07\x63ommand\x18\x05 \x01(\x0e\x32!.openflow_13.ofp_flow_mod_command\x12\x14\n\x0cidle_timeout\x18\x06 \x01(\r\x12\x14\n\x0chard_timeout\x18\x07 \x01(\r\x12\x10\n\x08priority\x18\x08 \x01(\r\x12\x11\n\tbuffer_id\x18\t \x01(\r\x12\x10\n\x08out_port\x18\n \x01(\r\x12\x11\n\tout_group\x18\x0b \x01(\r\x12\r\n\x05\x66lags\x18\x0c \x01(\r\x12%\n\x05match\x18\r \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\x0e \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"o\n\nofp_bucket\x12\x0e\n\x06weight\x18\x01 \x01(\r\x12\x12\n\nwatch_port\x18\x02 \x01(\r\x12\x13\n\x0bwatch_group\x18\x03 \x01(\r\x12(\n\x07\x61\x63tions\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_action\"\xab\x01\n\rofp_group_mod\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_group_mod_command\x12)\n\x04type\x18\x03 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x04 \x01(\r\x12(\n\x07\x62uckets\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"\x81\x01\n\x0eofp_packet_out\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x0f\n\x07in_port\x18\x03 \x01(\r\x12\x13\n\x0b\x61\x63tions_len\x18\x04 \x01(\r\x12(\n\x07\x61\x63tions\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_action\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\"\xbf\x01\n\rofp_packet_in\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x11\n\ttotal_len\x18\x03 \x01(\r\x12\x31\n\x06reason\x18\x04 \x01(\x0e\x32!.openflow_13.ofp_packet_in_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x06 \x01(\x04\x12%\n\x05match\x18\x07 \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x0c\n\x04\x64\x61ta\x18\x08 \x01(\x0c\"\xa6\x02\n\x10ofp_flow_removed\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x10\n\x08priority\x18\x03 \x01(\r\x12\x34\n\x06reason\x18\x04 \x01(\x0e\x32$.openflow_13.ofp_flow_removed_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x08 \x01(\r\x12\x14\n\x0chard_timeout\x18\t \x01(\r\x12\x14\n\x0cpacket_count\x18\n \x01(\x04\x12\x12\n\nbyte_count\x18\x0b \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\"v\n\x15ofp_meter_band_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"R\n\x13ofp_meter_band_drop\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"m\n\x1aofp_meter_band_dscp_remark\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x12\n\nprec_level\x18\x05 \x01(\r\"\x92\x01\n\x1bofp_meter_band_experimenter\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x05 \x01(\r\"\xc1\x01\n\rofp_meter_mod\x12\'\n\x06header\x18\x01 \x01(\x0b\x32\x17.openflow_13.ofp_header\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_meter_mod_command\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x10\n\x08meter_id\x18\x04 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x05 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"9\n\rofp_error_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"`\n\x1aofp_error_experimenter_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x04 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"c\n\x15ofp_multipart_request\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"a\n\x13ofp_multipart_reply\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"c\n\x08ofp_desc\x12\x10\n\x08mfr_desc\x18\x01 \x01(\t\x12\x0f\n\x07hw_desc\x18\x02 \x01(\t\x12\x0f\n\x07sw_desc\x18\x03 \x01(\t\x12\x12\n\nserial_num\x18\x04 \x01(\t\x12\x0f\n\x07\x64p_desc\x18\x05 \x01(\t\"\x9b\x01\n\x16ofp_flow_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"\xb1\x02\n\x0eofp_flow_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x02 \x01(\r\x12\x15\n\rduration_nsec\x18\x03 \x01(\r\x12\x10\n\x08priority\x18\x04 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x05 \x01(\r\x12\x14\n\x0chard_timeout\x18\x06 \x01(\r\x12\r\n\x05\x66lags\x18\x07 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x08 \x01(\x04\x12\x14\n\x0cpacket_count\x18\t \x01(\x04\x12\x12\n\nbyte_count\x18\n \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\r \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"\xa0\x01\n\x1bofp_aggregate_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"Y\n\x19ofp_aggregate_stats_reply\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\x12\x12\n\nflow_count\x18\x03 \x01(\r\"\xb1\x03\n\x1aofp_table_feature_property\x12\x36\n\x04type\x18\x01 \x01(\x0e\x32(.openflow_13.ofp_table_feature_prop_type\x12H\n\x0cinstructions\x18\x02 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_instructionsH\x00\x12\x46\n\x0bnext_tables\x18\x03 \x01(\x0b\x32/.openflow_13.ofp_table_feature_prop_next_tablesH\x00\x12>\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32+.openflow_13.ofp_table_feature_prop_actionsH\x00\x12\x36\n\x03oxm\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_table_feature_prop_oxmH\x00\x12H\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_experimenterH\x00\x42\x07\n\x05value\"Y\n#ofp_table_feature_prop_instructions\x12\x32\n\x0cinstructions\x18\x01 \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"<\n\"ofp_table_feature_prop_next_tables\x12\x16\n\x0enext_table_ids\x18\x01 \x03(\r\"J\n\x1eofp_table_feature_prop_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\"-\n\x1aofp_table_feature_prop_oxm\x12\x0f\n\x07oxm_ids\x18\x03 \x03(\r\"h\n#ofp_table_feature_prop_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x19\n\x11\x65xperimenter_data\x18\x04 \x03(\r\"\xc6\x01\n\x12ofp_table_features\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0emetadata_match\x18\x03 \x01(\x04\x12\x16\n\x0emetadata_write\x18\x04 \x01(\x04\x12\x0e\n\x06\x63onfig\x18\x05 \x01(\r\x12\x13\n\x0bmax_entries\x18\x06 \x01(\r\x12;\n\nproperties\x18\x07 \x03(\x0b\x32\'.openflow_13.ofp_table_feature_property\"f\n\x0fofp_table_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x61\x63tive_count\x18\x02 \x01(\r\x12\x14\n\x0clookup_count\x18\x03 \x01(\x04\x12\x15\n\rmatched_count\x18\x04 \x01(\x04\")\n\x16ofp_port_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\"\xbb\x02\n\x0eofp_port_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x12\n\nrx_packets\x18\x02 \x01(\x04\x12\x12\n\ntx_packets\x18\x03 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08tx_bytes\x18\x05 \x01(\x04\x12\x12\n\nrx_dropped\x18\x06 \x01(\x04\x12\x12\n\ntx_dropped\x18\x07 \x01(\x04\x12\x11\n\trx_errors\x18\x08 \x01(\x04\x12\x11\n\ttx_errors\x18\t \x01(\x04\x12\x14\n\x0crx_frame_err\x18\n \x01(\x04\x12\x13\n\x0brx_over_err\x18\x0b \x01(\x04\x12\x12\n\nrx_crc_err\x18\x0c \x01(\x04\x12\x12\n\ncollisions\x18\r \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x0e \x01(\r\x12\x15\n\rduration_nsec\x18\x0f \x01(\r\"+\n\x17ofp_group_stats_request\x12\x10\n\x08group_id\x18\x01 \x01(\r\">\n\x12ofp_bucket_counter\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\"\xc4\x01\n\x0fofp_group_stats\x12\x10\n\x08group_id\x18\x01 \x01(\r\x12\x11\n\tref_count\x18\x02 \x01(\r\x12\x14\n\x0cpacket_count\x18\x03 \x01(\x04\x12\x12\n\nbyte_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\x0c\x62ucket_stats\x18\x07 \x03(\x0b\x32\x1f.openflow_13.ofp_bucket_counter\"\x84\x01\n\x0eofp_group_desc\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x0b\n\x03pad\x18\x02 \x01(\r\x12\x10\n\x08group_id\x18\x03 \x01(\r\x12(\n\x07\x62uckets\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"^\n\x12ofp_group_features\x12\r\n\x05types\x18\x01 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x01(\r\x12\x12\n\nmax_groups\x18\x03 \x03(\r\x12\x0f\n\x07\x61\x63tions\x18\x04 \x03(\r\"/\n\x1bofp_meter_multipart_request\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"J\n\x14ofp_meter_band_stats\x12\x19\n\x11packet_band_count\x18\x01 \x01(\x04\x12\x17\n\x0f\x62yte_band_count\x18\x02 \x01(\x04\"\xcb\x01\n\x0fofp_meter_stats\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x12\n\nflow_count\x18\x02 \x01(\r\x12\x17\n\x0fpacket_in_count\x18\x03 \x01(\x04\x12\x15\n\rbyte_in_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\nband_stats\x18\x07 \x03(\x0b\x32!.openflow_13.ofp_meter_band_stats\"f\n\x10ofp_meter_config\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12\x10\n\x08meter_id\x18\x02 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x03 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"w\n\x12ofp_meter_features\x12\x11\n\tmax_meter\x18\x01 \x01(\r\x12\x12\n\nband_types\x18\x02 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x03 \x01(\r\x12\x11\n\tmax_bands\x18\x04 \x01(\r\x12\x11\n\tmax_color\x18\x05 \x01(\r\"Y\n!ofp_experimenter_multipart_header\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"O\n\x17ofp_experimenter_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"6\n\x15ofp_queue_prop_header\x12\x10\n\x08property\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_min_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_max_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"z\n\x1bofp_queue_prop_experimenter\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"j\n\x10ofp_packet_queue\x12\x10\n\x08queue_id\x18\x01 \x01(\r\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x36\n\nproperties\x18\x04 \x03(\x0b\x32\".openflow_13.ofp_queue_prop_header\",\n\x1cofp_queue_get_config_request\x12\x0c\n\x04port\x18\x02 \x01(\r\"Y\n\x1aofp_queue_get_config_reply\x12\x0c\n\x04port\x18\x02 \x01(\r\x12-\n\x06queues\x18\x03 \x03(\x0b\x32\x1d.openflow_13.ofp_packet_queue\"6\n\x14ofp_action_set_queue\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x03 \x01(\r\"<\n\x17ofp_queue_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\"\x9a\x01\n\x0fofp_queue_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\x12\x10\n\x08tx_bytes\x18\x03 \x01(\x04\x12\x12\n\ntx_packets\x18\x04 \x01(\x04\x12\x11\n\ttx_errors\x18\x05 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\"Y\n\x10ofp_role_request\x12.\n\x04role\x18\x02 \x01(\x0e\x32 .openflow_13.ofp_controller_role\x12\x15\n\rgeneration_id\x18\x03 \x01(\x04\"_\n\x10ofp_async_config\x12\x16\n\x0epacket_in_mask\x18\x02 \x03(\r\x12\x18\n\x10port_status_mask\x18\x03 \x03(\r\x12\x19\n\x11\x66low_removed_mask\x18\x04 \x03(\r*\xd5\x01\n\x0bofp_port_no\x12\x10\n\x0cOFPP_INVALID\x10\x00\x12\x10\n\x08OFPP_MAX\x10\x80\xfe\xff\xff\x07\x12\x14\n\x0cOFPP_IN_PORT\x10\xf8\xff\xff\xff\x07\x12\x12\n\nOFPP_TABLE\x10\xf9\xff\xff\xff\x07\x12\x13\n\x0bOFPP_NORMAL\x10\xfa\xff\xff\xff\x07\x12\x12\n\nOFPP_FLOOD\x10\xfb\xff\xff\xff\x07\x12\x10\n\x08OFPP_ALL\x10\xfc\xff\xff\xff\x07\x12\x17\n\x0fOFPP_CONTROLLER\x10\xfd\xff\xff\xff\x07\x12\x12\n\nOFPP_LOCAL\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPP_ANY\x10\xff\xff\xff\xff\x07*\xc8\x05\n\x08ofp_type\x12\x0e\n\nOFPT_HELLO\x10\x00\x12\x0e\n\nOFPT_ERROR\x10\x01\x12\x15\n\x11OFPT_ECHO_REQUEST\x10\x02\x12\x13\n\x0fOFPT_ECHO_REPLY\x10\x03\x12\x15\n\x11OFPT_EXPERIMENTER\x10\x04\x12\x19\n\x15OFPT_FEATURES_REQUEST\x10\x05\x12\x17\n\x13OFPT_FEATURES_REPLY\x10\x06\x12\x1b\n\x17OFPT_GET_CONFIG_REQUEST\x10\x07\x12\x19\n\x15OFPT_GET_CONFIG_REPLY\x10\x08\x12\x13\n\x0fOFPT_SET_CONFIG\x10\t\x12\x12\n\x0eOFPT_PACKET_IN\x10\n\x12\x15\n\x11OFPT_FLOW_REMOVED\x10\x0b\x12\x14\n\x10OFPT_PORT_STATUS\x10\x0c\x12\x13\n\x0fOFPT_PACKET_OUT\x10\r\x12\x11\n\rOFPT_FLOW_MOD\x10\x0e\x12\x12\n\x0eOFPT_GROUP_MOD\x10\x0f\x12\x11\n\rOFPT_PORT_MOD\x10\x10\x12\x12\n\x0eOFPT_TABLE_MOD\x10\x11\x12\x1a\n\x16OFPT_MULTIPART_REQUEST\x10\x12\x12\x18\n\x14OFPT_MULTIPART_REPLY\x10\x13\x12\x18\n\x14OFPT_BARRIER_REQUEST\x10\x14\x12\x16\n\x12OFPT_BARRIER_REPLY\x10\x15\x12!\n\x1dOFPT_QUEUE_GET_CONFIG_REQUEST\x10\x16\x12\x1f\n\x1bOFPT_QUEUE_GET_CONFIG_REPLY\x10\x17\x12\x15\n\x11OFPT_ROLE_REQUEST\x10\x18\x12\x13\n\x0fOFPT_ROLE_REPLY\x10\x19\x12\x1a\n\x16OFPT_GET_ASYNC_REQUEST\x10\x1a\x12\x18\n\x14OFPT_GET_ASYNC_REPLY\x10\x1b\x12\x12\n\x0eOFPT_SET_ASYNC\x10\x1c\x12\x12\n\x0eOFPT_METER_MOD\x10\x1d*C\n\x13ofp_hello_elem_type\x12\x12\n\x0eOFPHET_INVALID\x10\x00\x12\x18\n\x14OFPHET_VERSIONBITMAP\x10\x01*e\n\x10ofp_config_flags\x12\x14\n\x10OFPC_FRAG_NORMAL\x10\x00\x12\x12\n\x0eOFPC_FRAG_DROP\x10\x01\x12\x13\n\x0fOFPC_FRAG_REASM\x10\x02\x12\x12\n\x0eOFPC_FRAG_MASK\x10\x03*@\n\x10ofp_table_config\x12\x11\n\rOFPTC_INVALID\x10\x00\x12\x19\n\x15OFPTC_DEPRECATED_MASK\x10\x03*>\n\tofp_table\x12\x11\n\rOFPTT_INVALID\x10\x00\x12\x0e\n\tOFPTT_MAX\x10\xfe\x01\x12\x0e\n\tOFPTT_ALL\x10\xff\x01*\xbb\x01\n\x10ofp_capabilities\x12\x10\n\x0cOFPC_INVALID\x10\x00\x12\x13\n\x0fOFPC_FLOW_STATS\x10\x01\x12\x14\n\x10OFPC_TABLE_STATS\x10\x02\x12\x13\n\x0fOFPC_PORT_STATS\x10\x04\x12\x14\n\x10OFPC_GROUP_STATS\x10\x08\x12\x11\n\rOFPC_IP_REASM\x10 \x12\x14\n\x10OFPC_QUEUE_STATS\x10@\x12\x16\n\x11OFPC_PORT_BLOCKED\x10\x80\x02*v\n\x0fofp_port_config\x12\x11\n\rOFPPC_INVALID\x10\x00\x12\x13\n\x0fOFPPC_PORT_DOWN\x10\x01\x12\x11\n\rOFPPC_NO_RECV\x10\x04\x12\x10\n\x0cOFPPC_NO_FWD\x10 \x12\x16\n\x12OFPPC_NO_PACKET_IN\x10@*[\n\x0eofp_port_state\x12\x11\n\rOFPPS_INVALID\x10\x00\x12\x13\n\x0fOFPPS_LINK_DOWN\x10\x01\x12\x11\n\rOFPPS_BLOCKED\x10\x02\x12\x0e\n\nOFPPS_LIVE\x10\x04*\xdd\x02\n\x11ofp_port_features\x12\x11\n\rOFPPF_INVALID\x10\x00\x12\x11\n\rOFPPF_10MB_HD\x10\x01\x12\x11\n\rOFPPF_10MB_FD\x10\x02\x12\x12\n\x0eOFPPF_100MB_HD\x10\x04\x12\x12\n\x0eOFPPF_100MB_FD\x10\x08\x12\x10\n\x0cOFPPF_1GB_HD\x10\x10\x12\x10\n\x0cOFPPF_1GB_FD\x10 \x12\x11\n\rOFPPF_10GB_FD\x10@\x12\x12\n\rOFPPF_40GB_FD\x10\x80\x01\x12\x13\n\x0eOFPPF_100GB_FD\x10\x80\x02\x12\x11\n\x0cOFPPF_1TB_FD\x10\x80\x04\x12\x10\n\x0bOFPPF_OTHER\x10\x80\x08\x12\x11\n\x0cOFPPF_COPPER\x10\x80\x10\x12\x10\n\x0bOFPPF_FIBER\x10\x80 \x12\x12\n\rOFPPF_AUTONEG\x10\x80@\x12\x11\n\x0bOFPPF_PAUSE\x10\x80\x80\x01\x12\x16\n\x10OFPPF_PAUSE_ASYM\x10\x80\x80\x02*D\n\x0fofp_port_reason\x12\r\n\tOFPPR_ADD\x10\x00\x12\x10\n\x0cOFPPR_DELETE\x10\x01\x12\x10\n\x0cOFPPR_MODIFY\x10\x02*3\n\x0eofp_match_type\x12\x12\n\x0eOFPMT_STANDARD\x10\x00\x12\r\n\tOFPMT_OXM\x10\x01*k\n\rofp_oxm_class\x12\x10\n\x0cOFPXMC_NXM_0\x10\x00\x12\x10\n\x0cOFPXMC_NXM_1\x10\x01\x12\x1b\n\x15OFPXMC_OPENFLOW_BASIC\x10\x80\x80\x02\x12\x19\n\x13OFPXMC_EXPERIMENTER\x10\xff\xff\x03*\x90\x08\n\x13oxm_ofb_field_types\x12\x16\n\x12OFPXMT_OFB_IN_PORT\x10\x00\x12\x1a\n\x16OFPXMT_OFB_IN_PHY_PORT\x10\x01\x12\x17\n\x13OFPXMT_OFB_METADATA\x10\x02\x12\x16\n\x12OFPXMT_OFB_ETH_DST\x10\x03\x12\x16\n\x12OFPXMT_OFB_ETH_SRC\x10\x04\x12\x17\n\x13OFPXMT_OFB_ETH_TYPE\x10\x05\x12\x17\n\x13OFPXMT_OFB_VLAN_VID\x10\x06\x12\x17\n\x13OFPXMT_OFB_VLAN_PCP\x10\x07\x12\x16\n\x12OFPXMT_OFB_IP_DSCP\x10\x08\x12\x15\n\x11OFPXMT_OFB_IP_ECN\x10\t\x12\x17\n\x13OFPXMT_OFB_IP_PROTO\x10\n\x12\x17\n\x13OFPXMT_OFB_IPV4_SRC\x10\x0b\x12\x17\n\x13OFPXMT_OFB_IPV4_DST\x10\x0c\x12\x16\n\x12OFPXMT_OFB_TCP_SRC\x10\r\x12\x16\n\x12OFPXMT_OFB_TCP_DST\x10\x0e\x12\x16\n\x12OFPXMT_OFB_UDP_SRC\x10\x0f\x12\x16\n\x12OFPXMT_OFB_UDP_DST\x10\x10\x12\x17\n\x13OFPXMT_OFB_SCTP_SRC\x10\x11\x12\x17\n\x13OFPXMT_OFB_SCTP_DST\x10\x12\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_TYPE\x10\x13\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_CODE\x10\x14\x12\x15\n\x11OFPXMT_OFB_ARP_OP\x10\x15\x12\x16\n\x12OFPXMT_OFB_ARP_SPA\x10\x16\x12\x16\n\x12OFPXMT_OFB_ARP_TPA\x10\x17\x12\x16\n\x12OFPXMT_OFB_ARP_SHA\x10\x18\x12\x16\n\x12OFPXMT_OFB_ARP_THA\x10\x19\x12\x17\n\x13OFPXMT_OFB_IPV6_SRC\x10\x1a\x12\x17\n\x13OFPXMT_OFB_IPV6_DST\x10\x1b\x12\x1a\n\x16OFPXMT_OFB_IPV6_FLABEL\x10\x1c\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_TYPE\x10\x1d\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_CODE\x10\x1e\x12\x1d\n\x19OFPXMT_OFB_IPV6_ND_TARGET\x10\x1f\x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_SLL\x10 \x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_TLL\x10!\x12\x19\n\x15OFPXMT_OFB_MPLS_LABEL\x10\"\x12\x16\n\x12OFPXMT_OFB_MPLS_TC\x10#\x12\x17\n\x13OFPXMT_OFB_MPLS_BOS\x10$\x12\x17\n\x13OFPXMT_OFB_PBB_ISID\x10%\x12\x18\n\x14OFPXMT_OFB_TUNNEL_ID\x10&\x12\x1a\n\x16OFPXMT_OFB_IPV6_EXTHDR\x10\'*3\n\x0bofp_vlan_id\x12\x0f\n\x0bOFPVID_NONE\x10\x00\x12\x13\n\x0eOFPVID_PRESENT\x10\x80 *\xc9\x01\n\x14ofp_ipv6exthdr_flags\x12\x12\n\x0eOFPIEH_INVALID\x10\x00\x12\x11\n\rOFPIEH_NONEXT\x10\x01\x12\x0e\n\nOFPIEH_ESP\x10\x02\x12\x0f\n\x0bOFPIEH_AUTH\x10\x04\x12\x0f\n\x0bOFPIEH_DEST\x10\x08\x12\x0f\n\x0bOFPIEH_FRAG\x10\x10\x12\x11\n\rOFPIEH_ROUTER\x10 \x12\x0e\n\nOFPIEH_HOP\x10@\x12\x11\n\x0cOFPIEH_UNREP\x10\x80\x01\x12\x11\n\x0cOFPIEH_UNSEQ\x10\x80\x02*\xfc\x02\n\x0fofp_action_type\x12\x10\n\x0cOFPAT_OUTPUT\x10\x00\x12\x16\n\x12OFPAT_COPY_TTL_OUT\x10\x0b\x12\x15\n\x11OFPAT_COPY_TTL_IN\x10\x0c\x12\x16\n\x12OFPAT_SET_MPLS_TTL\x10\x0f\x12\x16\n\x12OFPAT_DEC_MPLS_TTL\x10\x10\x12\x13\n\x0fOFPAT_PUSH_VLAN\x10\x11\x12\x12\n\x0eOFPAT_POP_VLAN\x10\x12\x12\x13\n\x0fOFPAT_PUSH_MPLS\x10\x13\x12\x12\n\x0eOFPAT_POP_MPLS\x10\x14\x12\x13\n\x0fOFPAT_SET_QUEUE\x10\x15\x12\x0f\n\x0bOFPAT_GROUP\x10\x16\x12\x14\n\x10OFPAT_SET_NW_TTL\x10\x17\x12\x14\n\x10OFPAT_DEC_NW_TTL\x10\x18\x12\x13\n\x0fOFPAT_SET_FIELD\x10\x19\x12\x12\n\x0eOFPAT_PUSH_PBB\x10\x1a\x12\x11\n\rOFPAT_POP_PBB\x10\x1b\x12\x18\n\x12OFPAT_EXPERIMENTER\x10\xff\xff\x03*V\n\x16ofp_controller_max_len\x12\x12\n\x0eOFPCML_INVALID\x10\x00\x12\x10\n\nOFPCML_MAX\x10\xe5\xff\x03\x12\x16\n\x10OFPCML_NO_BUFFER\x10\xff\xff\x03*\xcf\x01\n\x14ofp_instruction_type\x12\x11\n\rOFPIT_INVALID\x10\x00\x12\x14\n\x10OFPIT_GOTO_TABLE\x10\x01\x12\x18\n\x14OFPIT_WRITE_METADATA\x10\x02\x12\x17\n\x13OFPIT_WRITE_ACTIONS\x10\x03\x12\x17\n\x13OFPIT_APPLY_ACTIONS\x10\x04\x12\x17\n\x13OFPIT_CLEAR_ACTIONS\x10\x05\x12\x0f\n\x0bOFPIT_METER\x10\x06\x12\x18\n\x12OFPIT_EXPERIMENTER\x10\xff\xff\x03*{\n\x14ofp_flow_mod_command\x12\r\n\tOFPFC_ADD\x10\x00\x12\x10\n\x0cOFPFC_MODIFY\x10\x01\x12\x17\n\x13OFPFC_MODIFY_STRICT\x10\x02\x12\x10\n\x0cOFPFC_DELETE\x10\x03\x12\x17\n\x13OFPFC_DELETE_STRICT\x10\x04*\xa3\x01\n\x12ofp_flow_mod_flags\x12\x11\n\rOFPFF_INVALID\x10\x00\x12\x17\n\x13OFPFF_SEND_FLOW_REM\x10\x01\x12\x17\n\x13OFPFF_CHECK_OVERLAP\x10\x02\x12\x16\n\x12OFPFF_RESET_COUNTS\x10\x04\x12\x17\n\x13OFPFF_NO_PKT_COUNTS\x10\x08\x12\x17\n\x13OFPFF_NO_BYT_COUNTS\x10\x10*S\n\tofp_group\x12\x10\n\x0cOFPG_INVALID\x10\x00\x12\x10\n\x08OFPG_MAX\x10\x80\xfe\xff\xff\x07\x12\x10\n\x08OFPG_ALL\x10\xfc\xff\xff\xff\x07\x12\x10\n\x08OFPG_ANY\x10\xff\xff\xff\xff\x07*J\n\x15ofp_group_mod_command\x12\r\n\tOFPGC_ADD\x10\x00\x12\x10\n\x0cOFPGC_MODIFY\x10\x01\x12\x10\n\x0cOFPGC_DELETE\x10\x02*S\n\x0eofp_group_type\x12\r\n\tOFPGT_ALL\x10\x00\x12\x10\n\x0cOFPGT_SELECT\x10\x01\x12\x12\n\x0eOFPGT_INDIRECT\x10\x02\x12\x0c\n\x08OFPGT_FF\x10\x03*P\n\x14ofp_packet_in_reason\x12\x11\n\rOFPR_NO_MATCH\x10\x00\x12\x0f\n\x0bOFPR_ACTION\x10\x01\x12\x14\n\x10OFPR_INVALID_TTL\x10\x02*\x8b\x01\n\x17ofp_flow_removed_reason\x12\x16\n\x12OFPRR_IDLE_TIMEOUT\x10\x00\x12\x16\n\x12OFPRR_HARD_TIMEOUT\x10\x01\x12\x10\n\x0cOFPRR_DELETE\x10\x02\x12\x16\n\x12OFPRR_GROUP_DELETE\x10\x03\x12\x16\n\x12OFPRR_METER_DELETE\x10\x04*n\n\tofp_meter\x12\r\n\tOFPM_ZERO\x10\x00\x12\x10\n\x08OFPM_MAX\x10\x80\x80\xfc\xff\x07\x12\x15\n\rOFPM_SLOWPATH\x10\xfd\xff\xff\xff\x07\x12\x17\n\x0fOFPM_CONTROLLER\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPM_ALL\x10\xff\xff\xff\xff\x07*m\n\x13ofp_meter_band_type\x12\x12\n\x0eOFPMBT_INVALID\x10\x00\x12\x0f\n\x0bOFPMBT_DROP\x10\x01\x12\x16\n\x12OFPMBT_DSCP_REMARK\x10\x02\x12\x19\n\x13OFPMBT_EXPERIMENTER\x10\xff\xff\x03*J\n\x15ofp_meter_mod_command\x12\r\n\tOFPMC_ADD\x10\x00\x12\x10\n\x0cOFPMC_MODIFY\x10\x01\x12\x10\n\x0cOFPMC_DELETE\x10\x02*g\n\x0fofp_meter_flags\x12\x11\n\rOFPMF_INVALID\x10\x00\x12\x0e\n\nOFPMF_KBPS\x10\x01\x12\x0f\n\x0bOFPMF_PKTPS\x10\x02\x12\x0f\n\x0bOFPMF_BURST\x10\x04\x12\x0f\n\x0bOFPMF_STATS\x10\x08*\xa4\x03\n\x0eofp_error_type\x12\x16\n\x12OFPET_HELLO_FAILED\x10\x00\x12\x15\n\x11OFPET_BAD_REQUEST\x10\x01\x12\x14\n\x10OFPET_BAD_ACTION\x10\x02\x12\x19\n\x15OFPET_BAD_INSTRUCTION\x10\x03\x12\x13\n\x0fOFPET_BAD_MATCH\x10\x04\x12\x19\n\x15OFPET_FLOW_MOD_FAILED\x10\x05\x12\x1a\n\x16OFPET_GROUP_MOD_FAILED\x10\x06\x12\x19\n\x15OFPET_PORT_MOD_FAILED\x10\x07\x12\x1a\n\x16OFPET_TABLE_MOD_FAILED\x10\x08\x12\x19\n\x15OFPET_QUEUE_OP_FAILED\x10\t\x12\x1e\n\x1aOFPET_SWITCH_CONFIG_FAILED\x10\n\x12\x1d\n\x19OFPET_ROLE_REQUEST_FAILED\x10\x0b\x12\x1a\n\x16OFPET_METER_MOD_FAILED\x10\x0c\x12\x1f\n\x1bOFPET_TABLE_FEATURES_FAILED\x10\r\x12\x18\n\x12OFPET_EXPERIMENTER\x10\xff\xff\x03*B\n\x15ofp_hello_failed_code\x12\x17\n\x13OFPHFC_INCOMPATIBLE\x10\x00\x12\x10\n\x0cOFPHFC_EPERM\x10\x01*\xed\x02\n\x14ofp_bad_request_code\x12\x16\n\x12OFPBRC_BAD_VERSION\x10\x00\x12\x13\n\x0fOFPBRC_BAD_TYPE\x10\x01\x12\x18\n\x14OFPBRC_BAD_MULTIPART\x10\x02\x12\x1b\n\x17OFPBRC_BAD_EXPERIMENTER\x10\x03\x12\x17\n\x13OFPBRC_BAD_EXP_TYPE\x10\x04\x12\x10\n\x0cOFPBRC_EPERM\x10\x05\x12\x12\n\x0eOFPBRC_BAD_LEN\x10\x06\x12\x17\n\x13OFPBRC_BUFFER_EMPTY\x10\x07\x12\x19\n\x15OFPBRC_BUFFER_UNKNOWN\x10\x08\x12\x17\n\x13OFPBRC_BAD_TABLE_ID\x10\t\x12\x13\n\x0fOFPBRC_IS_SLAVE\x10\n\x12\x13\n\x0fOFPBRC_BAD_PORT\x10\x0b\x12\x15\n\x11OFPBRC_BAD_PACKET\x10\x0c\x12$\n OFPBRC_MULTIPART_BUFFER_OVERFLOW\x10\r*\x9c\x03\n\x13ofp_bad_action_code\x12\x13\n\x0fOFPBAC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBAC_BAD_LEN\x10\x01\x12\x1b\n\x17OFPBAC_BAD_EXPERIMENTER\x10\x02\x12\x17\n\x13OFPBAC_BAD_EXP_TYPE\x10\x03\x12\x17\n\x13OFPBAC_BAD_OUT_PORT\x10\x04\x12\x17\n\x13OFPBAC_BAD_ARGUMENT\x10\x05\x12\x10\n\x0cOFPBAC_EPERM\x10\x06\x12\x13\n\x0fOFPBAC_TOO_MANY\x10\x07\x12\x14\n\x10OFPBAC_BAD_QUEUE\x10\x08\x12\x18\n\x14OFPBAC_BAD_OUT_GROUP\x10\t\x12\x1d\n\x19OFPBAC_MATCH_INCONSISTENT\x10\n\x12\x1c\n\x18OFPBAC_UNSUPPORTED_ORDER\x10\x0b\x12\x12\n\x0eOFPBAC_BAD_TAG\x10\x0c\x12\x17\n\x13OFPBAC_BAD_SET_TYPE\x10\r\x12\x16\n\x12OFPBAC_BAD_SET_LEN\x10\x0e\x12\x1b\n\x17OFPBAC_BAD_SET_ARGUMENT\x10\x0f*\xfa\x01\n\x18ofp_bad_instruction_code\x12\x17\n\x13OFPBIC_UNKNOWN_INST\x10\x00\x12\x15\n\x11OFPBIC_UNSUP_INST\x10\x01\x12\x17\n\x13OFPBIC_BAD_TABLE_ID\x10\x02\x12\x19\n\x15OFPBIC_UNSUP_METADATA\x10\x03\x12\x1e\n\x1aOFPBIC_UNSUP_METADATA_MASK\x10\x04\x12\x1b\n\x17OFPBIC_BAD_EXPERIMENTER\x10\x05\x12\x17\n\x13OFPBIC_BAD_EXP_TYPE\x10\x06\x12\x12\n\x0eOFPBIC_BAD_LEN\x10\x07\x12\x10\n\x0cOFPBIC_EPERM\x10\x08*\xa5\x02\n\x12ofp_bad_match_code\x12\x13\n\x0fOFPBMC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBMC_BAD_LEN\x10\x01\x12\x12\n\x0eOFPBMC_BAD_TAG\x10\x02\x12\x1b\n\x17OFPBMC_BAD_DL_ADDR_MASK\x10\x03\x12\x1b\n\x17OFPBMC_BAD_NW_ADDR_MASK\x10\x04\x12\x18\n\x14OFPBMC_BAD_WILDCARDS\x10\x05\x12\x14\n\x10OFPBMC_BAD_FIELD\x10\x06\x12\x14\n\x10OFPBMC_BAD_VALUE\x10\x07\x12\x13\n\x0fOFPBMC_BAD_MASK\x10\x08\x12\x15\n\x11OFPBMC_BAD_PREREQ\x10\t\x12\x14\n\x10OFPBMC_DUP_FIELD\x10\n\x12\x10\n\x0cOFPBMC_EPERM\x10\x0b*\xd2\x01\n\x18ofp_flow_mod_failed_code\x12\x13\n\x0fOFPFMFC_UNKNOWN\x10\x00\x12\x16\n\x12OFPFMFC_TABLE_FULL\x10\x01\x12\x18\n\x14OFPFMFC_BAD_TABLE_ID\x10\x02\x12\x13\n\x0fOFPFMFC_OVERLAP\x10\x03\x12\x11\n\rOFPFMFC_EPERM\x10\x04\x12\x17\n\x13OFPFMFC_BAD_TIMEOUT\x10\x05\x12\x17\n\x13OFPFMFC_BAD_COMMAND\x10\x06\x12\x15\n\x11OFPFMFC_BAD_FLAGS\x10\x07*\xa1\x03\n\x19ofp_group_mod_failed_code\x12\x18\n\x14OFPGMFC_GROUP_EXISTS\x10\x00\x12\x19\n\x15OFPGMFC_INVALID_GROUP\x10\x01\x12\x1e\n\x1aOFPGMFC_WEIGHT_UNSUPPORTED\x10\x02\x12\x19\n\x15OFPGMFC_OUT_OF_GROUPS\x10\x03\x12\x1a\n\x16OFPGMFC_OUT_OF_BUCKETS\x10\x04\x12 \n\x1cOFPGMFC_CHAINING_UNSUPPORTED\x10\x05\x12\x1d\n\x19OFPGMFC_WATCH_UNSUPPORTED\x10\x06\x12\x10\n\x0cOFPGMFC_LOOP\x10\x07\x12\x19\n\x15OFPGMFC_UNKNOWN_GROUP\x10\x08\x12\x19\n\x15OFPGMFC_CHAINED_GROUP\x10\t\x12\x14\n\x10OFPGMFC_BAD_TYPE\x10\n\x12\x17\n\x13OFPGMFC_BAD_COMMAND\x10\x0b\x12\x16\n\x12OFPGMFC_BAD_BUCKET\x10\x0c\x12\x15\n\x11OFPGMFC_BAD_WATCH\x10\r\x12\x11\n\rOFPGMFC_EPERM\x10\x0e*\x8f\x01\n\x18ofp_port_mod_failed_code\x12\x14\n\x10OFPPMFC_BAD_PORT\x10\x00\x12\x17\n\x13OFPPMFC_BAD_HW_ADDR\x10\x01\x12\x16\n\x12OFPPMFC_BAD_CONFIG\x10\x02\x12\x19\n\x15OFPPMFC_BAD_ADVERTISE\x10\x03\x12\x11\n\rOFPPMFC_EPERM\x10\x04*]\n\x19ofp_table_mod_failed_code\x12\x15\n\x11OFPTMFC_BAD_TABLE\x10\x00\x12\x16\n\x12OFPTMFC_BAD_CONFIG\x10\x01\x12\x11\n\rOFPTMFC_EPERM\x10\x02*Z\n\x18ofp_queue_op_failed_code\x12\x14\n\x10OFPQOFC_BAD_PORT\x10\x00\x12\x15\n\x11OFPQOFC_BAD_QUEUE\x10\x01\x12\x11\n\rOFPQOFC_EPERM\x10\x02*^\n\x1dofp_switch_config_failed_code\x12\x15\n\x11OFPSCFC_BAD_FLAGS\x10\x00\x12\x13\n\x0fOFPSCFC_BAD_LEN\x10\x01\x12\x11\n\rOFPSCFC_EPERM\x10\x02*Z\n\x1cofp_role_request_failed_code\x12\x11\n\rOFPRRFC_STALE\x10\x00\x12\x11\n\rOFPRRFC_UNSUP\x10\x01\x12\x14\n\x10OFPRRFC_BAD_ROLE\x10\x02*\xc4\x02\n\x19ofp_meter_mod_failed_code\x12\x13\n\x0fOFPMMFC_UNKNOWN\x10\x00\x12\x18\n\x14OFPMMFC_METER_EXISTS\x10\x01\x12\x19\n\x15OFPMMFC_INVALID_METER\x10\x02\x12\x19\n\x15OFPMMFC_UNKNOWN_METER\x10\x03\x12\x17\n\x13OFPMMFC_BAD_COMMAND\x10\x04\x12\x15\n\x11OFPMMFC_BAD_FLAGS\x10\x05\x12\x14\n\x10OFPMMFC_BAD_RATE\x10\x06\x12\x15\n\x11OFPMMFC_BAD_BURST\x10\x07\x12\x14\n\x10OFPMMFC_BAD_BAND\x10\x08\x12\x1a\n\x16OFPMMFC_BAD_BAND_VALUE\x10\t\x12\x19\n\x15OFPMMFC_OUT_OF_METERS\x10\n\x12\x18\n\x14OFPMMFC_OUT_OF_BANDS\x10\x0b*\xa9\x01\n\x1eofp_table_features_failed_code\x12\x15\n\x11OFPTFFC_BAD_TABLE\x10\x00\x12\x18\n\x14OFPTFFC_BAD_METADATA\x10\x01\x12\x14\n\x10OFPTFFC_BAD_TYPE\x10\x02\x12\x13\n\x0fOFPTFFC_BAD_LEN\x10\x03\x12\x18\n\x14OFPTFFC_BAD_ARGUMENT\x10\x04\x12\x11\n\rOFPTFFC_EPERM\x10\x05*\xce\x02\n\x12ofp_multipart_type\x12\x0e\n\nOFPMP_DESC\x10\x00\x12\x0e\n\nOFPMP_FLOW\x10\x01\x12\x13\n\x0fOFPMP_AGGREGATE\x10\x02\x12\x0f\n\x0bOFPMP_TABLE\x10\x03\x12\x14\n\x10OFPMP_PORT_STATS\x10\x04\x12\x0f\n\x0bOFPMP_QUEUE\x10\x05\x12\x0f\n\x0bOFPMP_GROUP\x10\x06\x12\x14\n\x10OFPMP_GROUP_DESC\x10\x07\x12\x18\n\x14OFPMP_GROUP_FEATURES\x10\x08\x12\x0f\n\x0bOFPMP_METER\x10\t\x12\x16\n\x12OFPMP_METER_CONFIG\x10\n\x12\x18\n\x14OFPMP_METER_FEATURES\x10\x0b\x12\x18\n\x14OFPMP_TABLE_FEATURES\x10\x0c\x12\x13\n\x0fOFPMP_PORT_DESC\x10\r\x12\x18\n\x12OFPMP_EXPERIMENTER\x10\xff\xff\x03*J\n\x1bofp_multipart_request_flags\x12\x16\n\x12OFPMPF_REQ_INVALID\x10\x00\x12\x13\n\x0fOFPMPF_REQ_MORE\x10\x01*L\n\x19ofp_multipart_reply_flags\x12\x18\n\x14OFPMPF_REPLY_INVALID\x10\x00\x12\x15\n\x11OFPMPF_REPLY_MORE\x10\x01*\xe4\x03\n\x1bofp_table_feature_prop_type\x12\x18\n\x14OFPTFPT_INSTRUCTIONS\x10\x00\x12\x1d\n\x19OFPTFPT_INSTRUCTIONS_MISS\x10\x01\x12\x17\n\x13OFPTFPT_NEXT_TABLES\x10\x02\x12\x1c\n\x18OFPTFPT_NEXT_TABLES_MISS\x10\x03\x12\x19\n\x15OFPTFPT_WRITE_ACTIONS\x10\x04\x12\x1e\n\x1aOFPTFPT_WRITE_ACTIONS_MISS\x10\x05\x12\x19\n\x15OFPTFPT_APPLY_ACTIONS\x10\x06\x12\x1e\n\x1aOFPTFPT_APPLY_ACTIONS_MISS\x10\x07\x12\x11\n\rOFPTFPT_MATCH\x10\x08\x12\x15\n\x11OFPTFPT_WILDCARDS\x10\n\x12\x1a\n\x16OFPTFPT_WRITE_SETFIELD\x10\x0c\x12\x1f\n\x1bOFPTFPT_WRITE_SETFIELD_MISS\x10\r\x12\x1a\n\x16OFPTFPT_APPLY_SETFIELD\x10\x0e\x12\x1f\n\x1bOFPTFPT_APPLY_SETFIELD_MISS\x10\x0f\x12\x1a\n\x14OFPTFPT_EXPERIMENTER\x10\xfe\xff\x03\x12\x1f\n\x19OFPTFPT_EXPERIMENTER_MISS\x10\xff\xff\x03*\x93\x01\n\x16ofp_group_capabilities\x12\x12\n\x0eOFPGFC_INVALID\x10\x00\x12\x18\n\x14OFPGFC_SELECT_WEIGHT\x10\x01\x12\x1a\n\x16OFPGFC_SELECT_LIVENESS\x10\x02\x12\x13\n\x0fOFPGFC_CHAINING\x10\x04\x12\x1a\n\x16OFPGFC_CHAINING_CHECKS\x10\x08*k\n\x14ofp_queue_properties\x12\x11\n\rOFPQT_INVALID\x10\x00\x12\x12\n\x0eOFPQT_MIN_RATE\x10\x01\x12\x12\n\x0eOFPQT_MAX_RATE\x10\x02\x12\x18\n\x12OFPQT_EXPERIMENTER\x10\xff\xff\x03*q\n\x13ofp_controller_role\x12\x17\n\x13OFPCR_ROLE_NOCHANGE\x10\x00\x12\x14\n\x10OFPCR_ROLE_EQUAL\x10\x01\x12\x15\n\x11OFPCR_ROLE_MASTER\x10\x02\x12\x14\n\x10OFPCR_ROLE_SLAVE\x10\x03\x62\x06proto3')
+  serialized_pb=_b('\n\x11openflow_13.proto\x12\x0bopenflow_13\"O\n\nofp_header\x12\x0f\n\x07version\x18\x01 \x01(\r\x12#\n\x04type\x18\x02 \x01(\x0e\x32\x15.openflow_13.ofp_type\x12\x0b\n\x03xid\x18\x03 \x01(\r\"\x96\x01\n\x15ofp_hello_elem_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_hello_elem_type\x12\x42\n\rversionbitmap\x18\x02 \x01(\x0b\x32).openflow_13.ofp_hello_elem_versionbitmapH\x00\x42\t\n\x07\x65lement\"/\n\x1cofp_hello_elem_versionbitmap\x12\x0f\n\x07\x62itmaps\x18\x02 \x03(\r\"A\n\tofp_hello\x12\x34\n\x08\x65lements\x18\x02 \x03(\x0b\x32\".openflow_13.ofp_hello_elem_header\"9\n\x11ofp_switch_config\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x15\n\rmiss_send_len\x18\x03 \x01(\r\"1\n\rofp_table_mod\x12\x10\n\x08table_id\x18\x02 \x01(\r\x12\x0e\n\x06\x63onfig\x18\x03 \x01(\r\"\xc3\x01\n\x08ofp_port\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x0f\n\x07hw_addr\x18\x02 \x03(\r\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\r\n\x05state\x18\x05 \x01(\r\x12\x0c\n\x04\x63urr\x18\x06 \x01(\r\x12\x12\n\nadvertised\x18\x07 \x01(\r\x12\x11\n\tsupported\x18\x08 \x01(\r\x12\x0c\n\x04peer\x18\t \x01(\r\x12\x12\n\ncurr_speed\x18\n \x01(\r\x12\x11\n\tmax_speed\x18\x0b \x01(\r\"{\n\x13ofp_switch_features\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12\x11\n\tn_buffers\x18\x03 \x01(\r\x12\x10\n\x08n_tables\x18\x04 \x01(\r\x12\x14\n\x0c\x61uxiliary_id\x18\x05 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x06 \x01(\r\"d\n\x0fofp_port_status\x12,\n\x06reason\x18\x02 \x01(\x0e\x32\x1c.openflow_13.ofp_port_reason\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_port\"a\n\x0cofp_port_mod\x12\x0f\n\x07port_no\x18\x02 \x01(\r\x12\x0f\n\x07hw_addr\x18\x03 \x03(\r\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\x0c\n\x04mask\x18\x05 \x01(\r\x12\x11\n\tadvertise\x18\x06 \x01(\r\"f\n\tofp_match\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_match_type\x12.\n\noxm_fields\x18\x02 \x03(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"\xc3\x01\n\rofp_oxm_field\x12-\n\toxm_class\x18\x01 \x01(\x0e\x32\x1a.openflow_13.ofp_oxm_class\x12\x33\n\tofb_field\x18\x04 \x01(\x0b\x32\x1e.openflow_13.ofp_oxm_ofb_fieldH\x00\x12\x45\n\x12\x65xperimenter_field\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_oxm_experimenter_fieldH\x00\x42\x07\n\x05\x66ield\"\x8b\n\n\x11ofp_oxm_ofb_field\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.oxm_ofb_field_types\x12\x10\n\x08has_mask\x18\x02 \x01(\x08\x12\x0e\n\x04port\x18\x03 \x01(\rH\x00\x12\x17\n\rphysical_port\x18\x04 \x01(\rH\x00\x12\x18\n\x0etable_metadata\x18\x05 \x01(\x04H\x00\x12\x11\n\x07\x65th_dst\x18\x06 \x01(\x0cH\x00\x12\x11\n\x07\x65th_src\x18\x07 \x01(\x0cH\x00\x12\x12\n\x08\x65th_type\x18\x08 \x01(\rH\x00\x12\x12\n\x08vlan_vid\x18\t \x01(\rH\x00\x12\x12\n\x08vlan_pcp\x18\n \x01(\rH\x00\x12\x11\n\x07ip_dscp\x18\x0b \x01(\rH\x00\x12\x10\n\x06ip_ecn\x18\x0c \x01(\rH\x00\x12\x12\n\x08ip_proto\x18\r \x01(\rH\x00\x12\x12\n\x08ipv4_src\x18\x0e \x01(\rH\x00\x12\x12\n\x08ipv4_dst\x18\x0f \x01(\rH\x00\x12\x11\n\x07tcp_src\x18\x10 \x01(\rH\x00\x12\x11\n\x07tcp_dst\x18\x11 \x01(\rH\x00\x12\x11\n\x07udp_src\x18\x12 \x01(\rH\x00\x12\x11\n\x07udp_dst\x18\x13 \x01(\rH\x00\x12\x12\n\x08sctp_src\x18\x14 \x01(\rH\x00\x12\x12\n\x08sctp_dst\x18\x15 \x01(\rH\x00\x12\x15\n\x0bicmpv4_type\x18\x16 \x01(\rH\x00\x12\x15\n\x0bicmpv4_code\x18\x17 \x01(\rH\x00\x12\x10\n\x06\x61rp_op\x18\x18 \x01(\rH\x00\x12\x11\n\x07\x61rp_spa\x18\x19 \x01(\rH\x00\x12\x11\n\x07\x61rp_tpa\x18\x1a \x01(\rH\x00\x12\x11\n\x07\x61rp_sha\x18\x1b \x01(\x0cH\x00\x12\x11\n\x07\x61rp_tha\x18\x1c \x01(\x0cH\x00\x12\x12\n\x08ipv6_src\x18\x1d \x01(\x0cH\x00\x12\x12\n\x08ipv6_dst\x18\x1e \x01(\x0cH\x00\x12\x15\n\x0bipv6_flabel\x18\x1f \x01(\rH\x00\x12\x15\n\x0bicmpv6_type\x18  \x01(\rH\x00\x12\x15\n\x0bicmpv6_code\x18! \x01(\rH\x00\x12\x18\n\x0eipv6_nd_target\x18\" \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_ssl\x18# \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_tll\x18$ \x01(\x0cH\x00\x12\x14\n\nmpls_label\x18% \x01(\rH\x00\x12\x11\n\x07mpls_tc\x18& \x01(\rH\x00\x12\x12\n\x08mpls_bos\x18\' \x01(\rH\x00\x12\x12\n\x08pbb_isid\x18( \x01(\rH\x00\x12\x13\n\ttunnel_id\x18) \x01(\x04H\x00\x12\x15\n\x0bipv6_exthdr\x18* \x01(\rH\x00\x12\x1d\n\x13table_metadata_mask\x18i \x01(\x04H\x01\x12\x16\n\x0c\x65th_dst_mask\x18j \x01(\x0cH\x01\x12\x16\n\x0c\x65th_src_mask\x18k \x01(\x0cH\x01\x12\x17\n\rvlan_vid_mask\x18m \x01(\rH\x01\x12\x17\n\ripv4_src_mask\x18r \x01(\rH\x01\x12\x17\n\ripv4_dst_mask\x18s \x01(\rH\x01\x12\x16\n\x0c\x61rp_spa_mask\x18} \x01(\rH\x01\x12\x16\n\x0c\x61rp_tpa_mask\x18~ \x01(\rH\x01\x12\x18\n\ripv6_src_mask\x18\x81\x01 \x01(\x0cH\x01\x12\x18\n\ripv6_dst_mask\x18\x82\x01 \x01(\x0cH\x01\x12\x1b\n\x10ipv6_flabel_mask\x18\x83\x01 \x01(\rH\x01\x12\x18\n\rpbb_isid_mask\x18\x8c\x01 \x01(\rH\x01\x12\x19\n\x0etunnel_id_mask\x18\x8d\x01 \x01(\x04H\x01\x12\x1b\n\x10ipv6_exthdr_mask\x18\x8e\x01 \x01(\rH\x01\x42\x07\n\x05valueB\x06\n\x04mask\"F\n\x1aofp_oxm_experimenter_field\x12\x12\n\noxm_header\x18\x01 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\"\xe6\x03\n\nofp_action\x12*\n\x04type\x18\x01 \x01(\x0e\x32\x1c.openflow_13.ofp_action_type\x12\x30\n\x06output\x18\x02 \x01(\x0b\x32\x1e.openflow_13.ofp_action_outputH\x00\x12\x34\n\x08mpls_ttl\x18\x03 \x01(\x0b\x32 .openflow_13.ofp_action_mpls_ttlH\x00\x12,\n\x04push\x18\x04 \x01(\x0b\x32\x1c.openflow_13.ofp_action_pushH\x00\x12\x34\n\x08pop_mpls\x18\x05 \x01(\x0b\x32 .openflow_13.ofp_action_pop_mplsH\x00\x12.\n\x05group\x18\x06 \x01(\x0b\x32\x1d.openflow_13.ofp_action_groupH\x00\x12\x30\n\x06nw_ttl\x18\x07 \x01(\x0b\x32\x1e.openflow_13.ofp_action_nw_ttlH\x00\x12\x36\n\tset_field\x18\x08 \x01(\x0b\x32!.openflow_13.ofp_action_set_fieldH\x00\x12<\n\x0c\x65xperimenter\x18\t \x01(\x0b\x32$.openflow_13.ofp_action_experimenterH\x00\x42\x08\n\x06\x61\x63tion\"2\n\x11ofp_action_output\x12\x0c\n\x04port\x18\x01 \x01(\r\x12\x0f\n\x07max_len\x18\x02 \x01(\r\"\'\n\x13ofp_action_mpls_ttl\x12\x10\n\x08mpls_ttl\x18\x01 \x01(\r\"$\n\x0fofp_action_push\x12\x11\n\tethertype\x18\x01 \x01(\r\"(\n\x13ofp_action_pop_mpls\x12\x11\n\tethertype\x18\x01 \x01(\r\"$\n\x10ofp_action_group\x12\x10\n\x08group_id\x18\x01 \x01(\r\"#\n\x11ofp_action_nw_ttl\x12\x0e\n\x06nw_ttl\x18\x01 \x01(\r\"A\n\x14ofp_action_set_field\x12)\n\x05\x66ield\x18\x01 \x01(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"=\n\x17ofp_action_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xde\x02\n\x0fofp_instruction\x12\x0c\n\x04type\x18\x01 \x01(\r\x12=\n\ngoto_table\x18\x02 \x01(\x0b\x32\'.openflow_13.ofp_instruction_goto_tableH\x00\x12\x45\n\x0ewrite_metadata\x18\x03 \x01(\x0b\x32+.openflow_13.ofp_instruction_write_metadataH\x00\x12\x37\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32$.openflow_13.ofp_instruction_actionsH\x00\x12\x33\n\x05meter\x18\x05 \x01(\x0b\x32\".openflow_13.ofp_instruction_meterH\x00\x12\x41\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32).openflow_13.ofp_instruction_experimenterH\x00\x42\x06\n\x04\x64\x61ta\".\n\x1aofp_instruction_goto_table\x12\x10\n\x08table_id\x18\x01 \x01(\r\"I\n\x1eofp_instruction_write_metadata\x12\x10\n\x08metadata\x18\x01 \x01(\x04\x12\x15\n\rmetadata_mask\x18\x02 \x01(\x04\"C\n\x17ofp_instruction_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\")\n\x15ofp_instruction_meter\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"B\n\x1cofp_instruction_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xd9\x02\n\x0cofp_flow_mod\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x03 \x01(\x04\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x32\n\x07\x63ommand\x18\x05 \x01(\x0e\x32!.openflow_13.ofp_flow_mod_command\x12\x14\n\x0cidle_timeout\x18\x06 \x01(\r\x12\x14\n\x0chard_timeout\x18\x07 \x01(\r\x12\x10\n\x08priority\x18\x08 \x01(\r\x12\x11\n\tbuffer_id\x18\t \x01(\r\x12\x10\n\x08out_port\x18\n \x01(\r\x12\x11\n\tout_group\x18\x0b \x01(\r\x12\r\n\x05\x66lags\x18\x0c \x01(\r\x12%\n\x05match\x18\r \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\x0e \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"o\n\nofp_bucket\x12\x0e\n\x06weight\x18\x01 \x01(\r\x12\x12\n\nwatch_port\x18\x02 \x01(\r\x12\x13\n\x0bwatch_group\x18\x03 \x01(\r\x12(\n\x07\x61\x63tions\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_action\"\xab\x01\n\rofp_group_mod\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_group_mod_command\x12)\n\x04type\x18\x03 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x04 \x01(\r\x12(\n\x07\x62uckets\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"\x81\x01\n\x0eofp_packet_out\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x0f\n\x07in_port\x18\x03 \x01(\r\x12\x13\n\x0b\x61\x63tions_len\x18\x04 \x01(\r\x12(\n\x07\x61\x63tions\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_action\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\"\xbf\x01\n\rofp_packet_in\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x11\n\ttotal_len\x18\x03 \x01(\r\x12\x31\n\x06reason\x18\x04 \x01(\x0e\x32!.openflow_13.ofp_packet_in_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x06 \x01(\x04\x12%\n\x05match\x18\x07 \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x0c\n\x04\x64\x61ta\x18\x08 \x01(\x0c\"\xa6\x02\n\x10ofp_flow_removed\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x10\n\x08priority\x18\x03 \x01(\r\x12\x34\n\x06reason\x18\x04 \x01(\x0e\x32$.openflow_13.ofp_flow_removed_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x08 \x01(\r\x12\x14\n\x0chard_timeout\x18\t \x01(\r\x12\x14\n\x0cpacket_count\x18\n \x01(\x04\x12\x12\n\nbyte_count\x18\x0b \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\"v\n\x15ofp_meter_band_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"R\n\x13ofp_meter_band_drop\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"m\n\x1aofp_meter_band_dscp_remark\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x12\n\nprec_level\x18\x05 \x01(\r\"\x92\x01\n\x1bofp_meter_band_experimenter\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x05 \x01(\r\"\xc1\x01\n\rofp_meter_mod\x12\'\n\x06header\x18\x01 \x01(\x0b\x32\x17.openflow_13.ofp_header\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_meter_mod_command\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x10\n\x08meter_id\x18\x04 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x05 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"9\n\rofp_error_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"`\n\x1aofp_error_experimenter_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x04 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"c\n\x15ofp_multipart_request\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"a\n\x13ofp_multipart_reply\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"c\n\x08ofp_desc\x12\x10\n\x08mfr_desc\x18\x01 \x01(\t\x12\x0f\n\x07hw_desc\x18\x02 \x01(\t\x12\x0f\n\x07sw_desc\x18\x03 \x01(\t\x12\x12\n\nserial_num\x18\x04 \x01(\t\x12\x0f\n\x07\x64p_desc\x18\x05 \x01(\t\"\x9b\x01\n\x16ofp_flow_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"\xb1\x02\n\x0eofp_flow_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x02 \x01(\r\x12\x15\n\rduration_nsec\x18\x03 \x01(\r\x12\x10\n\x08priority\x18\x04 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x05 \x01(\r\x12\x14\n\x0chard_timeout\x18\x06 \x01(\r\x12\r\n\x05\x66lags\x18\x07 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x08 \x01(\x04\x12\x14\n\x0cpacket_count\x18\t \x01(\x04\x12\x12\n\nbyte_count\x18\n \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\r \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"\xa0\x01\n\x1bofp_aggregate_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"Y\n\x19ofp_aggregate_stats_reply\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\x12\x12\n\nflow_count\x18\x03 \x01(\r\"\xb1\x03\n\x1aofp_table_feature_property\x12\x36\n\x04type\x18\x01 \x01(\x0e\x32(.openflow_13.ofp_table_feature_prop_type\x12H\n\x0cinstructions\x18\x02 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_instructionsH\x00\x12\x46\n\x0bnext_tables\x18\x03 \x01(\x0b\x32/.openflow_13.ofp_table_feature_prop_next_tablesH\x00\x12>\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32+.openflow_13.ofp_table_feature_prop_actionsH\x00\x12\x36\n\x03oxm\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_table_feature_prop_oxmH\x00\x12H\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_experimenterH\x00\x42\x07\n\x05value\"Y\n#ofp_table_feature_prop_instructions\x12\x32\n\x0cinstructions\x18\x01 \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"<\n\"ofp_table_feature_prop_next_tables\x12\x16\n\x0enext_table_ids\x18\x01 \x03(\r\"J\n\x1eofp_table_feature_prop_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\"-\n\x1aofp_table_feature_prop_oxm\x12\x0f\n\x07oxm_ids\x18\x03 \x03(\r\"h\n#ofp_table_feature_prop_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x19\n\x11\x65xperimenter_data\x18\x04 \x03(\r\"\xc6\x01\n\x12ofp_table_features\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0emetadata_match\x18\x03 \x01(\x04\x12\x16\n\x0emetadata_write\x18\x04 \x01(\x04\x12\x0e\n\x06\x63onfig\x18\x05 \x01(\r\x12\x13\n\x0bmax_entries\x18\x06 \x01(\r\x12;\n\nproperties\x18\x07 \x03(\x0b\x32\'.openflow_13.ofp_table_feature_property\"f\n\x0fofp_table_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x61\x63tive_count\x18\x02 \x01(\r\x12\x14\n\x0clookup_count\x18\x03 \x01(\x04\x12\x15\n\rmatched_count\x18\x04 \x01(\x04\")\n\x16ofp_port_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\"\xbb\x02\n\x0eofp_port_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x12\n\nrx_packets\x18\x02 \x01(\x04\x12\x12\n\ntx_packets\x18\x03 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08tx_bytes\x18\x05 \x01(\x04\x12\x12\n\nrx_dropped\x18\x06 \x01(\x04\x12\x12\n\ntx_dropped\x18\x07 \x01(\x04\x12\x11\n\trx_errors\x18\x08 \x01(\x04\x12\x11\n\ttx_errors\x18\t \x01(\x04\x12\x14\n\x0crx_frame_err\x18\n \x01(\x04\x12\x13\n\x0brx_over_err\x18\x0b \x01(\x04\x12\x12\n\nrx_crc_err\x18\x0c \x01(\x04\x12\x12\n\ncollisions\x18\r \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x0e \x01(\r\x12\x15\n\rduration_nsec\x18\x0f \x01(\r\"+\n\x17ofp_group_stats_request\x12\x10\n\x08group_id\x18\x01 \x01(\r\">\n\x12ofp_bucket_counter\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\"\xc4\x01\n\x0fofp_group_stats\x12\x10\n\x08group_id\x18\x01 \x01(\r\x12\x11\n\tref_count\x18\x02 \x01(\r\x12\x14\n\x0cpacket_count\x18\x03 \x01(\x04\x12\x12\n\nbyte_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\x0c\x62ucket_stats\x18\x07 \x03(\x0b\x32\x1f.openflow_13.ofp_bucket_counter\"w\n\x0eofp_group_desc\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12(\n\x07\x62uckets\x18\x03 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"i\n\x0fofp_group_entry\x12)\n\x04\x64\x65sc\x18\x01 \x01(\x0b\x32\x1b.openflow_13.ofp_group_desc\x12+\n\x05stats\x18\x02 \x01(\x0b\x32\x1c.openflow_13.ofp_group_stats\"^\n\x12ofp_group_features\x12\r\n\x05types\x18\x01 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x01(\r\x12\x12\n\nmax_groups\x18\x03 \x03(\r\x12\x0f\n\x07\x61\x63tions\x18\x04 \x03(\r\"/\n\x1bofp_meter_multipart_request\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"J\n\x14ofp_meter_band_stats\x12\x19\n\x11packet_band_count\x18\x01 \x01(\x04\x12\x17\n\x0f\x62yte_band_count\x18\x02 \x01(\x04\"\xcb\x01\n\x0fofp_meter_stats\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x12\n\nflow_count\x18\x02 \x01(\r\x12\x17\n\x0fpacket_in_count\x18\x03 \x01(\x04\x12\x15\n\rbyte_in_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\nband_stats\x18\x07 \x03(\x0b\x32!.openflow_13.ofp_meter_band_stats\"f\n\x10ofp_meter_config\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12\x10\n\x08meter_id\x18\x02 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x03 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"w\n\x12ofp_meter_features\x12\x11\n\tmax_meter\x18\x01 \x01(\r\x12\x12\n\nband_types\x18\x02 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x03 \x01(\r\x12\x11\n\tmax_bands\x18\x04 \x01(\r\x12\x11\n\tmax_color\x18\x05 \x01(\r\"Y\n!ofp_experimenter_multipart_header\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"O\n\x17ofp_experimenter_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"6\n\x15ofp_queue_prop_header\x12\x10\n\x08property\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_min_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_max_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"z\n\x1bofp_queue_prop_experimenter\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"j\n\x10ofp_packet_queue\x12\x10\n\x08queue_id\x18\x01 \x01(\r\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x36\n\nproperties\x18\x04 \x03(\x0b\x32\".openflow_13.ofp_queue_prop_header\",\n\x1cofp_queue_get_config_request\x12\x0c\n\x04port\x18\x02 \x01(\r\"Y\n\x1aofp_queue_get_config_reply\x12\x0c\n\x04port\x18\x02 \x01(\r\x12-\n\x06queues\x18\x03 \x03(\x0b\x32\x1d.openflow_13.ofp_packet_queue\"6\n\x14ofp_action_set_queue\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x03 \x01(\r\"<\n\x17ofp_queue_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\"\x9a\x01\n\x0fofp_queue_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\x12\x10\n\x08tx_bytes\x18\x03 \x01(\x04\x12\x12\n\ntx_packets\x18\x04 \x01(\x04\x12\x11\n\ttx_errors\x18\x05 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\"Y\n\x10ofp_role_request\x12.\n\x04role\x18\x02 \x01(\x0e\x32 .openflow_13.ofp_controller_role\x12\x15\n\rgeneration_id\x18\x03 \x01(\x04\"_\n\x10ofp_async_config\x12\x16\n\x0epacket_in_mask\x18\x02 \x03(\r\x12\x18\n\x10port_status_mask\x18\x03 \x03(\r\x12\x19\n\x11\x66low_removed_mask\x18\x04 \x03(\r*\xd5\x01\n\x0bofp_port_no\x12\x10\n\x0cOFPP_INVALID\x10\x00\x12\x10\n\x08OFPP_MAX\x10\x80\xfe\xff\xff\x07\x12\x14\n\x0cOFPP_IN_PORT\x10\xf8\xff\xff\xff\x07\x12\x12\n\nOFPP_TABLE\x10\xf9\xff\xff\xff\x07\x12\x13\n\x0bOFPP_NORMAL\x10\xfa\xff\xff\xff\x07\x12\x12\n\nOFPP_FLOOD\x10\xfb\xff\xff\xff\x07\x12\x10\n\x08OFPP_ALL\x10\xfc\xff\xff\xff\x07\x12\x17\n\x0fOFPP_CONTROLLER\x10\xfd\xff\xff\xff\x07\x12\x12\n\nOFPP_LOCAL\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPP_ANY\x10\xff\xff\xff\xff\x07*\xc8\x05\n\x08ofp_type\x12\x0e\n\nOFPT_HELLO\x10\x00\x12\x0e\n\nOFPT_ERROR\x10\x01\x12\x15\n\x11OFPT_ECHO_REQUEST\x10\x02\x12\x13\n\x0fOFPT_ECHO_REPLY\x10\x03\x12\x15\n\x11OFPT_EXPERIMENTER\x10\x04\x12\x19\n\x15OFPT_FEATURES_REQUEST\x10\x05\x12\x17\n\x13OFPT_FEATURES_REPLY\x10\x06\x12\x1b\n\x17OFPT_GET_CONFIG_REQUEST\x10\x07\x12\x19\n\x15OFPT_GET_CONFIG_REPLY\x10\x08\x12\x13\n\x0fOFPT_SET_CONFIG\x10\t\x12\x12\n\x0eOFPT_PACKET_IN\x10\n\x12\x15\n\x11OFPT_FLOW_REMOVED\x10\x0b\x12\x14\n\x10OFPT_PORT_STATUS\x10\x0c\x12\x13\n\x0fOFPT_PACKET_OUT\x10\r\x12\x11\n\rOFPT_FLOW_MOD\x10\x0e\x12\x12\n\x0eOFPT_GROUP_MOD\x10\x0f\x12\x11\n\rOFPT_PORT_MOD\x10\x10\x12\x12\n\x0eOFPT_TABLE_MOD\x10\x11\x12\x1a\n\x16OFPT_MULTIPART_REQUEST\x10\x12\x12\x18\n\x14OFPT_MULTIPART_REPLY\x10\x13\x12\x18\n\x14OFPT_BARRIER_REQUEST\x10\x14\x12\x16\n\x12OFPT_BARRIER_REPLY\x10\x15\x12!\n\x1dOFPT_QUEUE_GET_CONFIG_REQUEST\x10\x16\x12\x1f\n\x1bOFPT_QUEUE_GET_CONFIG_REPLY\x10\x17\x12\x15\n\x11OFPT_ROLE_REQUEST\x10\x18\x12\x13\n\x0fOFPT_ROLE_REPLY\x10\x19\x12\x1a\n\x16OFPT_GET_ASYNC_REQUEST\x10\x1a\x12\x18\n\x14OFPT_GET_ASYNC_REPLY\x10\x1b\x12\x12\n\x0eOFPT_SET_ASYNC\x10\x1c\x12\x12\n\x0eOFPT_METER_MOD\x10\x1d*C\n\x13ofp_hello_elem_type\x12\x12\n\x0eOFPHET_INVALID\x10\x00\x12\x18\n\x14OFPHET_VERSIONBITMAP\x10\x01*e\n\x10ofp_config_flags\x12\x14\n\x10OFPC_FRAG_NORMAL\x10\x00\x12\x12\n\x0eOFPC_FRAG_DROP\x10\x01\x12\x13\n\x0fOFPC_FRAG_REASM\x10\x02\x12\x12\n\x0eOFPC_FRAG_MASK\x10\x03*@\n\x10ofp_table_config\x12\x11\n\rOFPTC_INVALID\x10\x00\x12\x19\n\x15OFPTC_DEPRECATED_MASK\x10\x03*>\n\tofp_table\x12\x11\n\rOFPTT_INVALID\x10\x00\x12\x0e\n\tOFPTT_MAX\x10\xfe\x01\x12\x0e\n\tOFPTT_ALL\x10\xff\x01*\xbb\x01\n\x10ofp_capabilities\x12\x10\n\x0cOFPC_INVALID\x10\x00\x12\x13\n\x0fOFPC_FLOW_STATS\x10\x01\x12\x14\n\x10OFPC_TABLE_STATS\x10\x02\x12\x13\n\x0fOFPC_PORT_STATS\x10\x04\x12\x14\n\x10OFPC_GROUP_STATS\x10\x08\x12\x11\n\rOFPC_IP_REASM\x10 \x12\x14\n\x10OFPC_QUEUE_STATS\x10@\x12\x16\n\x11OFPC_PORT_BLOCKED\x10\x80\x02*v\n\x0fofp_port_config\x12\x11\n\rOFPPC_INVALID\x10\x00\x12\x13\n\x0fOFPPC_PORT_DOWN\x10\x01\x12\x11\n\rOFPPC_NO_RECV\x10\x04\x12\x10\n\x0cOFPPC_NO_FWD\x10 \x12\x16\n\x12OFPPC_NO_PACKET_IN\x10@*[\n\x0eofp_port_state\x12\x11\n\rOFPPS_INVALID\x10\x00\x12\x13\n\x0fOFPPS_LINK_DOWN\x10\x01\x12\x11\n\rOFPPS_BLOCKED\x10\x02\x12\x0e\n\nOFPPS_LIVE\x10\x04*\xdd\x02\n\x11ofp_port_features\x12\x11\n\rOFPPF_INVALID\x10\x00\x12\x11\n\rOFPPF_10MB_HD\x10\x01\x12\x11\n\rOFPPF_10MB_FD\x10\x02\x12\x12\n\x0eOFPPF_100MB_HD\x10\x04\x12\x12\n\x0eOFPPF_100MB_FD\x10\x08\x12\x10\n\x0cOFPPF_1GB_HD\x10\x10\x12\x10\n\x0cOFPPF_1GB_FD\x10 \x12\x11\n\rOFPPF_10GB_FD\x10@\x12\x12\n\rOFPPF_40GB_FD\x10\x80\x01\x12\x13\n\x0eOFPPF_100GB_FD\x10\x80\x02\x12\x11\n\x0cOFPPF_1TB_FD\x10\x80\x04\x12\x10\n\x0bOFPPF_OTHER\x10\x80\x08\x12\x11\n\x0cOFPPF_COPPER\x10\x80\x10\x12\x10\n\x0bOFPPF_FIBER\x10\x80 \x12\x12\n\rOFPPF_AUTONEG\x10\x80@\x12\x11\n\x0bOFPPF_PAUSE\x10\x80\x80\x01\x12\x16\n\x10OFPPF_PAUSE_ASYM\x10\x80\x80\x02*D\n\x0fofp_port_reason\x12\r\n\tOFPPR_ADD\x10\x00\x12\x10\n\x0cOFPPR_DELETE\x10\x01\x12\x10\n\x0cOFPPR_MODIFY\x10\x02*3\n\x0eofp_match_type\x12\x12\n\x0eOFPMT_STANDARD\x10\x00\x12\r\n\tOFPMT_OXM\x10\x01*k\n\rofp_oxm_class\x12\x10\n\x0cOFPXMC_NXM_0\x10\x00\x12\x10\n\x0cOFPXMC_NXM_1\x10\x01\x12\x1b\n\x15OFPXMC_OPENFLOW_BASIC\x10\x80\x80\x02\x12\x19\n\x13OFPXMC_EXPERIMENTER\x10\xff\xff\x03*\x90\x08\n\x13oxm_ofb_field_types\x12\x16\n\x12OFPXMT_OFB_IN_PORT\x10\x00\x12\x1a\n\x16OFPXMT_OFB_IN_PHY_PORT\x10\x01\x12\x17\n\x13OFPXMT_OFB_METADATA\x10\x02\x12\x16\n\x12OFPXMT_OFB_ETH_DST\x10\x03\x12\x16\n\x12OFPXMT_OFB_ETH_SRC\x10\x04\x12\x17\n\x13OFPXMT_OFB_ETH_TYPE\x10\x05\x12\x17\n\x13OFPXMT_OFB_VLAN_VID\x10\x06\x12\x17\n\x13OFPXMT_OFB_VLAN_PCP\x10\x07\x12\x16\n\x12OFPXMT_OFB_IP_DSCP\x10\x08\x12\x15\n\x11OFPXMT_OFB_IP_ECN\x10\t\x12\x17\n\x13OFPXMT_OFB_IP_PROTO\x10\n\x12\x17\n\x13OFPXMT_OFB_IPV4_SRC\x10\x0b\x12\x17\n\x13OFPXMT_OFB_IPV4_DST\x10\x0c\x12\x16\n\x12OFPXMT_OFB_TCP_SRC\x10\r\x12\x16\n\x12OFPXMT_OFB_TCP_DST\x10\x0e\x12\x16\n\x12OFPXMT_OFB_UDP_SRC\x10\x0f\x12\x16\n\x12OFPXMT_OFB_UDP_DST\x10\x10\x12\x17\n\x13OFPXMT_OFB_SCTP_SRC\x10\x11\x12\x17\n\x13OFPXMT_OFB_SCTP_DST\x10\x12\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_TYPE\x10\x13\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_CODE\x10\x14\x12\x15\n\x11OFPXMT_OFB_ARP_OP\x10\x15\x12\x16\n\x12OFPXMT_OFB_ARP_SPA\x10\x16\x12\x16\n\x12OFPXMT_OFB_ARP_TPA\x10\x17\x12\x16\n\x12OFPXMT_OFB_ARP_SHA\x10\x18\x12\x16\n\x12OFPXMT_OFB_ARP_THA\x10\x19\x12\x17\n\x13OFPXMT_OFB_IPV6_SRC\x10\x1a\x12\x17\n\x13OFPXMT_OFB_IPV6_DST\x10\x1b\x12\x1a\n\x16OFPXMT_OFB_IPV6_FLABEL\x10\x1c\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_TYPE\x10\x1d\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_CODE\x10\x1e\x12\x1d\n\x19OFPXMT_OFB_IPV6_ND_TARGET\x10\x1f\x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_SLL\x10 \x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_TLL\x10!\x12\x19\n\x15OFPXMT_OFB_MPLS_LABEL\x10\"\x12\x16\n\x12OFPXMT_OFB_MPLS_TC\x10#\x12\x17\n\x13OFPXMT_OFB_MPLS_BOS\x10$\x12\x17\n\x13OFPXMT_OFB_PBB_ISID\x10%\x12\x18\n\x14OFPXMT_OFB_TUNNEL_ID\x10&\x12\x1a\n\x16OFPXMT_OFB_IPV6_EXTHDR\x10\'*3\n\x0bofp_vlan_id\x12\x0f\n\x0bOFPVID_NONE\x10\x00\x12\x13\n\x0eOFPVID_PRESENT\x10\x80 *\xc9\x01\n\x14ofp_ipv6exthdr_flags\x12\x12\n\x0eOFPIEH_INVALID\x10\x00\x12\x11\n\rOFPIEH_NONEXT\x10\x01\x12\x0e\n\nOFPIEH_ESP\x10\x02\x12\x0f\n\x0bOFPIEH_AUTH\x10\x04\x12\x0f\n\x0bOFPIEH_DEST\x10\x08\x12\x0f\n\x0bOFPIEH_FRAG\x10\x10\x12\x11\n\rOFPIEH_ROUTER\x10 \x12\x0e\n\nOFPIEH_HOP\x10@\x12\x11\n\x0cOFPIEH_UNREP\x10\x80\x01\x12\x11\n\x0cOFPIEH_UNSEQ\x10\x80\x02*\xfc\x02\n\x0fofp_action_type\x12\x10\n\x0cOFPAT_OUTPUT\x10\x00\x12\x16\n\x12OFPAT_COPY_TTL_OUT\x10\x0b\x12\x15\n\x11OFPAT_COPY_TTL_IN\x10\x0c\x12\x16\n\x12OFPAT_SET_MPLS_TTL\x10\x0f\x12\x16\n\x12OFPAT_DEC_MPLS_TTL\x10\x10\x12\x13\n\x0fOFPAT_PUSH_VLAN\x10\x11\x12\x12\n\x0eOFPAT_POP_VLAN\x10\x12\x12\x13\n\x0fOFPAT_PUSH_MPLS\x10\x13\x12\x12\n\x0eOFPAT_POP_MPLS\x10\x14\x12\x13\n\x0fOFPAT_SET_QUEUE\x10\x15\x12\x0f\n\x0bOFPAT_GROUP\x10\x16\x12\x14\n\x10OFPAT_SET_NW_TTL\x10\x17\x12\x14\n\x10OFPAT_DEC_NW_TTL\x10\x18\x12\x13\n\x0fOFPAT_SET_FIELD\x10\x19\x12\x12\n\x0eOFPAT_PUSH_PBB\x10\x1a\x12\x11\n\rOFPAT_POP_PBB\x10\x1b\x12\x18\n\x12OFPAT_EXPERIMENTER\x10\xff\xff\x03*V\n\x16ofp_controller_max_len\x12\x12\n\x0eOFPCML_INVALID\x10\x00\x12\x10\n\nOFPCML_MAX\x10\xe5\xff\x03\x12\x16\n\x10OFPCML_NO_BUFFER\x10\xff\xff\x03*\xcf\x01\n\x14ofp_instruction_type\x12\x11\n\rOFPIT_INVALID\x10\x00\x12\x14\n\x10OFPIT_GOTO_TABLE\x10\x01\x12\x18\n\x14OFPIT_WRITE_METADATA\x10\x02\x12\x17\n\x13OFPIT_WRITE_ACTIONS\x10\x03\x12\x17\n\x13OFPIT_APPLY_ACTIONS\x10\x04\x12\x17\n\x13OFPIT_CLEAR_ACTIONS\x10\x05\x12\x0f\n\x0bOFPIT_METER\x10\x06\x12\x18\n\x12OFPIT_EXPERIMENTER\x10\xff\xff\x03*{\n\x14ofp_flow_mod_command\x12\r\n\tOFPFC_ADD\x10\x00\x12\x10\n\x0cOFPFC_MODIFY\x10\x01\x12\x17\n\x13OFPFC_MODIFY_STRICT\x10\x02\x12\x10\n\x0cOFPFC_DELETE\x10\x03\x12\x17\n\x13OFPFC_DELETE_STRICT\x10\x04*\xa3\x01\n\x12ofp_flow_mod_flags\x12\x11\n\rOFPFF_INVALID\x10\x00\x12\x17\n\x13OFPFF_SEND_FLOW_REM\x10\x01\x12\x17\n\x13OFPFF_CHECK_OVERLAP\x10\x02\x12\x16\n\x12OFPFF_RESET_COUNTS\x10\x04\x12\x17\n\x13OFPFF_NO_PKT_COUNTS\x10\x08\x12\x17\n\x13OFPFF_NO_BYT_COUNTS\x10\x10*S\n\tofp_group\x12\x10\n\x0cOFPG_INVALID\x10\x00\x12\x10\n\x08OFPG_MAX\x10\x80\xfe\xff\xff\x07\x12\x10\n\x08OFPG_ALL\x10\xfc\xff\xff\xff\x07\x12\x10\n\x08OFPG_ANY\x10\xff\xff\xff\xff\x07*J\n\x15ofp_group_mod_command\x12\r\n\tOFPGC_ADD\x10\x00\x12\x10\n\x0cOFPGC_MODIFY\x10\x01\x12\x10\n\x0cOFPGC_DELETE\x10\x02*S\n\x0eofp_group_type\x12\r\n\tOFPGT_ALL\x10\x00\x12\x10\n\x0cOFPGT_SELECT\x10\x01\x12\x12\n\x0eOFPGT_INDIRECT\x10\x02\x12\x0c\n\x08OFPGT_FF\x10\x03*P\n\x14ofp_packet_in_reason\x12\x11\n\rOFPR_NO_MATCH\x10\x00\x12\x0f\n\x0bOFPR_ACTION\x10\x01\x12\x14\n\x10OFPR_INVALID_TTL\x10\x02*\x8b\x01\n\x17ofp_flow_removed_reason\x12\x16\n\x12OFPRR_IDLE_TIMEOUT\x10\x00\x12\x16\n\x12OFPRR_HARD_TIMEOUT\x10\x01\x12\x10\n\x0cOFPRR_DELETE\x10\x02\x12\x16\n\x12OFPRR_GROUP_DELETE\x10\x03\x12\x16\n\x12OFPRR_METER_DELETE\x10\x04*n\n\tofp_meter\x12\r\n\tOFPM_ZERO\x10\x00\x12\x10\n\x08OFPM_MAX\x10\x80\x80\xfc\xff\x07\x12\x15\n\rOFPM_SLOWPATH\x10\xfd\xff\xff\xff\x07\x12\x17\n\x0fOFPM_CONTROLLER\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPM_ALL\x10\xff\xff\xff\xff\x07*m\n\x13ofp_meter_band_type\x12\x12\n\x0eOFPMBT_INVALID\x10\x00\x12\x0f\n\x0bOFPMBT_DROP\x10\x01\x12\x16\n\x12OFPMBT_DSCP_REMARK\x10\x02\x12\x19\n\x13OFPMBT_EXPERIMENTER\x10\xff\xff\x03*J\n\x15ofp_meter_mod_command\x12\r\n\tOFPMC_ADD\x10\x00\x12\x10\n\x0cOFPMC_MODIFY\x10\x01\x12\x10\n\x0cOFPMC_DELETE\x10\x02*g\n\x0fofp_meter_flags\x12\x11\n\rOFPMF_INVALID\x10\x00\x12\x0e\n\nOFPMF_KBPS\x10\x01\x12\x0f\n\x0bOFPMF_PKTPS\x10\x02\x12\x0f\n\x0bOFPMF_BURST\x10\x04\x12\x0f\n\x0bOFPMF_STATS\x10\x08*\xa4\x03\n\x0eofp_error_type\x12\x16\n\x12OFPET_HELLO_FAILED\x10\x00\x12\x15\n\x11OFPET_BAD_REQUEST\x10\x01\x12\x14\n\x10OFPET_BAD_ACTION\x10\x02\x12\x19\n\x15OFPET_BAD_INSTRUCTION\x10\x03\x12\x13\n\x0fOFPET_BAD_MATCH\x10\x04\x12\x19\n\x15OFPET_FLOW_MOD_FAILED\x10\x05\x12\x1a\n\x16OFPET_GROUP_MOD_FAILED\x10\x06\x12\x19\n\x15OFPET_PORT_MOD_FAILED\x10\x07\x12\x1a\n\x16OFPET_TABLE_MOD_FAILED\x10\x08\x12\x19\n\x15OFPET_QUEUE_OP_FAILED\x10\t\x12\x1e\n\x1aOFPET_SWITCH_CONFIG_FAILED\x10\n\x12\x1d\n\x19OFPET_ROLE_REQUEST_FAILED\x10\x0b\x12\x1a\n\x16OFPET_METER_MOD_FAILED\x10\x0c\x12\x1f\n\x1bOFPET_TABLE_FEATURES_FAILED\x10\r\x12\x18\n\x12OFPET_EXPERIMENTER\x10\xff\xff\x03*B\n\x15ofp_hello_failed_code\x12\x17\n\x13OFPHFC_INCOMPATIBLE\x10\x00\x12\x10\n\x0cOFPHFC_EPERM\x10\x01*\xed\x02\n\x14ofp_bad_request_code\x12\x16\n\x12OFPBRC_BAD_VERSION\x10\x00\x12\x13\n\x0fOFPBRC_BAD_TYPE\x10\x01\x12\x18\n\x14OFPBRC_BAD_MULTIPART\x10\x02\x12\x1b\n\x17OFPBRC_BAD_EXPERIMENTER\x10\x03\x12\x17\n\x13OFPBRC_BAD_EXP_TYPE\x10\x04\x12\x10\n\x0cOFPBRC_EPERM\x10\x05\x12\x12\n\x0eOFPBRC_BAD_LEN\x10\x06\x12\x17\n\x13OFPBRC_BUFFER_EMPTY\x10\x07\x12\x19\n\x15OFPBRC_BUFFER_UNKNOWN\x10\x08\x12\x17\n\x13OFPBRC_BAD_TABLE_ID\x10\t\x12\x13\n\x0fOFPBRC_IS_SLAVE\x10\n\x12\x13\n\x0fOFPBRC_BAD_PORT\x10\x0b\x12\x15\n\x11OFPBRC_BAD_PACKET\x10\x0c\x12$\n OFPBRC_MULTIPART_BUFFER_OVERFLOW\x10\r*\x9c\x03\n\x13ofp_bad_action_code\x12\x13\n\x0fOFPBAC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBAC_BAD_LEN\x10\x01\x12\x1b\n\x17OFPBAC_BAD_EXPERIMENTER\x10\x02\x12\x17\n\x13OFPBAC_BAD_EXP_TYPE\x10\x03\x12\x17\n\x13OFPBAC_BAD_OUT_PORT\x10\x04\x12\x17\n\x13OFPBAC_BAD_ARGUMENT\x10\x05\x12\x10\n\x0cOFPBAC_EPERM\x10\x06\x12\x13\n\x0fOFPBAC_TOO_MANY\x10\x07\x12\x14\n\x10OFPBAC_BAD_QUEUE\x10\x08\x12\x18\n\x14OFPBAC_BAD_OUT_GROUP\x10\t\x12\x1d\n\x19OFPBAC_MATCH_INCONSISTENT\x10\n\x12\x1c\n\x18OFPBAC_UNSUPPORTED_ORDER\x10\x0b\x12\x12\n\x0eOFPBAC_BAD_TAG\x10\x0c\x12\x17\n\x13OFPBAC_BAD_SET_TYPE\x10\r\x12\x16\n\x12OFPBAC_BAD_SET_LEN\x10\x0e\x12\x1b\n\x17OFPBAC_BAD_SET_ARGUMENT\x10\x0f*\xfa\x01\n\x18ofp_bad_instruction_code\x12\x17\n\x13OFPBIC_UNKNOWN_INST\x10\x00\x12\x15\n\x11OFPBIC_UNSUP_INST\x10\x01\x12\x17\n\x13OFPBIC_BAD_TABLE_ID\x10\x02\x12\x19\n\x15OFPBIC_UNSUP_METADATA\x10\x03\x12\x1e\n\x1aOFPBIC_UNSUP_METADATA_MASK\x10\x04\x12\x1b\n\x17OFPBIC_BAD_EXPERIMENTER\x10\x05\x12\x17\n\x13OFPBIC_BAD_EXP_TYPE\x10\x06\x12\x12\n\x0eOFPBIC_BAD_LEN\x10\x07\x12\x10\n\x0cOFPBIC_EPERM\x10\x08*\xa5\x02\n\x12ofp_bad_match_code\x12\x13\n\x0fOFPBMC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBMC_BAD_LEN\x10\x01\x12\x12\n\x0eOFPBMC_BAD_TAG\x10\x02\x12\x1b\n\x17OFPBMC_BAD_DL_ADDR_MASK\x10\x03\x12\x1b\n\x17OFPBMC_BAD_NW_ADDR_MASK\x10\x04\x12\x18\n\x14OFPBMC_BAD_WILDCARDS\x10\x05\x12\x14\n\x10OFPBMC_BAD_FIELD\x10\x06\x12\x14\n\x10OFPBMC_BAD_VALUE\x10\x07\x12\x13\n\x0fOFPBMC_BAD_MASK\x10\x08\x12\x15\n\x11OFPBMC_BAD_PREREQ\x10\t\x12\x14\n\x10OFPBMC_DUP_FIELD\x10\n\x12\x10\n\x0cOFPBMC_EPERM\x10\x0b*\xd2\x01\n\x18ofp_flow_mod_failed_code\x12\x13\n\x0fOFPFMFC_UNKNOWN\x10\x00\x12\x16\n\x12OFPFMFC_TABLE_FULL\x10\x01\x12\x18\n\x14OFPFMFC_BAD_TABLE_ID\x10\x02\x12\x13\n\x0fOFPFMFC_OVERLAP\x10\x03\x12\x11\n\rOFPFMFC_EPERM\x10\x04\x12\x17\n\x13OFPFMFC_BAD_TIMEOUT\x10\x05\x12\x17\n\x13OFPFMFC_BAD_COMMAND\x10\x06\x12\x15\n\x11OFPFMFC_BAD_FLAGS\x10\x07*\xa1\x03\n\x19ofp_group_mod_failed_code\x12\x18\n\x14OFPGMFC_GROUP_EXISTS\x10\x00\x12\x19\n\x15OFPGMFC_INVALID_GROUP\x10\x01\x12\x1e\n\x1aOFPGMFC_WEIGHT_UNSUPPORTED\x10\x02\x12\x19\n\x15OFPGMFC_OUT_OF_GROUPS\x10\x03\x12\x1a\n\x16OFPGMFC_OUT_OF_BUCKETS\x10\x04\x12 \n\x1cOFPGMFC_CHAINING_UNSUPPORTED\x10\x05\x12\x1d\n\x19OFPGMFC_WATCH_UNSUPPORTED\x10\x06\x12\x10\n\x0cOFPGMFC_LOOP\x10\x07\x12\x19\n\x15OFPGMFC_UNKNOWN_GROUP\x10\x08\x12\x19\n\x15OFPGMFC_CHAINED_GROUP\x10\t\x12\x14\n\x10OFPGMFC_BAD_TYPE\x10\n\x12\x17\n\x13OFPGMFC_BAD_COMMAND\x10\x0b\x12\x16\n\x12OFPGMFC_BAD_BUCKET\x10\x0c\x12\x15\n\x11OFPGMFC_BAD_WATCH\x10\r\x12\x11\n\rOFPGMFC_EPERM\x10\x0e*\x8f\x01\n\x18ofp_port_mod_failed_code\x12\x14\n\x10OFPPMFC_BAD_PORT\x10\x00\x12\x17\n\x13OFPPMFC_BAD_HW_ADDR\x10\x01\x12\x16\n\x12OFPPMFC_BAD_CONFIG\x10\x02\x12\x19\n\x15OFPPMFC_BAD_ADVERTISE\x10\x03\x12\x11\n\rOFPPMFC_EPERM\x10\x04*]\n\x19ofp_table_mod_failed_code\x12\x15\n\x11OFPTMFC_BAD_TABLE\x10\x00\x12\x16\n\x12OFPTMFC_BAD_CONFIG\x10\x01\x12\x11\n\rOFPTMFC_EPERM\x10\x02*Z\n\x18ofp_queue_op_failed_code\x12\x14\n\x10OFPQOFC_BAD_PORT\x10\x00\x12\x15\n\x11OFPQOFC_BAD_QUEUE\x10\x01\x12\x11\n\rOFPQOFC_EPERM\x10\x02*^\n\x1dofp_switch_config_failed_code\x12\x15\n\x11OFPSCFC_BAD_FLAGS\x10\x00\x12\x13\n\x0fOFPSCFC_BAD_LEN\x10\x01\x12\x11\n\rOFPSCFC_EPERM\x10\x02*Z\n\x1cofp_role_request_failed_code\x12\x11\n\rOFPRRFC_STALE\x10\x00\x12\x11\n\rOFPRRFC_UNSUP\x10\x01\x12\x14\n\x10OFPRRFC_BAD_ROLE\x10\x02*\xc4\x02\n\x19ofp_meter_mod_failed_code\x12\x13\n\x0fOFPMMFC_UNKNOWN\x10\x00\x12\x18\n\x14OFPMMFC_METER_EXISTS\x10\x01\x12\x19\n\x15OFPMMFC_INVALID_METER\x10\x02\x12\x19\n\x15OFPMMFC_UNKNOWN_METER\x10\x03\x12\x17\n\x13OFPMMFC_BAD_COMMAND\x10\x04\x12\x15\n\x11OFPMMFC_BAD_FLAGS\x10\x05\x12\x14\n\x10OFPMMFC_BAD_RATE\x10\x06\x12\x15\n\x11OFPMMFC_BAD_BURST\x10\x07\x12\x14\n\x10OFPMMFC_BAD_BAND\x10\x08\x12\x1a\n\x16OFPMMFC_BAD_BAND_VALUE\x10\t\x12\x19\n\x15OFPMMFC_OUT_OF_METERS\x10\n\x12\x18\n\x14OFPMMFC_OUT_OF_BANDS\x10\x0b*\xa9\x01\n\x1eofp_table_features_failed_code\x12\x15\n\x11OFPTFFC_BAD_TABLE\x10\x00\x12\x18\n\x14OFPTFFC_BAD_METADATA\x10\x01\x12\x14\n\x10OFPTFFC_BAD_TYPE\x10\x02\x12\x13\n\x0fOFPTFFC_BAD_LEN\x10\x03\x12\x18\n\x14OFPTFFC_BAD_ARGUMENT\x10\x04\x12\x11\n\rOFPTFFC_EPERM\x10\x05*\xce\x02\n\x12ofp_multipart_type\x12\x0e\n\nOFPMP_DESC\x10\x00\x12\x0e\n\nOFPMP_FLOW\x10\x01\x12\x13\n\x0fOFPMP_AGGREGATE\x10\x02\x12\x0f\n\x0bOFPMP_TABLE\x10\x03\x12\x14\n\x10OFPMP_PORT_STATS\x10\x04\x12\x0f\n\x0bOFPMP_QUEUE\x10\x05\x12\x0f\n\x0bOFPMP_GROUP\x10\x06\x12\x14\n\x10OFPMP_GROUP_DESC\x10\x07\x12\x18\n\x14OFPMP_GROUP_FEATURES\x10\x08\x12\x0f\n\x0bOFPMP_METER\x10\t\x12\x16\n\x12OFPMP_METER_CONFIG\x10\n\x12\x18\n\x14OFPMP_METER_FEATURES\x10\x0b\x12\x18\n\x14OFPMP_TABLE_FEATURES\x10\x0c\x12\x13\n\x0fOFPMP_PORT_DESC\x10\r\x12\x18\n\x12OFPMP_EXPERIMENTER\x10\xff\xff\x03*J\n\x1bofp_multipart_request_flags\x12\x16\n\x12OFPMPF_REQ_INVALID\x10\x00\x12\x13\n\x0fOFPMPF_REQ_MORE\x10\x01*L\n\x19ofp_multipart_reply_flags\x12\x18\n\x14OFPMPF_REPLY_INVALID\x10\x00\x12\x15\n\x11OFPMPF_REPLY_MORE\x10\x01*\xe4\x03\n\x1bofp_table_feature_prop_type\x12\x18\n\x14OFPTFPT_INSTRUCTIONS\x10\x00\x12\x1d\n\x19OFPTFPT_INSTRUCTIONS_MISS\x10\x01\x12\x17\n\x13OFPTFPT_NEXT_TABLES\x10\x02\x12\x1c\n\x18OFPTFPT_NEXT_TABLES_MISS\x10\x03\x12\x19\n\x15OFPTFPT_WRITE_ACTIONS\x10\x04\x12\x1e\n\x1aOFPTFPT_WRITE_ACTIONS_MISS\x10\x05\x12\x19\n\x15OFPTFPT_APPLY_ACTIONS\x10\x06\x12\x1e\n\x1aOFPTFPT_APPLY_ACTIONS_MISS\x10\x07\x12\x11\n\rOFPTFPT_MATCH\x10\x08\x12\x15\n\x11OFPTFPT_WILDCARDS\x10\n\x12\x1a\n\x16OFPTFPT_WRITE_SETFIELD\x10\x0c\x12\x1f\n\x1bOFPTFPT_WRITE_SETFIELD_MISS\x10\r\x12\x1a\n\x16OFPTFPT_APPLY_SETFIELD\x10\x0e\x12\x1f\n\x1bOFPTFPT_APPLY_SETFIELD_MISS\x10\x0f\x12\x1a\n\x14OFPTFPT_EXPERIMENTER\x10\xfe\xff\x03\x12\x1f\n\x19OFPTFPT_EXPERIMENTER_MISS\x10\xff\xff\x03*\x93\x01\n\x16ofp_group_capabilities\x12\x12\n\x0eOFPGFC_INVALID\x10\x00\x12\x18\n\x14OFPGFC_SELECT_WEIGHT\x10\x01\x12\x1a\n\x16OFPGFC_SELECT_LIVENESS\x10\x02\x12\x13\n\x0fOFPGFC_CHAINING\x10\x04\x12\x1a\n\x16OFPGFC_CHAINING_CHECKS\x10\x08*k\n\x14ofp_queue_properties\x12\x11\n\rOFPQT_INVALID\x10\x00\x12\x12\n\x0eOFPQT_MIN_RATE\x10\x01\x12\x12\n\x0eOFPQT_MAX_RATE\x10\x02\x12\x18\n\x12OFPQT_EXPERIMENTER\x10\xff\xff\x03*q\n\x13ofp_controller_role\x12\x17\n\x13OFPCR_ROLE_NOCHANGE\x10\x00\x12\x14\n\x10OFPCR_ROLE_EQUAL\x10\x01\x12\x15\n\x11OFPCR_ROLE_MASTER\x10\x02\x12\x14\n\x10OFPCR_ROLE_SLAVE\x10\x03\x32\xfd\x04\n\x08OpenFlow\x12<\n\x08GetHello\x12\x16.openflow_13.ofp_hello\x1a\x16.openflow_13.ofp_hello\"\x00\x12\x41\n\x0b\x45\x63hoRequest\x12\x17.openflow_13.ofp_header\x1a\x17.openflow_13.ofp_header\"\x00\x12\x63\n\x13\x45xperimenterRequest\x12$.openflow_13.ofp_experimenter_header\x1a$.openflow_13.ofp_experimenter_header\"\x00\x12P\n\x11GetSwitchFeatures\x12\x17.openflow_13.ofp_header\x1a .openflow_13.ofp_switch_features\"\x00\x12L\n\x0fGetSwitchConfig\x12\x17.openflow_13.ofp_header\x1a\x1e.openflow_13.ofp_switch_config\"\x00\x12\x46\n\tSetConfig\x12\x1e.openflow_13.ofp_switch_config\x1a\x17.openflow_13.ofp_header\"\x00\x12R\n\x17ReceivePacketInMessages\x12\x17.openflow_13.ofp_header\x1a\x1a.openflow_13.ofp_packet_in\"\x00\x30\x01\x12O\n\x15SendPacketOutMessages\x12\x1b.openflow_13.ofp_packet_out\x1a\x17.openflow_13.ofp_header\"\x00\x62\x06proto3')
 )
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
@@ -73,8 +73,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=11141,
-  serialized_end=11354,
+  serialized_start=11234,
+  serialized_end=11447,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_NO)
 
@@ -208,8 +208,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=11357,
-  serialized_end=12069,
+  serialized_start=11450,
+  serialized_end=12162,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TYPE)
 
@@ -231,8 +231,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12071,
-  serialized_end=12138,
+  serialized_start=12164,
+  serialized_end=12231,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_HELLO_ELEM_TYPE)
 
@@ -262,8 +262,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12140,
-  serialized_end=12241,
+  serialized_start=12233,
+  serialized_end=12334,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CONFIG_FLAGS)
 
@@ -285,8 +285,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12243,
-  serialized_end=12307,
+  serialized_start=12336,
+  serialized_end=12400,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_CONFIG)
 
@@ -312,8 +312,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12309,
-  serialized_end=12371,
+  serialized_start=12402,
+  serialized_end=12464,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE)
 
@@ -359,8 +359,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12374,
-  serialized_end=12561,
+  serialized_start=12467,
+  serialized_end=12654,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CAPABILITIES)
 
@@ -394,8 +394,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12563,
-  serialized_end=12681,
+  serialized_start=12656,
+  serialized_end=12774,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_CONFIG)
 
@@ -425,8 +425,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12683,
-  serialized_end=12774,
+  serialized_start=12776,
+  serialized_end=12867,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_STATE)
 
@@ -508,8 +508,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12777,
-  serialized_end=13126,
+  serialized_start=12870,
+  serialized_end=13219,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_FEATURES)
 
@@ -535,8 +535,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13128,
-  serialized_end=13196,
+  serialized_start=13221,
+  serialized_end=13289,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_REASON)
 
@@ -558,8 +558,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13198,
-  serialized_end=13249,
+  serialized_start=13291,
+  serialized_end=13342,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MATCH_TYPE)
 
@@ -589,8 +589,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13251,
-  serialized_end=13358,
+  serialized_start=13344,
+  serialized_end=13451,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_OXM_CLASS)
 
@@ -764,8 +764,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13361,
-  serialized_end=14401,
+  serialized_start=13454,
+  serialized_end=14494,
 )
 _sym_db.RegisterEnumDescriptor(_OXM_OFB_FIELD_TYPES)
 
@@ -787,8 +787,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=14403,
-  serialized_end=14454,
+  serialized_start=14496,
+  serialized_end=14547,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_VLAN_ID)
 
@@ -842,8 +842,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=14457,
-  serialized_end=14658,
+  serialized_start=14550,
+  serialized_end=14751,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_IPV6EXTHDR_FLAGS)
 
@@ -925,8 +925,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=14661,
-  serialized_end=15041,
+  serialized_start=14754,
+  serialized_end=15134,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_ACTION_TYPE)
 
@@ -952,8 +952,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15043,
-  serialized_end=15129,
+  serialized_start=15136,
+  serialized_end=15222,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CONTROLLER_MAX_LEN)
 
@@ -999,8 +999,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15132,
-  serialized_end=15339,
+  serialized_start=15225,
+  serialized_end=15432,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_INSTRUCTION_TYPE)
 
@@ -1034,8 +1034,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15341,
-  serialized_end=15464,
+  serialized_start=15434,
+  serialized_end=15557,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_COMMAND)
 
@@ -1073,8 +1073,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15467,
-  serialized_end=15630,
+  serialized_start=15560,
+  serialized_end=15723,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_FLAGS)
 
@@ -1104,8 +1104,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15632,
-  serialized_end=15715,
+  serialized_start=15725,
+  serialized_end=15808,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP)
 
@@ -1131,8 +1131,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15717,
-  serialized_end=15791,
+  serialized_start=15810,
+  serialized_end=15884,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_MOD_COMMAND)
 
@@ -1162,8 +1162,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15793,
-  serialized_end=15876,
+  serialized_start=15886,
+  serialized_end=15969,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_TYPE)
 
@@ -1189,8 +1189,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15878,
-  serialized_end=15958,
+  serialized_start=15971,
+  serialized_end=16051,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PACKET_IN_REASON)
 
@@ -1224,8 +1224,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15961,
-  serialized_end=16100,
+  serialized_start=16054,
+  serialized_end=16193,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_REMOVED_REASON)
 
@@ -1259,8 +1259,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16102,
-  serialized_end=16212,
+  serialized_start=16195,
+  serialized_end=16305,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER)
 
@@ -1290,8 +1290,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16214,
-  serialized_end=16323,
+  serialized_start=16307,
+  serialized_end=16416,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_BAND_TYPE)
 
@@ -1317,8 +1317,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16325,
-  serialized_end=16399,
+  serialized_start=16418,
+  serialized_end=16492,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_MOD_COMMAND)
 
@@ -1352,8 +1352,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16401,
-  serialized_end=16504,
+  serialized_start=16494,
+  serialized_end=16597,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_FLAGS)
 
@@ -1427,8 +1427,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16507,
-  serialized_end=16927,
+  serialized_start=16600,
+  serialized_end=17020,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_ERROR_TYPE)
 
@@ -1450,8 +1450,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16929,
-  serialized_end=16995,
+  serialized_start=17022,
+  serialized_end=17088,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_HELLO_FAILED_CODE)
 
@@ -1521,8 +1521,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16998,
-  serialized_end=17363,
+  serialized_start=17091,
+  serialized_end=17456,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_REQUEST_CODE)
 
@@ -1600,8 +1600,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=17366,
-  serialized_end=17778,
+  serialized_start=17459,
+  serialized_end=17871,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_ACTION_CODE)
 
@@ -1651,8 +1651,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=17781,
-  serialized_end=18031,
+  serialized_start=17874,
+  serialized_end=18124,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_INSTRUCTION_CODE)
 
@@ -1714,8 +1714,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18034,
-  serialized_end=18327,
+  serialized_start=18127,
+  serialized_end=18420,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_MATCH_CODE)
 
@@ -1761,8 +1761,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18330,
-  serialized_end=18540,
+  serialized_start=18423,
+  serialized_end=18633,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_FAILED_CODE)
 
@@ -1836,8 +1836,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18543,
-  serialized_end=18960,
+  serialized_start=18636,
+  serialized_end=19053,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_MOD_FAILED_CODE)
 
@@ -1871,8 +1871,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18963,
-  serialized_end=19106,
+  serialized_start=19056,
+  serialized_end=19199,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_MOD_FAILED_CODE)
 
@@ -1898,8 +1898,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19108,
-  serialized_end=19201,
+  serialized_start=19201,
+  serialized_end=19294,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_MOD_FAILED_CODE)
 
@@ -1925,8 +1925,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19203,
-  serialized_end=19293,
+  serialized_start=19296,
+  serialized_end=19386,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_QUEUE_OP_FAILED_CODE)
 
@@ -1952,8 +1952,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19295,
-  serialized_end=19389,
+  serialized_start=19388,
+  serialized_end=19482,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_SWITCH_CONFIG_FAILED_CODE)
 
@@ -1979,8 +1979,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19391,
-  serialized_end=19481,
+  serialized_start=19484,
+  serialized_end=19574,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_ROLE_REQUEST_FAILED_CODE)
 
@@ -2042,8 +2042,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19484,
-  serialized_end=19808,
+  serialized_start=19577,
+  serialized_end=19901,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_MOD_FAILED_CODE)
 
@@ -2081,8 +2081,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19811,
-  serialized_end=19980,
+  serialized_start=19904,
+  serialized_end=20073,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_FEATURES_FAILED_CODE)
 
@@ -2156,8 +2156,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19983,
-  serialized_end=20317,
+  serialized_start=20076,
+  serialized_end=20410,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_TYPE)
 
@@ -2179,8 +2179,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20319,
-  serialized_end=20393,
+  serialized_start=20412,
+  serialized_end=20486,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_REQUEST_FLAGS)
 
@@ -2202,8 +2202,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20395,
-  serialized_end=20471,
+  serialized_start=20488,
+  serialized_end=20564,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_REPLY_FLAGS)
 
@@ -2281,8 +2281,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20474,
-  serialized_end=20958,
+  serialized_start=20567,
+  serialized_end=21051,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_FEATURE_PROP_TYPE)
 
@@ -2316,8 +2316,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20961,
-  serialized_end=21108,
+  serialized_start=21054,
+  serialized_end=21201,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_CAPABILITIES)
 
@@ -2347,8 +2347,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=21110,
-  serialized_end=21217,
+  serialized_start=21203,
+  serialized_end=21310,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_QUEUE_PROPERTIES)
 
@@ -2378,8 +2378,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=21219,
-  serialized_end=21332,
+  serialized_start=21312,
+  serialized_end=21425,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CONTROLLER_ROLE)
 
@@ -6343,22 +6343,15 @@
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='pad', full_name='openflow_13.ofp_group_desc.pad', index=1,
+      name='group_id', full_name='openflow_13.ofp_group_desc.group_id', index=1,
       number=2, type=13, cpp_type=3, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='group_id', full_name='openflow_13.ofp_group_desc.group_id', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='buckets', full_name='openflow_13.ofp_group_desc.buckets', index=3,
-      number=4, type=11, cpp_type=10, label=3,
+      name='buckets', full_name='openflow_13.ofp_group_desc.buckets', index=2,
+      number=3, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -6375,8 +6368,46 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9098,
-  serialized_end=9230,
+  serialized_start=9097,
+  serialized_end=9216,
+)
+
+
+_OFP_GROUP_ENTRY = _descriptor.Descriptor(
+  name='ofp_group_entry',
+  full_name='openflow_13.ofp_group_entry',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='desc', full_name='openflow_13.ofp_group_entry.desc', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='stats', full_name='openflow_13.ofp_group_entry.stats', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=9218,
+  serialized_end=9323,
 )
 
 
@@ -6427,8 +6458,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9232,
-  serialized_end=9326,
+  serialized_start=9325,
+  serialized_end=9419,
 )
 
 
@@ -6458,8 +6489,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9328,
-  serialized_end=9375,
+  serialized_start=9421,
+  serialized_end=9468,
 )
 
 
@@ -6496,8 +6527,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9377,
-  serialized_end=9451,
+  serialized_start=9470,
+  serialized_end=9544,
 )
 
 
@@ -6569,8 +6600,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9454,
-  serialized_end=9657,
+  serialized_start=9547,
+  serialized_end=9750,
 )
 
 
@@ -6614,8 +6645,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9659,
-  serialized_end=9761,
+  serialized_start=9752,
+  serialized_end=9854,
 )
 
 
@@ -6673,8 +6704,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9763,
-  serialized_end=9882,
+  serialized_start=9856,
+  serialized_end=9975,
 )
 
 
@@ -6718,8 +6749,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9884,
-  serialized_end=9973,
+  serialized_start=9977,
+  serialized_end=10066,
 )
 
 
@@ -6763,8 +6794,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9975,
-  serialized_end=10054,
+  serialized_start=10068,
+  serialized_end=10147,
 )
 
 
@@ -6801,8 +6832,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10056,
-  serialized_end=10110,
+  serialized_start=10149,
+  serialized_end=10203,
 )
 
 
@@ -6839,8 +6870,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10112,
-  serialized_end=10208,
+  serialized_start=10205,
+  serialized_end=10301,
 )
 
 
@@ -6877,8 +6908,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10210,
-  serialized_end=10306,
+  serialized_start=10303,
+  serialized_end=10399,
 )
 
 
@@ -6922,8 +6953,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10308,
-  serialized_end=10430,
+  serialized_start=10401,
+  serialized_end=10523,
 )
 
 
@@ -6967,8 +6998,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10432,
-  serialized_end=10538,
+  serialized_start=10525,
+  serialized_end=10631,
 )
 
 
@@ -6998,8 +7029,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10540,
-  serialized_end=10584,
+  serialized_start=10633,
+  serialized_end=10677,
 )
 
 
@@ -7036,8 +7067,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10586,
-  serialized_end=10675,
+  serialized_start=10679,
+  serialized_end=10768,
 )
 
 
@@ -7074,8 +7105,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10677,
-  serialized_end=10731,
+  serialized_start=10770,
+  serialized_end=10824,
 )
 
 
@@ -7112,8 +7143,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10733,
-  serialized_end=10793,
+  serialized_start=10826,
+  serialized_end=10886,
 )
 
 
@@ -7185,8 +7216,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10796,
-  serialized_end=10950,
+  serialized_start=10889,
+  serialized_end=11043,
 )
 
 
@@ -7223,8 +7254,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10952,
-  serialized_end=11041,
+  serialized_start=11045,
+  serialized_end=11134,
 )
 
 
@@ -7268,8 +7299,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=11043,
-  serialized_end=11138,
+  serialized_start=11136,
+  serialized_end=11231,
 )
 
 _OFP_HEADER.fields_by_name['type'].enum_type = _OFP_TYPE
@@ -7560,6 +7591,8 @@
 _OFP_GROUP_STATS.fields_by_name['bucket_stats'].message_type = _OFP_BUCKET_COUNTER
 _OFP_GROUP_DESC.fields_by_name['type'].enum_type = _OFP_GROUP_TYPE
 _OFP_GROUP_DESC.fields_by_name['buckets'].message_type = _OFP_BUCKET
+_OFP_GROUP_ENTRY.fields_by_name['desc'].message_type = _OFP_GROUP_DESC
+_OFP_GROUP_ENTRY.fields_by_name['stats'].message_type = _OFP_GROUP_STATS
 _OFP_METER_STATS.fields_by_name['band_stats'].message_type = _OFP_METER_BAND_STATS
 _OFP_METER_CONFIG.fields_by_name['bands'].message_type = _OFP_METER_BAND_HEADER
 _OFP_QUEUE_PROP_MIN_RATE.fields_by_name['prop_header'].message_type = _OFP_QUEUE_PROP_HEADER
@@ -7631,6 +7664,7 @@
 DESCRIPTOR.message_types_by_name['ofp_bucket_counter'] = _OFP_BUCKET_COUNTER
 DESCRIPTOR.message_types_by_name['ofp_group_stats'] = _OFP_GROUP_STATS
 DESCRIPTOR.message_types_by_name['ofp_group_desc'] = _OFP_GROUP_DESC
+DESCRIPTOR.message_types_by_name['ofp_group_entry'] = _OFP_GROUP_ENTRY
 DESCRIPTOR.message_types_by_name['ofp_group_features'] = _OFP_GROUP_FEATURES
 DESCRIPTOR.message_types_by_name['ofp_meter_multipart_request'] = _OFP_METER_MULTIPART_REQUEST
 DESCRIPTOR.message_types_by_name['ofp_meter_band_stats'] = _OFP_METER_BAND_STATS
@@ -8145,6 +8179,13 @@
   ))
 _sym_db.RegisterMessage(ofp_group_desc)
 
+ofp_group_entry = _reflection.GeneratedProtocolMessageType('ofp_group_entry', (_message.Message,), dict(
+  DESCRIPTOR = _OFP_GROUP_ENTRY,
+  __module__ = 'openflow_13_pb2'
+  # @@protoc_insertion_point(class_scope:openflow_13.ofp_group_entry)
+  ))
+_sym_db.RegisterMessage(ofp_group_entry)
+
 ofp_group_features = _reflection.GeneratedProtocolMessageType('ofp_group_features', (_message.Message,), dict(
   DESCRIPTOR = _OFP_GROUP_FEATURES,
   __module__ = 'openflow_13_pb2'
@@ -8291,4 +8332,372 @@
 from grpc.beta import interfaces as beta_interfaces
 from grpc.framework.common import cardinality
 from grpc.framework.interfaces.face import utilities as face_utilities
+
+
+class OpenFlowStub(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+
+  def __init__(self, channel):
+    """Constructor.
+
+    Args:
+      channel: A grpc.Channel.
+    """
+    self.GetHello = channel.unary_unary(
+        '/openflow_13.OpenFlow/GetHello',
+        request_serializer=ofp_hello.SerializeToString,
+        response_deserializer=ofp_hello.FromString,
+        )
+    self.EchoRequest = channel.unary_unary(
+        '/openflow_13.OpenFlow/EchoRequest',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_header.FromString,
+        )
+    self.ExperimenterRequest = channel.unary_unary(
+        '/openflow_13.OpenFlow/ExperimenterRequest',
+        request_serializer=ofp_experimenter_header.SerializeToString,
+        response_deserializer=ofp_experimenter_header.FromString,
+        )
+    self.GetSwitchFeatures = channel.unary_unary(
+        '/openflow_13.OpenFlow/GetSwitchFeatures',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_switch_features.FromString,
+        )
+    self.GetSwitchConfig = channel.unary_unary(
+        '/openflow_13.OpenFlow/GetSwitchConfig',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_switch_config.FromString,
+        )
+    self.SetConfig = channel.unary_unary(
+        '/openflow_13.OpenFlow/SetConfig',
+        request_serializer=ofp_switch_config.SerializeToString,
+        response_deserializer=ofp_header.FromString,
+        )
+    self.ReceivePacketInMessages = channel.unary_stream(
+        '/openflow_13.OpenFlow/ReceivePacketInMessages',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_packet_in.FromString,
+        )
+    self.SendPacketOutMessages = channel.unary_unary(
+        '/openflow_13.OpenFlow/SendPacketOutMessages',
+        request_serializer=ofp_packet_out.SerializeToString,
+        response_deserializer=ofp_header.FromString,
+        )
+
+
+class OpenFlowServicer(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+
+  def GetHello(self, request, context):
+    """
+    Hello message handshake, initiated by the client (controller)
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def EchoRequest(self, request, context):
+    """
+    Echo request / reply, initiated by the client (controller)
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def ExperimenterRequest(self, request, context):
+    """
+    Experimental (extension) RPC
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def GetSwitchFeatures(self, request, context):
+    """
+    Get Switch Features
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def GetSwitchConfig(self, request, context):
+    """
+    Get Switch Config
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def SetConfig(self, request, context):
+    """
+    Set Config
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def ReceivePacketInMessages(self, request, context):
+    """
+    Receive Packet-In messages
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def SendPacketOutMessages(self, request, context):
+    """
+    Send Packet-Out messages
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+
+def add_OpenFlowServicer_to_server(servicer, server):
+  rpc_method_handlers = {
+      'GetHello': grpc.unary_unary_rpc_method_handler(
+          servicer.GetHello,
+          request_deserializer=ofp_hello.FromString,
+          response_serializer=ofp_hello.SerializeToString,
+      ),
+      'EchoRequest': grpc.unary_unary_rpc_method_handler(
+          servicer.EchoRequest,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_header.SerializeToString,
+      ),
+      'ExperimenterRequest': grpc.unary_unary_rpc_method_handler(
+          servicer.ExperimenterRequest,
+          request_deserializer=ofp_experimenter_header.FromString,
+          response_serializer=ofp_experimenter_header.SerializeToString,
+      ),
+      'GetSwitchFeatures': grpc.unary_unary_rpc_method_handler(
+          servicer.GetSwitchFeatures,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_switch_features.SerializeToString,
+      ),
+      'GetSwitchConfig': grpc.unary_unary_rpc_method_handler(
+          servicer.GetSwitchConfig,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_switch_config.SerializeToString,
+      ),
+      'SetConfig': grpc.unary_unary_rpc_method_handler(
+          servicer.SetConfig,
+          request_deserializer=ofp_switch_config.FromString,
+          response_serializer=ofp_header.SerializeToString,
+      ),
+      'ReceivePacketInMessages': grpc.unary_stream_rpc_method_handler(
+          servicer.ReceivePacketInMessages,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_packet_in.SerializeToString,
+      ),
+      'SendPacketOutMessages': grpc.unary_unary_rpc_method_handler(
+          servicer.SendPacketOutMessages,
+          request_deserializer=ofp_packet_out.FromString,
+          response_serializer=ofp_header.SerializeToString,
+      ),
+  }
+  generic_handler = grpc.method_handlers_generic_handler(
+      'openflow_13.OpenFlow', rpc_method_handlers)
+  server.add_generic_rpc_handlers((generic_handler,))
+
+
+class BetaOpenFlowServicer(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+  def GetHello(self, request, context):
+    """
+    Hello message handshake, initiated by the client (controller)
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def EchoRequest(self, request, context):
+    """
+    Echo request / reply, initiated by the client (controller)
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def ExperimenterRequest(self, request, context):
+    """
+    Experimental (extension) RPC
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def GetSwitchFeatures(self, request, context):
+    """
+    Get Switch Features
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def GetSwitchConfig(self, request, context):
+    """
+    Get Switch Config
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def SetConfig(self, request, context):
+    """
+    Set Config
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def ReceivePacketInMessages(self, request, context):
+    """
+    Receive Packet-In messages
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def SendPacketOutMessages(self, request, context):
+    """
+    Send Packet-Out messages
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+
+
+class BetaOpenFlowStub(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+  def GetHello(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Hello message handshake, initiated by the client (controller)
+    TODO http option
+    """
+    raise NotImplementedError()
+  GetHello.future = None
+  def EchoRequest(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Echo request / reply, initiated by the client (controller)
+    TODO http option
+    """
+    raise NotImplementedError()
+  EchoRequest.future = None
+  def ExperimenterRequest(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Experimental (extension) RPC
+    TODO http option
+    """
+    raise NotImplementedError()
+  ExperimenterRequest.future = None
+  def GetSwitchFeatures(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Get Switch Features
+    TODO http option
+    """
+    raise NotImplementedError()
+  GetSwitchFeatures.future = None
+  def GetSwitchConfig(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Get Switch Config
+    TODO http option
+    """
+    raise NotImplementedError()
+  GetSwitchConfig.future = None
+  def SetConfig(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Set Config
+    TODO http option
+    """
+    raise NotImplementedError()
+  SetConfig.future = None
+  def ReceivePacketInMessages(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Receive Packet-In messages
+    TODO http option
+    """
+    raise NotImplementedError()
+  def SendPacketOutMessages(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Send Packet-Out messages
+    TODO http option
+    """
+    raise NotImplementedError()
+  SendPacketOutMessages.future = None
+
+
+def beta_create_OpenFlow_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
+  request_deserializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.FromString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_packet_out.FromString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_switch_config.FromString,
+  }
+  response_serializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_switch_config.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_switch_features.SerializeToString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_packet_in.SerializeToString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_header.SerializeToString,
+  }
+  method_implementations = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): face_utilities.unary_unary_inline(servicer.EchoRequest),
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): face_utilities.unary_unary_inline(servicer.ExperimenterRequest),
+    ('openflow_13.OpenFlow', 'GetHello'): face_utilities.unary_unary_inline(servicer.GetHello),
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): face_utilities.unary_unary_inline(servicer.GetSwitchConfig),
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): face_utilities.unary_unary_inline(servicer.GetSwitchFeatures),
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): face_utilities.unary_stream_inline(servicer.ReceivePacketInMessages),
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): face_utilities.unary_unary_inline(servicer.SendPacketOutMessages),
+    ('openflow_13.OpenFlow', 'SetConfig'): face_utilities.unary_unary_inline(servicer.SetConfig),
+  }
+  server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
+  return beta_implementations.server(method_implementations, options=server_options)
+
+
+def beta_create_OpenFlow_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
+  request_serializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_packet_out.SerializeToString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_switch_config.SerializeToString,
+  }
+  response_deserializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.FromString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_switch_config.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_switch_features.FromString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_packet_in.FromString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_header.FromString,
+  }
+  cardinalities = {
+    'EchoRequest': cardinality.Cardinality.UNARY_UNARY,
+    'ExperimenterRequest': cardinality.Cardinality.UNARY_UNARY,
+    'GetHello': cardinality.Cardinality.UNARY_UNARY,
+    'GetSwitchConfig': cardinality.Cardinality.UNARY_UNARY,
+    'GetSwitchFeatures': cardinality.Cardinality.UNARY_UNARY,
+    'ReceivePacketInMessages': cardinality.Cardinality.UNARY_STREAM,
+    'SendPacketOutMessages': cardinality.Cardinality.UNARY_UNARY,
+    'SetConfig': cardinality.Cardinality.UNARY_UNARY,
+  }
+  stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
+  return beta_implementations.dynamic_stub(channel, 'openflow_13.OpenFlow', cardinalities, options=stub_options)
 # @@protoc_insertion_point(module_scope)
diff --git a/ofagent/protos/voltha_pb2.py b/ofagent/protos/voltha_pb2.py
index d800877..27d1fa0 100644
--- a/ofagent/protos/voltha_pb2.py
+++ b/ofagent/protos/voltha_pb2.py
@@ -21,7 +21,7 @@
   name='voltha.proto',
   package='voltha',
   syntax='proto3',
-  serialized_pb=_b('\n\x0cvoltha.proto\x12\x06voltha\x1a\x1cgoogle/api/annotations.proto\x1a\x11openflow_13.proto\"\r\n\x0bNullMessage\"v\n\x0cHealthStatus\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .voltha.HealthStatus.HealthState\"5\n\x0bHealthState\x12\x0b\n\x07HEALTHY\x10\x00\x12\x0e\n\nOVERLOADED\x10\x01\x12\t\n\x05\x44YING\x10\x02\"q\n\x07\x41\x64\x64ress\x12\n\n\x02id\x18\x07 \x01(\t\x12\x0e\n\x06street\x18\x01 \x01(\t\x12\x0f\n\x07street2\x18\x02 \x01(\t\x12\x0f\n\x07street3\x18\x03 \x01(\t\x12\x0c\n\x04\x63ity\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0b\n\x03zip\x18\x06 \x01(\r\"/\n\tAddresses\x12\"\n\taddresses\x18\x01 \x03(\x0b\x32\x0f.voltha.Address\"\x9f\x01\n\x0bMoreComplex\x12$\n\x06health\x18\x01 \x01(\x0b\x32\x14.voltha.HealthStatus\x12\x13\n\x0b\x66oo_counter\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\x12%\n\x08\x63hildren\x18\x04 \x03(\x0b\x32\x13.voltha.MoreComplex\x12 \n\x07\x61\x64\x64ress\x18\x05 \x01(\x0b\x32\x0f.voltha.Address\"\x10\n\x02ID\x12\n\n\x02id\x18\x01 \x01(\t\"\x18\n\nSubscriber\x12\n\n\x02id\x18\x01 \x01(\t\"0\n\x0bSubscribers\x12!\n\x05items\x18\x01 \x03(\x0b\x32\x12.voltha.Subscriber\"U\n\rLogicalDevice\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\"6\n\x0eLogicalDevices\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.voltha.LogicalDevice\"4\n\x0cLogicalPorts\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.openflow_13.ofp_port\"\x97\x01\n\x14LogicalDeviceDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\x12\x39\n\x0fswitch_features\x18\x04 \x01(\x0b\x32 .openflow_13.ofp_switch_features\"J\n\x0f\x46lowTableUpdate\x12\n\n\x02id\x18\x01 \x01(\t\x12+\n\x08\x66low_mod\x18\x02 \x01(\x0b\x32\x19.openflow_13.ofp_flow_mod\"3\n\x05\x46lows\x12*\n\x05items\x18\x01 \x03(\x0b\x32\x1b.openflow_13.ofp_flow_stats2^\n\rHealthService\x12M\n\x0fGetHealthStatus\x12\x13.voltha.NullMessage\x1a\x14.voltha.HealthStatus\"\x0f\x82\xd3\xe4\x93\x02\t\x12\x07/health2\xff\x06\n\x12VolthaLogicalLayer\x12Y\n\x12ListLogicalDevices\x12\x13.voltha.NullMessage\x1a\x16.voltha.LogicalDevices\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/local/devices\x12Y\n\x10GetLogicalDevice\x12\n.voltha.ID\x1a\x1c.voltha.LogicalDeviceDetails\"\x1b\x82\xd3\xe4\x93\x02\x15\x12\x13/local/devices/{id}\x12]\n\x16ListLogicalDevicePorts\x12\n.voltha.ID\x1a\x14.voltha.LogicalPorts\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/ports\x12\x65\n\x0fUpdateFlowTable\x12\x17.voltha.FlowTableUpdate\x1a\x13.voltha.NullMessage\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/local/devices/{id}/flows:\x01*\x12O\n\x0fListDeviceFlows\x12\n.voltha.ID\x1a\r.voltha.Flows\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/flows\x12S\n\x10\x43reateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x17\x82\xd3\xe4\x93\x02\x11\"\x0c/subscribers:\x01*\x12J\n\rGetSubscriber\x12\n.voltha.ID\x1a\x12.voltha.Subscriber\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/subscribers/{id}\x12X\n\x10UpdateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x1c\x82\xd3\xe4\x93\x02\x16\x32\x11/subscribers/{id}:\x01*\x12N\n\x10\x44\x65leteSubscriber\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x19\x82\xd3\xe4\x93\x02\x13*\x11/subscribers/{id}\x12Q\n\x0fListSubscribers\x12\x13.voltha.NullMessage\x1a\x13.voltha.Subscribers\"\x14\x82\xd3\xe4\x93\x02\x0e\x12\x0c/subscribers2\x85\x03\n\x0e\x45xampleService\x12H\n\rCreateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x15\x82\xd3\xe4\x93\x02\x0f\"\n/addresses:\x01*\x12\x42\n\nGetAddress\x12\n.voltha.ID\x1a\x0f.voltha.Address\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/addresses/{id}\x12M\n\rUpdateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x1a\x82\xd3\xe4\x93\x02\x14\x32\x0f/addresses/{id}:\x01*\x12I\n\rDeleteAddress\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x17\x82\xd3\xe4\x93\x02\x11*\x0f/addresses/{id}\x12K\n\rListAddresses\x12\x13.voltha.NullMessage\x1a\x11.voltha.Addresses\"\x12\x82\xd3\xe4\x93\x02\x0c\x12\n/addresses2\xfd\x04\n\x08OpenFlow\x12<\n\x08GetHello\x12\x16.openflow_13.ofp_hello\x1a\x16.openflow_13.ofp_hello\"\x00\x12\x41\n\x0b\x45\x63hoRequest\x12\x17.openflow_13.ofp_header\x1a\x17.openflow_13.ofp_header\"\x00\x12\x63\n\x13\x45xperimenterRequest\x12$.openflow_13.ofp_experimenter_header\x1a$.openflow_13.ofp_experimenter_header\"\x00\x12P\n\x11GetSwitchFeatures\x12\x17.openflow_13.ofp_header\x1a .openflow_13.ofp_switch_features\"\x00\x12L\n\x0fGetSwitchConfig\x12\x17.openflow_13.ofp_header\x1a\x1e.openflow_13.ofp_switch_config\"\x00\x12\x46\n\tSetConfig\x12\x1e.openflow_13.ofp_switch_config\x1a\x17.openflow_13.ofp_header\"\x00\x12R\n\x17ReceivePacketInMessages\x12\x17.openflow_13.ofp_header\x1a\x1a.openflow_13.ofp_packet_in\"\x00\x30\x01\x12O\n\x15SendPacketOutMessages\x12\x1b.openflow_13.ofp_packet_out\x1a\x17.openflow_13.ofp_header\"\x00\x42<\n\x13org.opencord.volthaB\x0cVolthaProtos\xaa\x02\x16Opencord.Voltha.Volthab\x06proto3')
+  serialized_pb=_b('\n\x0cvoltha.proto\x12\x06voltha\x1a\x1cgoogle/api/annotations.proto\x1a\x11openflow_13.proto\"\r\n\x0bNullMessage\"v\n\x0cHealthStatus\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .voltha.HealthStatus.HealthState\"5\n\x0bHealthState\x12\x0b\n\x07HEALTHY\x10\x00\x12\x0e\n\nOVERLOADED\x10\x01\x12\t\n\x05\x44YING\x10\x02\"q\n\x07\x41\x64\x64ress\x12\n\n\x02id\x18\x07 \x01(\t\x12\x0e\n\x06street\x18\x01 \x01(\t\x12\x0f\n\x07street2\x18\x02 \x01(\t\x12\x0f\n\x07street3\x18\x03 \x01(\t\x12\x0c\n\x04\x63ity\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0b\n\x03zip\x18\x06 \x01(\r\"/\n\tAddresses\x12\"\n\taddresses\x18\x01 \x03(\x0b\x32\x0f.voltha.Address\"\x9f\x01\n\x0bMoreComplex\x12$\n\x06health\x18\x01 \x01(\x0b\x32\x14.voltha.HealthStatus\x12\x13\n\x0b\x66oo_counter\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\x12%\n\x08\x63hildren\x18\x04 \x03(\x0b\x32\x13.voltha.MoreComplex\x12 \n\x07\x61\x64\x64ress\x18\x05 \x01(\x0b\x32\x0f.voltha.Address\"\x10\n\x02ID\x12\n\n\x02id\x18\x01 \x01(\t\"\x18\n\nSubscriber\x12\n\n\x02id\x18\x01 \x01(\t\"0\n\x0bSubscribers\x12!\n\x05items\x18\x01 \x03(\x0b\x32\x12.voltha.Subscriber\"U\n\rLogicalDevice\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\"6\n\x0eLogicalDevices\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.voltha.LogicalDevice\"4\n\x0cLogicalPorts\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.openflow_13.ofp_port\"\x97\x01\n\x14LogicalDeviceDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\x12\x39\n\x0fswitch_features\x18\x04 \x01(\x0b\x32 .openflow_13.ofp_switch_features\"J\n\x0f\x46lowTableUpdate\x12\n\n\x02id\x18\x01 \x01(\t\x12+\n\x08\x66low_mod\x18\x02 \x01(\x0b\x32\x19.openflow_13.ofp_flow_mod\"M\n\x10GroupTableUpdate\x12\n\n\x02id\x18\x01 \x01(\t\x12-\n\tgroup_mod\x18\x02 \x01(\x0b\x32\x1a.openflow_13.ofp_group_mod\"3\n\x05\x46lows\x12*\n\x05items\x18\x01 \x03(\x0b\x32\x1b.openflow_13.ofp_flow_stats\"9\n\nFlowGroups\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.openflow_13.ofp_group_entry2^\n\rHealthService\x12M\n\x0fGetHealthStatus\x12\x13.voltha.NullMessage\x1a\x14.voltha.HealthStatus\"\x0f\x82\xd3\xe4\x93\x02\t\x12\x07/health2\xc5\x08\n\x12VolthaLogicalLayer\x12Y\n\x12ListLogicalDevices\x12\x13.voltha.NullMessage\x1a\x16.voltha.LogicalDevices\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/local/devices\x12Y\n\x10GetLogicalDevice\x12\n.voltha.ID\x1a\x1c.voltha.LogicalDeviceDetails\"\x1b\x82\xd3\xe4\x93\x02\x15\x12\x13/local/devices/{id}\x12]\n\x16ListLogicalDevicePorts\x12\n.voltha.ID\x1a\x14.voltha.LogicalPorts\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/ports\x12\x65\n\x0fUpdateFlowTable\x12\x17.voltha.FlowTableUpdate\x1a\x13.voltha.NullMessage\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/local/devices/{id}/flows:\x01*\x12O\n\x0fListDeviceFlows\x12\n.voltha.ID\x1a\r.voltha.Flows\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/flows\x12h\n\x10UpdateGroupTable\x12\x18.voltha.GroupTableUpdate\x1a\x13.voltha.NullMessage\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/local/devices/{id}/groups:\x01*\x12Z\n\x14ListDeviceFlowGroups\x12\n.voltha.ID\x1a\x12.voltha.FlowGroups\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/local/devices/{id}/groups\x12S\n\x10\x43reateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x17\x82\xd3\xe4\x93\x02\x11\"\x0c/subscribers:\x01*\x12J\n\rGetSubscriber\x12\n.voltha.ID\x1a\x12.voltha.Subscriber\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/subscribers/{id}\x12X\n\x10UpdateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x1c\x82\xd3\xe4\x93\x02\x16\x32\x11/subscribers/{id}:\x01*\x12N\n\x10\x44\x65leteSubscriber\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x19\x82\xd3\xe4\x93\x02\x13*\x11/subscribers/{id}\x12Q\n\x0fListSubscribers\x12\x13.voltha.NullMessage\x1a\x13.voltha.Subscribers\"\x14\x82\xd3\xe4\x93\x02\x0e\x12\x0c/subscribers2\x85\x03\n\x0e\x45xampleService\x12H\n\rCreateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x15\x82\xd3\xe4\x93\x02\x0f\"\n/addresses:\x01*\x12\x42\n\nGetAddress\x12\n.voltha.ID\x1a\x0f.voltha.Address\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/addresses/{id}\x12M\n\rUpdateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x1a\x82\xd3\xe4\x93\x02\x14\x32\x0f/addresses/{id}:\x01*\x12I\n\rDeleteAddress\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x17\x82\xd3\xe4\x93\x02\x11*\x0f/addresses/{id}\x12K\n\rListAddresses\x12\x13.voltha.NullMessage\x1a\x11.voltha.Addresses\"\x12\x82\xd3\xe4\x93\x02\x0c\x12\n/addresses2\xfd\x04\n\x08OpenFlow\x12<\n\x08GetHello\x12\x16.openflow_13.ofp_hello\x1a\x16.openflow_13.ofp_hello\"\x00\x12\x41\n\x0b\x45\x63hoRequest\x12\x17.openflow_13.ofp_header\x1a\x17.openflow_13.ofp_header\"\x00\x12\x63\n\x13\x45xperimenterRequest\x12$.openflow_13.ofp_experimenter_header\x1a$.openflow_13.ofp_experimenter_header\"\x00\x12P\n\x11GetSwitchFeatures\x12\x17.openflow_13.ofp_header\x1a .openflow_13.ofp_switch_features\"\x00\x12L\n\x0fGetSwitchConfig\x12\x17.openflow_13.ofp_header\x1a\x1e.openflow_13.ofp_switch_config\"\x00\x12\x46\n\tSetConfig\x12\x1e.openflow_13.ofp_switch_config\x1a\x17.openflow_13.ofp_header\"\x00\x12R\n\x17ReceivePacketInMessages\x12\x17.openflow_13.ofp_header\x1a\x1a.openflow_13.ofp_packet_in\"\x00\x30\x01\x12O\n\x15SendPacketOutMessages\x12\x1b.openflow_13.ofp_packet_out\x1a\x17.openflow_13.ofp_header\"\x00\x42<\n\x13org.opencord.volthaB\x0cVolthaProtos\xaa\x02\x16Opencord.Voltha.Volthab\x06proto3')
   ,
   dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,openflow__13__pb2.DESCRIPTOR,])
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
@@ -564,6 +564,44 @@
 )
 
 
+_GROUPTABLEUPDATE = _descriptor.Descriptor(
+  name='GroupTableUpdate',
+  full_name='voltha.GroupTableUpdate',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='voltha.GroupTableUpdate.id', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='group_mod', full_name='voltha.GroupTableUpdate.group_mod', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1055,
+  serialized_end=1132,
+)
+
+
 _FLOWS = _descriptor.Descriptor(
   name='Flows',
   full_name='voltha.Flows',
@@ -590,8 +628,39 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1055,
-  serialized_end=1106,
+  serialized_start=1134,
+  serialized_end=1185,
+)
+
+
+_FLOWGROUPS = _descriptor.Descriptor(
+  name='FlowGroups',
+  full_name='voltha.FlowGroups',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='items', full_name='voltha.FlowGroups.items', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1187,
+  serialized_end=1244,
 )
 
 _HEALTHSTATUS.fields_by_name['state'].enum_type = _HEALTHSTATUS_HEALTHSTATE
@@ -607,7 +676,9 @@
 _LOGICALDEVICEDETAILS.fields_by_name['desc'].message_type = openflow__13__pb2._OFP_DESC
 _LOGICALDEVICEDETAILS.fields_by_name['switch_features'].message_type = openflow__13__pb2._OFP_SWITCH_FEATURES
 _FLOWTABLEUPDATE.fields_by_name['flow_mod'].message_type = openflow__13__pb2._OFP_FLOW_MOD
+_GROUPTABLEUPDATE.fields_by_name['group_mod'].message_type = openflow__13__pb2._OFP_GROUP_MOD
 _FLOWS.fields_by_name['items'].message_type = openflow__13__pb2._OFP_FLOW_STATS
+_FLOWGROUPS.fields_by_name['items'].message_type = openflow__13__pb2._OFP_GROUP_ENTRY
 DESCRIPTOR.message_types_by_name['NullMessage'] = _NULLMESSAGE
 DESCRIPTOR.message_types_by_name['HealthStatus'] = _HEALTHSTATUS
 DESCRIPTOR.message_types_by_name['Address'] = _ADDRESS
@@ -621,7 +692,9 @@
 DESCRIPTOR.message_types_by_name['LogicalPorts'] = _LOGICALPORTS
 DESCRIPTOR.message_types_by_name['LogicalDeviceDetails'] = _LOGICALDEVICEDETAILS
 DESCRIPTOR.message_types_by_name['FlowTableUpdate'] = _FLOWTABLEUPDATE
+DESCRIPTOR.message_types_by_name['GroupTableUpdate'] = _GROUPTABLEUPDATE
 DESCRIPTOR.message_types_by_name['Flows'] = _FLOWS
+DESCRIPTOR.message_types_by_name['FlowGroups'] = _FLOWGROUPS
 
 NullMessage = _reflection.GeneratedProtocolMessageType('NullMessage', (_message.Message,), dict(
   DESCRIPTOR = _NULLMESSAGE,
@@ -714,6 +787,13 @@
   ))
 _sym_db.RegisterMessage(FlowTableUpdate)
 
+GroupTableUpdate = _reflection.GeneratedProtocolMessageType('GroupTableUpdate', (_message.Message,), dict(
+  DESCRIPTOR = _GROUPTABLEUPDATE,
+  __module__ = 'voltha_pb2'
+  # @@protoc_insertion_point(class_scope:voltha.GroupTableUpdate)
+  ))
+_sym_db.RegisterMessage(GroupTableUpdate)
+
 Flows = _reflection.GeneratedProtocolMessageType('Flows', (_message.Message,), dict(
   DESCRIPTOR = _FLOWS,
   __module__ = 'voltha_pb2'
@@ -721,6 +801,13 @@
   ))
 _sym_db.RegisterMessage(Flows)
 
+FlowGroups = _reflection.GeneratedProtocolMessageType('FlowGroups', (_message.Message,), dict(
+  DESCRIPTOR = _FLOWGROUPS,
+  __module__ = 'voltha_pb2'
+  # @@protoc_insertion_point(class_scope:voltha.FlowGroups)
+  ))
+_sym_db.RegisterMessage(FlowGroups)
+
 
 DESCRIPTOR.has_options = True
 DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023org.opencord.volthaB\014VolthaProtos\252\002\026Opencord.Voltha.Voltha'))
@@ -853,6 +940,16 @@
         request_serializer=ID.SerializeToString,
         response_deserializer=Flows.FromString,
         )
+    self.UpdateGroupTable = channel.unary_unary(
+        '/voltha.VolthaLogicalLayer/UpdateGroupTable',
+        request_serializer=GroupTableUpdate.SerializeToString,
+        response_deserializer=NullMessage.FromString,
+        )
+    self.ListDeviceFlowGroups = channel.unary_unary(
+        '/voltha.VolthaLogicalLayer/ListDeviceFlowGroups',
+        request_serializer=ID.SerializeToString,
+        response_deserializer=FlowGroups.FromString,
+        )
     self.CreateSubscriber = channel.unary_unary(
         '/voltha.VolthaLogicalLayer/CreateSubscriber',
         request_serializer=Subscriber.SerializeToString,
@@ -917,6 +1014,20 @@
     context.set_details('Method not implemented!')
     raise NotImplementedError('Method not implemented!')
 
+  def UpdateGroupTable(self, request, context):
+    """Update group tabel for device
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def ListDeviceFlowGroups(self, request, context):
+    """List all flow groups of a logical device
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
   def CreateSubscriber(self, request, context):
     """Create a subscriber record
     """
@@ -980,6 +1091,16 @@
           request_deserializer=ID.FromString,
           response_serializer=Flows.SerializeToString,
       ),
+      'UpdateGroupTable': grpc.unary_unary_rpc_method_handler(
+          servicer.UpdateGroupTable,
+          request_deserializer=GroupTableUpdate.FromString,
+          response_serializer=NullMessage.SerializeToString,
+      ),
+      'ListDeviceFlowGroups': grpc.unary_unary_rpc_method_handler(
+          servicer.ListDeviceFlowGroups,
+          request_deserializer=ID.FromString,
+          response_serializer=FlowGroups.SerializeToString,
+      ),
       'CreateSubscriber': grpc.unary_unary_rpc_method_handler(
           servicer.CreateSubscriber,
           request_deserializer=Subscriber.FromString,
@@ -1032,6 +1153,14 @@
     """List all flows of a logical device
     """
     context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def UpdateGroupTable(self, request, context):
+    """Update group tabel for device
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def ListDeviceFlowGroups(self, request, context):
+    """List all flow groups of a logical device
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
   def CreateSubscriber(self, request, context):
     """Create a subscriber record
     """
@@ -1080,6 +1209,16 @@
     """
     raise NotImplementedError()
   ListDeviceFlows.future = None
+  def UpdateGroupTable(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """Update group tabel for device
+    """
+    raise NotImplementedError()
+  UpdateGroupTable.future = None
+  def ListDeviceFlowGroups(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """List all flow groups of a logical device
+    """
+    raise NotImplementedError()
+  ListDeviceFlowGroups.future = None
   def CreateSubscriber(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
     """Create a subscriber record
     """
@@ -1113,11 +1252,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): ID.FromString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): FlowTableUpdate.FromString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): GroupTableUpdate.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.FromString,
   }
   response_serializers = {
@@ -1125,11 +1266,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): LogicalDeviceDetails.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): Subscriber.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): FlowGroups.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): Flows.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): LogicalPorts.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): LogicalDevices.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): Subscribers.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): NullMessage.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.SerializeToString,
   }
   method_implementations = {
@@ -1137,11 +1280,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): face_utilities.unary_unary_inline(servicer.DeleteSubscriber),
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): face_utilities.unary_unary_inline(servicer.GetLogicalDevice),
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): face_utilities.unary_unary_inline(servicer.GetSubscriber),
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): face_utilities.unary_unary_inline(servicer.ListDeviceFlowGroups),
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): face_utilities.unary_unary_inline(servicer.ListDeviceFlows),
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): face_utilities.unary_unary_inline(servicer.ListLogicalDevicePorts),
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): face_utilities.unary_unary_inline(servicer.ListLogicalDevices),
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): face_utilities.unary_unary_inline(servicer.ListSubscribers),
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): face_utilities.unary_unary_inline(servicer.UpdateFlowTable),
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): face_utilities.unary_unary_inline(servicer.UpdateGroupTable),
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): face_utilities.unary_unary_inline(servicer.UpdateSubscriber),
   }
   server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
@@ -1154,11 +1299,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): ID.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): FlowTableUpdate.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): GroupTableUpdate.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.SerializeToString,
   }
   response_deserializers = {
@@ -1166,11 +1313,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): LogicalDeviceDetails.FromString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): Subscriber.FromString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): FlowGroups.FromString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): Flows.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): LogicalPorts.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): LogicalDevices.FromString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): Subscribers.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): NullMessage.FromString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.FromString,
   }
   cardinalities = {
@@ -1178,11 +1327,13 @@
     'DeleteSubscriber': cardinality.Cardinality.UNARY_UNARY,
     'GetLogicalDevice': cardinality.Cardinality.UNARY_UNARY,
     'GetSubscriber': cardinality.Cardinality.UNARY_UNARY,
+    'ListDeviceFlowGroups': cardinality.Cardinality.UNARY_UNARY,
     'ListDeviceFlows': cardinality.Cardinality.UNARY_UNARY,
     'ListLogicalDevicePorts': cardinality.Cardinality.UNARY_UNARY,
     'ListLogicalDevices': cardinality.Cardinality.UNARY_UNARY,
     'ListSubscribers': cardinality.Cardinality.UNARY_UNARY,
     'UpdateFlowTable': cardinality.Cardinality.UNARY_UNARY,
+    'UpdateGroupTable': cardinality.Cardinality.UNARY_UNARY,
     'UpdateSubscriber': cardinality.Cardinality.UNARY_UNARY,
   }
   stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
diff --git a/voltha/core/device_model.py b/voltha/core/device_model.py
index 6863287..ca2d405 100644
--- a/voltha/core/device_model.py
+++ b/voltha/core/device_model.py
@@ -19,7 +19,7 @@
 """
 import structlog
 
-from voltha.protos import openflow_13_pb2
+from voltha.protos import openflow_13_pb2 as ofp
 from voltha.protos import voltha_pb2
 
 log = structlog.get_logger()
@@ -30,7 +30,7 @@
 
 
 def flow_stats_entry_from_flow_mod_message(mod):
-    flow = openflow_13_pb2.ofp_flow_stats(
+    flow = ofp.ofp_flow_stats(
         table_id=mod.table_id,
         priority=mod.priority,
         idle_timeout=mod.idle_timeout,
@@ -43,65 +43,97 @@
     return flow
 
 
+def group_entry_from_group_mod(mod):
+    group = ofp.ofp_group_entry(
+        desc=ofp.ofp_group_desc(
+            type=mod.type,
+            group_id=mod.group_id,
+            buckets=mod.buckets
+        ),
+        stats=ofp.ofp_group_stats(
+            group_id=mod.group_id
+            # TODO do we need to instantiate bucket bins?
+        )
+    )
+    return group
+
+
 class DeviceModel(object):
 
-    def __init__(self, _):
+    def __init__(self, tmp_id):
         self.info = voltha_pb2.LogicalDeviceDetails(
-            id='asdfa-1234124-asfd-949',
-            datapath_id=1919191919191919,
-            desc=openflow_13_pb2.ofp_desc(
+            id=str(tmp_id),
+            datapath_id=tmp_id,
+            desc=ofp.ofp_desc(
                 mfr_desc="CORD/Voltha",
                 hw_desc="Synthetized/logical device",
                 sw_desc="Voltha 1.0",
                 serial_num="1000219910",
                 dp_desc="A logical device. Use the TBD API to learn more"
             ),
-            switch_features=openflow_13_pb2.ofp_switch_features(
+            switch_features=ofp.ofp_switch_features(
                 n_buffers=256, # TODO fake for now
                 n_tables=2,  # TODO ditto
                 capabilities=(  # TODO and ditto
-                    openflow_13_pb2.OFPC_FLOW_STATS
-                    | openflow_13_pb2.OFPC_TABLE_STATS
-                    | openflow_13_pb2.OFPC_PORT_STATS
-                    | openflow_13_pb2.OFPC_GROUP_STATS
+                    ofp.OFPC_FLOW_STATS
+                    | ofp.OFPC_TABLE_STATS
+                    | ofp.OFPC_PORT_STATS
+                    | ofp.OFPC_GROUP_STATS
                 )
             )
         )
 
-        cap = openflow_13_pb2.OFPPF_1GB_FD | openflow_13_pb2.OFPPF_FIBER
-        self.ports = [openflow_13_pb2.ofp_port(
+        cap = ofp.OFPPF_1GB_FD | ofp.OFPPF_FIBER
+        self.ports = [ofp.ofp_port(
                 port_no=port_no,
                 hw_addr=mac_str_to_tuple('00:00:00:00:00:%02x' % port_no),
                 name=name,
                 config=0,
-                state=openflow_13_pb2.OFPPS_LIVE,
+                state=ofp.OFPPS_LIVE,
                 curr=cap,
                 advertised=cap,
                 peer=cap,
-                curr_speed=openflow_13_pb2.OFPPF_1GB_FD,
-                max_speed=openflow_13_pb2.OFPPF_1GB_FD
+                curr_speed=ofp.OFPPF_1GB_FD,
+                max_speed=ofp.OFPPF_1GB_FD
             ) for port_no, name in [(1, 'onu1'), (2, 'onu2'), (129, 'olt1')]]
 
         self.flows = []
-        self.groups = []
+        self.groups = {}
+
+    def announce_flows_deleted(self, flows):
+        for f in flows:
+            self.announce_flow_deleted(f)
+
+    def announce_flow_deleted(self, flow):
+        if flow.flags & ofp.OFPFF_SEND_FLOW_REM:
+            raise NotImplementedError("announce_flow_deleted")
+
+    def signal_flow_mod_error(self, code, flow_mod):
+        pass  # TODO
+
+    def signal_flow_removal(self, code, flow):
+        pass  # TODO
+
+    def signal_group_mod_error(self, code, group_mod):
+        pass  # TODO
 
     def update_flow_table(self, flow_mod):
 
         command = flow_mod.command
 
-        if command == openflow_13_pb2.OFPFC_ADD:
+        if command == ofp.OFPFC_ADD:
             self.flow_add(flow_mod)
 
-        elif command == openflow_13_pb2.OFPFC_DELETE:
+        elif command == ofp.OFPFC_DELETE:
             self.flow_delete(flow_mod)
 
-        elif command == openflow_13_pb2.OFPFC_DELETE_STRICT:
+        elif command == ofp.OFPFC_DELETE_STRICT:
             self.flow_delete_strict(flow_mod)
 
-        elif command == openflow_13_pb2.OFPFC_MODIFY:
+        elif command == ofp.OFPFC_MODIFY:
             self.flow_modify(flow_mod)
 
-        elif command == openflow_13_pb2.OFPFC_MODIFY_STRICT:
+        elif command == ofp.OFPFC_MODIFY_STRICT:
             self.flow_modify_strict(flow_mod)
 
         else:
@@ -110,17 +142,37 @@
     def list_flows(self):
         return self.flows
 
-    ## <===============LOW LEVEL FLOW HANDLERS ===============================>
+    def update_group_table(self, group_mod):
+
+        command = group_mod.command
+
+        if command == ofp.OFPGC_DELETE:
+            self.group_delete(group_mod)
+
+        elif command == ofp.OFPGC_ADD:
+            self.group_add(group_mod)
+
+        elif command == ofp.OFPGC_MODIFY:
+            self.group_modify(group_mod)
+
+        else:
+            log.warn('unhandled-group-mod', command=command,
+                     group_mod=group_mod)
+
+    def list_groups(self):
+        return self.groups.values()
+
+    ## <=============== LOW LEVEL FLOW HANDLERS ==============================>
 
     def flow_add(self, mod):
-        assert isinstance(mod, openflow_13_pb2.ofp_flow_mod)
+        assert isinstance(mod, ofp.ofp_flow_mod)
         assert mod.cookie_mask == 0
 
-        check_overlap = mod.flags & openflow_13_pb2.OFPFF_CHECK_OVERLAP
+        check_overlap = mod.flags & ofp.OFPFF_CHECK_OVERLAP
         if check_overlap:
             if self.find_overlapping_flows(mod, True):
                 self.signal_flow_mod_error(
-                    openflow_13_pb2.OFPFMFC_OVERLAP, mod)
+                    ofp.OFPFMFC_OVERLAP, mod)
             else:
                 # free to add as new flow
                 flow = flow_stats_entry_from_flow_mod_message(mod)
@@ -131,7 +183,7 @@
             idx = self.find_flow(flow)
             if idx >= 0:
                 old_flow = self.flows[idx]
-                if not (mod.flags & openflow_13_pb2.OFPFF_RESET_COUNTS):
+                if not (mod.flags & ofp.OFPFF_RESET_COUNTS):
                     flow.byte_count = old_flow.byte_count
                     flow.packet_count = old_flow.packet_count
                 self.flows[idx] = flow
@@ -140,7 +192,22 @@
                 self.flows.append(flow)
 
     def flow_delete(self, mod):
-        raise NotImplementedError()
+        assert isinstance(mod, ofp.ofp_flow_mod)
+
+        # build a list of what to keep vs what to delete
+        to_keep = []
+        to_delete = []
+        for f in self.flows:
+            if self.flow_matches_spec(f, mod):
+                to_delete.append(f)
+            else:
+                to_keep.append(f)
+
+        # replace flow table with keepers
+        self.flows = to_keep
+
+        # send notifications for discarded flow as required by OpenFlow
+        self.announce_flows_deleted(to_delete)
 
     def flow_delete_strict(self, mod):
         raise NotImplementedError()
@@ -160,8 +227,7 @@
         :param return_on_first: if True, return with the first entry
         :return:
         """
-        # TODO finish implementation
-        return []
+        return []  # TODO finish implementation
 
     def find_flow(self, flow):
         for i, f in enumerate(self.flows):
@@ -175,3 +241,145 @@
             if getattr(f1, key) != getattr(f2, key):
                 return False
         return True
+
+    def flow_matches_spec(self, flow, flow_mod):
+        """
+        Return True if given flow (ofp_flow_stats) is "covered" by the
+        wildcard flow_mod (ofp_flow_mod), taking into consideration of
+        both exact mactches as well as masks-based match fields if any.
+        Otherwise return False
+        :param flow: ofp_flow_stats
+        :param mod: ofp_flow_mod
+        :return: Bool
+        """
+
+        assert isinstance(flow, ofp.ofp_flow_stats)
+        assert isinstance(flow_mod, ofp.ofp_flow_mod)
+
+        # Check if flow.cookie is covered by mod.cookie and mod.cookie_mask
+        if (flow.cookie & flow_mod.cookie_mask) != \
+                (flow_mod.cookie & flow_mod.cookie_mask):
+            return False
+
+        # Check if flow.table_id is covered by flow_mod.table_id
+        if flow_mod.table_id != ofp.OFPTT_ALL and \
+                        flow.table_id != flow_mod.table_id:
+            return False
+
+        # Check out_port
+        if flow_mod.out_port != ofp.OFPP_ANY and \
+                not self.flow_has_out_port(flow, flow_mod.out_port):
+            return False
+
+        # Check out_group
+        if flow_mod.out_group != ofp.OFPG_ANY and \
+                not self.flow_has_out_group(flow, flow_mod.out_group):
+            return False
+
+        # Priority is ignored
+
+        # Check match condition
+        # If the flow_mod match field is empty, that is a special case and
+        # indicates the flow entry matches
+        match = flow_mod.match
+        assert isinstance(match, ofp.ofp_match)
+        if not match.oxm_list:
+            # If we got this far and the match is empty in the flow spec,
+            # than the flow matches
+            return True
+        else:
+            raise NotImplementedError(
+                "flow_matches_spec(): No flow match analysis yet")
+
+    def flow_has_out_port(self, flow, out_port):
+        """
+        Return True if flow has a output command with the given out_port
+        """
+        assert isinstance(flow, ofp.ofp_flow_stats)
+        for instruction in flow.instructions:
+            assert isinstance(instruction, ofp.ofp_instruction)
+            if instruction.type == ofp.OFPIT_APPLY_ACTIONS:
+                for action in instruction.actions.actions:
+                    assert isinstance(action, ofp.ofp_action)
+                    if action.type == ofp.OFPAT_OUTPUT and \
+                        action.output.port == out_port:
+                        return True
+
+        # otherwise...
+        return False
+
+    def flow_has_out_group(self, flow, group_id):
+        """
+        Return True if flow has a output command with the given out_group
+        """
+        assert isinstance(flow, ofp.ofp_flow_stats)
+        for instruction in flow.instructions:
+            assert isinstance(instruction, ofp.ofp_instruction)
+            if instruction.type == ofp.OFPIT_APPLY_ACTIONS:
+                for action in instruction.actions.actions:
+                    assert isinstance(action, ofp.ofp_action)
+                    if action.type == ofp.OFPAT_GROUP and \
+                        action.group.group_id == group_id:
+                            return True
+
+        # otherwise...
+        return False
+
+    def flows_delete_by_group_id(self, group_id):
+        """
+        Delete any flow(s) referring to given group_id
+        :param group_id:
+        :return: None
+        """
+        to_keep = []
+        to_delete = []
+        for f in self.flows:
+            if self.flow_has_out_group(f, group_id):
+                to_delete.append(f)
+            else:
+                to_keep.append(f)
+
+        # replace flow table with keepers
+        self.flows = to_keep
+
+        # send notification to deleted ones
+        self.announce_flows_deleted(to_delete)
+
+    ## <=============== LOW LEVEL GROUP HANDLERS =============================>
+
+    def group_add(self, group_mod):
+        assert isinstance(group_mod, ofp.ofp_group_mod)
+        if group_mod.group_id in self.groups:
+            self.signal_group_mod_error(ofp.OFPGMFC_GROUP_EXISTS, group_mod)
+        else:
+            group_entry = group_entry_from_group_mod(group_mod)
+            self.groups[group_mod.group_id] = group_entry
+
+    def group_delete(self, group_mod):
+        assert isinstance(group_mod, ofp.ofp_group_mod)
+        group_id = group_mod.group_id
+        if group_id == ofp.OFPG_ALL:
+            # TODO we must delete all flows that point to this group and
+            # signal controller as requested by flow's flag
+            self.groups = {}
+            log.debug('all-groups-deleted')
+
+        else:
+            if group_id not in self.groups:
+                # per openflow spec, this is not an error
+                pass
+
+            else:
+                self.flows_delete_by_group_id(group_id)
+                del self.groups[group_id]
+                log.debug('group-deleted', group_id=group_id)
+
+    def group_modify(self, group_mod):
+        assert isinstance(group_mod, ofp.ofp_group_mod)
+        if group_mod.group_id not in self.groups:
+            self.signal_group_mod_error(
+                ofp.OFPGMFC_INVALID_GROUP, group_mod)
+        else:
+            # replace existing group entry with new group definition
+            group_entry = group_entry_from_group_mod(group_mod)
+            self.groups[group_mod.group_id] = group_entry
diff --git a/voltha/northbound/grpc/grpc_server.py b/voltha/northbound/grpc/grpc_server.py
index c7dba6e..385e72c 100644
--- a/voltha/northbound/grpc/grpc_server.py
+++ b/voltha/northbound/grpc/grpc_server.py
@@ -141,7 +141,7 @@
     def __init__(self, threadpool):
         self.threadpool = threadpool
 
-        self.devices = [DeviceModel(0)]
+        self.devices = [DeviceModel(1)]
         self.devices_map = dict((d.info.id, d) for d in self.devices)
 
     def ListLogicalDevices(self, request, context):
@@ -169,6 +169,16 @@
         flows = device_model.list_flows()
         return voltha_pb2.Flows(items=flows)
 
+    def UpdateGroupTable(self, request, context):
+        device_model = self.devices_map[request.id]
+        device_model.update_group_table(request.group_mod)
+        return voltha_pb2.NullMessage()
+
+    def ListDeviceFlowGroups(self, request, context):
+        device_model = self.devices_map[request.id]
+        groups = device_model.list_groups()
+        return voltha_pb2.FlowGroups(items=groups)
+
 
 class VolthaGrpcServer(object):
 
diff --git a/voltha/protos/openflow_13.desc b/voltha/protos/openflow_13.desc
index d65f4c4..41f5066 100644
--- a/voltha/protos/openflow_13.desc
+++ b/voltha/protos/openflow_13.desc
Binary files differ
diff --git a/voltha/protos/openflow_13.proto b/voltha/protos/openflow_13.proto
index 71e27af..111efc8 100644
--- a/voltha/protos/openflow_13.proto
+++ b/voltha/protos/openflow_13.proto
@@ -189,7 +189,7 @@
 message ofp_hello {
     //ofp_header header = 1;
     /* Hello element list */
-    repeated ofp_hello_elem_header elements = 2; /* 0 or more */
+    repeated ofp_hello_elem_header elements = 1; /* 0 or more */
 };
 
 //#define OFP_DEFAULT_MISS_SEND_LEN   128
@@ -205,8 +205,8 @@
 /* Switch configuration. */
 message ofp_switch_config {
     //ofp_header header = 1;
-    uint32 flags = 2;             /* Bitmap of OFPC_* flags. */
-    uint32 miss_send_len = 3;     /* Max bytes of packet that datapath
+    uint32 flags = 1;             /* Bitmap of OFPC_* flags. */
+    uint32 miss_send_len = 2;     /* Max bytes of packet that datapath
                                      should send to the controller. See
                                      ofp_controller_max_len for valid values.
                                    */
@@ -235,8 +235,8 @@
 /* Configure/Modify behavior of a flow table */
 message ofp_table_mod {
     //ofp_header header = 1;
-    uint32 table_id = 2;  /* ID of the table, OFPTT_ALL indicates all tables */
-    uint32 config = 3;    /* Bitmap of OFPTC_* flags */
+    uint32 table_id = 1;  /* ID of the table, OFPTT_ALL indicates all tables */
+    uint32 config = 2;    /* Bitmap of OFPTC_* flags */
 };
 
 /* Capabilities supported by the datapath. */
@@ -317,17 +317,17 @@
 /* Switch features. */
 message ofp_switch_features {
     //ofp_header header = 1;
-    uint64 datapath_id = 2;   /* Datapath unique ID.  The lower 48-bits are for
+    uint64 datapath_id = 1;   /* Datapath unique ID.  The lower 48-bits are for
                                  a MAC address, while the upper 16-bits are
                                  implementer-defined. */
 
-    uint32 n_buffers = 3;     /* Max packets buffered at once. */
+    uint32 n_buffers = 2;     /* Max packets buffered at once. */
 
-    uint32 n_tables = 4;      /* Number of tables supported by datapath. */
-    uint32 auxiliary_id = 5;  /* Identify auxiliary connections */
+    uint32 n_tables = 3;      /* Number of tables supported by datapath. */
+    uint32 auxiliary_id = 4;  /* Identify auxiliary connections */
 
     /* Features. */
-    uint32 capabilities = 6;  /* Bitmap of support "ofp_capabilities". */
+    uint32 capabilities = 5;  /* Bitmap of support "ofp_capabilities". */
 };
 
 /* What changed about the physical port */
@@ -340,24 +340,24 @@
 /* A physical port has changed in the datapath */
 message ofp_port_status {
     //ofp_header header = 1;
-    ofp_port_reason reason = 2; /* One of OFPPR_*. */
-    ofp_port desc = 3;
+    ofp_port_reason reason = 1; /* One of OFPPR_*. */
+    ofp_port desc = 2;
 };
 
 /* Modify behavior of the physical port */
 message ofp_port_mod {
     //ofp_header header = 1;
-    uint32 port_no = 2;
-    repeated uint32 hw_addr = 3; //[OFP_ETH_ALEN];
+    uint32 port_no = 1;
+    repeated uint32 hw_addr = 2; //[OFP_ETH_ALEN];
                                       /* 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. */
-    uint32 config = 4;        /* Bitmap of OFPPC_* flags. */
-    uint32 mask = 5;          /* Bitmap of OFPPC_* flags to be changed. */
+    uint32 config = 3;        /* Bitmap of OFPPC_* flags. */
+    uint32 mask = 4;          /* Bitmap of OFPPC_* flags to be changed. */
 
-    uint32 advertise = 6;     /* Bitmap of OFPPF_*.  Zero all bits to prevent
+    uint32 advertise = 5;     /* Bitmap of OFPPF_*.  Zero all bits to prevent
                                  any action taking place. */
 };
 
@@ -2022,9 +2022,13 @@
 /* Body of reply to OFPMP_GROUP_DESC request. */
 message ofp_group_desc {
     ofp_group_type type = 1;       /* One of OFPGT_*. */
-    uint32 pad = 2;                /* Pad to 64 bits. */
-    uint32 group_id = 3;           /* Group identifier. */
-    repeated ofp_bucket buckets = 4;   /* List of buckets - 0 or more. */
+    uint32 group_id = 2;           /* Group identifier. */
+    repeated ofp_bucket buckets = 3;   /* List of buckets - 0 or more. */
+};
+
+message ofp_group_entry {
+    ofp_group_desc desc = 1;
+    ofp_group_stats stats = 2;
 };
 
 /* Backward compatibility with 1.3.1 - avoid breaking the API. */
@@ -2228,16 +2232,16 @@
 /* Role request and reply message. */
 message ofp_role_request {
     //ofp_header header = 1;        /* Type OFPT_ROLE_REQUEST/OFPT_ROLE_REPLY. */
-    ofp_controller_role role = 2; /* One of OFPCR_ROLE_*. */
-    uint64 generation_id = 3;     /* Master Election Generation Id */
+    ofp_controller_role role = 1; /* One of OFPCR_ROLE_*. */
+    uint64 generation_id = 2;     /* Master Election Generation Id */
 };
 
 /* Asynchronous message configuration. */
 message ofp_async_config {
     //ofp_header header = 1;    /* OFPT_GET_ASYNC_REPLY or OFPT_SET_ASYNC. */
-    repeated uint32 packet_in_mask = 2;   /* Bitmasks of OFPR_* values. */
-    repeated uint32 port_status_mask = 3; /* Bitmasks of OFPPR_* values. */
-    repeated uint32 flow_removed_mask = 4;/* Bitmasks of OFPRR_* values. */
+    repeated uint32 packet_in_mask = 1;   /* Bitmasks of OFPR_* values. */
+    repeated uint32 port_status_mask = 2; /* Bitmasks of OFPPR_* values. */
+    repeated uint32 flow_removed_mask = 3;/* Bitmasks of OFPRR_* values. */
 };
 
 /*
@@ -2306,5 +2310,5 @@
     }
 
     // TODO continue
-    
+
 }
diff --git a/voltha/protos/openflow_13_pb2.py b/voltha/protos/openflow_13_pb2.py
index 4839318..ddc1ad1 100644
--- a/voltha/protos/openflow_13_pb2.py
+++ b/voltha/protos/openflow_13_pb2.py
@@ -20,7 +20,7 @@
   name='openflow_13.proto',
   package='openflow_13',
   syntax='proto3',
-  serialized_pb=_b('\n\x11openflow_13.proto\x12\x0bopenflow_13\"O\n\nofp_header\x12\x0f\n\x07version\x18\x01 \x01(\r\x12#\n\x04type\x18\x02 \x01(\x0e\x32\x15.openflow_13.ofp_type\x12\x0b\n\x03xid\x18\x03 \x01(\r\"\x96\x01\n\x15ofp_hello_elem_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_hello_elem_type\x12\x42\n\rversionbitmap\x18\x02 \x01(\x0b\x32).openflow_13.ofp_hello_elem_versionbitmapH\x00\x42\t\n\x07\x65lement\"/\n\x1cofp_hello_elem_versionbitmap\x12\x0f\n\x07\x62itmaps\x18\x02 \x03(\r\"A\n\tofp_hello\x12\x34\n\x08\x65lements\x18\x02 \x03(\x0b\x32\".openflow_13.ofp_hello_elem_header\"9\n\x11ofp_switch_config\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x15\n\rmiss_send_len\x18\x03 \x01(\r\"1\n\rofp_table_mod\x12\x10\n\x08table_id\x18\x02 \x01(\r\x12\x0e\n\x06\x63onfig\x18\x03 \x01(\r\"\xc3\x01\n\x08ofp_port\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x0f\n\x07hw_addr\x18\x02 \x03(\r\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\r\n\x05state\x18\x05 \x01(\r\x12\x0c\n\x04\x63urr\x18\x06 \x01(\r\x12\x12\n\nadvertised\x18\x07 \x01(\r\x12\x11\n\tsupported\x18\x08 \x01(\r\x12\x0c\n\x04peer\x18\t \x01(\r\x12\x12\n\ncurr_speed\x18\n \x01(\r\x12\x11\n\tmax_speed\x18\x0b \x01(\r\"{\n\x13ofp_switch_features\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12\x11\n\tn_buffers\x18\x03 \x01(\r\x12\x10\n\x08n_tables\x18\x04 \x01(\r\x12\x14\n\x0c\x61uxiliary_id\x18\x05 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x06 \x01(\r\"d\n\x0fofp_port_status\x12,\n\x06reason\x18\x02 \x01(\x0e\x32\x1c.openflow_13.ofp_port_reason\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_port\"a\n\x0cofp_port_mod\x12\x0f\n\x07port_no\x18\x02 \x01(\r\x12\x0f\n\x07hw_addr\x18\x03 \x03(\r\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\x0c\n\x04mask\x18\x05 \x01(\r\x12\x11\n\tadvertise\x18\x06 \x01(\r\"f\n\tofp_match\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_match_type\x12.\n\noxm_fields\x18\x02 \x03(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"\xc3\x01\n\rofp_oxm_field\x12-\n\toxm_class\x18\x01 \x01(\x0e\x32\x1a.openflow_13.ofp_oxm_class\x12\x33\n\tofb_field\x18\x04 \x01(\x0b\x32\x1e.openflow_13.ofp_oxm_ofb_fieldH\x00\x12\x45\n\x12\x65xperimenter_field\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_oxm_experimenter_fieldH\x00\x42\x07\n\x05\x66ield\"\x8b\n\n\x11ofp_oxm_ofb_field\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.oxm_ofb_field_types\x12\x10\n\x08has_mask\x18\x02 \x01(\x08\x12\x0e\n\x04port\x18\x03 \x01(\rH\x00\x12\x17\n\rphysical_port\x18\x04 \x01(\rH\x00\x12\x18\n\x0etable_metadata\x18\x05 \x01(\x04H\x00\x12\x11\n\x07\x65th_dst\x18\x06 \x01(\x0cH\x00\x12\x11\n\x07\x65th_src\x18\x07 \x01(\x0cH\x00\x12\x12\n\x08\x65th_type\x18\x08 \x01(\rH\x00\x12\x12\n\x08vlan_vid\x18\t \x01(\rH\x00\x12\x12\n\x08vlan_pcp\x18\n \x01(\rH\x00\x12\x11\n\x07ip_dscp\x18\x0b \x01(\rH\x00\x12\x10\n\x06ip_ecn\x18\x0c \x01(\rH\x00\x12\x12\n\x08ip_proto\x18\r \x01(\rH\x00\x12\x12\n\x08ipv4_src\x18\x0e \x01(\rH\x00\x12\x12\n\x08ipv4_dst\x18\x0f \x01(\rH\x00\x12\x11\n\x07tcp_src\x18\x10 \x01(\rH\x00\x12\x11\n\x07tcp_dst\x18\x11 \x01(\rH\x00\x12\x11\n\x07udp_src\x18\x12 \x01(\rH\x00\x12\x11\n\x07udp_dst\x18\x13 \x01(\rH\x00\x12\x12\n\x08sctp_src\x18\x14 \x01(\rH\x00\x12\x12\n\x08sctp_dst\x18\x15 \x01(\rH\x00\x12\x15\n\x0bicmpv4_type\x18\x16 \x01(\rH\x00\x12\x15\n\x0bicmpv4_code\x18\x17 \x01(\rH\x00\x12\x10\n\x06\x61rp_op\x18\x18 \x01(\rH\x00\x12\x11\n\x07\x61rp_spa\x18\x19 \x01(\rH\x00\x12\x11\n\x07\x61rp_tpa\x18\x1a \x01(\rH\x00\x12\x11\n\x07\x61rp_sha\x18\x1b \x01(\x0cH\x00\x12\x11\n\x07\x61rp_tha\x18\x1c \x01(\x0cH\x00\x12\x12\n\x08ipv6_src\x18\x1d \x01(\x0cH\x00\x12\x12\n\x08ipv6_dst\x18\x1e \x01(\x0cH\x00\x12\x15\n\x0bipv6_flabel\x18\x1f \x01(\rH\x00\x12\x15\n\x0bicmpv6_type\x18  \x01(\rH\x00\x12\x15\n\x0bicmpv6_code\x18! \x01(\rH\x00\x12\x18\n\x0eipv6_nd_target\x18\" \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_ssl\x18# \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_tll\x18$ \x01(\x0cH\x00\x12\x14\n\nmpls_label\x18% \x01(\rH\x00\x12\x11\n\x07mpls_tc\x18& \x01(\rH\x00\x12\x12\n\x08mpls_bos\x18\' \x01(\rH\x00\x12\x12\n\x08pbb_isid\x18( \x01(\rH\x00\x12\x13\n\ttunnel_id\x18) \x01(\x04H\x00\x12\x15\n\x0bipv6_exthdr\x18* \x01(\rH\x00\x12\x1d\n\x13table_metadata_mask\x18i \x01(\x04H\x01\x12\x16\n\x0c\x65th_dst_mask\x18j \x01(\x0cH\x01\x12\x16\n\x0c\x65th_src_mask\x18k \x01(\x0cH\x01\x12\x17\n\rvlan_vid_mask\x18m \x01(\rH\x01\x12\x17\n\ripv4_src_mask\x18r \x01(\rH\x01\x12\x17\n\ripv4_dst_mask\x18s \x01(\rH\x01\x12\x16\n\x0c\x61rp_spa_mask\x18} \x01(\rH\x01\x12\x16\n\x0c\x61rp_tpa_mask\x18~ \x01(\rH\x01\x12\x18\n\ripv6_src_mask\x18\x81\x01 \x01(\x0cH\x01\x12\x18\n\ripv6_dst_mask\x18\x82\x01 \x01(\x0cH\x01\x12\x1b\n\x10ipv6_flabel_mask\x18\x83\x01 \x01(\rH\x01\x12\x18\n\rpbb_isid_mask\x18\x8c\x01 \x01(\rH\x01\x12\x19\n\x0etunnel_id_mask\x18\x8d\x01 \x01(\x04H\x01\x12\x1b\n\x10ipv6_exthdr_mask\x18\x8e\x01 \x01(\rH\x01\x42\x07\n\x05valueB\x06\n\x04mask\"F\n\x1aofp_oxm_experimenter_field\x12\x12\n\noxm_header\x18\x01 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\"\xe6\x03\n\nofp_action\x12*\n\x04type\x18\x01 \x01(\x0e\x32\x1c.openflow_13.ofp_action_type\x12\x30\n\x06output\x18\x02 \x01(\x0b\x32\x1e.openflow_13.ofp_action_outputH\x00\x12\x34\n\x08mpls_ttl\x18\x03 \x01(\x0b\x32 .openflow_13.ofp_action_mpls_ttlH\x00\x12,\n\x04push\x18\x04 \x01(\x0b\x32\x1c.openflow_13.ofp_action_pushH\x00\x12\x34\n\x08pop_mpls\x18\x05 \x01(\x0b\x32 .openflow_13.ofp_action_pop_mplsH\x00\x12.\n\x05group\x18\x06 \x01(\x0b\x32\x1d.openflow_13.ofp_action_groupH\x00\x12\x30\n\x06nw_ttl\x18\x07 \x01(\x0b\x32\x1e.openflow_13.ofp_action_nw_ttlH\x00\x12\x36\n\tset_field\x18\x08 \x01(\x0b\x32!.openflow_13.ofp_action_set_fieldH\x00\x12<\n\x0c\x65xperimenter\x18\t \x01(\x0b\x32$.openflow_13.ofp_action_experimenterH\x00\x42\x08\n\x06\x61\x63tion\"2\n\x11ofp_action_output\x12\x0c\n\x04port\x18\x01 \x01(\r\x12\x0f\n\x07max_len\x18\x02 \x01(\r\"\'\n\x13ofp_action_mpls_ttl\x12\x10\n\x08mpls_ttl\x18\x01 \x01(\r\"$\n\x0fofp_action_push\x12\x11\n\tethertype\x18\x01 \x01(\r\"(\n\x13ofp_action_pop_mpls\x12\x11\n\tethertype\x18\x01 \x01(\r\"$\n\x10ofp_action_group\x12\x10\n\x08group_id\x18\x01 \x01(\r\"#\n\x11ofp_action_nw_ttl\x12\x0e\n\x06nw_ttl\x18\x01 \x01(\r\"A\n\x14ofp_action_set_field\x12)\n\x05\x66ield\x18\x01 \x01(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"=\n\x17ofp_action_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xde\x02\n\x0fofp_instruction\x12\x0c\n\x04type\x18\x01 \x01(\r\x12=\n\ngoto_table\x18\x02 \x01(\x0b\x32\'.openflow_13.ofp_instruction_goto_tableH\x00\x12\x45\n\x0ewrite_metadata\x18\x03 \x01(\x0b\x32+.openflow_13.ofp_instruction_write_metadataH\x00\x12\x37\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32$.openflow_13.ofp_instruction_actionsH\x00\x12\x33\n\x05meter\x18\x05 \x01(\x0b\x32\".openflow_13.ofp_instruction_meterH\x00\x12\x41\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32).openflow_13.ofp_instruction_experimenterH\x00\x42\x06\n\x04\x64\x61ta\".\n\x1aofp_instruction_goto_table\x12\x10\n\x08table_id\x18\x01 \x01(\r\"I\n\x1eofp_instruction_write_metadata\x12\x10\n\x08metadata\x18\x01 \x01(\x04\x12\x15\n\rmetadata_mask\x18\x02 \x01(\x04\"C\n\x17ofp_instruction_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\")\n\x15ofp_instruction_meter\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"B\n\x1cofp_instruction_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xd9\x02\n\x0cofp_flow_mod\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x03 \x01(\x04\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x32\n\x07\x63ommand\x18\x05 \x01(\x0e\x32!.openflow_13.ofp_flow_mod_command\x12\x14\n\x0cidle_timeout\x18\x06 \x01(\r\x12\x14\n\x0chard_timeout\x18\x07 \x01(\r\x12\x10\n\x08priority\x18\x08 \x01(\r\x12\x11\n\tbuffer_id\x18\t \x01(\r\x12\x10\n\x08out_port\x18\n \x01(\r\x12\x11\n\tout_group\x18\x0b \x01(\r\x12\r\n\x05\x66lags\x18\x0c \x01(\r\x12%\n\x05match\x18\r \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\x0e \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"o\n\nofp_bucket\x12\x0e\n\x06weight\x18\x01 \x01(\r\x12\x12\n\nwatch_port\x18\x02 \x01(\r\x12\x13\n\x0bwatch_group\x18\x03 \x01(\r\x12(\n\x07\x61\x63tions\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_action\"\xab\x01\n\rofp_group_mod\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_group_mod_command\x12)\n\x04type\x18\x03 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x04 \x01(\r\x12(\n\x07\x62uckets\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"\x81\x01\n\x0eofp_packet_out\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x0f\n\x07in_port\x18\x03 \x01(\r\x12\x13\n\x0b\x61\x63tions_len\x18\x04 \x01(\r\x12(\n\x07\x61\x63tions\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_action\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\"\xbf\x01\n\rofp_packet_in\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x11\n\ttotal_len\x18\x03 \x01(\r\x12\x31\n\x06reason\x18\x04 \x01(\x0e\x32!.openflow_13.ofp_packet_in_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x06 \x01(\x04\x12%\n\x05match\x18\x07 \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x0c\n\x04\x64\x61ta\x18\x08 \x01(\x0c\"\xa6\x02\n\x10ofp_flow_removed\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x10\n\x08priority\x18\x03 \x01(\r\x12\x34\n\x06reason\x18\x04 \x01(\x0e\x32$.openflow_13.ofp_flow_removed_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x08 \x01(\r\x12\x14\n\x0chard_timeout\x18\t \x01(\r\x12\x14\n\x0cpacket_count\x18\n \x01(\x04\x12\x12\n\nbyte_count\x18\x0b \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\"v\n\x15ofp_meter_band_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"R\n\x13ofp_meter_band_drop\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"m\n\x1aofp_meter_band_dscp_remark\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x12\n\nprec_level\x18\x05 \x01(\r\"\x92\x01\n\x1bofp_meter_band_experimenter\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x05 \x01(\r\"\xc1\x01\n\rofp_meter_mod\x12\'\n\x06header\x18\x01 \x01(\x0b\x32\x17.openflow_13.ofp_header\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_meter_mod_command\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x10\n\x08meter_id\x18\x04 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x05 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"9\n\rofp_error_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"`\n\x1aofp_error_experimenter_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x04 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"c\n\x15ofp_multipart_request\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"a\n\x13ofp_multipart_reply\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"c\n\x08ofp_desc\x12\x10\n\x08mfr_desc\x18\x01 \x01(\t\x12\x0f\n\x07hw_desc\x18\x02 \x01(\t\x12\x0f\n\x07sw_desc\x18\x03 \x01(\t\x12\x12\n\nserial_num\x18\x04 \x01(\t\x12\x0f\n\x07\x64p_desc\x18\x05 \x01(\t\"\x9b\x01\n\x16ofp_flow_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"\xb1\x02\n\x0eofp_flow_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x02 \x01(\r\x12\x15\n\rduration_nsec\x18\x03 \x01(\r\x12\x10\n\x08priority\x18\x04 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x05 \x01(\r\x12\x14\n\x0chard_timeout\x18\x06 \x01(\r\x12\r\n\x05\x66lags\x18\x07 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x08 \x01(\x04\x12\x14\n\x0cpacket_count\x18\t \x01(\x04\x12\x12\n\nbyte_count\x18\n \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\r \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"\xa0\x01\n\x1bofp_aggregate_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"Y\n\x19ofp_aggregate_stats_reply\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\x12\x12\n\nflow_count\x18\x03 \x01(\r\"\xb1\x03\n\x1aofp_table_feature_property\x12\x36\n\x04type\x18\x01 \x01(\x0e\x32(.openflow_13.ofp_table_feature_prop_type\x12H\n\x0cinstructions\x18\x02 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_instructionsH\x00\x12\x46\n\x0bnext_tables\x18\x03 \x01(\x0b\x32/.openflow_13.ofp_table_feature_prop_next_tablesH\x00\x12>\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32+.openflow_13.ofp_table_feature_prop_actionsH\x00\x12\x36\n\x03oxm\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_table_feature_prop_oxmH\x00\x12H\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_experimenterH\x00\x42\x07\n\x05value\"Y\n#ofp_table_feature_prop_instructions\x12\x32\n\x0cinstructions\x18\x01 \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"<\n\"ofp_table_feature_prop_next_tables\x12\x16\n\x0enext_table_ids\x18\x01 \x03(\r\"J\n\x1eofp_table_feature_prop_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\"-\n\x1aofp_table_feature_prop_oxm\x12\x0f\n\x07oxm_ids\x18\x03 \x03(\r\"h\n#ofp_table_feature_prop_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x19\n\x11\x65xperimenter_data\x18\x04 \x03(\r\"\xc6\x01\n\x12ofp_table_features\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0emetadata_match\x18\x03 \x01(\x04\x12\x16\n\x0emetadata_write\x18\x04 \x01(\x04\x12\x0e\n\x06\x63onfig\x18\x05 \x01(\r\x12\x13\n\x0bmax_entries\x18\x06 \x01(\r\x12;\n\nproperties\x18\x07 \x03(\x0b\x32\'.openflow_13.ofp_table_feature_property\"f\n\x0fofp_table_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x61\x63tive_count\x18\x02 \x01(\r\x12\x14\n\x0clookup_count\x18\x03 \x01(\x04\x12\x15\n\rmatched_count\x18\x04 \x01(\x04\")\n\x16ofp_port_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\"\xbb\x02\n\x0eofp_port_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x12\n\nrx_packets\x18\x02 \x01(\x04\x12\x12\n\ntx_packets\x18\x03 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08tx_bytes\x18\x05 \x01(\x04\x12\x12\n\nrx_dropped\x18\x06 \x01(\x04\x12\x12\n\ntx_dropped\x18\x07 \x01(\x04\x12\x11\n\trx_errors\x18\x08 \x01(\x04\x12\x11\n\ttx_errors\x18\t \x01(\x04\x12\x14\n\x0crx_frame_err\x18\n \x01(\x04\x12\x13\n\x0brx_over_err\x18\x0b \x01(\x04\x12\x12\n\nrx_crc_err\x18\x0c \x01(\x04\x12\x12\n\ncollisions\x18\r \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x0e \x01(\r\x12\x15\n\rduration_nsec\x18\x0f \x01(\r\"+\n\x17ofp_group_stats_request\x12\x10\n\x08group_id\x18\x01 \x01(\r\">\n\x12ofp_bucket_counter\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\"\xc4\x01\n\x0fofp_group_stats\x12\x10\n\x08group_id\x18\x01 \x01(\r\x12\x11\n\tref_count\x18\x02 \x01(\r\x12\x14\n\x0cpacket_count\x18\x03 \x01(\x04\x12\x12\n\nbyte_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\x0c\x62ucket_stats\x18\x07 \x03(\x0b\x32\x1f.openflow_13.ofp_bucket_counter\"\x84\x01\n\x0eofp_group_desc\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x0b\n\x03pad\x18\x02 \x01(\r\x12\x10\n\x08group_id\x18\x03 \x01(\r\x12(\n\x07\x62uckets\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"^\n\x12ofp_group_features\x12\r\n\x05types\x18\x01 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x01(\r\x12\x12\n\nmax_groups\x18\x03 \x03(\r\x12\x0f\n\x07\x61\x63tions\x18\x04 \x03(\r\"/\n\x1bofp_meter_multipart_request\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"J\n\x14ofp_meter_band_stats\x12\x19\n\x11packet_band_count\x18\x01 \x01(\x04\x12\x17\n\x0f\x62yte_band_count\x18\x02 \x01(\x04\"\xcb\x01\n\x0fofp_meter_stats\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x12\n\nflow_count\x18\x02 \x01(\r\x12\x17\n\x0fpacket_in_count\x18\x03 \x01(\x04\x12\x15\n\rbyte_in_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\nband_stats\x18\x07 \x03(\x0b\x32!.openflow_13.ofp_meter_band_stats\"f\n\x10ofp_meter_config\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12\x10\n\x08meter_id\x18\x02 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x03 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"w\n\x12ofp_meter_features\x12\x11\n\tmax_meter\x18\x01 \x01(\r\x12\x12\n\nband_types\x18\x02 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x03 \x01(\r\x12\x11\n\tmax_bands\x18\x04 \x01(\r\x12\x11\n\tmax_color\x18\x05 \x01(\r\"Y\n!ofp_experimenter_multipart_header\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"O\n\x17ofp_experimenter_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"6\n\x15ofp_queue_prop_header\x12\x10\n\x08property\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_min_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_max_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"z\n\x1bofp_queue_prop_experimenter\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"j\n\x10ofp_packet_queue\x12\x10\n\x08queue_id\x18\x01 \x01(\r\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x36\n\nproperties\x18\x04 \x03(\x0b\x32\".openflow_13.ofp_queue_prop_header\",\n\x1cofp_queue_get_config_request\x12\x0c\n\x04port\x18\x02 \x01(\r\"Y\n\x1aofp_queue_get_config_reply\x12\x0c\n\x04port\x18\x02 \x01(\r\x12-\n\x06queues\x18\x03 \x03(\x0b\x32\x1d.openflow_13.ofp_packet_queue\"6\n\x14ofp_action_set_queue\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x03 \x01(\r\"<\n\x17ofp_queue_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\"\x9a\x01\n\x0fofp_queue_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\x12\x10\n\x08tx_bytes\x18\x03 \x01(\x04\x12\x12\n\ntx_packets\x18\x04 \x01(\x04\x12\x11\n\ttx_errors\x18\x05 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\"Y\n\x10ofp_role_request\x12.\n\x04role\x18\x02 \x01(\x0e\x32 .openflow_13.ofp_controller_role\x12\x15\n\rgeneration_id\x18\x03 \x01(\x04\"_\n\x10ofp_async_config\x12\x16\n\x0epacket_in_mask\x18\x02 \x03(\r\x12\x18\n\x10port_status_mask\x18\x03 \x03(\r\x12\x19\n\x11\x66low_removed_mask\x18\x04 \x03(\r*\xd5\x01\n\x0bofp_port_no\x12\x10\n\x0cOFPP_INVALID\x10\x00\x12\x10\n\x08OFPP_MAX\x10\x80\xfe\xff\xff\x07\x12\x14\n\x0cOFPP_IN_PORT\x10\xf8\xff\xff\xff\x07\x12\x12\n\nOFPP_TABLE\x10\xf9\xff\xff\xff\x07\x12\x13\n\x0bOFPP_NORMAL\x10\xfa\xff\xff\xff\x07\x12\x12\n\nOFPP_FLOOD\x10\xfb\xff\xff\xff\x07\x12\x10\n\x08OFPP_ALL\x10\xfc\xff\xff\xff\x07\x12\x17\n\x0fOFPP_CONTROLLER\x10\xfd\xff\xff\xff\x07\x12\x12\n\nOFPP_LOCAL\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPP_ANY\x10\xff\xff\xff\xff\x07*\xc8\x05\n\x08ofp_type\x12\x0e\n\nOFPT_HELLO\x10\x00\x12\x0e\n\nOFPT_ERROR\x10\x01\x12\x15\n\x11OFPT_ECHO_REQUEST\x10\x02\x12\x13\n\x0fOFPT_ECHO_REPLY\x10\x03\x12\x15\n\x11OFPT_EXPERIMENTER\x10\x04\x12\x19\n\x15OFPT_FEATURES_REQUEST\x10\x05\x12\x17\n\x13OFPT_FEATURES_REPLY\x10\x06\x12\x1b\n\x17OFPT_GET_CONFIG_REQUEST\x10\x07\x12\x19\n\x15OFPT_GET_CONFIG_REPLY\x10\x08\x12\x13\n\x0fOFPT_SET_CONFIG\x10\t\x12\x12\n\x0eOFPT_PACKET_IN\x10\n\x12\x15\n\x11OFPT_FLOW_REMOVED\x10\x0b\x12\x14\n\x10OFPT_PORT_STATUS\x10\x0c\x12\x13\n\x0fOFPT_PACKET_OUT\x10\r\x12\x11\n\rOFPT_FLOW_MOD\x10\x0e\x12\x12\n\x0eOFPT_GROUP_MOD\x10\x0f\x12\x11\n\rOFPT_PORT_MOD\x10\x10\x12\x12\n\x0eOFPT_TABLE_MOD\x10\x11\x12\x1a\n\x16OFPT_MULTIPART_REQUEST\x10\x12\x12\x18\n\x14OFPT_MULTIPART_REPLY\x10\x13\x12\x18\n\x14OFPT_BARRIER_REQUEST\x10\x14\x12\x16\n\x12OFPT_BARRIER_REPLY\x10\x15\x12!\n\x1dOFPT_QUEUE_GET_CONFIG_REQUEST\x10\x16\x12\x1f\n\x1bOFPT_QUEUE_GET_CONFIG_REPLY\x10\x17\x12\x15\n\x11OFPT_ROLE_REQUEST\x10\x18\x12\x13\n\x0fOFPT_ROLE_REPLY\x10\x19\x12\x1a\n\x16OFPT_GET_ASYNC_REQUEST\x10\x1a\x12\x18\n\x14OFPT_GET_ASYNC_REPLY\x10\x1b\x12\x12\n\x0eOFPT_SET_ASYNC\x10\x1c\x12\x12\n\x0eOFPT_METER_MOD\x10\x1d*C\n\x13ofp_hello_elem_type\x12\x12\n\x0eOFPHET_INVALID\x10\x00\x12\x18\n\x14OFPHET_VERSIONBITMAP\x10\x01*e\n\x10ofp_config_flags\x12\x14\n\x10OFPC_FRAG_NORMAL\x10\x00\x12\x12\n\x0eOFPC_FRAG_DROP\x10\x01\x12\x13\n\x0fOFPC_FRAG_REASM\x10\x02\x12\x12\n\x0eOFPC_FRAG_MASK\x10\x03*@\n\x10ofp_table_config\x12\x11\n\rOFPTC_INVALID\x10\x00\x12\x19\n\x15OFPTC_DEPRECATED_MASK\x10\x03*>\n\tofp_table\x12\x11\n\rOFPTT_INVALID\x10\x00\x12\x0e\n\tOFPTT_MAX\x10\xfe\x01\x12\x0e\n\tOFPTT_ALL\x10\xff\x01*\xbb\x01\n\x10ofp_capabilities\x12\x10\n\x0cOFPC_INVALID\x10\x00\x12\x13\n\x0fOFPC_FLOW_STATS\x10\x01\x12\x14\n\x10OFPC_TABLE_STATS\x10\x02\x12\x13\n\x0fOFPC_PORT_STATS\x10\x04\x12\x14\n\x10OFPC_GROUP_STATS\x10\x08\x12\x11\n\rOFPC_IP_REASM\x10 \x12\x14\n\x10OFPC_QUEUE_STATS\x10@\x12\x16\n\x11OFPC_PORT_BLOCKED\x10\x80\x02*v\n\x0fofp_port_config\x12\x11\n\rOFPPC_INVALID\x10\x00\x12\x13\n\x0fOFPPC_PORT_DOWN\x10\x01\x12\x11\n\rOFPPC_NO_RECV\x10\x04\x12\x10\n\x0cOFPPC_NO_FWD\x10 \x12\x16\n\x12OFPPC_NO_PACKET_IN\x10@*[\n\x0eofp_port_state\x12\x11\n\rOFPPS_INVALID\x10\x00\x12\x13\n\x0fOFPPS_LINK_DOWN\x10\x01\x12\x11\n\rOFPPS_BLOCKED\x10\x02\x12\x0e\n\nOFPPS_LIVE\x10\x04*\xdd\x02\n\x11ofp_port_features\x12\x11\n\rOFPPF_INVALID\x10\x00\x12\x11\n\rOFPPF_10MB_HD\x10\x01\x12\x11\n\rOFPPF_10MB_FD\x10\x02\x12\x12\n\x0eOFPPF_100MB_HD\x10\x04\x12\x12\n\x0eOFPPF_100MB_FD\x10\x08\x12\x10\n\x0cOFPPF_1GB_HD\x10\x10\x12\x10\n\x0cOFPPF_1GB_FD\x10 \x12\x11\n\rOFPPF_10GB_FD\x10@\x12\x12\n\rOFPPF_40GB_FD\x10\x80\x01\x12\x13\n\x0eOFPPF_100GB_FD\x10\x80\x02\x12\x11\n\x0cOFPPF_1TB_FD\x10\x80\x04\x12\x10\n\x0bOFPPF_OTHER\x10\x80\x08\x12\x11\n\x0cOFPPF_COPPER\x10\x80\x10\x12\x10\n\x0bOFPPF_FIBER\x10\x80 \x12\x12\n\rOFPPF_AUTONEG\x10\x80@\x12\x11\n\x0bOFPPF_PAUSE\x10\x80\x80\x01\x12\x16\n\x10OFPPF_PAUSE_ASYM\x10\x80\x80\x02*D\n\x0fofp_port_reason\x12\r\n\tOFPPR_ADD\x10\x00\x12\x10\n\x0cOFPPR_DELETE\x10\x01\x12\x10\n\x0cOFPPR_MODIFY\x10\x02*3\n\x0eofp_match_type\x12\x12\n\x0eOFPMT_STANDARD\x10\x00\x12\r\n\tOFPMT_OXM\x10\x01*k\n\rofp_oxm_class\x12\x10\n\x0cOFPXMC_NXM_0\x10\x00\x12\x10\n\x0cOFPXMC_NXM_1\x10\x01\x12\x1b\n\x15OFPXMC_OPENFLOW_BASIC\x10\x80\x80\x02\x12\x19\n\x13OFPXMC_EXPERIMENTER\x10\xff\xff\x03*\x90\x08\n\x13oxm_ofb_field_types\x12\x16\n\x12OFPXMT_OFB_IN_PORT\x10\x00\x12\x1a\n\x16OFPXMT_OFB_IN_PHY_PORT\x10\x01\x12\x17\n\x13OFPXMT_OFB_METADATA\x10\x02\x12\x16\n\x12OFPXMT_OFB_ETH_DST\x10\x03\x12\x16\n\x12OFPXMT_OFB_ETH_SRC\x10\x04\x12\x17\n\x13OFPXMT_OFB_ETH_TYPE\x10\x05\x12\x17\n\x13OFPXMT_OFB_VLAN_VID\x10\x06\x12\x17\n\x13OFPXMT_OFB_VLAN_PCP\x10\x07\x12\x16\n\x12OFPXMT_OFB_IP_DSCP\x10\x08\x12\x15\n\x11OFPXMT_OFB_IP_ECN\x10\t\x12\x17\n\x13OFPXMT_OFB_IP_PROTO\x10\n\x12\x17\n\x13OFPXMT_OFB_IPV4_SRC\x10\x0b\x12\x17\n\x13OFPXMT_OFB_IPV4_DST\x10\x0c\x12\x16\n\x12OFPXMT_OFB_TCP_SRC\x10\r\x12\x16\n\x12OFPXMT_OFB_TCP_DST\x10\x0e\x12\x16\n\x12OFPXMT_OFB_UDP_SRC\x10\x0f\x12\x16\n\x12OFPXMT_OFB_UDP_DST\x10\x10\x12\x17\n\x13OFPXMT_OFB_SCTP_SRC\x10\x11\x12\x17\n\x13OFPXMT_OFB_SCTP_DST\x10\x12\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_TYPE\x10\x13\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_CODE\x10\x14\x12\x15\n\x11OFPXMT_OFB_ARP_OP\x10\x15\x12\x16\n\x12OFPXMT_OFB_ARP_SPA\x10\x16\x12\x16\n\x12OFPXMT_OFB_ARP_TPA\x10\x17\x12\x16\n\x12OFPXMT_OFB_ARP_SHA\x10\x18\x12\x16\n\x12OFPXMT_OFB_ARP_THA\x10\x19\x12\x17\n\x13OFPXMT_OFB_IPV6_SRC\x10\x1a\x12\x17\n\x13OFPXMT_OFB_IPV6_DST\x10\x1b\x12\x1a\n\x16OFPXMT_OFB_IPV6_FLABEL\x10\x1c\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_TYPE\x10\x1d\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_CODE\x10\x1e\x12\x1d\n\x19OFPXMT_OFB_IPV6_ND_TARGET\x10\x1f\x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_SLL\x10 \x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_TLL\x10!\x12\x19\n\x15OFPXMT_OFB_MPLS_LABEL\x10\"\x12\x16\n\x12OFPXMT_OFB_MPLS_TC\x10#\x12\x17\n\x13OFPXMT_OFB_MPLS_BOS\x10$\x12\x17\n\x13OFPXMT_OFB_PBB_ISID\x10%\x12\x18\n\x14OFPXMT_OFB_TUNNEL_ID\x10&\x12\x1a\n\x16OFPXMT_OFB_IPV6_EXTHDR\x10\'*3\n\x0bofp_vlan_id\x12\x0f\n\x0bOFPVID_NONE\x10\x00\x12\x13\n\x0eOFPVID_PRESENT\x10\x80 *\xc9\x01\n\x14ofp_ipv6exthdr_flags\x12\x12\n\x0eOFPIEH_INVALID\x10\x00\x12\x11\n\rOFPIEH_NONEXT\x10\x01\x12\x0e\n\nOFPIEH_ESP\x10\x02\x12\x0f\n\x0bOFPIEH_AUTH\x10\x04\x12\x0f\n\x0bOFPIEH_DEST\x10\x08\x12\x0f\n\x0bOFPIEH_FRAG\x10\x10\x12\x11\n\rOFPIEH_ROUTER\x10 \x12\x0e\n\nOFPIEH_HOP\x10@\x12\x11\n\x0cOFPIEH_UNREP\x10\x80\x01\x12\x11\n\x0cOFPIEH_UNSEQ\x10\x80\x02*\xfc\x02\n\x0fofp_action_type\x12\x10\n\x0cOFPAT_OUTPUT\x10\x00\x12\x16\n\x12OFPAT_COPY_TTL_OUT\x10\x0b\x12\x15\n\x11OFPAT_COPY_TTL_IN\x10\x0c\x12\x16\n\x12OFPAT_SET_MPLS_TTL\x10\x0f\x12\x16\n\x12OFPAT_DEC_MPLS_TTL\x10\x10\x12\x13\n\x0fOFPAT_PUSH_VLAN\x10\x11\x12\x12\n\x0eOFPAT_POP_VLAN\x10\x12\x12\x13\n\x0fOFPAT_PUSH_MPLS\x10\x13\x12\x12\n\x0eOFPAT_POP_MPLS\x10\x14\x12\x13\n\x0fOFPAT_SET_QUEUE\x10\x15\x12\x0f\n\x0bOFPAT_GROUP\x10\x16\x12\x14\n\x10OFPAT_SET_NW_TTL\x10\x17\x12\x14\n\x10OFPAT_DEC_NW_TTL\x10\x18\x12\x13\n\x0fOFPAT_SET_FIELD\x10\x19\x12\x12\n\x0eOFPAT_PUSH_PBB\x10\x1a\x12\x11\n\rOFPAT_POP_PBB\x10\x1b\x12\x18\n\x12OFPAT_EXPERIMENTER\x10\xff\xff\x03*V\n\x16ofp_controller_max_len\x12\x12\n\x0eOFPCML_INVALID\x10\x00\x12\x10\n\nOFPCML_MAX\x10\xe5\xff\x03\x12\x16\n\x10OFPCML_NO_BUFFER\x10\xff\xff\x03*\xcf\x01\n\x14ofp_instruction_type\x12\x11\n\rOFPIT_INVALID\x10\x00\x12\x14\n\x10OFPIT_GOTO_TABLE\x10\x01\x12\x18\n\x14OFPIT_WRITE_METADATA\x10\x02\x12\x17\n\x13OFPIT_WRITE_ACTIONS\x10\x03\x12\x17\n\x13OFPIT_APPLY_ACTIONS\x10\x04\x12\x17\n\x13OFPIT_CLEAR_ACTIONS\x10\x05\x12\x0f\n\x0bOFPIT_METER\x10\x06\x12\x18\n\x12OFPIT_EXPERIMENTER\x10\xff\xff\x03*{\n\x14ofp_flow_mod_command\x12\r\n\tOFPFC_ADD\x10\x00\x12\x10\n\x0cOFPFC_MODIFY\x10\x01\x12\x17\n\x13OFPFC_MODIFY_STRICT\x10\x02\x12\x10\n\x0cOFPFC_DELETE\x10\x03\x12\x17\n\x13OFPFC_DELETE_STRICT\x10\x04*\xa3\x01\n\x12ofp_flow_mod_flags\x12\x11\n\rOFPFF_INVALID\x10\x00\x12\x17\n\x13OFPFF_SEND_FLOW_REM\x10\x01\x12\x17\n\x13OFPFF_CHECK_OVERLAP\x10\x02\x12\x16\n\x12OFPFF_RESET_COUNTS\x10\x04\x12\x17\n\x13OFPFF_NO_PKT_COUNTS\x10\x08\x12\x17\n\x13OFPFF_NO_BYT_COUNTS\x10\x10*S\n\tofp_group\x12\x10\n\x0cOFPG_INVALID\x10\x00\x12\x10\n\x08OFPG_MAX\x10\x80\xfe\xff\xff\x07\x12\x10\n\x08OFPG_ALL\x10\xfc\xff\xff\xff\x07\x12\x10\n\x08OFPG_ANY\x10\xff\xff\xff\xff\x07*J\n\x15ofp_group_mod_command\x12\r\n\tOFPGC_ADD\x10\x00\x12\x10\n\x0cOFPGC_MODIFY\x10\x01\x12\x10\n\x0cOFPGC_DELETE\x10\x02*S\n\x0eofp_group_type\x12\r\n\tOFPGT_ALL\x10\x00\x12\x10\n\x0cOFPGT_SELECT\x10\x01\x12\x12\n\x0eOFPGT_INDIRECT\x10\x02\x12\x0c\n\x08OFPGT_FF\x10\x03*P\n\x14ofp_packet_in_reason\x12\x11\n\rOFPR_NO_MATCH\x10\x00\x12\x0f\n\x0bOFPR_ACTION\x10\x01\x12\x14\n\x10OFPR_INVALID_TTL\x10\x02*\x8b\x01\n\x17ofp_flow_removed_reason\x12\x16\n\x12OFPRR_IDLE_TIMEOUT\x10\x00\x12\x16\n\x12OFPRR_HARD_TIMEOUT\x10\x01\x12\x10\n\x0cOFPRR_DELETE\x10\x02\x12\x16\n\x12OFPRR_GROUP_DELETE\x10\x03\x12\x16\n\x12OFPRR_METER_DELETE\x10\x04*n\n\tofp_meter\x12\r\n\tOFPM_ZERO\x10\x00\x12\x10\n\x08OFPM_MAX\x10\x80\x80\xfc\xff\x07\x12\x15\n\rOFPM_SLOWPATH\x10\xfd\xff\xff\xff\x07\x12\x17\n\x0fOFPM_CONTROLLER\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPM_ALL\x10\xff\xff\xff\xff\x07*m\n\x13ofp_meter_band_type\x12\x12\n\x0eOFPMBT_INVALID\x10\x00\x12\x0f\n\x0bOFPMBT_DROP\x10\x01\x12\x16\n\x12OFPMBT_DSCP_REMARK\x10\x02\x12\x19\n\x13OFPMBT_EXPERIMENTER\x10\xff\xff\x03*J\n\x15ofp_meter_mod_command\x12\r\n\tOFPMC_ADD\x10\x00\x12\x10\n\x0cOFPMC_MODIFY\x10\x01\x12\x10\n\x0cOFPMC_DELETE\x10\x02*g\n\x0fofp_meter_flags\x12\x11\n\rOFPMF_INVALID\x10\x00\x12\x0e\n\nOFPMF_KBPS\x10\x01\x12\x0f\n\x0bOFPMF_PKTPS\x10\x02\x12\x0f\n\x0bOFPMF_BURST\x10\x04\x12\x0f\n\x0bOFPMF_STATS\x10\x08*\xa4\x03\n\x0eofp_error_type\x12\x16\n\x12OFPET_HELLO_FAILED\x10\x00\x12\x15\n\x11OFPET_BAD_REQUEST\x10\x01\x12\x14\n\x10OFPET_BAD_ACTION\x10\x02\x12\x19\n\x15OFPET_BAD_INSTRUCTION\x10\x03\x12\x13\n\x0fOFPET_BAD_MATCH\x10\x04\x12\x19\n\x15OFPET_FLOW_MOD_FAILED\x10\x05\x12\x1a\n\x16OFPET_GROUP_MOD_FAILED\x10\x06\x12\x19\n\x15OFPET_PORT_MOD_FAILED\x10\x07\x12\x1a\n\x16OFPET_TABLE_MOD_FAILED\x10\x08\x12\x19\n\x15OFPET_QUEUE_OP_FAILED\x10\t\x12\x1e\n\x1aOFPET_SWITCH_CONFIG_FAILED\x10\n\x12\x1d\n\x19OFPET_ROLE_REQUEST_FAILED\x10\x0b\x12\x1a\n\x16OFPET_METER_MOD_FAILED\x10\x0c\x12\x1f\n\x1bOFPET_TABLE_FEATURES_FAILED\x10\r\x12\x18\n\x12OFPET_EXPERIMENTER\x10\xff\xff\x03*B\n\x15ofp_hello_failed_code\x12\x17\n\x13OFPHFC_INCOMPATIBLE\x10\x00\x12\x10\n\x0cOFPHFC_EPERM\x10\x01*\xed\x02\n\x14ofp_bad_request_code\x12\x16\n\x12OFPBRC_BAD_VERSION\x10\x00\x12\x13\n\x0fOFPBRC_BAD_TYPE\x10\x01\x12\x18\n\x14OFPBRC_BAD_MULTIPART\x10\x02\x12\x1b\n\x17OFPBRC_BAD_EXPERIMENTER\x10\x03\x12\x17\n\x13OFPBRC_BAD_EXP_TYPE\x10\x04\x12\x10\n\x0cOFPBRC_EPERM\x10\x05\x12\x12\n\x0eOFPBRC_BAD_LEN\x10\x06\x12\x17\n\x13OFPBRC_BUFFER_EMPTY\x10\x07\x12\x19\n\x15OFPBRC_BUFFER_UNKNOWN\x10\x08\x12\x17\n\x13OFPBRC_BAD_TABLE_ID\x10\t\x12\x13\n\x0fOFPBRC_IS_SLAVE\x10\n\x12\x13\n\x0fOFPBRC_BAD_PORT\x10\x0b\x12\x15\n\x11OFPBRC_BAD_PACKET\x10\x0c\x12$\n OFPBRC_MULTIPART_BUFFER_OVERFLOW\x10\r*\x9c\x03\n\x13ofp_bad_action_code\x12\x13\n\x0fOFPBAC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBAC_BAD_LEN\x10\x01\x12\x1b\n\x17OFPBAC_BAD_EXPERIMENTER\x10\x02\x12\x17\n\x13OFPBAC_BAD_EXP_TYPE\x10\x03\x12\x17\n\x13OFPBAC_BAD_OUT_PORT\x10\x04\x12\x17\n\x13OFPBAC_BAD_ARGUMENT\x10\x05\x12\x10\n\x0cOFPBAC_EPERM\x10\x06\x12\x13\n\x0fOFPBAC_TOO_MANY\x10\x07\x12\x14\n\x10OFPBAC_BAD_QUEUE\x10\x08\x12\x18\n\x14OFPBAC_BAD_OUT_GROUP\x10\t\x12\x1d\n\x19OFPBAC_MATCH_INCONSISTENT\x10\n\x12\x1c\n\x18OFPBAC_UNSUPPORTED_ORDER\x10\x0b\x12\x12\n\x0eOFPBAC_BAD_TAG\x10\x0c\x12\x17\n\x13OFPBAC_BAD_SET_TYPE\x10\r\x12\x16\n\x12OFPBAC_BAD_SET_LEN\x10\x0e\x12\x1b\n\x17OFPBAC_BAD_SET_ARGUMENT\x10\x0f*\xfa\x01\n\x18ofp_bad_instruction_code\x12\x17\n\x13OFPBIC_UNKNOWN_INST\x10\x00\x12\x15\n\x11OFPBIC_UNSUP_INST\x10\x01\x12\x17\n\x13OFPBIC_BAD_TABLE_ID\x10\x02\x12\x19\n\x15OFPBIC_UNSUP_METADATA\x10\x03\x12\x1e\n\x1aOFPBIC_UNSUP_METADATA_MASK\x10\x04\x12\x1b\n\x17OFPBIC_BAD_EXPERIMENTER\x10\x05\x12\x17\n\x13OFPBIC_BAD_EXP_TYPE\x10\x06\x12\x12\n\x0eOFPBIC_BAD_LEN\x10\x07\x12\x10\n\x0cOFPBIC_EPERM\x10\x08*\xa5\x02\n\x12ofp_bad_match_code\x12\x13\n\x0fOFPBMC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBMC_BAD_LEN\x10\x01\x12\x12\n\x0eOFPBMC_BAD_TAG\x10\x02\x12\x1b\n\x17OFPBMC_BAD_DL_ADDR_MASK\x10\x03\x12\x1b\n\x17OFPBMC_BAD_NW_ADDR_MASK\x10\x04\x12\x18\n\x14OFPBMC_BAD_WILDCARDS\x10\x05\x12\x14\n\x10OFPBMC_BAD_FIELD\x10\x06\x12\x14\n\x10OFPBMC_BAD_VALUE\x10\x07\x12\x13\n\x0fOFPBMC_BAD_MASK\x10\x08\x12\x15\n\x11OFPBMC_BAD_PREREQ\x10\t\x12\x14\n\x10OFPBMC_DUP_FIELD\x10\n\x12\x10\n\x0cOFPBMC_EPERM\x10\x0b*\xd2\x01\n\x18ofp_flow_mod_failed_code\x12\x13\n\x0fOFPFMFC_UNKNOWN\x10\x00\x12\x16\n\x12OFPFMFC_TABLE_FULL\x10\x01\x12\x18\n\x14OFPFMFC_BAD_TABLE_ID\x10\x02\x12\x13\n\x0fOFPFMFC_OVERLAP\x10\x03\x12\x11\n\rOFPFMFC_EPERM\x10\x04\x12\x17\n\x13OFPFMFC_BAD_TIMEOUT\x10\x05\x12\x17\n\x13OFPFMFC_BAD_COMMAND\x10\x06\x12\x15\n\x11OFPFMFC_BAD_FLAGS\x10\x07*\xa1\x03\n\x19ofp_group_mod_failed_code\x12\x18\n\x14OFPGMFC_GROUP_EXISTS\x10\x00\x12\x19\n\x15OFPGMFC_INVALID_GROUP\x10\x01\x12\x1e\n\x1aOFPGMFC_WEIGHT_UNSUPPORTED\x10\x02\x12\x19\n\x15OFPGMFC_OUT_OF_GROUPS\x10\x03\x12\x1a\n\x16OFPGMFC_OUT_OF_BUCKETS\x10\x04\x12 \n\x1cOFPGMFC_CHAINING_UNSUPPORTED\x10\x05\x12\x1d\n\x19OFPGMFC_WATCH_UNSUPPORTED\x10\x06\x12\x10\n\x0cOFPGMFC_LOOP\x10\x07\x12\x19\n\x15OFPGMFC_UNKNOWN_GROUP\x10\x08\x12\x19\n\x15OFPGMFC_CHAINED_GROUP\x10\t\x12\x14\n\x10OFPGMFC_BAD_TYPE\x10\n\x12\x17\n\x13OFPGMFC_BAD_COMMAND\x10\x0b\x12\x16\n\x12OFPGMFC_BAD_BUCKET\x10\x0c\x12\x15\n\x11OFPGMFC_BAD_WATCH\x10\r\x12\x11\n\rOFPGMFC_EPERM\x10\x0e*\x8f\x01\n\x18ofp_port_mod_failed_code\x12\x14\n\x10OFPPMFC_BAD_PORT\x10\x00\x12\x17\n\x13OFPPMFC_BAD_HW_ADDR\x10\x01\x12\x16\n\x12OFPPMFC_BAD_CONFIG\x10\x02\x12\x19\n\x15OFPPMFC_BAD_ADVERTISE\x10\x03\x12\x11\n\rOFPPMFC_EPERM\x10\x04*]\n\x19ofp_table_mod_failed_code\x12\x15\n\x11OFPTMFC_BAD_TABLE\x10\x00\x12\x16\n\x12OFPTMFC_BAD_CONFIG\x10\x01\x12\x11\n\rOFPTMFC_EPERM\x10\x02*Z\n\x18ofp_queue_op_failed_code\x12\x14\n\x10OFPQOFC_BAD_PORT\x10\x00\x12\x15\n\x11OFPQOFC_BAD_QUEUE\x10\x01\x12\x11\n\rOFPQOFC_EPERM\x10\x02*^\n\x1dofp_switch_config_failed_code\x12\x15\n\x11OFPSCFC_BAD_FLAGS\x10\x00\x12\x13\n\x0fOFPSCFC_BAD_LEN\x10\x01\x12\x11\n\rOFPSCFC_EPERM\x10\x02*Z\n\x1cofp_role_request_failed_code\x12\x11\n\rOFPRRFC_STALE\x10\x00\x12\x11\n\rOFPRRFC_UNSUP\x10\x01\x12\x14\n\x10OFPRRFC_BAD_ROLE\x10\x02*\xc4\x02\n\x19ofp_meter_mod_failed_code\x12\x13\n\x0fOFPMMFC_UNKNOWN\x10\x00\x12\x18\n\x14OFPMMFC_METER_EXISTS\x10\x01\x12\x19\n\x15OFPMMFC_INVALID_METER\x10\x02\x12\x19\n\x15OFPMMFC_UNKNOWN_METER\x10\x03\x12\x17\n\x13OFPMMFC_BAD_COMMAND\x10\x04\x12\x15\n\x11OFPMMFC_BAD_FLAGS\x10\x05\x12\x14\n\x10OFPMMFC_BAD_RATE\x10\x06\x12\x15\n\x11OFPMMFC_BAD_BURST\x10\x07\x12\x14\n\x10OFPMMFC_BAD_BAND\x10\x08\x12\x1a\n\x16OFPMMFC_BAD_BAND_VALUE\x10\t\x12\x19\n\x15OFPMMFC_OUT_OF_METERS\x10\n\x12\x18\n\x14OFPMMFC_OUT_OF_BANDS\x10\x0b*\xa9\x01\n\x1eofp_table_features_failed_code\x12\x15\n\x11OFPTFFC_BAD_TABLE\x10\x00\x12\x18\n\x14OFPTFFC_BAD_METADATA\x10\x01\x12\x14\n\x10OFPTFFC_BAD_TYPE\x10\x02\x12\x13\n\x0fOFPTFFC_BAD_LEN\x10\x03\x12\x18\n\x14OFPTFFC_BAD_ARGUMENT\x10\x04\x12\x11\n\rOFPTFFC_EPERM\x10\x05*\xce\x02\n\x12ofp_multipart_type\x12\x0e\n\nOFPMP_DESC\x10\x00\x12\x0e\n\nOFPMP_FLOW\x10\x01\x12\x13\n\x0fOFPMP_AGGREGATE\x10\x02\x12\x0f\n\x0bOFPMP_TABLE\x10\x03\x12\x14\n\x10OFPMP_PORT_STATS\x10\x04\x12\x0f\n\x0bOFPMP_QUEUE\x10\x05\x12\x0f\n\x0bOFPMP_GROUP\x10\x06\x12\x14\n\x10OFPMP_GROUP_DESC\x10\x07\x12\x18\n\x14OFPMP_GROUP_FEATURES\x10\x08\x12\x0f\n\x0bOFPMP_METER\x10\t\x12\x16\n\x12OFPMP_METER_CONFIG\x10\n\x12\x18\n\x14OFPMP_METER_FEATURES\x10\x0b\x12\x18\n\x14OFPMP_TABLE_FEATURES\x10\x0c\x12\x13\n\x0fOFPMP_PORT_DESC\x10\r\x12\x18\n\x12OFPMP_EXPERIMENTER\x10\xff\xff\x03*J\n\x1bofp_multipart_request_flags\x12\x16\n\x12OFPMPF_REQ_INVALID\x10\x00\x12\x13\n\x0fOFPMPF_REQ_MORE\x10\x01*L\n\x19ofp_multipart_reply_flags\x12\x18\n\x14OFPMPF_REPLY_INVALID\x10\x00\x12\x15\n\x11OFPMPF_REPLY_MORE\x10\x01*\xe4\x03\n\x1bofp_table_feature_prop_type\x12\x18\n\x14OFPTFPT_INSTRUCTIONS\x10\x00\x12\x1d\n\x19OFPTFPT_INSTRUCTIONS_MISS\x10\x01\x12\x17\n\x13OFPTFPT_NEXT_TABLES\x10\x02\x12\x1c\n\x18OFPTFPT_NEXT_TABLES_MISS\x10\x03\x12\x19\n\x15OFPTFPT_WRITE_ACTIONS\x10\x04\x12\x1e\n\x1aOFPTFPT_WRITE_ACTIONS_MISS\x10\x05\x12\x19\n\x15OFPTFPT_APPLY_ACTIONS\x10\x06\x12\x1e\n\x1aOFPTFPT_APPLY_ACTIONS_MISS\x10\x07\x12\x11\n\rOFPTFPT_MATCH\x10\x08\x12\x15\n\x11OFPTFPT_WILDCARDS\x10\n\x12\x1a\n\x16OFPTFPT_WRITE_SETFIELD\x10\x0c\x12\x1f\n\x1bOFPTFPT_WRITE_SETFIELD_MISS\x10\r\x12\x1a\n\x16OFPTFPT_APPLY_SETFIELD\x10\x0e\x12\x1f\n\x1bOFPTFPT_APPLY_SETFIELD_MISS\x10\x0f\x12\x1a\n\x14OFPTFPT_EXPERIMENTER\x10\xfe\xff\x03\x12\x1f\n\x19OFPTFPT_EXPERIMENTER_MISS\x10\xff\xff\x03*\x93\x01\n\x16ofp_group_capabilities\x12\x12\n\x0eOFPGFC_INVALID\x10\x00\x12\x18\n\x14OFPGFC_SELECT_WEIGHT\x10\x01\x12\x1a\n\x16OFPGFC_SELECT_LIVENESS\x10\x02\x12\x13\n\x0fOFPGFC_CHAINING\x10\x04\x12\x1a\n\x16OFPGFC_CHAINING_CHECKS\x10\x08*k\n\x14ofp_queue_properties\x12\x11\n\rOFPQT_INVALID\x10\x00\x12\x12\n\x0eOFPQT_MIN_RATE\x10\x01\x12\x12\n\x0eOFPQT_MAX_RATE\x10\x02\x12\x18\n\x12OFPQT_EXPERIMENTER\x10\xff\xff\x03*q\n\x13ofp_controller_role\x12\x17\n\x13OFPCR_ROLE_NOCHANGE\x10\x00\x12\x14\n\x10OFPCR_ROLE_EQUAL\x10\x01\x12\x15\n\x11OFPCR_ROLE_MASTER\x10\x02\x12\x14\n\x10OFPCR_ROLE_SLAVE\x10\x03\x62\x06proto3')
+  serialized_pb=_b('\n\x11openflow_13.proto\x12\x0bopenflow_13\"O\n\nofp_header\x12\x0f\n\x07version\x18\x01 \x01(\r\x12#\n\x04type\x18\x02 \x01(\x0e\x32\x15.openflow_13.ofp_type\x12\x0b\n\x03xid\x18\x03 \x01(\r\"\x96\x01\n\x15ofp_hello_elem_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_hello_elem_type\x12\x42\n\rversionbitmap\x18\x02 \x01(\x0b\x32).openflow_13.ofp_hello_elem_versionbitmapH\x00\x42\t\n\x07\x65lement\"/\n\x1cofp_hello_elem_versionbitmap\x12\x0f\n\x07\x62itmaps\x18\x02 \x03(\r\"A\n\tofp_hello\x12\x34\n\x08\x65lements\x18\x02 \x03(\x0b\x32\".openflow_13.ofp_hello_elem_header\"9\n\x11ofp_switch_config\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x15\n\rmiss_send_len\x18\x03 \x01(\r\"1\n\rofp_table_mod\x12\x10\n\x08table_id\x18\x02 \x01(\r\x12\x0e\n\x06\x63onfig\x18\x03 \x01(\r\"\xc3\x01\n\x08ofp_port\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x0f\n\x07hw_addr\x18\x02 \x03(\r\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\r\n\x05state\x18\x05 \x01(\r\x12\x0c\n\x04\x63urr\x18\x06 \x01(\r\x12\x12\n\nadvertised\x18\x07 \x01(\r\x12\x11\n\tsupported\x18\x08 \x01(\r\x12\x0c\n\x04peer\x18\t \x01(\r\x12\x12\n\ncurr_speed\x18\n \x01(\r\x12\x11\n\tmax_speed\x18\x0b \x01(\r\"{\n\x13ofp_switch_features\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12\x11\n\tn_buffers\x18\x03 \x01(\r\x12\x10\n\x08n_tables\x18\x04 \x01(\r\x12\x14\n\x0c\x61uxiliary_id\x18\x05 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x06 \x01(\r\"d\n\x0fofp_port_status\x12,\n\x06reason\x18\x02 \x01(\x0e\x32\x1c.openflow_13.ofp_port_reason\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_port\"a\n\x0cofp_port_mod\x12\x0f\n\x07port_no\x18\x02 \x01(\r\x12\x0f\n\x07hw_addr\x18\x03 \x03(\r\x12\x0e\n\x06\x63onfig\x18\x04 \x01(\r\x12\x0c\n\x04mask\x18\x05 \x01(\r\x12\x11\n\tadvertise\x18\x06 \x01(\r\"f\n\tofp_match\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_match_type\x12.\n\noxm_fields\x18\x02 \x03(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"\xc3\x01\n\rofp_oxm_field\x12-\n\toxm_class\x18\x01 \x01(\x0e\x32\x1a.openflow_13.ofp_oxm_class\x12\x33\n\tofb_field\x18\x04 \x01(\x0b\x32\x1e.openflow_13.ofp_oxm_ofb_fieldH\x00\x12\x45\n\x12\x65xperimenter_field\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_oxm_experimenter_fieldH\x00\x42\x07\n\x05\x66ield\"\x8b\n\n\x11ofp_oxm_ofb_field\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.oxm_ofb_field_types\x12\x10\n\x08has_mask\x18\x02 \x01(\x08\x12\x0e\n\x04port\x18\x03 \x01(\rH\x00\x12\x17\n\rphysical_port\x18\x04 \x01(\rH\x00\x12\x18\n\x0etable_metadata\x18\x05 \x01(\x04H\x00\x12\x11\n\x07\x65th_dst\x18\x06 \x01(\x0cH\x00\x12\x11\n\x07\x65th_src\x18\x07 \x01(\x0cH\x00\x12\x12\n\x08\x65th_type\x18\x08 \x01(\rH\x00\x12\x12\n\x08vlan_vid\x18\t \x01(\rH\x00\x12\x12\n\x08vlan_pcp\x18\n \x01(\rH\x00\x12\x11\n\x07ip_dscp\x18\x0b \x01(\rH\x00\x12\x10\n\x06ip_ecn\x18\x0c \x01(\rH\x00\x12\x12\n\x08ip_proto\x18\r \x01(\rH\x00\x12\x12\n\x08ipv4_src\x18\x0e \x01(\rH\x00\x12\x12\n\x08ipv4_dst\x18\x0f \x01(\rH\x00\x12\x11\n\x07tcp_src\x18\x10 \x01(\rH\x00\x12\x11\n\x07tcp_dst\x18\x11 \x01(\rH\x00\x12\x11\n\x07udp_src\x18\x12 \x01(\rH\x00\x12\x11\n\x07udp_dst\x18\x13 \x01(\rH\x00\x12\x12\n\x08sctp_src\x18\x14 \x01(\rH\x00\x12\x12\n\x08sctp_dst\x18\x15 \x01(\rH\x00\x12\x15\n\x0bicmpv4_type\x18\x16 \x01(\rH\x00\x12\x15\n\x0bicmpv4_code\x18\x17 \x01(\rH\x00\x12\x10\n\x06\x61rp_op\x18\x18 \x01(\rH\x00\x12\x11\n\x07\x61rp_spa\x18\x19 \x01(\rH\x00\x12\x11\n\x07\x61rp_tpa\x18\x1a \x01(\rH\x00\x12\x11\n\x07\x61rp_sha\x18\x1b \x01(\x0cH\x00\x12\x11\n\x07\x61rp_tha\x18\x1c \x01(\x0cH\x00\x12\x12\n\x08ipv6_src\x18\x1d \x01(\x0cH\x00\x12\x12\n\x08ipv6_dst\x18\x1e \x01(\x0cH\x00\x12\x15\n\x0bipv6_flabel\x18\x1f \x01(\rH\x00\x12\x15\n\x0bicmpv6_type\x18  \x01(\rH\x00\x12\x15\n\x0bicmpv6_code\x18! \x01(\rH\x00\x12\x18\n\x0eipv6_nd_target\x18\" \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_ssl\x18# \x01(\x0cH\x00\x12\x15\n\x0bipv6_nd_tll\x18$ \x01(\x0cH\x00\x12\x14\n\nmpls_label\x18% \x01(\rH\x00\x12\x11\n\x07mpls_tc\x18& \x01(\rH\x00\x12\x12\n\x08mpls_bos\x18\' \x01(\rH\x00\x12\x12\n\x08pbb_isid\x18( \x01(\rH\x00\x12\x13\n\ttunnel_id\x18) \x01(\x04H\x00\x12\x15\n\x0bipv6_exthdr\x18* \x01(\rH\x00\x12\x1d\n\x13table_metadata_mask\x18i \x01(\x04H\x01\x12\x16\n\x0c\x65th_dst_mask\x18j \x01(\x0cH\x01\x12\x16\n\x0c\x65th_src_mask\x18k \x01(\x0cH\x01\x12\x17\n\rvlan_vid_mask\x18m \x01(\rH\x01\x12\x17\n\ripv4_src_mask\x18r \x01(\rH\x01\x12\x17\n\ripv4_dst_mask\x18s \x01(\rH\x01\x12\x16\n\x0c\x61rp_spa_mask\x18} \x01(\rH\x01\x12\x16\n\x0c\x61rp_tpa_mask\x18~ \x01(\rH\x01\x12\x18\n\ripv6_src_mask\x18\x81\x01 \x01(\x0cH\x01\x12\x18\n\ripv6_dst_mask\x18\x82\x01 \x01(\x0cH\x01\x12\x1b\n\x10ipv6_flabel_mask\x18\x83\x01 \x01(\rH\x01\x12\x18\n\rpbb_isid_mask\x18\x8c\x01 \x01(\rH\x01\x12\x19\n\x0etunnel_id_mask\x18\x8d\x01 \x01(\x04H\x01\x12\x1b\n\x10ipv6_exthdr_mask\x18\x8e\x01 \x01(\rH\x01\x42\x07\n\x05valueB\x06\n\x04mask\"F\n\x1aofp_oxm_experimenter_field\x12\x12\n\noxm_header\x18\x01 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\"\xe6\x03\n\nofp_action\x12*\n\x04type\x18\x01 \x01(\x0e\x32\x1c.openflow_13.ofp_action_type\x12\x30\n\x06output\x18\x02 \x01(\x0b\x32\x1e.openflow_13.ofp_action_outputH\x00\x12\x34\n\x08mpls_ttl\x18\x03 \x01(\x0b\x32 .openflow_13.ofp_action_mpls_ttlH\x00\x12,\n\x04push\x18\x04 \x01(\x0b\x32\x1c.openflow_13.ofp_action_pushH\x00\x12\x34\n\x08pop_mpls\x18\x05 \x01(\x0b\x32 .openflow_13.ofp_action_pop_mplsH\x00\x12.\n\x05group\x18\x06 \x01(\x0b\x32\x1d.openflow_13.ofp_action_groupH\x00\x12\x30\n\x06nw_ttl\x18\x07 \x01(\x0b\x32\x1e.openflow_13.ofp_action_nw_ttlH\x00\x12\x36\n\tset_field\x18\x08 \x01(\x0b\x32!.openflow_13.ofp_action_set_fieldH\x00\x12<\n\x0c\x65xperimenter\x18\t \x01(\x0b\x32$.openflow_13.ofp_action_experimenterH\x00\x42\x08\n\x06\x61\x63tion\"2\n\x11ofp_action_output\x12\x0c\n\x04port\x18\x01 \x01(\r\x12\x0f\n\x07max_len\x18\x02 \x01(\r\"\'\n\x13ofp_action_mpls_ttl\x12\x10\n\x08mpls_ttl\x18\x01 \x01(\r\"$\n\x0fofp_action_push\x12\x11\n\tethertype\x18\x01 \x01(\r\"(\n\x13ofp_action_pop_mpls\x12\x11\n\tethertype\x18\x01 \x01(\r\"$\n\x10ofp_action_group\x12\x10\n\x08group_id\x18\x01 \x01(\r\"#\n\x11ofp_action_nw_ttl\x12\x0e\n\x06nw_ttl\x18\x01 \x01(\r\"A\n\x14ofp_action_set_field\x12)\n\x05\x66ield\x18\x01 \x01(\x0b\x32\x1a.openflow_13.ofp_oxm_field\"=\n\x17ofp_action_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xde\x02\n\x0fofp_instruction\x12\x0c\n\x04type\x18\x01 \x01(\r\x12=\n\ngoto_table\x18\x02 \x01(\x0b\x32\'.openflow_13.ofp_instruction_goto_tableH\x00\x12\x45\n\x0ewrite_metadata\x18\x03 \x01(\x0b\x32+.openflow_13.ofp_instruction_write_metadataH\x00\x12\x37\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32$.openflow_13.ofp_instruction_actionsH\x00\x12\x33\n\x05meter\x18\x05 \x01(\x0b\x32\".openflow_13.ofp_instruction_meterH\x00\x12\x41\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32).openflow_13.ofp_instruction_experimenterH\x00\x42\x06\n\x04\x64\x61ta\".\n\x1aofp_instruction_goto_table\x12\x10\n\x08table_id\x18\x01 \x01(\r\"I\n\x1eofp_instruction_write_metadata\x12\x10\n\x08metadata\x18\x01 \x01(\x04\x12\x15\n\rmetadata_mask\x18\x02 \x01(\x04\"C\n\x17ofp_instruction_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\")\n\x15ofp_instruction_meter\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"B\n\x1cofp_instruction_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\xd9\x02\n\x0cofp_flow_mod\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x03 \x01(\x04\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x32\n\x07\x63ommand\x18\x05 \x01(\x0e\x32!.openflow_13.ofp_flow_mod_command\x12\x14\n\x0cidle_timeout\x18\x06 \x01(\r\x12\x14\n\x0chard_timeout\x18\x07 \x01(\r\x12\x10\n\x08priority\x18\x08 \x01(\r\x12\x11\n\tbuffer_id\x18\t \x01(\r\x12\x10\n\x08out_port\x18\n \x01(\r\x12\x11\n\tout_group\x18\x0b \x01(\r\x12\r\n\x05\x66lags\x18\x0c \x01(\r\x12%\n\x05match\x18\r \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\x0e \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"o\n\nofp_bucket\x12\x0e\n\x06weight\x18\x01 \x01(\r\x12\x12\n\nwatch_port\x18\x02 \x01(\r\x12\x13\n\x0bwatch_group\x18\x03 \x01(\r\x12(\n\x07\x61\x63tions\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_action\"\xab\x01\n\rofp_group_mod\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_group_mod_command\x12)\n\x04type\x18\x03 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x04 \x01(\r\x12(\n\x07\x62uckets\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"\x81\x01\n\x0eofp_packet_out\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x0f\n\x07in_port\x18\x03 \x01(\r\x12\x13\n\x0b\x61\x63tions_len\x18\x04 \x01(\r\x12(\n\x07\x61\x63tions\x18\x05 \x03(\x0b\x32\x17.openflow_13.ofp_action\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\"\xbf\x01\n\rofp_packet_in\x12\x11\n\tbuffer_id\x18\x02 \x01(\r\x12\x11\n\ttotal_len\x18\x03 \x01(\r\x12\x31\n\x06reason\x18\x04 \x01(\x0e\x32!.openflow_13.ofp_packet_in_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x06 \x01(\x04\x12%\n\x05match\x18\x07 \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x0c\n\x04\x64\x61ta\x18\x08 \x01(\x0c\"\xa6\x02\n\x10ofp_flow_removed\x12\x0e\n\x06\x63ookie\x18\x02 \x01(\x04\x12\x10\n\x08priority\x18\x03 \x01(\r\x12\x34\n\x06reason\x18\x04 \x01(\x0e\x32$.openflow_13.ofp_flow_removed_reason\x12\x10\n\x08table_id\x18\x05 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x08 \x01(\r\x12\x14\n\x0chard_timeout\x18\t \x01(\r\x12\x14\n\x0cpacket_count\x18\n \x01(\x04\x12\x12\n\nbyte_count\x18\x0b \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\"v\n\x15ofp_meter_band_header\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"R\n\x13ofp_meter_band_drop\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\"m\n\x1aofp_meter_band_dscp_remark\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x12\n\nprec_level\x18\x05 \x01(\r\"\x92\x01\n\x1bofp_meter_band_experimenter\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .openflow_13.ofp_meter_band_type\x12\x0b\n\x03len\x18\x02 \x01(\r\x12\x0c\n\x04rate\x18\x03 \x01(\r\x12\x12\n\nburst_size\x18\x04 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x05 \x01(\r\"\xc1\x01\n\rofp_meter_mod\x12\'\n\x06header\x18\x01 \x01(\x0b\x32\x17.openflow_13.ofp_header\x12\x33\n\x07\x63ommand\x18\x02 \x01(\x0e\x32\".openflow_13.ofp_meter_mod_command\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x10\n\x08meter_id\x18\x04 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x05 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"9\n\rofp_error_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x63ode\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"`\n\x1aofp_error_experimenter_msg\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x04 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"c\n\x15ofp_multipart_request\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"a\n\x13ofp_multipart_reply\x12-\n\x04type\x18\x02 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x03 \x01(\r\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\"c\n\x08ofp_desc\x12\x10\n\x08mfr_desc\x18\x01 \x01(\t\x12\x0f\n\x07hw_desc\x18\x02 \x01(\t\x12\x0f\n\x07sw_desc\x18\x03 \x01(\t\x12\x12\n\nserial_num\x18\x04 \x01(\t\x12\x0f\n\x07\x64p_desc\x18\x05 \x01(\t\"\x9b\x01\n\x16ofp_flow_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"\xb1\x02\n\x0eofp_flow_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x02 \x01(\r\x12\x15\n\rduration_nsec\x18\x03 \x01(\r\x12\x10\n\x08priority\x18\x04 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x05 \x01(\r\x12\x14\n\x0chard_timeout\x18\x06 \x01(\r\x12\r\n\x05\x66lags\x18\x07 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x08 \x01(\x04\x12\x14\n\x0cpacket_count\x18\t \x01(\x04\x12\x12\n\nbyte_count\x18\n \x01(\x04\x12%\n\x05match\x18\x0c \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x32\n\x0cinstructions\x18\r \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"\xa0\x01\n\x1bofp_aggregate_stats_request\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x10\n\x08out_port\x18\x02 \x01(\r\x12\x11\n\tout_group\x18\x03 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\"Y\n\x19ofp_aggregate_stats_reply\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\x12\x12\n\nflow_count\x18\x03 \x01(\r\"\xb1\x03\n\x1aofp_table_feature_property\x12\x36\n\x04type\x18\x01 \x01(\x0e\x32(.openflow_13.ofp_table_feature_prop_type\x12H\n\x0cinstructions\x18\x02 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_instructionsH\x00\x12\x46\n\x0bnext_tables\x18\x03 \x01(\x0b\x32/.openflow_13.ofp_table_feature_prop_next_tablesH\x00\x12>\n\x07\x61\x63tions\x18\x04 \x01(\x0b\x32+.openflow_13.ofp_table_feature_prop_actionsH\x00\x12\x36\n\x03oxm\x18\x05 \x01(\x0b\x32\'.openflow_13.ofp_table_feature_prop_oxmH\x00\x12H\n\x0c\x65xperimenter\x18\x06 \x01(\x0b\x32\x30.openflow_13.ofp_table_feature_prop_experimenterH\x00\x42\x07\n\x05value\"Y\n#ofp_table_feature_prop_instructions\x12\x32\n\x0cinstructions\x18\x01 \x03(\x0b\x32\x1c.openflow_13.ofp_instruction\"<\n\"ofp_table_feature_prop_next_tables\x12\x16\n\x0enext_table_ids\x18\x01 \x03(\r\"J\n\x1eofp_table_feature_prop_actions\x12(\n\x07\x61\x63tions\x18\x01 \x03(\x0b\x32\x17.openflow_13.ofp_action\"-\n\x1aofp_table_feature_prop_oxm\x12\x0f\n\x07oxm_ids\x18\x03 \x03(\r\"h\n#ofp_table_feature_prop_experimenter\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x19\n\x11\x65xperimenter_data\x18\x04 \x03(\r\"\xc6\x01\n\x12ofp_table_features\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0emetadata_match\x18\x03 \x01(\x04\x12\x16\n\x0emetadata_write\x18\x04 \x01(\x04\x12\x0e\n\x06\x63onfig\x18\x05 \x01(\r\x12\x13\n\x0bmax_entries\x18\x06 \x01(\r\x12;\n\nproperties\x18\x07 \x03(\x0b\x32\'.openflow_13.ofp_table_feature_property\"f\n\x0fofp_table_stats\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x14\n\x0c\x61\x63tive_count\x18\x02 \x01(\r\x12\x14\n\x0clookup_count\x18\x03 \x01(\x04\x12\x15\n\rmatched_count\x18\x04 \x01(\x04\")\n\x16ofp_port_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\"\xbb\x02\n\x0eofp_port_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x12\n\nrx_packets\x18\x02 \x01(\x04\x12\x12\n\ntx_packets\x18\x03 \x01(\x04\x12\x10\n\x08rx_bytes\x18\x04 \x01(\x04\x12\x10\n\x08tx_bytes\x18\x05 \x01(\x04\x12\x12\n\nrx_dropped\x18\x06 \x01(\x04\x12\x12\n\ntx_dropped\x18\x07 \x01(\x04\x12\x11\n\trx_errors\x18\x08 \x01(\x04\x12\x11\n\ttx_errors\x18\t \x01(\x04\x12\x14\n\x0crx_frame_err\x18\n \x01(\x04\x12\x13\n\x0brx_over_err\x18\x0b \x01(\x04\x12\x12\n\nrx_crc_err\x18\x0c \x01(\x04\x12\x12\n\ncollisions\x18\r \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x0e \x01(\r\x12\x15\n\rduration_nsec\x18\x0f \x01(\r\"+\n\x17ofp_group_stats_request\x12\x10\n\x08group_id\x18\x01 \x01(\r\">\n\x12ofp_bucket_counter\x12\x14\n\x0cpacket_count\x18\x01 \x01(\x04\x12\x12\n\nbyte_count\x18\x02 \x01(\x04\"\xc4\x01\n\x0fofp_group_stats\x12\x10\n\x08group_id\x18\x01 \x01(\r\x12\x11\n\tref_count\x18\x02 \x01(\r\x12\x14\n\x0cpacket_count\x18\x03 \x01(\x04\x12\x12\n\nbyte_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\x0c\x62ucket_stats\x18\x07 \x03(\x0b\x32\x1f.openflow_13.ofp_bucket_counter\"w\n\x0eofp_group_desc\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12(\n\x07\x62uckets\x18\x03 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"i\n\x0fofp_group_entry\x12)\n\x04\x64\x65sc\x18\x01 \x01(\x0b\x32\x1b.openflow_13.ofp_group_desc\x12+\n\x05stats\x18\x02 \x01(\x0b\x32\x1c.openflow_13.ofp_group_stats\"^\n\x12ofp_group_features\x12\r\n\x05types\x18\x01 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x02 \x01(\r\x12\x12\n\nmax_groups\x18\x03 \x03(\r\x12\x0f\n\x07\x61\x63tions\x18\x04 \x03(\r\"/\n\x1bofp_meter_multipart_request\x12\x10\n\x08meter_id\x18\x01 \x01(\r\"J\n\x14ofp_meter_band_stats\x12\x19\n\x11packet_band_count\x18\x01 \x01(\x04\x12\x17\n\x0f\x62yte_band_count\x18\x02 \x01(\x04\"\xcb\x01\n\x0fofp_meter_stats\x12\x10\n\x08meter_id\x18\x01 \x01(\r\x12\x12\n\nflow_count\x18\x02 \x01(\r\x12\x17\n\x0fpacket_in_count\x18\x03 \x01(\x04\x12\x15\n\rbyte_in_count\x18\x04 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x35\n\nband_stats\x18\x07 \x03(\x0b\x32!.openflow_13.ofp_meter_band_stats\"f\n\x10ofp_meter_config\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12\x10\n\x08meter_id\x18\x02 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x03 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"w\n\x12ofp_meter_features\x12\x11\n\tmax_meter\x18\x01 \x01(\r\x12\x12\n\nband_types\x18\x02 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x03 \x01(\r\x12\x11\n\tmax_bands\x18\x04 \x01(\r\x12\x11\n\tmax_color\x18\x05 \x01(\r\"Y\n!ofp_experimenter_multipart_header\x12\x14\n\x0c\x65xperimenter\x18\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"O\n\x17ofp_experimenter_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"6\n\x15ofp_queue_prop_header\x12\x10\n\x08property\x18\x01 \x01(\r\x12\x0b\n\x03len\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_min_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"`\n\x17ofp_queue_prop_max_rate\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x0c\n\x04rate\x18\x02 \x01(\r\"z\n\x1bofp_queue_prop_experimenter\x12\x37\n\x0bprop_header\x18\x01 \x01(\x0b\x32\".openflow_13.ofp_queue_prop_header\x12\x14\n\x0c\x65xperimenter\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"j\n\x10ofp_packet_queue\x12\x10\n\x08queue_id\x18\x01 \x01(\r\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x36\n\nproperties\x18\x04 \x03(\x0b\x32\".openflow_13.ofp_queue_prop_header\",\n\x1cofp_queue_get_config_request\x12\x0c\n\x04port\x18\x02 \x01(\r\"Y\n\x1aofp_queue_get_config_reply\x12\x0c\n\x04port\x18\x02 \x01(\r\x12-\n\x06queues\x18\x03 \x03(\x0b\x32\x1d.openflow_13.ofp_packet_queue\"6\n\x14ofp_action_set_queue\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x03 \x01(\r\"<\n\x17ofp_queue_stats_request\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\"\x9a\x01\n\x0fofp_queue_stats\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x10\n\x08queue_id\x18\x02 \x01(\r\x12\x10\n\x08tx_bytes\x18\x03 \x01(\x04\x12\x12\n\ntx_packets\x18\x04 \x01(\x04\x12\x11\n\ttx_errors\x18\x05 \x01(\x04\x12\x14\n\x0c\x64uration_sec\x18\x06 \x01(\r\x12\x15\n\rduration_nsec\x18\x07 \x01(\r\"Y\n\x10ofp_role_request\x12.\n\x04role\x18\x02 \x01(\x0e\x32 .openflow_13.ofp_controller_role\x12\x15\n\rgeneration_id\x18\x03 \x01(\x04\"_\n\x10ofp_async_config\x12\x16\n\x0epacket_in_mask\x18\x02 \x03(\r\x12\x18\n\x10port_status_mask\x18\x03 \x03(\r\x12\x19\n\x11\x66low_removed_mask\x18\x04 \x03(\r*\xd5\x01\n\x0bofp_port_no\x12\x10\n\x0cOFPP_INVALID\x10\x00\x12\x10\n\x08OFPP_MAX\x10\x80\xfe\xff\xff\x07\x12\x14\n\x0cOFPP_IN_PORT\x10\xf8\xff\xff\xff\x07\x12\x12\n\nOFPP_TABLE\x10\xf9\xff\xff\xff\x07\x12\x13\n\x0bOFPP_NORMAL\x10\xfa\xff\xff\xff\x07\x12\x12\n\nOFPP_FLOOD\x10\xfb\xff\xff\xff\x07\x12\x10\n\x08OFPP_ALL\x10\xfc\xff\xff\xff\x07\x12\x17\n\x0fOFPP_CONTROLLER\x10\xfd\xff\xff\xff\x07\x12\x12\n\nOFPP_LOCAL\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPP_ANY\x10\xff\xff\xff\xff\x07*\xc8\x05\n\x08ofp_type\x12\x0e\n\nOFPT_HELLO\x10\x00\x12\x0e\n\nOFPT_ERROR\x10\x01\x12\x15\n\x11OFPT_ECHO_REQUEST\x10\x02\x12\x13\n\x0fOFPT_ECHO_REPLY\x10\x03\x12\x15\n\x11OFPT_EXPERIMENTER\x10\x04\x12\x19\n\x15OFPT_FEATURES_REQUEST\x10\x05\x12\x17\n\x13OFPT_FEATURES_REPLY\x10\x06\x12\x1b\n\x17OFPT_GET_CONFIG_REQUEST\x10\x07\x12\x19\n\x15OFPT_GET_CONFIG_REPLY\x10\x08\x12\x13\n\x0fOFPT_SET_CONFIG\x10\t\x12\x12\n\x0eOFPT_PACKET_IN\x10\n\x12\x15\n\x11OFPT_FLOW_REMOVED\x10\x0b\x12\x14\n\x10OFPT_PORT_STATUS\x10\x0c\x12\x13\n\x0fOFPT_PACKET_OUT\x10\r\x12\x11\n\rOFPT_FLOW_MOD\x10\x0e\x12\x12\n\x0eOFPT_GROUP_MOD\x10\x0f\x12\x11\n\rOFPT_PORT_MOD\x10\x10\x12\x12\n\x0eOFPT_TABLE_MOD\x10\x11\x12\x1a\n\x16OFPT_MULTIPART_REQUEST\x10\x12\x12\x18\n\x14OFPT_MULTIPART_REPLY\x10\x13\x12\x18\n\x14OFPT_BARRIER_REQUEST\x10\x14\x12\x16\n\x12OFPT_BARRIER_REPLY\x10\x15\x12!\n\x1dOFPT_QUEUE_GET_CONFIG_REQUEST\x10\x16\x12\x1f\n\x1bOFPT_QUEUE_GET_CONFIG_REPLY\x10\x17\x12\x15\n\x11OFPT_ROLE_REQUEST\x10\x18\x12\x13\n\x0fOFPT_ROLE_REPLY\x10\x19\x12\x1a\n\x16OFPT_GET_ASYNC_REQUEST\x10\x1a\x12\x18\n\x14OFPT_GET_ASYNC_REPLY\x10\x1b\x12\x12\n\x0eOFPT_SET_ASYNC\x10\x1c\x12\x12\n\x0eOFPT_METER_MOD\x10\x1d*C\n\x13ofp_hello_elem_type\x12\x12\n\x0eOFPHET_INVALID\x10\x00\x12\x18\n\x14OFPHET_VERSIONBITMAP\x10\x01*e\n\x10ofp_config_flags\x12\x14\n\x10OFPC_FRAG_NORMAL\x10\x00\x12\x12\n\x0eOFPC_FRAG_DROP\x10\x01\x12\x13\n\x0fOFPC_FRAG_REASM\x10\x02\x12\x12\n\x0eOFPC_FRAG_MASK\x10\x03*@\n\x10ofp_table_config\x12\x11\n\rOFPTC_INVALID\x10\x00\x12\x19\n\x15OFPTC_DEPRECATED_MASK\x10\x03*>\n\tofp_table\x12\x11\n\rOFPTT_INVALID\x10\x00\x12\x0e\n\tOFPTT_MAX\x10\xfe\x01\x12\x0e\n\tOFPTT_ALL\x10\xff\x01*\xbb\x01\n\x10ofp_capabilities\x12\x10\n\x0cOFPC_INVALID\x10\x00\x12\x13\n\x0fOFPC_FLOW_STATS\x10\x01\x12\x14\n\x10OFPC_TABLE_STATS\x10\x02\x12\x13\n\x0fOFPC_PORT_STATS\x10\x04\x12\x14\n\x10OFPC_GROUP_STATS\x10\x08\x12\x11\n\rOFPC_IP_REASM\x10 \x12\x14\n\x10OFPC_QUEUE_STATS\x10@\x12\x16\n\x11OFPC_PORT_BLOCKED\x10\x80\x02*v\n\x0fofp_port_config\x12\x11\n\rOFPPC_INVALID\x10\x00\x12\x13\n\x0fOFPPC_PORT_DOWN\x10\x01\x12\x11\n\rOFPPC_NO_RECV\x10\x04\x12\x10\n\x0cOFPPC_NO_FWD\x10 \x12\x16\n\x12OFPPC_NO_PACKET_IN\x10@*[\n\x0eofp_port_state\x12\x11\n\rOFPPS_INVALID\x10\x00\x12\x13\n\x0fOFPPS_LINK_DOWN\x10\x01\x12\x11\n\rOFPPS_BLOCKED\x10\x02\x12\x0e\n\nOFPPS_LIVE\x10\x04*\xdd\x02\n\x11ofp_port_features\x12\x11\n\rOFPPF_INVALID\x10\x00\x12\x11\n\rOFPPF_10MB_HD\x10\x01\x12\x11\n\rOFPPF_10MB_FD\x10\x02\x12\x12\n\x0eOFPPF_100MB_HD\x10\x04\x12\x12\n\x0eOFPPF_100MB_FD\x10\x08\x12\x10\n\x0cOFPPF_1GB_HD\x10\x10\x12\x10\n\x0cOFPPF_1GB_FD\x10 \x12\x11\n\rOFPPF_10GB_FD\x10@\x12\x12\n\rOFPPF_40GB_FD\x10\x80\x01\x12\x13\n\x0eOFPPF_100GB_FD\x10\x80\x02\x12\x11\n\x0cOFPPF_1TB_FD\x10\x80\x04\x12\x10\n\x0bOFPPF_OTHER\x10\x80\x08\x12\x11\n\x0cOFPPF_COPPER\x10\x80\x10\x12\x10\n\x0bOFPPF_FIBER\x10\x80 \x12\x12\n\rOFPPF_AUTONEG\x10\x80@\x12\x11\n\x0bOFPPF_PAUSE\x10\x80\x80\x01\x12\x16\n\x10OFPPF_PAUSE_ASYM\x10\x80\x80\x02*D\n\x0fofp_port_reason\x12\r\n\tOFPPR_ADD\x10\x00\x12\x10\n\x0cOFPPR_DELETE\x10\x01\x12\x10\n\x0cOFPPR_MODIFY\x10\x02*3\n\x0eofp_match_type\x12\x12\n\x0eOFPMT_STANDARD\x10\x00\x12\r\n\tOFPMT_OXM\x10\x01*k\n\rofp_oxm_class\x12\x10\n\x0cOFPXMC_NXM_0\x10\x00\x12\x10\n\x0cOFPXMC_NXM_1\x10\x01\x12\x1b\n\x15OFPXMC_OPENFLOW_BASIC\x10\x80\x80\x02\x12\x19\n\x13OFPXMC_EXPERIMENTER\x10\xff\xff\x03*\x90\x08\n\x13oxm_ofb_field_types\x12\x16\n\x12OFPXMT_OFB_IN_PORT\x10\x00\x12\x1a\n\x16OFPXMT_OFB_IN_PHY_PORT\x10\x01\x12\x17\n\x13OFPXMT_OFB_METADATA\x10\x02\x12\x16\n\x12OFPXMT_OFB_ETH_DST\x10\x03\x12\x16\n\x12OFPXMT_OFB_ETH_SRC\x10\x04\x12\x17\n\x13OFPXMT_OFB_ETH_TYPE\x10\x05\x12\x17\n\x13OFPXMT_OFB_VLAN_VID\x10\x06\x12\x17\n\x13OFPXMT_OFB_VLAN_PCP\x10\x07\x12\x16\n\x12OFPXMT_OFB_IP_DSCP\x10\x08\x12\x15\n\x11OFPXMT_OFB_IP_ECN\x10\t\x12\x17\n\x13OFPXMT_OFB_IP_PROTO\x10\n\x12\x17\n\x13OFPXMT_OFB_IPV4_SRC\x10\x0b\x12\x17\n\x13OFPXMT_OFB_IPV4_DST\x10\x0c\x12\x16\n\x12OFPXMT_OFB_TCP_SRC\x10\r\x12\x16\n\x12OFPXMT_OFB_TCP_DST\x10\x0e\x12\x16\n\x12OFPXMT_OFB_UDP_SRC\x10\x0f\x12\x16\n\x12OFPXMT_OFB_UDP_DST\x10\x10\x12\x17\n\x13OFPXMT_OFB_SCTP_SRC\x10\x11\x12\x17\n\x13OFPXMT_OFB_SCTP_DST\x10\x12\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_TYPE\x10\x13\x12\x1a\n\x16OFPXMT_OFB_ICMPV4_CODE\x10\x14\x12\x15\n\x11OFPXMT_OFB_ARP_OP\x10\x15\x12\x16\n\x12OFPXMT_OFB_ARP_SPA\x10\x16\x12\x16\n\x12OFPXMT_OFB_ARP_TPA\x10\x17\x12\x16\n\x12OFPXMT_OFB_ARP_SHA\x10\x18\x12\x16\n\x12OFPXMT_OFB_ARP_THA\x10\x19\x12\x17\n\x13OFPXMT_OFB_IPV6_SRC\x10\x1a\x12\x17\n\x13OFPXMT_OFB_IPV6_DST\x10\x1b\x12\x1a\n\x16OFPXMT_OFB_IPV6_FLABEL\x10\x1c\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_TYPE\x10\x1d\x12\x1a\n\x16OFPXMT_OFB_ICMPV6_CODE\x10\x1e\x12\x1d\n\x19OFPXMT_OFB_IPV6_ND_TARGET\x10\x1f\x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_SLL\x10 \x12\x1a\n\x16OFPXMT_OFB_IPV6_ND_TLL\x10!\x12\x19\n\x15OFPXMT_OFB_MPLS_LABEL\x10\"\x12\x16\n\x12OFPXMT_OFB_MPLS_TC\x10#\x12\x17\n\x13OFPXMT_OFB_MPLS_BOS\x10$\x12\x17\n\x13OFPXMT_OFB_PBB_ISID\x10%\x12\x18\n\x14OFPXMT_OFB_TUNNEL_ID\x10&\x12\x1a\n\x16OFPXMT_OFB_IPV6_EXTHDR\x10\'*3\n\x0bofp_vlan_id\x12\x0f\n\x0bOFPVID_NONE\x10\x00\x12\x13\n\x0eOFPVID_PRESENT\x10\x80 *\xc9\x01\n\x14ofp_ipv6exthdr_flags\x12\x12\n\x0eOFPIEH_INVALID\x10\x00\x12\x11\n\rOFPIEH_NONEXT\x10\x01\x12\x0e\n\nOFPIEH_ESP\x10\x02\x12\x0f\n\x0bOFPIEH_AUTH\x10\x04\x12\x0f\n\x0bOFPIEH_DEST\x10\x08\x12\x0f\n\x0bOFPIEH_FRAG\x10\x10\x12\x11\n\rOFPIEH_ROUTER\x10 \x12\x0e\n\nOFPIEH_HOP\x10@\x12\x11\n\x0cOFPIEH_UNREP\x10\x80\x01\x12\x11\n\x0cOFPIEH_UNSEQ\x10\x80\x02*\xfc\x02\n\x0fofp_action_type\x12\x10\n\x0cOFPAT_OUTPUT\x10\x00\x12\x16\n\x12OFPAT_COPY_TTL_OUT\x10\x0b\x12\x15\n\x11OFPAT_COPY_TTL_IN\x10\x0c\x12\x16\n\x12OFPAT_SET_MPLS_TTL\x10\x0f\x12\x16\n\x12OFPAT_DEC_MPLS_TTL\x10\x10\x12\x13\n\x0fOFPAT_PUSH_VLAN\x10\x11\x12\x12\n\x0eOFPAT_POP_VLAN\x10\x12\x12\x13\n\x0fOFPAT_PUSH_MPLS\x10\x13\x12\x12\n\x0eOFPAT_POP_MPLS\x10\x14\x12\x13\n\x0fOFPAT_SET_QUEUE\x10\x15\x12\x0f\n\x0bOFPAT_GROUP\x10\x16\x12\x14\n\x10OFPAT_SET_NW_TTL\x10\x17\x12\x14\n\x10OFPAT_DEC_NW_TTL\x10\x18\x12\x13\n\x0fOFPAT_SET_FIELD\x10\x19\x12\x12\n\x0eOFPAT_PUSH_PBB\x10\x1a\x12\x11\n\rOFPAT_POP_PBB\x10\x1b\x12\x18\n\x12OFPAT_EXPERIMENTER\x10\xff\xff\x03*V\n\x16ofp_controller_max_len\x12\x12\n\x0eOFPCML_INVALID\x10\x00\x12\x10\n\nOFPCML_MAX\x10\xe5\xff\x03\x12\x16\n\x10OFPCML_NO_BUFFER\x10\xff\xff\x03*\xcf\x01\n\x14ofp_instruction_type\x12\x11\n\rOFPIT_INVALID\x10\x00\x12\x14\n\x10OFPIT_GOTO_TABLE\x10\x01\x12\x18\n\x14OFPIT_WRITE_METADATA\x10\x02\x12\x17\n\x13OFPIT_WRITE_ACTIONS\x10\x03\x12\x17\n\x13OFPIT_APPLY_ACTIONS\x10\x04\x12\x17\n\x13OFPIT_CLEAR_ACTIONS\x10\x05\x12\x0f\n\x0bOFPIT_METER\x10\x06\x12\x18\n\x12OFPIT_EXPERIMENTER\x10\xff\xff\x03*{\n\x14ofp_flow_mod_command\x12\r\n\tOFPFC_ADD\x10\x00\x12\x10\n\x0cOFPFC_MODIFY\x10\x01\x12\x17\n\x13OFPFC_MODIFY_STRICT\x10\x02\x12\x10\n\x0cOFPFC_DELETE\x10\x03\x12\x17\n\x13OFPFC_DELETE_STRICT\x10\x04*\xa3\x01\n\x12ofp_flow_mod_flags\x12\x11\n\rOFPFF_INVALID\x10\x00\x12\x17\n\x13OFPFF_SEND_FLOW_REM\x10\x01\x12\x17\n\x13OFPFF_CHECK_OVERLAP\x10\x02\x12\x16\n\x12OFPFF_RESET_COUNTS\x10\x04\x12\x17\n\x13OFPFF_NO_PKT_COUNTS\x10\x08\x12\x17\n\x13OFPFF_NO_BYT_COUNTS\x10\x10*S\n\tofp_group\x12\x10\n\x0cOFPG_INVALID\x10\x00\x12\x10\n\x08OFPG_MAX\x10\x80\xfe\xff\xff\x07\x12\x10\n\x08OFPG_ALL\x10\xfc\xff\xff\xff\x07\x12\x10\n\x08OFPG_ANY\x10\xff\xff\xff\xff\x07*J\n\x15ofp_group_mod_command\x12\r\n\tOFPGC_ADD\x10\x00\x12\x10\n\x0cOFPGC_MODIFY\x10\x01\x12\x10\n\x0cOFPGC_DELETE\x10\x02*S\n\x0eofp_group_type\x12\r\n\tOFPGT_ALL\x10\x00\x12\x10\n\x0cOFPGT_SELECT\x10\x01\x12\x12\n\x0eOFPGT_INDIRECT\x10\x02\x12\x0c\n\x08OFPGT_FF\x10\x03*P\n\x14ofp_packet_in_reason\x12\x11\n\rOFPR_NO_MATCH\x10\x00\x12\x0f\n\x0bOFPR_ACTION\x10\x01\x12\x14\n\x10OFPR_INVALID_TTL\x10\x02*\x8b\x01\n\x17ofp_flow_removed_reason\x12\x16\n\x12OFPRR_IDLE_TIMEOUT\x10\x00\x12\x16\n\x12OFPRR_HARD_TIMEOUT\x10\x01\x12\x10\n\x0cOFPRR_DELETE\x10\x02\x12\x16\n\x12OFPRR_GROUP_DELETE\x10\x03\x12\x16\n\x12OFPRR_METER_DELETE\x10\x04*n\n\tofp_meter\x12\r\n\tOFPM_ZERO\x10\x00\x12\x10\n\x08OFPM_MAX\x10\x80\x80\xfc\xff\x07\x12\x15\n\rOFPM_SLOWPATH\x10\xfd\xff\xff\xff\x07\x12\x17\n\x0fOFPM_CONTROLLER\x10\xfe\xff\xff\xff\x07\x12\x10\n\x08OFPM_ALL\x10\xff\xff\xff\xff\x07*m\n\x13ofp_meter_band_type\x12\x12\n\x0eOFPMBT_INVALID\x10\x00\x12\x0f\n\x0bOFPMBT_DROP\x10\x01\x12\x16\n\x12OFPMBT_DSCP_REMARK\x10\x02\x12\x19\n\x13OFPMBT_EXPERIMENTER\x10\xff\xff\x03*J\n\x15ofp_meter_mod_command\x12\r\n\tOFPMC_ADD\x10\x00\x12\x10\n\x0cOFPMC_MODIFY\x10\x01\x12\x10\n\x0cOFPMC_DELETE\x10\x02*g\n\x0fofp_meter_flags\x12\x11\n\rOFPMF_INVALID\x10\x00\x12\x0e\n\nOFPMF_KBPS\x10\x01\x12\x0f\n\x0bOFPMF_PKTPS\x10\x02\x12\x0f\n\x0bOFPMF_BURST\x10\x04\x12\x0f\n\x0bOFPMF_STATS\x10\x08*\xa4\x03\n\x0eofp_error_type\x12\x16\n\x12OFPET_HELLO_FAILED\x10\x00\x12\x15\n\x11OFPET_BAD_REQUEST\x10\x01\x12\x14\n\x10OFPET_BAD_ACTION\x10\x02\x12\x19\n\x15OFPET_BAD_INSTRUCTION\x10\x03\x12\x13\n\x0fOFPET_BAD_MATCH\x10\x04\x12\x19\n\x15OFPET_FLOW_MOD_FAILED\x10\x05\x12\x1a\n\x16OFPET_GROUP_MOD_FAILED\x10\x06\x12\x19\n\x15OFPET_PORT_MOD_FAILED\x10\x07\x12\x1a\n\x16OFPET_TABLE_MOD_FAILED\x10\x08\x12\x19\n\x15OFPET_QUEUE_OP_FAILED\x10\t\x12\x1e\n\x1aOFPET_SWITCH_CONFIG_FAILED\x10\n\x12\x1d\n\x19OFPET_ROLE_REQUEST_FAILED\x10\x0b\x12\x1a\n\x16OFPET_METER_MOD_FAILED\x10\x0c\x12\x1f\n\x1bOFPET_TABLE_FEATURES_FAILED\x10\r\x12\x18\n\x12OFPET_EXPERIMENTER\x10\xff\xff\x03*B\n\x15ofp_hello_failed_code\x12\x17\n\x13OFPHFC_INCOMPATIBLE\x10\x00\x12\x10\n\x0cOFPHFC_EPERM\x10\x01*\xed\x02\n\x14ofp_bad_request_code\x12\x16\n\x12OFPBRC_BAD_VERSION\x10\x00\x12\x13\n\x0fOFPBRC_BAD_TYPE\x10\x01\x12\x18\n\x14OFPBRC_BAD_MULTIPART\x10\x02\x12\x1b\n\x17OFPBRC_BAD_EXPERIMENTER\x10\x03\x12\x17\n\x13OFPBRC_BAD_EXP_TYPE\x10\x04\x12\x10\n\x0cOFPBRC_EPERM\x10\x05\x12\x12\n\x0eOFPBRC_BAD_LEN\x10\x06\x12\x17\n\x13OFPBRC_BUFFER_EMPTY\x10\x07\x12\x19\n\x15OFPBRC_BUFFER_UNKNOWN\x10\x08\x12\x17\n\x13OFPBRC_BAD_TABLE_ID\x10\t\x12\x13\n\x0fOFPBRC_IS_SLAVE\x10\n\x12\x13\n\x0fOFPBRC_BAD_PORT\x10\x0b\x12\x15\n\x11OFPBRC_BAD_PACKET\x10\x0c\x12$\n OFPBRC_MULTIPART_BUFFER_OVERFLOW\x10\r*\x9c\x03\n\x13ofp_bad_action_code\x12\x13\n\x0fOFPBAC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBAC_BAD_LEN\x10\x01\x12\x1b\n\x17OFPBAC_BAD_EXPERIMENTER\x10\x02\x12\x17\n\x13OFPBAC_BAD_EXP_TYPE\x10\x03\x12\x17\n\x13OFPBAC_BAD_OUT_PORT\x10\x04\x12\x17\n\x13OFPBAC_BAD_ARGUMENT\x10\x05\x12\x10\n\x0cOFPBAC_EPERM\x10\x06\x12\x13\n\x0fOFPBAC_TOO_MANY\x10\x07\x12\x14\n\x10OFPBAC_BAD_QUEUE\x10\x08\x12\x18\n\x14OFPBAC_BAD_OUT_GROUP\x10\t\x12\x1d\n\x19OFPBAC_MATCH_INCONSISTENT\x10\n\x12\x1c\n\x18OFPBAC_UNSUPPORTED_ORDER\x10\x0b\x12\x12\n\x0eOFPBAC_BAD_TAG\x10\x0c\x12\x17\n\x13OFPBAC_BAD_SET_TYPE\x10\r\x12\x16\n\x12OFPBAC_BAD_SET_LEN\x10\x0e\x12\x1b\n\x17OFPBAC_BAD_SET_ARGUMENT\x10\x0f*\xfa\x01\n\x18ofp_bad_instruction_code\x12\x17\n\x13OFPBIC_UNKNOWN_INST\x10\x00\x12\x15\n\x11OFPBIC_UNSUP_INST\x10\x01\x12\x17\n\x13OFPBIC_BAD_TABLE_ID\x10\x02\x12\x19\n\x15OFPBIC_UNSUP_METADATA\x10\x03\x12\x1e\n\x1aOFPBIC_UNSUP_METADATA_MASK\x10\x04\x12\x1b\n\x17OFPBIC_BAD_EXPERIMENTER\x10\x05\x12\x17\n\x13OFPBIC_BAD_EXP_TYPE\x10\x06\x12\x12\n\x0eOFPBIC_BAD_LEN\x10\x07\x12\x10\n\x0cOFPBIC_EPERM\x10\x08*\xa5\x02\n\x12ofp_bad_match_code\x12\x13\n\x0fOFPBMC_BAD_TYPE\x10\x00\x12\x12\n\x0eOFPBMC_BAD_LEN\x10\x01\x12\x12\n\x0eOFPBMC_BAD_TAG\x10\x02\x12\x1b\n\x17OFPBMC_BAD_DL_ADDR_MASK\x10\x03\x12\x1b\n\x17OFPBMC_BAD_NW_ADDR_MASK\x10\x04\x12\x18\n\x14OFPBMC_BAD_WILDCARDS\x10\x05\x12\x14\n\x10OFPBMC_BAD_FIELD\x10\x06\x12\x14\n\x10OFPBMC_BAD_VALUE\x10\x07\x12\x13\n\x0fOFPBMC_BAD_MASK\x10\x08\x12\x15\n\x11OFPBMC_BAD_PREREQ\x10\t\x12\x14\n\x10OFPBMC_DUP_FIELD\x10\n\x12\x10\n\x0cOFPBMC_EPERM\x10\x0b*\xd2\x01\n\x18ofp_flow_mod_failed_code\x12\x13\n\x0fOFPFMFC_UNKNOWN\x10\x00\x12\x16\n\x12OFPFMFC_TABLE_FULL\x10\x01\x12\x18\n\x14OFPFMFC_BAD_TABLE_ID\x10\x02\x12\x13\n\x0fOFPFMFC_OVERLAP\x10\x03\x12\x11\n\rOFPFMFC_EPERM\x10\x04\x12\x17\n\x13OFPFMFC_BAD_TIMEOUT\x10\x05\x12\x17\n\x13OFPFMFC_BAD_COMMAND\x10\x06\x12\x15\n\x11OFPFMFC_BAD_FLAGS\x10\x07*\xa1\x03\n\x19ofp_group_mod_failed_code\x12\x18\n\x14OFPGMFC_GROUP_EXISTS\x10\x00\x12\x19\n\x15OFPGMFC_INVALID_GROUP\x10\x01\x12\x1e\n\x1aOFPGMFC_WEIGHT_UNSUPPORTED\x10\x02\x12\x19\n\x15OFPGMFC_OUT_OF_GROUPS\x10\x03\x12\x1a\n\x16OFPGMFC_OUT_OF_BUCKETS\x10\x04\x12 \n\x1cOFPGMFC_CHAINING_UNSUPPORTED\x10\x05\x12\x1d\n\x19OFPGMFC_WATCH_UNSUPPORTED\x10\x06\x12\x10\n\x0cOFPGMFC_LOOP\x10\x07\x12\x19\n\x15OFPGMFC_UNKNOWN_GROUP\x10\x08\x12\x19\n\x15OFPGMFC_CHAINED_GROUP\x10\t\x12\x14\n\x10OFPGMFC_BAD_TYPE\x10\n\x12\x17\n\x13OFPGMFC_BAD_COMMAND\x10\x0b\x12\x16\n\x12OFPGMFC_BAD_BUCKET\x10\x0c\x12\x15\n\x11OFPGMFC_BAD_WATCH\x10\r\x12\x11\n\rOFPGMFC_EPERM\x10\x0e*\x8f\x01\n\x18ofp_port_mod_failed_code\x12\x14\n\x10OFPPMFC_BAD_PORT\x10\x00\x12\x17\n\x13OFPPMFC_BAD_HW_ADDR\x10\x01\x12\x16\n\x12OFPPMFC_BAD_CONFIG\x10\x02\x12\x19\n\x15OFPPMFC_BAD_ADVERTISE\x10\x03\x12\x11\n\rOFPPMFC_EPERM\x10\x04*]\n\x19ofp_table_mod_failed_code\x12\x15\n\x11OFPTMFC_BAD_TABLE\x10\x00\x12\x16\n\x12OFPTMFC_BAD_CONFIG\x10\x01\x12\x11\n\rOFPTMFC_EPERM\x10\x02*Z\n\x18ofp_queue_op_failed_code\x12\x14\n\x10OFPQOFC_BAD_PORT\x10\x00\x12\x15\n\x11OFPQOFC_BAD_QUEUE\x10\x01\x12\x11\n\rOFPQOFC_EPERM\x10\x02*^\n\x1dofp_switch_config_failed_code\x12\x15\n\x11OFPSCFC_BAD_FLAGS\x10\x00\x12\x13\n\x0fOFPSCFC_BAD_LEN\x10\x01\x12\x11\n\rOFPSCFC_EPERM\x10\x02*Z\n\x1cofp_role_request_failed_code\x12\x11\n\rOFPRRFC_STALE\x10\x00\x12\x11\n\rOFPRRFC_UNSUP\x10\x01\x12\x14\n\x10OFPRRFC_BAD_ROLE\x10\x02*\xc4\x02\n\x19ofp_meter_mod_failed_code\x12\x13\n\x0fOFPMMFC_UNKNOWN\x10\x00\x12\x18\n\x14OFPMMFC_METER_EXISTS\x10\x01\x12\x19\n\x15OFPMMFC_INVALID_METER\x10\x02\x12\x19\n\x15OFPMMFC_UNKNOWN_METER\x10\x03\x12\x17\n\x13OFPMMFC_BAD_COMMAND\x10\x04\x12\x15\n\x11OFPMMFC_BAD_FLAGS\x10\x05\x12\x14\n\x10OFPMMFC_BAD_RATE\x10\x06\x12\x15\n\x11OFPMMFC_BAD_BURST\x10\x07\x12\x14\n\x10OFPMMFC_BAD_BAND\x10\x08\x12\x1a\n\x16OFPMMFC_BAD_BAND_VALUE\x10\t\x12\x19\n\x15OFPMMFC_OUT_OF_METERS\x10\n\x12\x18\n\x14OFPMMFC_OUT_OF_BANDS\x10\x0b*\xa9\x01\n\x1eofp_table_features_failed_code\x12\x15\n\x11OFPTFFC_BAD_TABLE\x10\x00\x12\x18\n\x14OFPTFFC_BAD_METADATA\x10\x01\x12\x14\n\x10OFPTFFC_BAD_TYPE\x10\x02\x12\x13\n\x0fOFPTFFC_BAD_LEN\x10\x03\x12\x18\n\x14OFPTFFC_BAD_ARGUMENT\x10\x04\x12\x11\n\rOFPTFFC_EPERM\x10\x05*\xce\x02\n\x12ofp_multipart_type\x12\x0e\n\nOFPMP_DESC\x10\x00\x12\x0e\n\nOFPMP_FLOW\x10\x01\x12\x13\n\x0fOFPMP_AGGREGATE\x10\x02\x12\x0f\n\x0bOFPMP_TABLE\x10\x03\x12\x14\n\x10OFPMP_PORT_STATS\x10\x04\x12\x0f\n\x0bOFPMP_QUEUE\x10\x05\x12\x0f\n\x0bOFPMP_GROUP\x10\x06\x12\x14\n\x10OFPMP_GROUP_DESC\x10\x07\x12\x18\n\x14OFPMP_GROUP_FEATURES\x10\x08\x12\x0f\n\x0bOFPMP_METER\x10\t\x12\x16\n\x12OFPMP_METER_CONFIG\x10\n\x12\x18\n\x14OFPMP_METER_FEATURES\x10\x0b\x12\x18\n\x14OFPMP_TABLE_FEATURES\x10\x0c\x12\x13\n\x0fOFPMP_PORT_DESC\x10\r\x12\x18\n\x12OFPMP_EXPERIMENTER\x10\xff\xff\x03*J\n\x1bofp_multipart_request_flags\x12\x16\n\x12OFPMPF_REQ_INVALID\x10\x00\x12\x13\n\x0fOFPMPF_REQ_MORE\x10\x01*L\n\x19ofp_multipart_reply_flags\x12\x18\n\x14OFPMPF_REPLY_INVALID\x10\x00\x12\x15\n\x11OFPMPF_REPLY_MORE\x10\x01*\xe4\x03\n\x1bofp_table_feature_prop_type\x12\x18\n\x14OFPTFPT_INSTRUCTIONS\x10\x00\x12\x1d\n\x19OFPTFPT_INSTRUCTIONS_MISS\x10\x01\x12\x17\n\x13OFPTFPT_NEXT_TABLES\x10\x02\x12\x1c\n\x18OFPTFPT_NEXT_TABLES_MISS\x10\x03\x12\x19\n\x15OFPTFPT_WRITE_ACTIONS\x10\x04\x12\x1e\n\x1aOFPTFPT_WRITE_ACTIONS_MISS\x10\x05\x12\x19\n\x15OFPTFPT_APPLY_ACTIONS\x10\x06\x12\x1e\n\x1aOFPTFPT_APPLY_ACTIONS_MISS\x10\x07\x12\x11\n\rOFPTFPT_MATCH\x10\x08\x12\x15\n\x11OFPTFPT_WILDCARDS\x10\n\x12\x1a\n\x16OFPTFPT_WRITE_SETFIELD\x10\x0c\x12\x1f\n\x1bOFPTFPT_WRITE_SETFIELD_MISS\x10\r\x12\x1a\n\x16OFPTFPT_APPLY_SETFIELD\x10\x0e\x12\x1f\n\x1bOFPTFPT_APPLY_SETFIELD_MISS\x10\x0f\x12\x1a\n\x14OFPTFPT_EXPERIMENTER\x10\xfe\xff\x03\x12\x1f\n\x19OFPTFPT_EXPERIMENTER_MISS\x10\xff\xff\x03*\x93\x01\n\x16ofp_group_capabilities\x12\x12\n\x0eOFPGFC_INVALID\x10\x00\x12\x18\n\x14OFPGFC_SELECT_WEIGHT\x10\x01\x12\x1a\n\x16OFPGFC_SELECT_LIVENESS\x10\x02\x12\x13\n\x0fOFPGFC_CHAINING\x10\x04\x12\x1a\n\x16OFPGFC_CHAINING_CHECKS\x10\x08*k\n\x14ofp_queue_properties\x12\x11\n\rOFPQT_INVALID\x10\x00\x12\x12\n\x0eOFPQT_MIN_RATE\x10\x01\x12\x12\n\x0eOFPQT_MAX_RATE\x10\x02\x12\x18\n\x12OFPQT_EXPERIMENTER\x10\xff\xff\x03*q\n\x13ofp_controller_role\x12\x17\n\x13OFPCR_ROLE_NOCHANGE\x10\x00\x12\x14\n\x10OFPCR_ROLE_EQUAL\x10\x01\x12\x15\n\x11OFPCR_ROLE_MASTER\x10\x02\x12\x14\n\x10OFPCR_ROLE_SLAVE\x10\x03\x32\xfd\x04\n\x08OpenFlow\x12<\n\x08GetHello\x12\x16.openflow_13.ofp_hello\x1a\x16.openflow_13.ofp_hello\"\x00\x12\x41\n\x0b\x45\x63hoRequest\x12\x17.openflow_13.ofp_header\x1a\x17.openflow_13.ofp_header\"\x00\x12\x63\n\x13\x45xperimenterRequest\x12$.openflow_13.ofp_experimenter_header\x1a$.openflow_13.ofp_experimenter_header\"\x00\x12P\n\x11GetSwitchFeatures\x12\x17.openflow_13.ofp_header\x1a .openflow_13.ofp_switch_features\"\x00\x12L\n\x0fGetSwitchConfig\x12\x17.openflow_13.ofp_header\x1a\x1e.openflow_13.ofp_switch_config\"\x00\x12\x46\n\tSetConfig\x12\x1e.openflow_13.ofp_switch_config\x1a\x17.openflow_13.ofp_header\"\x00\x12R\n\x17ReceivePacketInMessages\x12\x17.openflow_13.ofp_header\x1a\x1a.openflow_13.ofp_packet_in\"\x00\x30\x01\x12O\n\x15SendPacketOutMessages\x12\x1b.openflow_13.ofp_packet_out\x1a\x17.openflow_13.ofp_header\"\x00\x62\x06proto3')
 )
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
@@ -73,8 +73,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=11141,
-  serialized_end=11354,
+  serialized_start=11234,
+  serialized_end=11447,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_NO)
 
@@ -208,8 +208,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=11357,
-  serialized_end=12069,
+  serialized_start=11450,
+  serialized_end=12162,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TYPE)
 
@@ -231,8 +231,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12071,
-  serialized_end=12138,
+  serialized_start=12164,
+  serialized_end=12231,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_HELLO_ELEM_TYPE)
 
@@ -262,8 +262,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12140,
-  serialized_end=12241,
+  serialized_start=12233,
+  serialized_end=12334,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CONFIG_FLAGS)
 
@@ -285,8 +285,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12243,
-  serialized_end=12307,
+  serialized_start=12336,
+  serialized_end=12400,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_CONFIG)
 
@@ -312,8 +312,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12309,
-  serialized_end=12371,
+  serialized_start=12402,
+  serialized_end=12464,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE)
 
@@ -359,8 +359,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12374,
-  serialized_end=12561,
+  serialized_start=12467,
+  serialized_end=12654,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CAPABILITIES)
 
@@ -394,8 +394,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12563,
-  serialized_end=12681,
+  serialized_start=12656,
+  serialized_end=12774,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_CONFIG)
 
@@ -425,8 +425,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12683,
-  serialized_end=12774,
+  serialized_start=12776,
+  serialized_end=12867,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_STATE)
 
@@ -508,8 +508,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=12777,
-  serialized_end=13126,
+  serialized_start=12870,
+  serialized_end=13219,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_FEATURES)
 
@@ -535,8 +535,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13128,
-  serialized_end=13196,
+  serialized_start=13221,
+  serialized_end=13289,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_REASON)
 
@@ -558,8 +558,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13198,
-  serialized_end=13249,
+  serialized_start=13291,
+  serialized_end=13342,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MATCH_TYPE)
 
@@ -589,8 +589,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13251,
-  serialized_end=13358,
+  serialized_start=13344,
+  serialized_end=13451,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_OXM_CLASS)
 
@@ -764,8 +764,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=13361,
-  serialized_end=14401,
+  serialized_start=13454,
+  serialized_end=14494,
 )
 _sym_db.RegisterEnumDescriptor(_OXM_OFB_FIELD_TYPES)
 
@@ -787,8 +787,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=14403,
-  serialized_end=14454,
+  serialized_start=14496,
+  serialized_end=14547,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_VLAN_ID)
 
@@ -842,8 +842,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=14457,
-  serialized_end=14658,
+  serialized_start=14550,
+  serialized_end=14751,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_IPV6EXTHDR_FLAGS)
 
@@ -925,8 +925,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=14661,
-  serialized_end=15041,
+  serialized_start=14754,
+  serialized_end=15134,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_ACTION_TYPE)
 
@@ -952,8 +952,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15043,
-  serialized_end=15129,
+  serialized_start=15136,
+  serialized_end=15222,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CONTROLLER_MAX_LEN)
 
@@ -999,8 +999,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15132,
-  serialized_end=15339,
+  serialized_start=15225,
+  serialized_end=15432,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_INSTRUCTION_TYPE)
 
@@ -1034,8 +1034,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15341,
-  serialized_end=15464,
+  serialized_start=15434,
+  serialized_end=15557,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_COMMAND)
 
@@ -1073,8 +1073,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15467,
-  serialized_end=15630,
+  serialized_start=15560,
+  serialized_end=15723,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_FLAGS)
 
@@ -1104,8 +1104,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15632,
-  serialized_end=15715,
+  serialized_start=15725,
+  serialized_end=15808,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP)
 
@@ -1131,8 +1131,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15717,
-  serialized_end=15791,
+  serialized_start=15810,
+  serialized_end=15884,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_MOD_COMMAND)
 
@@ -1162,8 +1162,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15793,
-  serialized_end=15876,
+  serialized_start=15886,
+  serialized_end=15969,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_TYPE)
 
@@ -1189,8 +1189,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15878,
-  serialized_end=15958,
+  serialized_start=15971,
+  serialized_end=16051,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PACKET_IN_REASON)
 
@@ -1224,8 +1224,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=15961,
-  serialized_end=16100,
+  serialized_start=16054,
+  serialized_end=16193,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_REMOVED_REASON)
 
@@ -1259,8 +1259,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16102,
-  serialized_end=16212,
+  serialized_start=16195,
+  serialized_end=16305,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER)
 
@@ -1290,8 +1290,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16214,
-  serialized_end=16323,
+  serialized_start=16307,
+  serialized_end=16416,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_BAND_TYPE)
 
@@ -1317,8 +1317,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16325,
-  serialized_end=16399,
+  serialized_start=16418,
+  serialized_end=16492,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_MOD_COMMAND)
 
@@ -1352,8 +1352,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16401,
-  serialized_end=16504,
+  serialized_start=16494,
+  serialized_end=16597,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_FLAGS)
 
@@ -1427,8 +1427,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16507,
-  serialized_end=16927,
+  serialized_start=16600,
+  serialized_end=17020,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_ERROR_TYPE)
 
@@ -1450,8 +1450,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16929,
-  serialized_end=16995,
+  serialized_start=17022,
+  serialized_end=17088,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_HELLO_FAILED_CODE)
 
@@ -1521,8 +1521,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=16998,
-  serialized_end=17363,
+  serialized_start=17091,
+  serialized_end=17456,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_REQUEST_CODE)
 
@@ -1600,8 +1600,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=17366,
-  serialized_end=17778,
+  serialized_start=17459,
+  serialized_end=17871,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_ACTION_CODE)
 
@@ -1651,8 +1651,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=17781,
-  serialized_end=18031,
+  serialized_start=17874,
+  serialized_end=18124,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_INSTRUCTION_CODE)
 
@@ -1714,8 +1714,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18034,
-  serialized_end=18327,
+  serialized_start=18127,
+  serialized_end=18420,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_BAD_MATCH_CODE)
 
@@ -1761,8 +1761,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18330,
-  serialized_end=18540,
+  serialized_start=18423,
+  serialized_end=18633,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_FAILED_CODE)
 
@@ -1836,8 +1836,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18543,
-  serialized_end=18960,
+  serialized_start=18636,
+  serialized_end=19053,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_MOD_FAILED_CODE)
 
@@ -1871,8 +1871,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=18963,
-  serialized_end=19106,
+  serialized_start=19056,
+  serialized_end=19199,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_PORT_MOD_FAILED_CODE)
 
@@ -1898,8 +1898,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19108,
-  serialized_end=19201,
+  serialized_start=19201,
+  serialized_end=19294,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_MOD_FAILED_CODE)
 
@@ -1925,8 +1925,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19203,
-  serialized_end=19293,
+  serialized_start=19296,
+  serialized_end=19386,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_QUEUE_OP_FAILED_CODE)
 
@@ -1952,8 +1952,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19295,
-  serialized_end=19389,
+  serialized_start=19388,
+  serialized_end=19482,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_SWITCH_CONFIG_FAILED_CODE)
 
@@ -1979,8 +1979,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19391,
-  serialized_end=19481,
+  serialized_start=19484,
+  serialized_end=19574,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_ROLE_REQUEST_FAILED_CODE)
 
@@ -2042,8 +2042,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19484,
-  serialized_end=19808,
+  serialized_start=19577,
+  serialized_end=19901,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_METER_MOD_FAILED_CODE)
 
@@ -2081,8 +2081,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19811,
-  serialized_end=19980,
+  serialized_start=19904,
+  serialized_end=20073,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_FEATURES_FAILED_CODE)
 
@@ -2156,8 +2156,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=19983,
-  serialized_end=20317,
+  serialized_start=20076,
+  serialized_end=20410,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_TYPE)
 
@@ -2179,8 +2179,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20319,
-  serialized_end=20393,
+  serialized_start=20412,
+  serialized_end=20486,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_REQUEST_FLAGS)
 
@@ -2202,8 +2202,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20395,
-  serialized_end=20471,
+  serialized_start=20488,
+  serialized_end=20564,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_REPLY_FLAGS)
 
@@ -2281,8 +2281,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20474,
-  serialized_end=20958,
+  serialized_start=20567,
+  serialized_end=21051,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_TABLE_FEATURE_PROP_TYPE)
 
@@ -2316,8 +2316,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=20961,
-  serialized_end=21108,
+  serialized_start=21054,
+  serialized_end=21201,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_GROUP_CAPABILITIES)
 
@@ -2347,8 +2347,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=21110,
-  serialized_end=21217,
+  serialized_start=21203,
+  serialized_end=21310,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_QUEUE_PROPERTIES)
 
@@ -2378,8 +2378,8 @@
   ],
   containing_type=None,
   options=None,
-  serialized_start=21219,
-  serialized_end=21332,
+  serialized_start=21312,
+  serialized_end=21425,
 )
 _sym_db.RegisterEnumDescriptor(_OFP_CONTROLLER_ROLE)
 
@@ -6343,22 +6343,15 @@
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='pad', full_name='openflow_13.ofp_group_desc.pad', index=1,
+      name='group_id', full_name='openflow_13.ofp_group_desc.group_id', index=1,
       number=2, type=13, cpp_type=3, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='group_id', full_name='openflow_13.ofp_group_desc.group_id', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='buckets', full_name='openflow_13.ofp_group_desc.buckets', index=3,
-      number=4, type=11, cpp_type=10, label=3,
+      name='buckets', full_name='openflow_13.ofp_group_desc.buckets', index=2,
+      number=3, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -6375,8 +6368,46 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9098,
-  serialized_end=9230,
+  serialized_start=9097,
+  serialized_end=9216,
+)
+
+
+_OFP_GROUP_ENTRY = _descriptor.Descriptor(
+  name='ofp_group_entry',
+  full_name='openflow_13.ofp_group_entry',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='desc', full_name='openflow_13.ofp_group_entry.desc', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='stats', full_name='openflow_13.ofp_group_entry.stats', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=9218,
+  serialized_end=9323,
 )
 
 
@@ -6427,8 +6458,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9232,
-  serialized_end=9326,
+  serialized_start=9325,
+  serialized_end=9419,
 )
 
 
@@ -6458,8 +6489,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9328,
-  serialized_end=9375,
+  serialized_start=9421,
+  serialized_end=9468,
 )
 
 
@@ -6496,8 +6527,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9377,
-  serialized_end=9451,
+  serialized_start=9470,
+  serialized_end=9544,
 )
 
 
@@ -6569,8 +6600,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9454,
-  serialized_end=9657,
+  serialized_start=9547,
+  serialized_end=9750,
 )
 
 
@@ -6614,8 +6645,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9659,
-  serialized_end=9761,
+  serialized_start=9752,
+  serialized_end=9854,
 )
 
 
@@ -6673,8 +6704,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9763,
-  serialized_end=9882,
+  serialized_start=9856,
+  serialized_end=9975,
 )
 
 
@@ -6718,8 +6749,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9884,
-  serialized_end=9973,
+  serialized_start=9977,
+  serialized_end=10066,
 )
 
 
@@ -6763,8 +6794,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=9975,
-  serialized_end=10054,
+  serialized_start=10068,
+  serialized_end=10147,
 )
 
 
@@ -6801,8 +6832,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10056,
-  serialized_end=10110,
+  serialized_start=10149,
+  serialized_end=10203,
 )
 
 
@@ -6839,8 +6870,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10112,
-  serialized_end=10208,
+  serialized_start=10205,
+  serialized_end=10301,
 )
 
 
@@ -6877,8 +6908,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10210,
-  serialized_end=10306,
+  serialized_start=10303,
+  serialized_end=10399,
 )
 
 
@@ -6922,8 +6953,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10308,
-  serialized_end=10430,
+  serialized_start=10401,
+  serialized_end=10523,
 )
 
 
@@ -6967,8 +6998,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10432,
-  serialized_end=10538,
+  serialized_start=10525,
+  serialized_end=10631,
 )
 
 
@@ -6998,8 +7029,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10540,
-  serialized_end=10584,
+  serialized_start=10633,
+  serialized_end=10677,
 )
 
 
@@ -7036,8 +7067,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10586,
-  serialized_end=10675,
+  serialized_start=10679,
+  serialized_end=10768,
 )
 
 
@@ -7074,8 +7105,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10677,
-  serialized_end=10731,
+  serialized_start=10770,
+  serialized_end=10824,
 )
 
 
@@ -7112,8 +7143,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10733,
-  serialized_end=10793,
+  serialized_start=10826,
+  serialized_end=10886,
 )
 
 
@@ -7185,8 +7216,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10796,
-  serialized_end=10950,
+  serialized_start=10889,
+  serialized_end=11043,
 )
 
 
@@ -7223,8 +7254,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=10952,
-  serialized_end=11041,
+  serialized_start=11045,
+  serialized_end=11134,
 )
 
 
@@ -7268,8 +7299,8 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=11043,
-  serialized_end=11138,
+  serialized_start=11136,
+  serialized_end=11231,
 )
 
 _OFP_HEADER.fields_by_name['type'].enum_type = _OFP_TYPE
@@ -7560,6 +7591,8 @@
 _OFP_GROUP_STATS.fields_by_name['bucket_stats'].message_type = _OFP_BUCKET_COUNTER
 _OFP_GROUP_DESC.fields_by_name['type'].enum_type = _OFP_GROUP_TYPE
 _OFP_GROUP_DESC.fields_by_name['buckets'].message_type = _OFP_BUCKET
+_OFP_GROUP_ENTRY.fields_by_name['desc'].message_type = _OFP_GROUP_DESC
+_OFP_GROUP_ENTRY.fields_by_name['stats'].message_type = _OFP_GROUP_STATS
 _OFP_METER_STATS.fields_by_name['band_stats'].message_type = _OFP_METER_BAND_STATS
 _OFP_METER_CONFIG.fields_by_name['bands'].message_type = _OFP_METER_BAND_HEADER
 _OFP_QUEUE_PROP_MIN_RATE.fields_by_name['prop_header'].message_type = _OFP_QUEUE_PROP_HEADER
@@ -7631,6 +7664,7 @@
 DESCRIPTOR.message_types_by_name['ofp_bucket_counter'] = _OFP_BUCKET_COUNTER
 DESCRIPTOR.message_types_by_name['ofp_group_stats'] = _OFP_GROUP_STATS
 DESCRIPTOR.message_types_by_name['ofp_group_desc'] = _OFP_GROUP_DESC
+DESCRIPTOR.message_types_by_name['ofp_group_entry'] = _OFP_GROUP_ENTRY
 DESCRIPTOR.message_types_by_name['ofp_group_features'] = _OFP_GROUP_FEATURES
 DESCRIPTOR.message_types_by_name['ofp_meter_multipart_request'] = _OFP_METER_MULTIPART_REQUEST
 DESCRIPTOR.message_types_by_name['ofp_meter_band_stats'] = _OFP_METER_BAND_STATS
@@ -8145,6 +8179,13 @@
   ))
 _sym_db.RegisterMessage(ofp_group_desc)
 
+ofp_group_entry = _reflection.GeneratedProtocolMessageType('ofp_group_entry', (_message.Message,), dict(
+  DESCRIPTOR = _OFP_GROUP_ENTRY,
+  __module__ = 'openflow_13_pb2'
+  # @@protoc_insertion_point(class_scope:openflow_13.ofp_group_entry)
+  ))
+_sym_db.RegisterMessage(ofp_group_entry)
+
 ofp_group_features = _reflection.GeneratedProtocolMessageType('ofp_group_features', (_message.Message,), dict(
   DESCRIPTOR = _OFP_GROUP_FEATURES,
   __module__ = 'openflow_13_pb2'
@@ -8291,4 +8332,372 @@
 from grpc.beta import interfaces as beta_interfaces
 from grpc.framework.common import cardinality
 from grpc.framework.interfaces.face import utilities as face_utilities
+
+
+class OpenFlowStub(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+
+  def __init__(self, channel):
+    """Constructor.
+
+    Args:
+      channel: A grpc.Channel.
+    """
+    self.GetHello = channel.unary_unary(
+        '/openflow_13.OpenFlow/GetHello',
+        request_serializer=ofp_hello.SerializeToString,
+        response_deserializer=ofp_hello.FromString,
+        )
+    self.EchoRequest = channel.unary_unary(
+        '/openflow_13.OpenFlow/EchoRequest',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_header.FromString,
+        )
+    self.ExperimenterRequest = channel.unary_unary(
+        '/openflow_13.OpenFlow/ExperimenterRequest',
+        request_serializer=ofp_experimenter_header.SerializeToString,
+        response_deserializer=ofp_experimenter_header.FromString,
+        )
+    self.GetSwitchFeatures = channel.unary_unary(
+        '/openflow_13.OpenFlow/GetSwitchFeatures',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_switch_features.FromString,
+        )
+    self.GetSwitchConfig = channel.unary_unary(
+        '/openflow_13.OpenFlow/GetSwitchConfig',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_switch_config.FromString,
+        )
+    self.SetConfig = channel.unary_unary(
+        '/openflow_13.OpenFlow/SetConfig',
+        request_serializer=ofp_switch_config.SerializeToString,
+        response_deserializer=ofp_header.FromString,
+        )
+    self.ReceivePacketInMessages = channel.unary_stream(
+        '/openflow_13.OpenFlow/ReceivePacketInMessages',
+        request_serializer=ofp_header.SerializeToString,
+        response_deserializer=ofp_packet_in.FromString,
+        )
+    self.SendPacketOutMessages = channel.unary_unary(
+        '/openflow_13.OpenFlow/SendPacketOutMessages',
+        request_serializer=ofp_packet_out.SerializeToString,
+        response_deserializer=ofp_header.FromString,
+        )
+
+
+class OpenFlowServicer(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+
+  def GetHello(self, request, context):
+    """
+    Hello message handshake, initiated by the client (controller)
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def EchoRequest(self, request, context):
+    """
+    Echo request / reply, initiated by the client (controller)
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def ExperimenterRequest(self, request, context):
+    """
+    Experimental (extension) RPC
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def GetSwitchFeatures(self, request, context):
+    """
+    Get Switch Features
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def GetSwitchConfig(self, request, context):
+    """
+    Get Switch Config
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def SetConfig(self, request, context):
+    """
+    Set Config
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def ReceivePacketInMessages(self, request, context):
+    """
+    Receive Packet-In messages
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def SendPacketOutMessages(self, request, context):
+    """
+    Send Packet-Out messages
+    TODO http option
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+
+def add_OpenFlowServicer_to_server(servicer, server):
+  rpc_method_handlers = {
+      'GetHello': grpc.unary_unary_rpc_method_handler(
+          servicer.GetHello,
+          request_deserializer=ofp_hello.FromString,
+          response_serializer=ofp_hello.SerializeToString,
+      ),
+      'EchoRequest': grpc.unary_unary_rpc_method_handler(
+          servicer.EchoRequest,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_header.SerializeToString,
+      ),
+      'ExperimenterRequest': grpc.unary_unary_rpc_method_handler(
+          servicer.ExperimenterRequest,
+          request_deserializer=ofp_experimenter_header.FromString,
+          response_serializer=ofp_experimenter_header.SerializeToString,
+      ),
+      'GetSwitchFeatures': grpc.unary_unary_rpc_method_handler(
+          servicer.GetSwitchFeatures,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_switch_features.SerializeToString,
+      ),
+      'GetSwitchConfig': grpc.unary_unary_rpc_method_handler(
+          servicer.GetSwitchConfig,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_switch_config.SerializeToString,
+      ),
+      'SetConfig': grpc.unary_unary_rpc_method_handler(
+          servicer.SetConfig,
+          request_deserializer=ofp_switch_config.FromString,
+          response_serializer=ofp_header.SerializeToString,
+      ),
+      'ReceivePacketInMessages': grpc.unary_stream_rpc_method_handler(
+          servicer.ReceivePacketInMessages,
+          request_deserializer=ofp_header.FromString,
+          response_serializer=ofp_packet_in.SerializeToString,
+      ),
+      'SendPacketOutMessages': grpc.unary_unary_rpc_method_handler(
+          servicer.SendPacketOutMessages,
+          request_deserializer=ofp_packet_out.FromString,
+          response_serializer=ofp_header.SerializeToString,
+      ),
+  }
+  generic_handler = grpc.method_handlers_generic_handler(
+      'openflow_13.OpenFlow', rpc_method_handlers)
+  server.add_generic_rpc_handlers((generic_handler,))
+
+
+class BetaOpenFlowServicer(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+  def GetHello(self, request, context):
+    """
+    Hello message handshake, initiated by the client (controller)
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def EchoRequest(self, request, context):
+    """
+    Echo request / reply, initiated by the client (controller)
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def ExperimenterRequest(self, request, context):
+    """
+    Experimental (extension) RPC
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def GetSwitchFeatures(self, request, context):
+    """
+    Get Switch Features
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def GetSwitchConfig(self, request, context):
+    """
+    Get Switch Config
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def SetConfig(self, request, context):
+    """
+    Set Config
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def ReceivePacketInMessages(self, request, context):
+    """
+    Receive Packet-In messages
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def SendPacketOutMessages(self, request, context):
+    """
+    Send Packet-Out messages
+    TODO http option
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+
+
+class BetaOpenFlowStub(object):
+  """
+  Service API definitions and additional message types needed for it
+
+  """
+  def GetHello(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Hello message handshake, initiated by the client (controller)
+    TODO http option
+    """
+    raise NotImplementedError()
+  GetHello.future = None
+  def EchoRequest(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Echo request / reply, initiated by the client (controller)
+    TODO http option
+    """
+    raise NotImplementedError()
+  EchoRequest.future = None
+  def ExperimenterRequest(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Experimental (extension) RPC
+    TODO http option
+    """
+    raise NotImplementedError()
+  ExperimenterRequest.future = None
+  def GetSwitchFeatures(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Get Switch Features
+    TODO http option
+    """
+    raise NotImplementedError()
+  GetSwitchFeatures.future = None
+  def GetSwitchConfig(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Get Switch Config
+    TODO http option
+    """
+    raise NotImplementedError()
+  GetSwitchConfig.future = None
+  def SetConfig(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Set Config
+    TODO http option
+    """
+    raise NotImplementedError()
+  SetConfig.future = None
+  def ReceivePacketInMessages(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Receive Packet-In messages
+    TODO http option
+    """
+    raise NotImplementedError()
+  def SendPacketOutMessages(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """
+    Send Packet-Out messages
+    TODO http option
+    """
+    raise NotImplementedError()
+  SendPacketOutMessages.future = None
+
+
+def beta_create_OpenFlow_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
+  request_deserializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.FromString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_packet_out.FromString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_switch_config.FromString,
+  }
+  response_serializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_switch_config.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_switch_features.SerializeToString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_packet_in.SerializeToString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_header.SerializeToString,
+  }
+  method_implementations = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): face_utilities.unary_unary_inline(servicer.EchoRequest),
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): face_utilities.unary_unary_inline(servicer.ExperimenterRequest),
+    ('openflow_13.OpenFlow', 'GetHello'): face_utilities.unary_unary_inline(servicer.GetHello),
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): face_utilities.unary_unary_inline(servicer.GetSwitchConfig),
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): face_utilities.unary_unary_inline(servicer.GetSwitchFeatures),
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): face_utilities.unary_stream_inline(servicer.ReceivePacketInMessages),
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): face_utilities.unary_unary_inline(servicer.SendPacketOutMessages),
+    ('openflow_13.OpenFlow', 'SetConfig'): face_utilities.unary_unary_inline(servicer.SetConfig),
+  }
+  server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
+  return beta_implementations.server(method_implementations, options=server_options)
+
+
+def beta_create_OpenFlow_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
+  request_serializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_header.SerializeToString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_packet_out.SerializeToString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_switch_config.SerializeToString,
+  }
+  response_deserializers = {
+    ('openflow_13.OpenFlow', 'EchoRequest'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'ExperimenterRequest'): ofp_experimenter_header.FromString,
+    ('openflow_13.OpenFlow', 'GetHello'): ofp_hello.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchConfig'): ofp_switch_config.FromString,
+    ('openflow_13.OpenFlow', 'GetSwitchFeatures'): ofp_switch_features.FromString,
+    ('openflow_13.OpenFlow', 'ReceivePacketInMessages'): ofp_packet_in.FromString,
+    ('openflow_13.OpenFlow', 'SendPacketOutMessages'): ofp_header.FromString,
+    ('openflow_13.OpenFlow', 'SetConfig'): ofp_header.FromString,
+  }
+  cardinalities = {
+    'EchoRequest': cardinality.Cardinality.UNARY_UNARY,
+    'ExperimenterRequest': cardinality.Cardinality.UNARY_UNARY,
+    'GetHello': cardinality.Cardinality.UNARY_UNARY,
+    'GetSwitchConfig': cardinality.Cardinality.UNARY_UNARY,
+    'GetSwitchFeatures': cardinality.Cardinality.UNARY_UNARY,
+    'ReceivePacketInMessages': cardinality.Cardinality.UNARY_STREAM,
+    'SendPacketOutMessages': cardinality.Cardinality.UNARY_UNARY,
+    'SetConfig': cardinality.Cardinality.UNARY_UNARY,
+  }
+  stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
+  return beta_implementations.dynamic_stub(channel, 'openflow_13.OpenFlow', cardinalities, options=stub_options)
 # @@protoc_insertion_point(module_scope)
diff --git a/voltha/protos/voltha.desc b/voltha/protos/voltha.desc
index 4c2e3ad..64d9878 100644
--- a/voltha/protos/voltha.desc
+++ b/voltha/protos/voltha.desc
Binary files differ
diff --git a/voltha/protos/voltha.proto b/voltha/protos/voltha.proto
index 85217f6..9dca2df 100644
--- a/voltha/protos/voltha.proto
+++ b/voltha/protos/voltha.proto
@@ -99,10 +99,19 @@
     openflow_13.ofp_flow_mod flow_mod = 2;
 }
 
+message GroupTableUpdate {
+    string id = 1; // device id
+    openflow_13.ofp_group_mod group_mod = 2;
+}
+
 message Flows {
     repeated openflow_13.ofp_flow_stats items = 1;
 }
 
+message FlowGroups {
+    repeated openflow_13.ofp_group_entry items = 1;
+}
+
 service VolthaLogicalLayer {
 
     // List logical devices owned by this Voltha instance
@@ -141,6 +150,21 @@
         };
     }
 
+    // Update group tabel for device
+    rpc UpdateGroupTable(GroupTableUpdate) returns(NullMessage) {
+        option (google.api.http) = {
+            post: "/local/devices/{id}/groups"
+            body: "*"
+        };
+    }
+
+    // List all flow groups of a logical device
+    rpc ListDeviceFlowGroups(ID) returns(FlowGroups) {
+        option (google.api.http) = {
+            get: "/local/devices/{id}/groups"
+        };
+    }
+
     // Create a subscriber record
     rpc CreateSubscriber(Subscriber) returns (Subscriber) {
         option (google.api.http) = {
diff --git a/voltha/protos/voltha_pb2.py b/voltha/protos/voltha_pb2.py
index d800877..27d1fa0 100644
--- a/voltha/protos/voltha_pb2.py
+++ b/voltha/protos/voltha_pb2.py
@@ -21,7 +21,7 @@
   name='voltha.proto',
   package='voltha',
   syntax='proto3',
-  serialized_pb=_b('\n\x0cvoltha.proto\x12\x06voltha\x1a\x1cgoogle/api/annotations.proto\x1a\x11openflow_13.proto\"\r\n\x0bNullMessage\"v\n\x0cHealthStatus\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .voltha.HealthStatus.HealthState\"5\n\x0bHealthState\x12\x0b\n\x07HEALTHY\x10\x00\x12\x0e\n\nOVERLOADED\x10\x01\x12\t\n\x05\x44YING\x10\x02\"q\n\x07\x41\x64\x64ress\x12\n\n\x02id\x18\x07 \x01(\t\x12\x0e\n\x06street\x18\x01 \x01(\t\x12\x0f\n\x07street2\x18\x02 \x01(\t\x12\x0f\n\x07street3\x18\x03 \x01(\t\x12\x0c\n\x04\x63ity\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0b\n\x03zip\x18\x06 \x01(\r\"/\n\tAddresses\x12\"\n\taddresses\x18\x01 \x03(\x0b\x32\x0f.voltha.Address\"\x9f\x01\n\x0bMoreComplex\x12$\n\x06health\x18\x01 \x01(\x0b\x32\x14.voltha.HealthStatus\x12\x13\n\x0b\x66oo_counter\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\x12%\n\x08\x63hildren\x18\x04 \x03(\x0b\x32\x13.voltha.MoreComplex\x12 \n\x07\x61\x64\x64ress\x18\x05 \x01(\x0b\x32\x0f.voltha.Address\"\x10\n\x02ID\x12\n\n\x02id\x18\x01 \x01(\t\"\x18\n\nSubscriber\x12\n\n\x02id\x18\x01 \x01(\t\"0\n\x0bSubscribers\x12!\n\x05items\x18\x01 \x03(\x0b\x32\x12.voltha.Subscriber\"U\n\rLogicalDevice\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\"6\n\x0eLogicalDevices\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.voltha.LogicalDevice\"4\n\x0cLogicalPorts\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.openflow_13.ofp_port\"\x97\x01\n\x14LogicalDeviceDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\x12\x39\n\x0fswitch_features\x18\x04 \x01(\x0b\x32 .openflow_13.ofp_switch_features\"J\n\x0f\x46lowTableUpdate\x12\n\n\x02id\x18\x01 \x01(\t\x12+\n\x08\x66low_mod\x18\x02 \x01(\x0b\x32\x19.openflow_13.ofp_flow_mod\"3\n\x05\x46lows\x12*\n\x05items\x18\x01 \x03(\x0b\x32\x1b.openflow_13.ofp_flow_stats2^\n\rHealthService\x12M\n\x0fGetHealthStatus\x12\x13.voltha.NullMessage\x1a\x14.voltha.HealthStatus\"\x0f\x82\xd3\xe4\x93\x02\t\x12\x07/health2\xff\x06\n\x12VolthaLogicalLayer\x12Y\n\x12ListLogicalDevices\x12\x13.voltha.NullMessage\x1a\x16.voltha.LogicalDevices\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/local/devices\x12Y\n\x10GetLogicalDevice\x12\n.voltha.ID\x1a\x1c.voltha.LogicalDeviceDetails\"\x1b\x82\xd3\xe4\x93\x02\x15\x12\x13/local/devices/{id}\x12]\n\x16ListLogicalDevicePorts\x12\n.voltha.ID\x1a\x14.voltha.LogicalPorts\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/ports\x12\x65\n\x0fUpdateFlowTable\x12\x17.voltha.FlowTableUpdate\x1a\x13.voltha.NullMessage\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/local/devices/{id}/flows:\x01*\x12O\n\x0fListDeviceFlows\x12\n.voltha.ID\x1a\r.voltha.Flows\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/flows\x12S\n\x10\x43reateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x17\x82\xd3\xe4\x93\x02\x11\"\x0c/subscribers:\x01*\x12J\n\rGetSubscriber\x12\n.voltha.ID\x1a\x12.voltha.Subscriber\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/subscribers/{id}\x12X\n\x10UpdateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x1c\x82\xd3\xe4\x93\x02\x16\x32\x11/subscribers/{id}:\x01*\x12N\n\x10\x44\x65leteSubscriber\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x19\x82\xd3\xe4\x93\x02\x13*\x11/subscribers/{id}\x12Q\n\x0fListSubscribers\x12\x13.voltha.NullMessage\x1a\x13.voltha.Subscribers\"\x14\x82\xd3\xe4\x93\x02\x0e\x12\x0c/subscribers2\x85\x03\n\x0e\x45xampleService\x12H\n\rCreateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x15\x82\xd3\xe4\x93\x02\x0f\"\n/addresses:\x01*\x12\x42\n\nGetAddress\x12\n.voltha.ID\x1a\x0f.voltha.Address\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/addresses/{id}\x12M\n\rUpdateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x1a\x82\xd3\xe4\x93\x02\x14\x32\x0f/addresses/{id}:\x01*\x12I\n\rDeleteAddress\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x17\x82\xd3\xe4\x93\x02\x11*\x0f/addresses/{id}\x12K\n\rListAddresses\x12\x13.voltha.NullMessage\x1a\x11.voltha.Addresses\"\x12\x82\xd3\xe4\x93\x02\x0c\x12\n/addresses2\xfd\x04\n\x08OpenFlow\x12<\n\x08GetHello\x12\x16.openflow_13.ofp_hello\x1a\x16.openflow_13.ofp_hello\"\x00\x12\x41\n\x0b\x45\x63hoRequest\x12\x17.openflow_13.ofp_header\x1a\x17.openflow_13.ofp_header\"\x00\x12\x63\n\x13\x45xperimenterRequest\x12$.openflow_13.ofp_experimenter_header\x1a$.openflow_13.ofp_experimenter_header\"\x00\x12P\n\x11GetSwitchFeatures\x12\x17.openflow_13.ofp_header\x1a .openflow_13.ofp_switch_features\"\x00\x12L\n\x0fGetSwitchConfig\x12\x17.openflow_13.ofp_header\x1a\x1e.openflow_13.ofp_switch_config\"\x00\x12\x46\n\tSetConfig\x12\x1e.openflow_13.ofp_switch_config\x1a\x17.openflow_13.ofp_header\"\x00\x12R\n\x17ReceivePacketInMessages\x12\x17.openflow_13.ofp_header\x1a\x1a.openflow_13.ofp_packet_in\"\x00\x30\x01\x12O\n\x15SendPacketOutMessages\x12\x1b.openflow_13.ofp_packet_out\x1a\x17.openflow_13.ofp_header\"\x00\x42<\n\x13org.opencord.volthaB\x0cVolthaProtos\xaa\x02\x16Opencord.Voltha.Volthab\x06proto3')
+  serialized_pb=_b('\n\x0cvoltha.proto\x12\x06voltha\x1a\x1cgoogle/api/annotations.proto\x1a\x11openflow_13.proto\"\r\n\x0bNullMessage\"v\n\x0cHealthStatus\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .voltha.HealthStatus.HealthState\"5\n\x0bHealthState\x12\x0b\n\x07HEALTHY\x10\x00\x12\x0e\n\nOVERLOADED\x10\x01\x12\t\n\x05\x44YING\x10\x02\"q\n\x07\x41\x64\x64ress\x12\n\n\x02id\x18\x07 \x01(\t\x12\x0e\n\x06street\x18\x01 \x01(\t\x12\x0f\n\x07street2\x18\x02 \x01(\t\x12\x0f\n\x07street3\x18\x03 \x01(\t\x12\x0c\n\x04\x63ity\x18\x04 \x01(\t\x12\r\n\x05state\x18\x05 \x01(\t\x12\x0b\n\x03zip\x18\x06 \x01(\r\"/\n\tAddresses\x12\"\n\taddresses\x18\x01 \x03(\x0b\x32\x0f.voltha.Address\"\x9f\x01\n\x0bMoreComplex\x12$\n\x06health\x18\x01 \x01(\x0b\x32\x14.voltha.HealthStatus\x12\x13\n\x0b\x66oo_counter\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\x12%\n\x08\x63hildren\x18\x04 \x03(\x0b\x32\x13.voltha.MoreComplex\x12 \n\x07\x61\x64\x64ress\x18\x05 \x01(\x0b\x32\x0f.voltha.Address\"\x10\n\x02ID\x12\n\n\x02id\x18\x01 \x01(\t\"\x18\n\nSubscriber\x12\n\n\x02id\x18\x01 \x01(\t\"0\n\x0bSubscribers\x12!\n\x05items\x18\x01 \x03(\x0b\x32\x12.voltha.Subscriber\"U\n\rLogicalDevice\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\"6\n\x0eLogicalDevices\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.voltha.LogicalDevice\"4\n\x0cLogicalPorts\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.openflow_13.ofp_port\"\x97\x01\n\x14LogicalDeviceDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x61tapath_id\x18\x02 \x01(\x04\x12#\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x15.openflow_13.ofp_desc\x12\x39\n\x0fswitch_features\x18\x04 \x01(\x0b\x32 .openflow_13.ofp_switch_features\"J\n\x0f\x46lowTableUpdate\x12\n\n\x02id\x18\x01 \x01(\t\x12+\n\x08\x66low_mod\x18\x02 \x01(\x0b\x32\x19.openflow_13.ofp_flow_mod\"M\n\x10GroupTableUpdate\x12\n\n\x02id\x18\x01 \x01(\t\x12-\n\tgroup_mod\x18\x02 \x01(\x0b\x32\x1a.openflow_13.ofp_group_mod\"3\n\x05\x46lows\x12*\n\x05items\x18\x01 \x03(\x0b\x32\x1b.openflow_13.ofp_flow_stats\"9\n\nFlowGroups\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.openflow_13.ofp_group_entry2^\n\rHealthService\x12M\n\x0fGetHealthStatus\x12\x13.voltha.NullMessage\x1a\x14.voltha.HealthStatus\"\x0f\x82\xd3\xe4\x93\x02\t\x12\x07/health2\xc5\x08\n\x12VolthaLogicalLayer\x12Y\n\x12ListLogicalDevices\x12\x13.voltha.NullMessage\x1a\x16.voltha.LogicalDevices\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/local/devices\x12Y\n\x10GetLogicalDevice\x12\n.voltha.ID\x1a\x1c.voltha.LogicalDeviceDetails\"\x1b\x82\xd3\xe4\x93\x02\x15\x12\x13/local/devices/{id}\x12]\n\x16ListLogicalDevicePorts\x12\n.voltha.ID\x1a\x14.voltha.LogicalPorts\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/ports\x12\x65\n\x0fUpdateFlowTable\x12\x17.voltha.FlowTableUpdate\x1a\x13.voltha.NullMessage\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/local/devices/{id}/flows:\x01*\x12O\n\x0fListDeviceFlows\x12\n.voltha.ID\x1a\r.voltha.Flows\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/local/devices/{id}/flows\x12h\n\x10UpdateGroupTable\x12\x18.voltha.GroupTableUpdate\x1a\x13.voltha.NullMessage\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/local/devices/{id}/groups:\x01*\x12Z\n\x14ListDeviceFlowGroups\x12\n.voltha.ID\x1a\x12.voltha.FlowGroups\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/local/devices/{id}/groups\x12S\n\x10\x43reateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x17\x82\xd3\xe4\x93\x02\x11\"\x0c/subscribers:\x01*\x12J\n\rGetSubscriber\x12\n.voltha.ID\x1a\x12.voltha.Subscriber\"\x19\x82\xd3\xe4\x93\x02\x13\x12\x11/subscribers/{id}\x12X\n\x10UpdateSubscriber\x12\x12.voltha.Subscriber\x1a\x12.voltha.Subscriber\"\x1c\x82\xd3\xe4\x93\x02\x16\x32\x11/subscribers/{id}:\x01*\x12N\n\x10\x44\x65leteSubscriber\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x19\x82\xd3\xe4\x93\x02\x13*\x11/subscribers/{id}\x12Q\n\x0fListSubscribers\x12\x13.voltha.NullMessage\x1a\x13.voltha.Subscribers\"\x14\x82\xd3\xe4\x93\x02\x0e\x12\x0c/subscribers2\x85\x03\n\x0e\x45xampleService\x12H\n\rCreateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x15\x82\xd3\xe4\x93\x02\x0f\"\n/addresses:\x01*\x12\x42\n\nGetAddress\x12\n.voltha.ID\x1a\x0f.voltha.Address\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/addresses/{id}\x12M\n\rUpdateAddress\x12\x0f.voltha.Address\x1a\x0f.voltha.Address\"\x1a\x82\xd3\xe4\x93\x02\x14\x32\x0f/addresses/{id}:\x01*\x12I\n\rDeleteAddress\x12\n.voltha.ID\x1a\x13.voltha.NullMessage\"\x17\x82\xd3\xe4\x93\x02\x11*\x0f/addresses/{id}\x12K\n\rListAddresses\x12\x13.voltha.NullMessage\x1a\x11.voltha.Addresses\"\x12\x82\xd3\xe4\x93\x02\x0c\x12\n/addresses2\xfd\x04\n\x08OpenFlow\x12<\n\x08GetHello\x12\x16.openflow_13.ofp_hello\x1a\x16.openflow_13.ofp_hello\"\x00\x12\x41\n\x0b\x45\x63hoRequest\x12\x17.openflow_13.ofp_header\x1a\x17.openflow_13.ofp_header\"\x00\x12\x63\n\x13\x45xperimenterRequest\x12$.openflow_13.ofp_experimenter_header\x1a$.openflow_13.ofp_experimenter_header\"\x00\x12P\n\x11GetSwitchFeatures\x12\x17.openflow_13.ofp_header\x1a .openflow_13.ofp_switch_features\"\x00\x12L\n\x0fGetSwitchConfig\x12\x17.openflow_13.ofp_header\x1a\x1e.openflow_13.ofp_switch_config\"\x00\x12\x46\n\tSetConfig\x12\x1e.openflow_13.ofp_switch_config\x1a\x17.openflow_13.ofp_header\"\x00\x12R\n\x17ReceivePacketInMessages\x12\x17.openflow_13.ofp_header\x1a\x1a.openflow_13.ofp_packet_in\"\x00\x30\x01\x12O\n\x15SendPacketOutMessages\x12\x1b.openflow_13.ofp_packet_out\x1a\x17.openflow_13.ofp_header\"\x00\x42<\n\x13org.opencord.volthaB\x0cVolthaProtos\xaa\x02\x16Opencord.Voltha.Volthab\x06proto3')
   ,
   dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,openflow__13__pb2.DESCRIPTOR,])
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
@@ -564,6 +564,44 @@
 )
 
 
+_GROUPTABLEUPDATE = _descriptor.Descriptor(
+  name='GroupTableUpdate',
+  full_name='voltha.GroupTableUpdate',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='voltha.GroupTableUpdate.id', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+    _descriptor.FieldDescriptor(
+      name='group_mod', full_name='voltha.GroupTableUpdate.group_mod', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1055,
+  serialized_end=1132,
+)
+
+
 _FLOWS = _descriptor.Descriptor(
   name='Flows',
   full_name='voltha.Flows',
@@ -590,8 +628,39 @@
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1055,
-  serialized_end=1106,
+  serialized_start=1134,
+  serialized_end=1185,
+)
+
+
+_FLOWGROUPS = _descriptor.Descriptor(
+  name='FlowGroups',
+  full_name='voltha.FlowGroups',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='items', full_name='voltha.FlowGroups.items', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1187,
+  serialized_end=1244,
 )
 
 _HEALTHSTATUS.fields_by_name['state'].enum_type = _HEALTHSTATUS_HEALTHSTATE
@@ -607,7 +676,9 @@
 _LOGICALDEVICEDETAILS.fields_by_name['desc'].message_type = openflow__13__pb2._OFP_DESC
 _LOGICALDEVICEDETAILS.fields_by_name['switch_features'].message_type = openflow__13__pb2._OFP_SWITCH_FEATURES
 _FLOWTABLEUPDATE.fields_by_name['flow_mod'].message_type = openflow__13__pb2._OFP_FLOW_MOD
+_GROUPTABLEUPDATE.fields_by_name['group_mod'].message_type = openflow__13__pb2._OFP_GROUP_MOD
 _FLOWS.fields_by_name['items'].message_type = openflow__13__pb2._OFP_FLOW_STATS
+_FLOWGROUPS.fields_by_name['items'].message_type = openflow__13__pb2._OFP_GROUP_ENTRY
 DESCRIPTOR.message_types_by_name['NullMessage'] = _NULLMESSAGE
 DESCRIPTOR.message_types_by_name['HealthStatus'] = _HEALTHSTATUS
 DESCRIPTOR.message_types_by_name['Address'] = _ADDRESS
@@ -621,7 +692,9 @@
 DESCRIPTOR.message_types_by_name['LogicalPorts'] = _LOGICALPORTS
 DESCRIPTOR.message_types_by_name['LogicalDeviceDetails'] = _LOGICALDEVICEDETAILS
 DESCRIPTOR.message_types_by_name['FlowTableUpdate'] = _FLOWTABLEUPDATE
+DESCRIPTOR.message_types_by_name['GroupTableUpdate'] = _GROUPTABLEUPDATE
 DESCRIPTOR.message_types_by_name['Flows'] = _FLOWS
+DESCRIPTOR.message_types_by_name['FlowGroups'] = _FLOWGROUPS
 
 NullMessage = _reflection.GeneratedProtocolMessageType('NullMessage', (_message.Message,), dict(
   DESCRIPTOR = _NULLMESSAGE,
@@ -714,6 +787,13 @@
   ))
 _sym_db.RegisterMessage(FlowTableUpdate)
 
+GroupTableUpdate = _reflection.GeneratedProtocolMessageType('GroupTableUpdate', (_message.Message,), dict(
+  DESCRIPTOR = _GROUPTABLEUPDATE,
+  __module__ = 'voltha_pb2'
+  # @@protoc_insertion_point(class_scope:voltha.GroupTableUpdate)
+  ))
+_sym_db.RegisterMessage(GroupTableUpdate)
+
 Flows = _reflection.GeneratedProtocolMessageType('Flows', (_message.Message,), dict(
   DESCRIPTOR = _FLOWS,
   __module__ = 'voltha_pb2'
@@ -721,6 +801,13 @@
   ))
 _sym_db.RegisterMessage(Flows)
 
+FlowGroups = _reflection.GeneratedProtocolMessageType('FlowGroups', (_message.Message,), dict(
+  DESCRIPTOR = _FLOWGROUPS,
+  __module__ = 'voltha_pb2'
+  # @@protoc_insertion_point(class_scope:voltha.FlowGroups)
+  ))
+_sym_db.RegisterMessage(FlowGroups)
+
 
 DESCRIPTOR.has_options = True
 DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023org.opencord.volthaB\014VolthaProtos\252\002\026Opencord.Voltha.Voltha'))
@@ -853,6 +940,16 @@
         request_serializer=ID.SerializeToString,
         response_deserializer=Flows.FromString,
         )
+    self.UpdateGroupTable = channel.unary_unary(
+        '/voltha.VolthaLogicalLayer/UpdateGroupTable',
+        request_serializer=GroupTableUpdate.SerializeToString,
+        response_deserializer=NullMessage.FromString,
+        )
+    self.ListDeviceFlowGroups = channel.unary_unary(
+        '/voltha.VolthaLogicalLayer/ListDeviceFlowGroups',
+        request_serializer=ID.SerializeToString,
+        response_deserializer=FlowGroups.FromString,
+        )
     self.CreateSubscriber = channel.unary_unary(
         '/voltha.VolthaLogicalLayer/CreateSubscriber',
         request_serializer=Subscriber.SerializeToString,
@@ -917,6 +1014,20 @@
     context.set_details('Method not implemented!')
     raise NotImplementedError('Method not implemented!')
 
+  def UpdateGroupTable(self, request, context):
+    """Update group tabel for device
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
+  def ListDeviceFlowGroups(self, request, context):
+    """List all flow groups of a logical device
+    """
+    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+    context.set_details('Method not implemented!')
+    raise NotImplementedError('Method not implemented!')
+
   def CreateSubscriber(self, request, context):
     """Create a subscriber record
     """
@@ -980,6 +1091,16 @@
           request_deserializer=ID.FromString,
           response_serializer=Flows.SerializeToString,
       ),
+      'UpdateGroupTable': grpc.unary_unary_rpc_method_handler(
+          servicer.UpdateGroupTable,
+          request_deserializer=GroupTableUpdate.FromString,
+          response_serializer=NullMessage.SerializeToString,
+      ),
+      'ListDeviceFlowGroups': grpc.unary_unary_rpc_method_handler(
+          servicer.ListDeviceFlowGroups,
+          request_deserializer=ID.FromString,
+          response_serializer=FlowGroups.SerializeToString,
+      ),
       'CreateSubscriber': grpc.unary_unary_rpc_method_handler(
           servicer.CreateSubscriber,
           request_deserializer=Subscriber.FromString,
@@ -1032,6 +1153,14 @@
     """List all flows of a logical device
     """
     context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def UpdateGroupTable(self, request, context):
+    """Update group tabel for device
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+  def ListDeviceFlowGroups(self, request, context):
+    """List all flow groups of a logical device
+    """
+    context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
   def CreateSubscriber(self, request, context):
     """Create a subscriber record
     """
@@ -1080,6 +1209,16 @@
     """
     raise NotImplementedError()
   ListDeviceFlows.future = None
+  def UpdateGroupTable(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """Update group tabel for device
+    """
+    raise NotImplementedError()
+  UpdateGroupTable.future = None
+  def ListDeviceFlowGroups(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+    """List all flow groups of a logical device
+    """
+    raise NotImplementedError()
+  ListDeviceFlowGroups.future = None
   def CreateSubscriber(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
     """Create a subscriber record
     """
@@ -1113,11 +1252,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): ID.FromString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): ID.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): FlowTableUpdate.FromString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): GroupTableUpdate.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.FromString,
   }
   response_serializers = {
@@ -1125,11 +1266,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): LogicalDeviceDetails.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): Subscriber.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): FlowGroups.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): Flows.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): LogicalPorts.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): LogicalDevices.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): Subscribers.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): NullMessage.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.SerializeToString,
   }
   method_implementations = {
@@ -1137,11 +1280,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): face_utilities.unary_unary_inline(servicer.DeleteSubscriber),
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): face_utilities.unary_unary_inline(servicer.GetLogicalDevice),
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): face_utilities.unary_unary_inline(servicer.GetSubscriber),
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): face_utilities.unary_unary_inline(servicer.ListDeviceFlowGroups),
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): face_utilities.unary_unary_inline(servicer.ListDeviceFlows),
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): face_utilities.unary_unary_inline(servicer.ListLogicalDevicePorts),
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): face_utilities.unary_unary_inline(servicer.ListLogicalDevices),
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): face_utilities.unary_unary_inline(servicer.ListSubscribers),
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): face_utilities.unary_unary_inline(servicer.UpdateFlowTable),
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): face_utilities.unary_unary_inline(servicer.UpdateGroupTable),
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): face_utilities.unary_unary_inline(servicer.UpdateSubscriber),
   }
   server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
@@ -1154,11 +1299,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): ID.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): ID.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): NullMessage.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): FlowTableUpdate.SerializeToString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): GroupTableUpdate.SerializeToString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.SerializeToString,
   }
   response_deserializers = {
@@ -1166,11 +1313,13 @@
     ('voltha.VolthaLogicalLayer', 'DeleteSubscriber'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'GetLogicalDevice'): LogicalDeviceDetails.FromString,
     ('voltha.VolthaLogicalLayer', 'GetSubscriber'): Subscriber.FromString,
+    ('voltha.VolthaLogicalLayer', 'ListDeviceFlowGroups'): FlowGroups.FromString,
     ('voltha.VolthaLogicalLayer', 'ListDeviceFlows'): Flows.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): LogicalPorts.FromString,
     ('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): LogicalDevices.FromString,
     ('voltha.VolthaLogicalLayer', 'ListSubscribers'): Subscribers.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): NullMessage.FromString,
+    ('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): NullMessage.FromString,
     ('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.FromString,
   }
   cardinalities = {
@@ -1178,11 +1327,13 @@
     'DeleteSubscriber': cardinality.Cardinality.UNARY_UNARY,
     'GetLogicalDevice': cardinality.Cardinality.UNARY_UNARY,
     'GetSubscriber': cardinality.Cardinality.UNARY_UNARY,
+    'ListDeviceFlowGroups': cardinality.Cardinality.UNARY_UNARY,
     'ListDeviceFlows': cardinality.Cardinality.UNARY_UNARY,
     'ListLogicalDevicePorts': cardinality.Cardinality.UNARY_UNARY,
     'ListLogicalDevices': cardinality.Cardinality.UNARY_UNARY,
     'ListSubscribers': cardinality.Cardinality.UNARY_UNARY,
     'UpdateFlowTable': cardinality.Cardinality.UNARY_UNARY,
+    'UpdateGroupTable': cardinality.Cardinality.UNARY_UNARY,
     'UpdateSubscriber': cardinality.Cardinality.UNARY_UNARY,
   }
   stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)