Packet in/out streaming from ofagent to core
Getting ready for packet streaming
Change-Id: I8d70d4d6ffbb23c0d7ab20582e9afac49f9f6461
Support flow_delete_strict
Change-Id: I5dab5f74a7daddcddfeb8691a3940347cb2fc11b
Packet out halfway plumbed
Change-Id: I799d3f59d42ac9de0563b5e6b9a0064fd895a6f6
refactored async_twisted
Change-Id: I68f8d12ce6fdbb70cee398f581669529b567d94d
Packet in pipeline and ofagent refactoring
Change-Id: I31ecbf7d52fdd18c3884b8d1870f673488f808df
diff --git a/ofagent/agent.py b/ofagent/agent.py
index 5196e6d..ab1b868 100644
--- a/ofagent/agent.py
+++ b/ofagent/agent.py
@@ -32,10 +32,16 @@
class Agent(protocol.ClientFactory):
- def __init__(self, controller_endpoint, datapath_id, rpc_stub,
+ def __init__(self,
+ controller_endpoint,
+ datapath_id,
+ device_id,
+ rpc_stub,
conn_retry_interval=1):
+
self.controller_endpoint = controller_endpoint
self.datapath_id = datapath_id
+ self.device_id = device_id
self.rpc_stub = rpc_stub
self.retry_interval = conn_retry_interval
@@ -46,6 +52,9 @@
self.connected = False
self.exiting = False
+ def get_device_id(self):
+ return self.device_id
+
def run(self):
if self.running:
return
@@ -94,7 +103,7 @@
def protocol(self):
cxn = OpenFlowConnection(self) # Low level message handler
self.proto_handler = OpenFlowProtocolHandler(
- self.datapath_id, self, cxn, self.rpc_stub)
+ self.datapath_id, self.device_id, self, cxn, self.rpc_stub)
return cxn
def clientConnectionFailed(self, connector, reason):
@@ -104,6 +113,9 @@
log.error('client-connection-lost',
reason=reason, connector=connector)
+ def forward_packet_in(self, ofp_packet_in):
+ self.proto_handler.forward_packet_in(ofp_packet_in)
+
if __name__ == '__main__':
"""Run this to test the agent for N concurrent sessions:
diff --git a/ofagent/connection_mgr.py b/ofagent/connection_mgr.py
index 9a17121..13fb6de 100644
--- a/ofagent/connection_mgr.py
+++ b/ofagent/connection_mgr.py
@@ -28,60 +28,53 @@
from agent import Agent
+log = get_logger()
+
+
class ConnectionManager(object):
- log = get_logger()
-
def __init__(self, consul_endpoint, voltha_endpoint, controller_endpoint,
- voltha_retry_interval=0.5, devices_refresh_interval=60):
+ voltha_retry_interval=0.5, devices_refresh_interval=5):
- self.log.info('Initializing connection manager')
+ log.info('init-connection-manager')
self.controller_endpoint = controller_endpoint
self.consul_endpoint = consul_endpoint
self.voltha_endpoint = voltha_endpoint
self.channel = None
- self.connected_devices = None
- self.unprocessed_devices = None
- self.agent_map = {}
- self.grpc_client = None
- self.device_id_map = None
+ self.grpc_client = None # single, shared gRPC client to Voltha
+
+ self.agent_map = {} # datapath_id -> Agent()
+ self.device_id_to_datapath_id_map = {}
self.voltha_retry_interval = voltha_retry_interval
self.devices_refresh_interval = devices_refresh_interval
self.running = False
- @inlineCallbacks
def run(self):
+
if self.running:
return
- self.log.info('Running connection manager')
+ log.info('run-connection-manager')
self.running = True
# Get voltha grpc endpoint
self.channel = self.get_grpc_channel_with_voltha()
- # Connect to voltha using grpc and fetch the list of logical devices
- yield self.get_list_of_logical_devices_from_voltha()
-
# Create shared gRPC API object
- self.grpc_client = GrpcClient(self.channel, self.device_id_map)
+ self.grpc_client = GrpcClient(self, self.channel)
- # Instantiate an OpenFlow agent for each logical device
- self.refresh_openflow_agent_connections()
+ # Start monitoring logical devices and manage agents accordingly
+ reactor.callLater(0, self.monitor_logical_devices)
- reactor.addSystemEventTrigger('before', 'shutdown', self.shutdown)
- reactor.callLater(0, self.monitor_connections)
-
- returnValue(self)
-
+ return self
def shutdown(self):
# clean up all controller connections
- for key, value in enumerate(self.agent_map):
+ for _, value in enumerate(self.agent_map):
value.stop()
self.running = False
# TODO: close grpc connection to voltha
@@ -92,11 +85,11 @@
try:
ip_port_endpoint = get_endpoint_from_consul(
self.consul_endpoint, endpoint[1:])
- self.log.info(
+ log.info(
'Found endpoint {} service at {}'.format(endpoint,
ip_port_endpoint))
except Exception as e:
- self.log.error('Failure to locate {} service from '
+ log.error('Failure to locate {} service from '
'consul {}:'.format(endpoint, repr(e)))
return
if ip_port_endpoint:
@@ -104,128 +97,108 @@
return host, int(port)
def get_grpc_channel_with_voltha(self):
- self.log.info('Resolving voltha endpoint {} from consul'.format(
+ log.info('Resolving voltha endpoint {} from consul'.format(
self.voltha_endpoint))
host, port = self.resolve_endpoint(self.voltha_endpoint)
assert host is not None
assert port is not None
# Create grpc channel to Voltha
channel = grpc.insecure_channel('{}:{}'.format(host, port))
- self.log.info('Acquired a grpc channel to voltha')
+ log.info('Acquired a grpc channel to voltha')
return channel
@inlineCallbacks
def get_list_of_logical_devices_from_voltha(self):
+
while True:
- self.log.info('Retrieve devices from voltha')
+ log.info('Retrieve devices from voltha')
try:
stub = voltha_pb2.VolthaLogicalLayerStub(self.channel)
devices = stub.ListLogicalDevices(
voltha_pb2.NullMessage()).items
for device in devices:
- self.log.info("Devices {} -> {}".format(device.id,
+ log.info("Devices {} -> {}".format(device.id,
device.datapath_id))
- self.unprocessed_devices = devices
- self.device_id_map = dict(
- (device.datapath_id, device.id) for device in devices)
- return
+ returnValue(devices)
+
except Exception as e:
- self.log.error('Failure to retrieve devices from '
+ log.error('Failure to retrieve devices from '
'voltha: {}'.format(repr(e)))
- self.log.info('reconnect', after_delay=self.voltha_retry_interval)
+ log.info('reconnect', after_delay=self.voltha_retry_interval)
yield asleep(self.voltha_retry_interval)
- def refresh_openflow_agent_connections(self):
- # Compare the new device list again the previous
- # For any new device, an agent connection will be created. For
- # existing device that are no longer part of the list then that
- # agent connection will be stopped
+ def refresh_agent_connections(self, devices):
+ """
+ Based on the new device list, update the following state in the class:
+ * agent_map
+ * datapath_map
+ * device_id_map
+ :param devices: full device list freshly received from Voltha
+ :return: None
+ """
- # If the ofagent has no previous devices then just add them
- if self.connected_devices is None:
- datapath_ids_to_add = [device.datapath_id for device in self.unprocessed_devices]
- else:
- previous_datapath_ids = [device.datapath_id for device in self.connected_devices]
- current_datapath_ids = [device.datapath_id for device in self.unprocessed_devices]
- datapath_ids_to_add = [d for d in current_datapath_ids if
- d not in previous_datapath_ids]
- datapath_ids_to_remove = [d for d in previous_datapath_ids if
- d not in current_datapath_ids]
+ # Use datapath ids for deciding what's new and what's obsolete
+ desired_datapath_ids = set(d.datapath_id for d in devices)
+ current_datapath_ids = set(self.agent_map.iterkeys())
- # Check for no change
- if not datapath_ids_to_add and not datapath_ids_to_remove:
- self.log.info('No new devices found. No OF agent update '
- 'required')
- return
+ # if identical, nothing to do
+ if desired_datapath_ids == current_datapath_ids:
+ return
- self.log.info('Updating OF agent connections.')
- print self.agent_map
+ # ... otherwise calculate differences
+ to_add = desired_datapath_ids.difference(current_datapath_ids)
+ to_del = current_datapath_ids.difference(desired_datapath_ids)
- # Stop previous agents
- for datapath_id in datapath_ids_to_remove:
- if self.agent_map.has_key(datapath_id):
- self.agent_map[datapath_id].stop()
- del self.agent_map[datapath_id]
- self.log.info('Removed OF agent with datapath id {'
- '}'.format(datapath_id))
+ # remove what we don't need
+ for datapath_id in to_del:
+ self.delete_agent(datapath_id)
- # Add the new agents
- for datapath_id in datapath_ids_to_add:
- self.agent_map[datapath_id] = Agent(self.controller_endpoint,
- datapath_id,
- self.grpc_client)
- self.agent_map[datapath_id].run()
- self.log.info('Launched OF agent with datapath id {}'.format(
- datapath_id))
+ # start new agents as needed
+ for device in devices:
+ if device.datapath_id in to_add:
+ self.create_agent(device)
- # replace the old device list with the new ones
- self.connected_devices = self.unprocessed_devices
- self.unprocessed_devices = None
+ log.debug('updated-agent-list', count=len(self.agent_map))
+ log.debug('updated-device-id-to-datapath-id-map',
+ map=str(self.device_id_to_datapath_id_map))
+
+ def create_agent(self, device):
+ datapath_id = device.datapath_id
+ device_id = device.id
+ agent = Agent(self.controller_endpoint, datapath_id,
+ device_id, self.grpc_client)
+ agent.run()
+ self.agent_map[datapath_id] = agent
+ self.device_id_to_datapath_id_map[device_id] = datapath_id
+
+ def delete_agent(self, datapath_id):
+ agent = self.agent_map[datapath_id]
+ device_id = agent.get_device_id()
+ agent.stop()
+ del self.agent_map[datapath_id]
+ del self.device_id_to_datapath_id_map[device_id]
@inlineCallbacks
- def monitor_connections(self):
+ def monitor_logical_devices(self):
while True:
- # sleep first
+ # TODO @khen We should switch to a polling mode based on a
+ # streaming gRPC method
+
+ # get current list from Voltha
+ devices = yield self.get_list_of_logical_devices_from_voltha()
+
+ # update agent list and mapping tables as needed
+ self.refresh_agent_connections(devices)
+
+ # wait before next poll
yield asleep(self.devices_refresh_interval)
- self.log.info('Monitor connections')
- yield self.get_list_of_logical_devices_from_voltha()
- self.refresh_openflow_agent_connections()
+ log.info('Monitor connections')
-# class Model(object):
-# def __init__(self, id, path):
-# self.id=id
-# self.datapath_id=path,
-
-
-# if __name__ == '__main__':
-# conn = ConnectionManager("10.0.2.15:3181", "localhost:50555",
-# "10.100.198.150:6633")
-#
-# conn.connected_devices = None
-# model1 = Model('12311', 'wdadsa1')
-# model2 = Model('12312', 'wdadsa2')
-# model3 = Model('12313', 'wdadsa3')
-# model4 = Model('12314', 'wdadsa4')
-#
-# conn.unprocessed_devices = [model1, model2, model3]
-#
-# conn.refresh_openflow_agent_connections()
-#
-#
-# # val = [device.datapath_id for device in conn.connected_devices]
-# # print val
-# #
-# # for (id,n) in enumerate(val):
-# # print n
-#
-#
-# conn.unprocessed_devices = [model1, model2, model3]
-#
-# conn.refresh_openflow_agent_connections()
-#
-# conn.unprocessed_devices = [model1, model2, model4]
-#
-# conn.refresh_openflow_agent_connections()
\ No newline at end of file
+ def forward_packet_in(self, device_id, ofp_packet_in):
+ datapath_id = self.device_id_to_datapath_id_map.get(device_id, None)
+ if datapath_id:
+ agent = self.agent_map[datapath_id]
+ agent.forward_packet_in(ofp_packet_in)
diff --git a/ofagent/converter.py b/ofagent/converter.py
index a7ec653..769627b 100644
--- a/ofagent/converter.py
+++ b/ofagent/converter.py
@@ -55,24 +55,24 @@
kw = pb2dict(pb)
return of13.common.port_desc(**kw)
+def make_loxi_match(match):
+ assert match['type'] == pb2.OFPMT_OXM
+ loxi_match_fields = []
+ for oxm_field in match['oxm_fields']:
+ assert oxm_field['oxm_class'] == pb2.OFPXMC_OPENFLOW_BASIC
+ ofb_field = oxm_field['ofb_field']
+ field_type = ofb_field.get('type', 0)
+ if field_type == pb2.OFPXMT_OFB_ETH_TYPE:
+ loxi_match_fields.append(
+ of13.oxm.eth_type(value=ofb_field['eth_type']))
+ else:
+ raise NotImplementedError(
+ 'OXM match field for type %s' % field_type)
+ return of13.match_v3(oxm_list=loxi_match_fields)
+
def ofp_flow_stats_to_loxi_flow_stats(pb):
kw = pb2dict(pb)
- def make_loxi_match(match):
- assert match['type'] == pb2.OFPMT_OXM
- loxi_match_fields = []
- for oxm_field in match['oxm_fields']:
- assert oxm_field['oxm_class'] == pb2.OFPXMC_OPENFLOW_BASIC
- ofb_field = oxm_field['ofb_field']
- field_type = ofb_field.get('type', 0)
- if field_type == pb2.OFPXMT_OFB_ETH_TYPE:
- loxi_match_fields.append(
- of13.oxm.eth_type(value=ofb_field['eth_type']))
- else:
- raise NotImplementedError(
- 'OXM match field for type %s' % field_type)
- return of13.match_v3(oxm_list=loxi_match_fields)
-
def make_loxi_action(a):
type = a.get('type', 0)
if type == pb2.OFPAT_OUTPUT:
@@ -95,10 +95,17 @@
kw['instructions'] = [make_loxi_instruction(i) for i in kw['instructions']]
return of13.flow_stats_entry(**kw)
+def ofp_packet_in_to_loxi_packet_in(pb):
+ kw = pb2dict(pb)
+ if 'match' in kw:
+ kw['match'] = make_loxi_match(kw['match'])
+ return of13.message.packet_in(**kw)
+
to_loxi_converters = {
pb2.ofp_port: ofp_port_to_loxi_port_desc,
- pb2.ofp_flow_stats: ofp_flow_stats_to_loxi_flow_stats
+ pb2.ofp_flow_stats: ofp_flow_stats_to_loxi_flow_stats,
+ pb2.ofp_packet_in: ofp_packet_in_to_loxi_packet_in,
}
@@ -127,6 +134,14 @@
buckets=[to_grpc(b) for b in lo.buckets])
+def loxi_packet_out_to_ofp_packet_out(lo):
+ return pb2.ofp_packet_out(
+ buffer_id=lo.buffer_id,
+ in_port=lo.in_port,
+ actions=[to_grpc(a) for a in lo.actions],
+ data=lo.data)
+
+
def loxi_match_v3_to_ofp_match(lo):
return pb2.ofp_match(
type=pb2.OFPMT_OXM,
@@ -138,8 +153,8 @@
weight=lo.weight,
watch_port=lo.watch_port,
watch_group=lo.watch_group,
- actions=[to_grpc(a) for a in lo.actions]
- )
+ actions=[to_grpc(a) for a in lo.actions])
+
def loxi_oxm_eth_type_to_ofp_oxm(lo):
return pb2.ofp_oxm_field(
@@ -241,6 +256,7 @@
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.message.packet_out: loxi_packet_out_to_ofp_packet_out,
of13.common.match_v3: loxi_match_v3_to_ofp_match,
of13.common.bucket: loxi_bucket_to_ofp_bucket,
diff --git a/ofagent/grpc_client.py b/ofagent/grpc_client.py
index 69bf940..efbc038 100644
--- a/ofagent/grpc_client.py
+++ b/ofagent/grpc_client.py
@@ -17,39 +17,86 @@
"""
The gRPC client layer for the OpenFlow agent
"""
+from Queue import Queue
+
+from structlog import get_logger
+from twisted.internet import reactor
from twisted.internet import threads
-from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.internet.defer import inlineCallbacks, returnValue, DeferredQueue
from protos.voltha_pb2 import ID, VolthaLogicalLayerStub, FlowTableUpdate, \
- GroupTableUpdate
+ GroupTableUpdate, NullMessage, PacketOut
+
+
+log = get_logger()
class GrpcClient(object):
- def __init__(self, channel, device_id_map):
+ def __init__(self, connection_manager, channel):
+
+ self.connection_manager = connection_manager
self.channel = channel
- self.device_id_map = device_id_map
self.logical_stub = VolthaLogicalLayerStub(channel)
+ self.packet_out_queue = Queue() # queue to send out PacketOut msgs
+ self.packet_in_queue = DeferredQueue() # queue to receive PacketIn
+ self.start_packet_out_stream()
+ self.start_packet_in_stream()
+ reactor.callLater(0, self.packet_in_forwarder_loop)
+
+ def start_packet_out_stream(self):
+
+ def packet_generator():
+ while 1:
+ packet = self.packet_out_queue.get(block=True)
+ yield packet
+
+ def stream_packets_out():
+ generator = packet_generator()
+ self.logical_stub.StreamPacketsOut(generator)
+
+ reactor.callInThread(stream_packets_out)
+
+ def start_packet_in_stream(self):
+
+ def receive_packet_in_stream():
+ for packet_in in self.logical_stub.ReceivePacketsIn(NullMessage()):
+ reactor.callFromThread(self.packet_in_queue.put, packet_in)
+ log.debug('enqued-packet-in',
+ packet_in=packet_in,
+ queue_len=len(self.packet_in_queue.pending))
+
+ reactor.callInThread(receive_packet_in_stream)
+
@inlineCallbacks
- def get_port_list(self, datapath_id):
- device_id = self.device_id_map[datapath_id]
+ def packet_in_forwarder_loop(self):
+ while True:
+ packet_in = yield self.packet_in_queue.get()
+ device_id = packet_in.id
+ ofp_packet_in = packet_in.packet_in
+ self.connection_manager.forward_packet_in(device_id, ofp_packet_in)
+
+ def send_packet_out(self, device_id, packet_out):
+ packet_out = PacketOut(id=device_id, packet_out=packet_out)
+ self.packet_out_queue.put(packet_out)
+
+ @inlineCallbacks
+ def get_port_list(self, device_id):
req = ID(id=device_id)
res = yield threads.deferToThread(
self.logical_stub.ListLogicalDevicePorts, req)
returnValue(res.items)
@inlineCallbacks
- def get_device_info(self, datapath_id):
- device_id = self.device_id_map[datapath_id]
+ def get_device_info(self, device_id):
req = ID(id=device_id)
res = yield threads.deferToThread(
self.logical_stub.GetLogicalDevice, req)
returnValue(res)
@inlineCallbacks
- def update_flow_table(self, datapath_id, flow_mod):
- device_id = self.device_id_map[datapath_id]
+ def update_flow_table(self, device_id, flow_mod):
req = FlowTableUpdate(
id=device_id,
flow_mod=flow_mod
@@ -59,8 +106,7 @@
returnValue(res)
@inlineCallbacks
- def update_group_table(self, datapath_id, group_mod):
- device_id = self.device_id_map[datapath_id]
+ def update_group_table(self, device_id, group_mod):
req = GroupTableUpdate(
id=device_id,
group_mod=group_mod
@@ -70,16 +116,14 @@
returnValue(res)
@inlineCallbacks
- def list_flows(self, datapath_id):
- device_id = self.device_id_map[datapath_id]
+ def list_flows(self, device_id):
req = ID(id=device_id)
res = yield threads.deferToThread(
self.logical_stub.ListDeviceFlows, req)
returnValue(res.items)
@inlineCallbacks
- def list_groups(self, datapath_id):
- device_id = self.device_id_map[datapath_id]
+ def list_groups(self, device_id):
req = ID(id=device_id)
res = yield threads.deferToThread(
self.logical_stub.ListDeviceFlowGroups, req)
diff --git a/ofagent/main.py b/ofagent/main.py
index 7d0cdf7..5b21692 100755
--- a/ofagent/main.py
+++ b/ofagent/main.py
@@ -215,9 +215,8 @@
def startup_components(self):
self.log.info('starting-internal-components')
args = self.args
- self.connection_manager = yield ConnectionManager(args.consul,
- args.grpc_endpoint,
- args.controller).run()
+ self.connection_manager = yield ConnectionManager(
+ args.consul, args.grpc_endpoint, args.controller).run()
self.log.info('started-internal-services')
@inlineCallbacks
diff --git a/ofagent/of_protocol_handler.py b/ofagent/of_protocol_handler.py
index a74f205..e109782 100644
--- a/ofagent/of_protocol_handler.py
+++ b/ofagent/of_protocol_handler.py
@@ -27,7 +27,7 @@
class OpenFlowProtocolHandler(object):
- def __init__(self, datapath_id, agent, cxn, rpc):
+ def __init__(self, datapath_id, device_id, agent, cxn, rpc):
"""
The upper half of the OpenFlow protocol, focusing on message
exchanges.
@@ -38,6 +38,7 @@
are made as result of processing incoming OpenFlow request messages.
"""
self.datapath_id = datapath_id
+ self.device_id = device_id
self.agent = agent
self.cxn = cxn
self.rpc = rpc
@@ -71,7 +72,7 @@
@inlineCallbacks
def handle_feature_request(self, req):
- device_info = yield self.rpc.get_device_info(self.datapath_id)
+ device_info = yield self.rpc.get_device_info(self.device_id)
kw = pb2dict(device_info.switch_features)
self.cxn.send(ofp.message.features_reply(
xid=req.xid,
@@ -95,7 +96,7 @@
@inlineCallbacks
def handle_flow_mod_request(self, req):
- yield self.rpc.update_flow_table(self.datapath_id, to_grpc(req))
+ yield self.rpc.update_flow_table(self.device_id, to_grpc(req))
def handle_get_async_request(self, req):
raise NotImplementedError()
@@ -108,7 +109,7 @@
@inlineCallbacks
def handle_group_mod_request(self, req):
- yield self.rpc.update_group_table(self.datapath_id, to_grpc(req))
+ yield self.rpc.update_group_table(self.device_id, to_grpc(req))
def handle_meter_mod_request(self, req):
raise NotImplementedError()
@@ -121,8 +122,7 @@
xid=req.xid, role=req.role, generation_id=req.generation_id))
def handle_packet_out_request(self, req):
- # TODO send packet out
- pass
+ self.rpc.send_packet_out(self.device_id, to_grpc(req))
def handle_set_config_request(self, req):
# TODO ignore for now
@@ -145,7 +145,7 @@
@inlineCallbacks
def handle_device_description_request(self, req):
- device_info = yield self.rpc.get_device_info(self.datapath_id)
+ device_info = yield self.rpc.get_device_info(self.device_id)
kw = pb2dict(device_info.desc)
self.cxn.send(ofp.message.desc_stats_reply(xid=req.xid, **kw))
@@ -154,13 +154,13 @@
@inlineCallbacks
def handle_flow_stats_request(self, req):
- flow_stats = yield self.rpc.list_flows(self.datapath_id)
+ flow_stats = yield self.rpc.list_flows(self.device_id)
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 = yield self.rpc.list_groups(self.datapath_id)
+ group_stats = yield self.rpc.list_groups(self.device_id)
self.cxn.send(ofp.message.group_stats_reply(
xid=req.xid, entries=[to_loxi(g) for g in group_stats]))
@@ -190,7 +190,7 @@
@inlineCallbacks
def handle_port_desc_request(self, req):
- port_list = yield self.rpc.get_port_list(self.datapath_id)
+ port_list = yield self.rpc.get_port_list(self.device_id)
self.cxn.send(ofp.message.port_desc_stats_reply(
xid=req.xid,
#flags=None,
@@ -246,3 +246,5 @@
ofp.OFPT_TABLE_MOD: handle_table_mod_request,
}
+ def forward_packet_in(self, ofp_packet_in):
+ self.cxn.send(to_loxi(ofp_packet_in))
diff --git a/ofagent/protos/openflow_13_pb2.py b/ofagent/protos/openflow_13_pb2.py
index 6372e50..025e5c9 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\x01 \x03(\x0b\x32\".openflow_13.ofp_hello_elem_header\"9\n\x11ofp_switch_config\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12\x15\n\rmiss_send_len\x18\x02 \x01(\r\"1\n\rofp_table_mod\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x0e\n\x06\x63onfig\x18\x02 \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\x01 \x01(\x04\x12\x11\n\tn_buffers\x18\x02 \x01(\r\x12\x10\n\x08n_tables\x18\x03 \x01(\r\x12\x14\n\x0c\x61uxiliary_id\x18\x04 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x05 \x01(\r\"d\n\x0fofp_port_status\x12,\n\x06reason\x18\x01 \x01(\x0e\x32\x1c.openflow_13.ofp_port_reason\x12#\n\x04\x64\x65sc\x18\x02 \x01(\x0b\x32\x15.openflow_13.ofp_port\"a\n\x0cofp_port_mod\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x0f\n\x07hw_addr\x18\x02 \x03(\r\x12\x0e\n\x06\x63onfig\x18\x03 \x01(\r\x12\x0c\n\x04mask\x18\x04 \x01(\r\x12\x11\n\tadvertise\x18\x05 \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\x01 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x02 \x01(\x04\x12\x10\n\x08table_id\x18\x03 \x01(\r\x12\x32\n\x07\x63ommand\x18\x04 \x01(\x0e\x32!.openflow_13.ofp_flow_mod_command\x12\x14\n\x0cidle_timeout\x18\x05 \x01(\r\x12\x14\n\x0chard_timeout\x18\x06 \x01(\r\x12\x10\n\x08priority\x18\x07 \x01(\r\x12\x11\n\tbuffer_id\x18\x08 \x01(\r\x12\x10\n\x08out_port\x18\t \x01(\r\x12\x11\n\tout_group\x18\n \x01(\r\x12\r\n\x05\x66lags\x18\x0b \x01(\r\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\"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\x01 \x01(\x0e\x32\".openflow_13.ofp_group_mod_command\x12)\n\x04type\x18\x02 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x03 \x01(\r\x12(\n\x07\x62uckets\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"\x81\x01\n\x0eofp_packet_out\x12\x11\n\tbuffer_id\x18\x01 \x01(\r\x12\x0f\n\x07in_port\x18\x02 \x01(\r\x12\x13\n\x0b\x61\x63tions_len\x18\x03 \x01(\r\x12(\n\x07\x61\x63tions\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_action\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"\xbf\x01\n\rofp_packet_in\x12\x11\n\tbuffer_id\x18\x01 \x01(\r\x12\x11\n\ttotal_len\x18\x02 \x01(\r\x12\x31\n\x06reason\x18\x03 \x01(\x0e\x32!.openflow_13.ofp_packet_in_reason\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\"\xa6\x02\n\x10ofp_flow_removed\x12\x0e\n\x06\x63ookie\x18\x01 \x01(\x04\x12\x10\n\x08priority\x18\x02 \x01(\r\x12\x34\n\x06reason\x18\x03 \x01(\x0e\x32$.openflow_13.ofp_flow_removed_reason\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x07 \x01(\r\x12\x14\n\x0chard_timeout\x18\x08 \x01(\r\x12\x14\n\x0cpacket_count\x18\t \x01(\x04\x12\x12\n\nbyte_count\x18\n \x01(\x04\x12%\n\x05match\x18y \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\"\x98\x01\n\rofp_meter_mod\x12\x33\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\".openflow_13.ofp_meter_mod_command\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x10\n\x08meter_id\x18\x03 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x04 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"9\n\rofp_error_msg\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0c\n\x04\x63ode\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"`\n\x1aofp_error_experimenter_msg\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"c\n\x15ofp_multipart_request\x12-\n\x04type\x18\x01 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x0c\n\x04\x62ody\x18\x03 \x01(\x0c\"a\n\x13ofp_multipart_reply\x12-\n\x04type\x18\x01 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x0c\n\x04\x62ody\x18\x03 \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\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \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\x01 \x01(\r\"Y\n\x1aofp_queue_get_config_reply\x12\x0c\n\x04port\x18\x01 \x01(\r\x12-\n\x06queues\x18\x02 \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\x01 \x01(\x0e\x32 .openflow_13.ofp_controller_role\x12\x15\n\rgeneration_id\x18\x02 \x01(\x04\"_\n\x10ofp_async_config\x12\x16\n\x0epacket_in_mask\x18\x01 \x03(\r\x12\x18\n\x10port_status_mask\x18\x02 \x03(\r\x12\x19\n\x11\x66low_removed_mask\x18\x03 \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')
+ 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\x01 \x03(\x0b\x32\".openflow_13.ofp_hello_elem_header\"9\n\x11ofp_switch_config\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12\x15\n\rmiss_send_len\x18\x02 \x01(\r\"1\n\rofp_table_mod\x12\x10\n\x08table_id\x18\x01 \x01(\r\x12\x0e\n\x06\x63onfig\x18\x02 \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\x01 \x01(\x04\x12\x11\n\tn_buffers\x18\x02 \x01(\r\x12\x10\n\x08n_tables\x18\x03 \x01(\r\x12\x14\n\x0c\x61uxiliary_id\x18\x04 \x01(\r\x12\x14\n\x0c\x63\x61pabilities\x18\x05 \x01(\r\"d\n\x0fofp_port_status\x12,\n\x06reason\x18\x01 \x01(\x0e\x32\x1c.openflow_13.ofp_port_reason\x12#\n\x04\x64\x65sc\x18\x02 \x01(\x0b\x32\x15.openflow_13.ofp_port\"a\n\x0cofp_port_mod\x12\x0f\n\x07port_no\x18\x01 \x01(\r\x12\x0f\n\x07hw_addr\x18\x02 \x03(\r\x12\x0e\n\x06\x63onfig\x18\x03 \x01(\r\x12\x0c\n\x04mask\x18\x04 \x01(\r\x12\x11\n\tadvertise\x18\x05 \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\x01 \x01(\x04\x12\x13\n\x0b\x63ookie_mask\x18\x02 \x01(\x04\x12\x10\n\x08table_id\x18\x03 \x01(\r\x12\x32\n\x07\x63ommand\x18\x04 \x01(\x0e\x32!.openflow_13.ofp_flow_mod_command\x12\x14\n\x0cidle_timeout\x18\x05 \x01(\r\x12\x14\n\x0chard_timeout\x18\x06 \x01(\r\x12\x10\n\x08priority\x18\x07 \x01(\r\x12\x11\n\tbuffer_id\x18\x08 \x01(\r\x12\x10\n\x08out_port\x18\t \x01(\r\x12\x11\n\tout_group\x18\n \x01(\r\x12\r\n\x05\x66lags\x18\x0b \x01(\r\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\"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\x01 \x01(\x0e\x32\".openflow_13.ofp_group_mod_command\x12)\n\x04type\x18\x02 \x01(\x0e\x32\x1b.openflow_13.ofp_group_type\x12\x10\n\x08group_id\x18\x03 \x01(\r\x12(\n\x07\x62uckets\x18\x04 \x03(\x0b\x32\x17.openflow_13.ofp_bucket\"l\n\x0eofp_packet_out\x12\x11\n\tbuffer_id\x18\x01 \x01(\r\x12\x0f\n\x07in_port\x18\x02 \x01(\r\x12(\n\x07\x61\x63tions\x18\x03 \x03(\x0b\x32\x17.openflow_13.ofp_action\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"\xbf\x01\n\rofp_packet_in\x12\x11\n\tbuffer_id\x18\x01 \x01(\r\x12\x11\n\ttotal_len\x18\x02 \x01(\r\x12\x31\n\x06reason\x18\x03 \x01(\x0e\x32!.openflow_13.ofp_packet_in_reason\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x0e\n\x06\x63ookie\x18\x05 \x01(\x04\x12%\n\x05match\x18\x06 \x01(\x0b\x32\x16.openflow_13.ofp_match\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\"\xa6\x02\n\x10ofp_flow_removed\x12\x0e\n\x06\x63ookie\x18\x01 \x01(\x04\x12\x10\n\x08priority\x18\x02 \x01(\r\x12\x34\n\x06reason\x18\x03 \x01(\x0e\x32$.openflow_13.ofp_flow_removed_reason\x12\x10\n\x08table_id\x18\x04 \x01(\r\x12\x14\n\x0c\x64uration_sec\x18\x05 \x01(\r\x12\x15\n\rduration_nsec\x18\x06 \x01(\r\x12\x14\n\x0cidle_timeout\x18\x07 \x01(\r\x12\x14\n\x0chard_timeout\x18\x08 \x01(\r\x12\x14\n\x0cpacket_count\x18\t \x01(\x04\x12\x12\n\nbyte_count\x18\n \x01(\x04\x12%\n\x05match\x18y \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\"\x98\x01\n\rofp_meter_mod\x12\x33\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\".openflow_13.ofp_meter_mod_command\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x10\n\x08meter_id\x18\x03 \x01(\r\x12\x31\n\x05\x62\x61nds\x18\x04 \x03(\x0b\x32\".openflow_13.ofp_meter_band_header\"9\n\rofp_error_msg\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x0c\n\x04\x63ode\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"`\n\x1aofp_error_experimenter_msg\x12\x0c\n\x04type\x18\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x14\n\x0c\x65xperimenter\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"c\n\x15ofp_multipart_request\x12-\n\x04type\x18\x01 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x0c\n\x04\x62ody\x18\x03 \x01(\x0c\"a\n\x13ofp_multipart_reply\x12-\n\x04type\x18\x01 \x01(\x0e\x32\x1f.openflow_13.ofp_multipart_type\x12\r\n\x05\x66lags\x18\x02 \x01(\r\x12\x0c\n\x04\x62ody\x18\x03 \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\x01 \x01(\r\x12\x10\n\x08\x65xp_type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \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\x01 \x01(\r\"Y\n\x1aofp_queue_get_config_reply\x12\x0c\n\x04port\x18\x01 \x01(\r\x12-\n\x06queues\x18\x02 \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\x01 \x01(\x0e\x32 .openflow_13.ofp_controller_role\x12\x15\n\rgeneration_id\x18\x02 \x01(\x04\"_\n\x10ofp_async_config\x12\x16\n\x0epacket_in_mask\x18\x01 \x03(\r\x12\x18\n\x10port_status_mask\x18\x02 \x03(\r\x12\x19\n\x11\x66low_removed_mask\x18\x03 \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')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
@@ -73,8 +73,8 @@
],
containing_type=None,
options=None,
- serialized_start=11193,
- serialized_end=11406,
+ serialized_start=11171,
+ serialized_end=11384,
)
_sym_db.RegisterEnumDescriptor(_OFP_PORT_NO)
@@ -208,8 +208,8 @@
],
containing_type=None,
options=None,
- serialized_start=11409,
- serialized_end=12121,
+ serialized_start=11387,
+ serialized_end=12099,
)
_sym_db.RegisterEnumDescriptor(_OFP_TYPE)
@@ -231,8 +231,8 @@
],
containing_type=None,
options=None,
- serialized_start=12123,
- serialized_end=12190,
+ serialized_start=12101,
+ serialized_end=12168,
)
_sym_db.RegisterEnumDescriptor(_OFP_HELLO_ELEM_TYPE)
@@ -262,8 +262,8 @@
],
containing_type=None,
options=None,
- serialized_start=12192,
- serialized_end=12293,
+ serialized_start=12170,
+ serialized_end=12271,
)
_sym_db.RegisterEnumDescriptor(_OFP_CONFIG_FLAGS)
@@ -285,8 +285,8 @@
],
containing_type=None,
options=None,
- serialized_start=12295,
- serialized_end=12359,
+ serialized_start=12273,
+ serialized_end=12337,
)
_sym_db.RegisterEnumDescriptor(_OFP_TABLE_CONFIG)
@@ -312,8 +312,8 @@
],
containing_type=None,
options=None,
- serialized_start=12361,
- serialized_end=12423,
+ serialized_start=12339,
+ serialized_end=12401,
)
_sym_db.RegisterEnumDescriptor(_OFP_TABLE)
@@ -359,8 +359,8 @@
],
containing_type=None,
options=None,
- serialized_start=12426,
- serialized_end=12613,
+ serialized_start=12404,
+ serialized_end=12591,
)
_sym_db.RegisterEnumDescriptor(_OFP_CAPABILITIES)
@@ -394,8 +394,8 @@
],
containing_type=None,
options=None,
- serialized_start=12615,
- serialized_end=12733,
+ serialized_start=12593,
+ serialized_end=12711,
)
_sym_db.RegisterEnumDescriptor(_OFP_PORT_CONFIG)
@@ -425,8 +425,8 @@
],
containing_type=None,
options=None,
- serialized_start=12735,
- serialized_end=12826,
+ serialized_start=12713,
+ serialized_end=12804,
)
_sym_db.RegisterEnumDescriptor(_OFP_PORT_STATE)
@@ -508,8 +508,8 @@
],
containing_type=None,
options=None,
- serialized_start=12829,
- serialized_end=13178,
+ serialized_start=12807,
+ serialized_end=13156,
)
_sym_db.RegisterEnumDescriptor(_OFP_PORT_FEATURES)
@@ -535,8 +535,8 @@
],
containing_type=None,
options=None,
- serialized_start=13180,
- serialized_end=13248,
+ serialized_start=13158,
+ serialized_end=13226,
)
_sym_db.RegisterEnumDescriptor(_OFP_PORT_REASON)
@@ -558,8 +558,8 @@
],
containing_type=None,
options=None,
- serialized_start=13250,
- serialized_end=13301,
+ serialized_start=13228,
+ serialized_end=13279,
)
_sym_db.RegisterEnumDescriptor(_OFP_MATCH_TYPE)
@@ -589,8 +589,8 @@
],
containing_type=None,
options=None,
- serialized_start=13303,
- serialized_end=13410,
+ serialized_start=13281,
+ serialized_end=13388,
)
_sym_db.RegisterEnumDescriptor(_OFP_OXM_CLASS)
@@ -764,8 +764,8 @@
],
containing_type=None,
options=None,
- serialized_start=13413,
- serialized_end=14453,
+ serialized_start=13391,
+ serialized_end=14431,
)
_sym_db.RegisterEnumDescriptor(_OXM_OFB_FIELD_TYPES)
@@ -787,8 +787,8 @@
],
containing_type=None,
options=None,
- serialized_start=14455,
- serialized_end=14506,
+ serialized_start=14433,
+ serialized_end=14484,
)
_sym_db.RegisterEnumDescriptor(_OFP_VLAN_ID)
@@ -842,8 +842,8 @@
],
containing_type=None,
options=None,
- serialized_start=14509,
- serialized_end=14710,
+ serialized_start=14487,
+ serialized_end=14688,
)
_sym_db.RegisterEnumDescriptor(_OFP_IPV6EXTHDR_FLAGS)
@@ -925,8 +925,8 @@
],
containing_type=None,
options=None,
- serialized_start=14713,
- serialized_end=15093,
+ serialized_start=14691,
+ serialized_end=15071,
)
_sym_db.RegisterEnumDescriptor(_OFP_ACTION_TYPE)
@@ -952,8 +952,8 @@
],
containing_type=None,
options=None,
- serialized_start=15095,
- serialized_end=15181,
+ serialized_start=15073,
+ serialized_end=15159,
)
_sym_db.RegisterEnumDescriptor(_OFP_CONTROLLER_MAX_LEN)
@@ -999,8 +999,8 @@
],
containing_type=None,
options=None,
- serialized_start=15184,
- serialized_end=15391,
+ serialized_start=15162,
+ serialized_end=15369,
)
_sym_db.RegisterEnumDescriptor(_OFP_INSTRUCTION_TYPE)
@@ -1034,8 +1034,8 @@
],
containing_type=None,
options=None,
- serialized_start=15393,
- serialized_end=15516,
+ serialized_start=15371,
+ serialized_end=15494,
)
_sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_COMMAND)
@@ -1073,8 +1073,8 @@
],
containing_type=None,
options=None,
- serialized_start=15519,
- serialized_end=15682,
+ serialized_start=15497,
+ serialized_end=15660,
)
_sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_FLAGS)
@@ -1104,8 +1104,8 @@
],
containing_type=None,
options=None,
- serialized_start=15684,
- serialized_end=15767,
+ serialized_start=15662,
+ serialized_end=15745,
)
_sym_db.RegisterEnumDescriptor(_OFP_GROUP)
@@ -1131,8 +1131,8 @@
],
containing_type=None,
options=None,
- serialized_start=15769,
- serialized_end=15843,
+ serialized_start=15747,
+ serialized_end=15821,
)
_sym_db.RegisterEnumDescriptor(_OFP_GROUP_MOD_COMMAND)
@@ -1162,8 +1162,8 @@
],
containing_type=None,
options=None,
- serialized_start=15845,
- serialized_end=15928,
+ serialized_start=15823,
+ serialized_end=15906,
)
_sym_db.RegisterEnumDescriptor(_OFP_GROUP_TYPE)
@@ -1189,8 +1189,8 @@
],
containing_type=None,
options=None,
- serialized_start=15930,
- serialized_end=16010,
+ serialized_start=15908,
+ serialized_end=15988,
)
_sym_db.RegisterEnumDescriptor(_OFP_PACKET_IN_REASON)
@@ -1224,8 +1224,8 @@
],
containing_type=None,
options=None,
- serialized_start=16013,
- serialized_end=16152,
+ serialized_start=15991,
+ serialized_end=16130,
)
_sym_db.RegisterEnumDescriptor(_OFP_FLOW_REMOVED_REASON)
@@ -1259,8 +1259,8 @@
],
containing_type=None,
options=None,
- serialized_start=16154,
- serialized_end=16264,
+ serialized_start=16132,
+ serialized_end=16242,
)
_sym_db.RegisterEnumDescriptor(_OFP_METER)
@@ -1290,8 +1290,8 @@
],
containing_type=None,
options=None,
- serialized_start=16266,
- serialized_end=16375,
+ serialized_start=16244,
+ serialized_end=16353,
)
_sym_db.RegisterEnumDescriptor(_OFP_METER_BAND_TYPE)
@@ -1317,8 +1317,8 @@
],
containing_type=None,
options=None,
- serialized_start=16377,
- serialized_end=16451,
+ serialized_start=16355,
+ serialized_end=16429,
)
_sym_db.RegisterEnumDescriptor(_OFP_METER_MOD_COMMAND)
@@ -1352,8 +1352,8 @@
],
containing_type=None,
options=None,
- serialized_start=16453,
- serialized_end=16556,
+ serialized_start=16431,
+ serialized_end=16534,
)
_sym_db.RegisterEnumDescriptor(_OFP_METER_FLAGS)
@@ -1427,8 +1427,8 @@
],
containing_type=None,
options=None,
- serialized_start=16559,
- serialized_end=16979,
+ serialized_start=16537,
+ serialized_end=16957,
)
_sym_db.RegisterEnumDescriptor(_OFP_ERROR_TYPE)
@@ -1450,8 +1450,8 @@
],
containing_type=None,
options=None,
- serialized_start=16981,
- serialized_end=17047,
+ serialized_start=16959,
+ serialized_end=17025,
)
_sym_db.RegisterEnumDescriptor(_OFP_HELLO_FAILED_CODE)
@@ -1521,8 +1521,8 @@
],
containing_type=None,
options=None,
- serialized_start=17050,
- serialized_end=17415,
+ serialized_start=17028,
+ serialized_end=17393,
)
_sym_db.RegisterEnumDescriptor(_OFP_BAD_REQUEST_CODE)
@@ -1600,8 +1600,8 @@
],
containing_type=None,
options=None,
- serialized_start=17418,
- serialized_end=17830,
+ serialized_start=17396,
+ serialized_end=17808,
)
_sym_db.RegisterEnumDescriptor(_OFP_BAD_ACTION_CODE)
@@ -1651,8 +1651,8 @@
],
containing_type=None,
options=None,
- serialized_start=17833,
- serialized_end=18083,
+ serialized_start=17811,
+ serialized_end=18061,
)
_sym_db.RegisterEnumDescriptor(_OFP_BAD_INSTRUCTION_CODE)
@@ -1714,8 +1714,8 @@
],
containing_type=None,
options=None,
- serialized_start=18086,
- serialized_end=18379,
+ serialized_start=18064,
+ serialized_end=18357,
)
_sym_db.RegisterEnumDescriptor(_OFP_BAD_MATCH_CODE)
@@ -1761,8 +1761,8 @@
],
containing_type=None,
options=None,
- serialized_start=18382,
- serialized_end=18592,
+ serialized_start=18360,
+ serialized_end=18570,
)
_sym_db.RegisterEnumDescriptor(_OFP_FLOW_MOD_FAILED_CODE)
@@ -1836,8 +1836,8 @@
],
containing_type=None,
options=None,
- serialized_start=18595,
- serialized_end=19012,
+ serialized_start=18573,
+ serialized_end=18990,
)
_sym_db.RegisterEnumDescriptor(_OFP_GROUP_MOD_FAILED_CODE)
@@ -1871,8 +1871,8 @@
],
containing_type=None,
options=None,
- serialized_start=19015,
- serialized_end=19158,
+ serialized_start=18993,
+ serialized_end=19136,
)
_sym_db.RegisterEnumDescriptor(_OFP_PORT_MOD_FAILED_CODE)
@@ -1898,8 +1898,8 @@
],
containing_type=None,
options=None,
- serialized_start=19160,
- serialized_end=19253,
+ serialized_start=19138,
+ serialized_end=19231,
)
_sym_db.RegisterEnumDescriptor(_OFP_TABLE_MOD_FAILED_CODE)
@@ -1925,8 +1925,8 @@
],
containing_type=None,
options=None,
- serialized_start=19255,
- serialized_end=19345,
+ serialized_start=19233,
+ serialized_end=19323,
)
_sym_db.RegisterEnumDescriptor(_OFP_QUEUE_OP_FAILED_CODE)
@@ -1952,8 +1952,8 @@
],
containing_type=None,
options=None,
- serialized_start=19347,
- serialized_end=19441,
+ serialized_start=19325,
+ serialized_end=19419,
)
_sym_db.RegisterEnumDescriptor(_OFP_SWITCH_CONFIG_FAILED_CODE)
@@ -1979,8 +1979,8 @@
],
containing_type=None,
options=None,
- serialized_start=19443,
- serialized_end=19533,
+ serialized_start=19421,
+ serialized_end=19511,
)
_sym_db.RegisterEnumDescriptor(_OFP_ROLE_REQUEST_FAILED_CODE)
@@ -2042,8 +2042,8 @@
],
containing_type=None,
options=None,
- serialized_start=19536,
- serialized_end=19860,
+ serialized_start=19514,
+ serialized_end=19838,
)
_sym_db.RegisterEnumDescriptor(_OFP_METER_MOD_FAILED_CODE)
@@ -2081,8 +2081,8 @@
],
containing_type=None,
options=None,
- serialized_start=19863,
- serialized_end=20032,
+ serialized_start=19841,
+ serialized_end=20010,
)
_sym_db.RegisterEnumDescriptor(_OFP_TABLE_FEATURES_FAILED_CODE)
@@ -2156,8 +2156,8 @@
],
containing_type=None,
options=None,
- serialized_start=20035,
- serialized_end=20369,
+ serialized_start=20013,
+ serialized_end=20347,
)
_sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_TYPE)
@@ -2179,8 +2179,8 @@
],
containing_type=None,
options=None,
- serialized_start=20371,
- serialized_end=20445,
+ serialized_start=20349,
+ serialized_end=20423,
)
_sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_REQUEST_FLAGS)
@@ -2202,8 +2202,8 @@
],
containing_type=None,
options=None,
- serialized_start=20447,
- serialized_end=20523,
+ serialized_start=20425,
+ serialized_end=20501,
)
_sym_db.RegisterEnumDescriptor(_OFP_MULTIPART_REPLY_FLAGS)
@@ -2281,8 +2281,8 @@
],
containing_type=None,
options=None,
- serialized_start=20526,
- serialized_end=21010,
+ serialized_start=20504,
+ serialized_end=20988,
)
_sym_db.RegisterEnumDescriptor(_OFP_TABLE_FEATURE_PROP_TYPE)
@@ -2316,8 +2316,8 @@
],
containing_type=None,
options=None,
- serialized_start=21013,
- serialized_end=21160,
+ serialized_start=20991,
+ serialized_end=21138,
)
_sym_db.RegisterEnumDescriptor(_OFP_GROUP_CAPABILITIES)
@@ -2347,8 +2347,8 @@
],
containing_type=None,
options=None,
- serialized_start=21162,
- serialized_end=21269,
+ serialized_start=21140,
+ serialized_end=21247,
)
_sym_db.RegisterEnumDescriptor(_OFP_QUEUE_PROPERTIES)
@@ -2378,8 +2378,8 @@
],
containing_type=None,
options=None,
- serialized_start=21271,
- serialized_end=21384,
+ serialized_start=21249,
+ serialized_end=21362,
)
_sym_db.RegisterEnumDescriptor(_OFP_CONTROLLER_ROLE)
@@ -4640,22 +4640,15 @@
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
- name='actions_len', full_name='openflow_13.ofp_packet_out.actions_len', 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='actions', full_name='openflow_13.ofp_packet_out.actions', index=3,
- number=4, type=11, cpp_type=10, label=3,
+ name='actions', full_name='openflow_13.ofp_packet_out.actions', 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,
options=None),
_descriptor.FieldDescriptor(
- name='data', full_name='openflow_13.ofp_packet_out.data', index=4,
- number=5, type=12, cpp_type=9, label=1,
+ name='data', full_name='openflow_13.ofp_packet_out.data', index=3,
+ number=4, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
@@ -4672,8 +4665,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=4845,
- serialized_end=4974,
+ serialized_start=4844,
+ serialized_end=4952,
)
@@ -4745,8 +4738,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=4977,
- serialized_end=5168,
+ serialized_start=4955,
+ serialized_end=5146,
)
@@ -4846,8 +4839,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=5171,
- serialized_end=5465,
+ serialized_start=5149,
+ serialized_end=5443,
)
@@ -4898,8 +4891,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=5467,
- serialized_end=5585,
+ serialized_start=5445,
+ serialized_end=5563,
)
@@ -4950,8 +4943,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=5587,
- serialized_end=5669,
+ serialized_start=5565,
+ serialized_end=5647,
)
@@ -5009,8 +5002,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=5671,
- serialized_end=5780,
+ serialized_start=5649,
+ serialized_end=5758,
)
@@ -5068,8 +5061,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=5783,
- serialized_end=5929,
+ serialized_start=5761,
+ serialized_end=5907,
)
@@ -5120,8 +5113,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=5932,
- serialized_end=6084,
+ serialized_start=5910,
+ serialized_end=6062,
)
@@ -5165,8 +5158,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=6086,
- serialized_end=6143,
+ serialized_start=6064,
+ serialized_end=6121,
)
@@ -5217,8 +5210,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=6145,
- serialized_end=6241,
+ serialized_start=6123,
+ serialized_end=6219,
)
@@ -5262,8 +5255,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=6243,
- serialized_end=6342,
+ serialized_start=6221,
+ serialized_end=6320,
)
@@ -5307,8 +5300,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=6344,
- serialized_end=6441,
+ serialized_start=6322,
+ serialized_end=6419,
)
@@ -5366,8 +5359,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=6443,
- serialized_end=6542,
+ serialized_start=6421,
+ serialized_end=6520,
)
@@ -5432,8 +5425,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=6545,
- serialized_end=6700,
+ serialized_start=6523,
+ serialized_end=6678,
)
@@ -5540,8 +5533,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=6703,
- serialized_end=7008,
+ serialized_start=6681,
+ serialized_end=6986,
)
@@ -5606,8 +5599,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=7011,
- serialized_end=7171,
+ serialized_start=6989,
+ serialized_end=7149,
)
@@ -5651,8 +5644,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=7173,
- serialized_end=7262,
+ serialized_start=7151,
+ serialized_end=7240,
)
@@ -5720,8 +5713,8 @@
name='value', full_name='openflow_13.ofp_table_feature_property.value',
index=0, containing_type=None, fields=[]),
],
- serialized_start=7265,
- serialized_end=7698,
+ serialized_start=7243,
+ serialized_end=7676,
)
@@ -5751,8 +5744,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=7700,
- serialized_end=7789,
+ serialized_start=7678,
+ serialized_end=7767,
)
@@ -5782,8 +5775,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=7791,
- serialized_end=7851,
+ serialized_start=7769,
+ serialized_end=7829,
)
@@ -5813,8 +5806,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=7853,
- serialized_end=7927,
+ serialized_start=7831,
+ serialized_end=7905,
)
@@ -5844,8 +5837,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=7929,
- serialized_end=7974,
+ serialized_start=7907,
+ serialized_end=7952,
)
@@ -5889,8 +5882,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=7976,
- serialized_end=8080,
+ serialized_start=7954,
+ serialized_end=8058,
)
@@ -5962,8 +5955,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=8083,
- serialized_end=8281,
+ serialized_start=8061,
+ serialized_end=8259,
)
@@ -6014,8 +6007,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=8283,
- serialized_end=8385,
+ serialized_start=8261,
+ serialized_end=8363,
)
@@ -6045,8 +6038,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=8387,
- serialized_end=8428,
+ serialized_start=8365,
+ serialized_end=8406,
)
@@ -6174,8 +6167,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=8431,
- serialized_end=8746,
+ serialized_start=8409,
+ serialized_end=8724,
)
@@ -6205,8 +6198,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=8748,
- serialized_end=8791,
+ serialized_start=8726,
+ serialized_end=8769,
)
@@ -6243,8 +6236,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=8793,
- serialized_end=8855,
+ serialized_start=8771,
+ serialized_end=8833,
)
@@ -6316,8 +6309,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=8858,
- serialized_end=9054,
+ serialized_start=8836,
+ serialized_end=9032,
)
@@ -6361,8 +6354,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9056,
- serialized_end=9175,
+ serialized_start=9034,
+ serialized_end=9153,
)
@@ -6399,8 +6392,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9177,
- serialized_end=9282,
+ serialized_start=9155,
+ serialized_end=9260,
)
@@ -6451,8 +6444,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9284,
- serialized_end=9378,
+ serialized_start=9262,
+ serialized_end=9356,
)
@@ -6482,8 +6475,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9380,
- serialized_end=9427,
+ serialized_start=9358,
+ serialized_end=9405,
)
@@ -6520,8 +6513,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9429,
- serialized_end=9503,
+ serialized_start=9407,
+ serialized_end=9481,
)
@@ -6593,8 +6586,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9506,
- serialized_end=9709,
+ serialized_start=9484,
+ serialized_end=9687,
)
@@ -6638,8 +6631,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9711,
- serialized_end=9813,
+ serialized_start=9689,
+ serialized_end=9791,
)
@@ -6697,8 +6690,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9815,
- serialized_end=9934,
+ serialized_start=9793,
+ serialized_end=9912,
)
@@ -6742,8 +6735,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=9936,
- serialized_end=10025,
+ serialized_start=9914,
+ serialized_end=10003,
)
@@ -6787,8 +6780,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10027,
- serialized_end=10106,
+ serialized_start=10005,
+ serialized_end=10084,
)
@@ -6825,8 +6818,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10108,
- serialized_end=10162,
+ serialized_start=10086,
+ serialized_end=10140,
)
@@ -6863,8 +6856,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10164,
- serialized_end=10260,
+ serialized_start=10142,
+ serialized_end=10238,
)
@@ -6901,8 +6894,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10262,
- serialized_end=10358,
+ serialized_start=10240,
+ serialized_end=10336,
)
@@ -6946,8 +6939,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10360,
- serialized_end=10482,
+ serialized_start=10338,
+ serialized_end=10460,
)
@@ -6991,8 +6984,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10484,
- serialized_end=10590,
+ serialized_start=10462,
+ serialized_end=10568,
)
@@ -7022,8 +7015,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10592,
- serialized_end=10636,
+ serialized_start=10570,
+ serialized_end=10614,
)
@@ -7060,8 +7053,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10638,
- serialized_end=10727,
+ serialized_start=10616,
+ serialized_end=10705,
)
@@ -7098,8 +7091,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10729,
- serialized_end=10783,
+ serialized_start=10707,
+ serialized_end=10761,
)
@@ -7136,8 +7129,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10785,
- serialized_end=10845,
+ serialized_start=10763,
+ serialized_end=10823,
)
@@ -7209,8 +7202,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=10848,
- serialized_end=11002,
+ serialized_start=10826,
+ serialized_end=10980,
)
@@ -7247,8 +7240,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=11004,
- serialized_end=11093,
+ serialized_start=10982,
+ serialized_end=11071,
)
@@ -7292,8 +7285,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=11095,
- serialized_end=11190,
+ serialized_start=11073,
+ serialized_end=11168,
)
_OFP_HEADER.fields_by_name['type'].enum_type = _OFP_TYPE
@@ -8324,372 +8317,4 @@
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 27d1fa0..3135e84 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\"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')
+ 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_entry\"E\n\x08PacketIn\x12\n\n\x02id\x18\x01 \x01(\t\x12-\n\tpacket_in\x18\x02 \x01(\x0b\x32\x1a.openflow_13.ofp_packet_in\"H\n\tPacketOut\x12\n\n\x02id\x18\x01 \x01(\t\x12/\n\npacket_out\x18\x02 \x01(\x0b\x32\x1b.openflow_13.ofp_packet_out2^\n\rHealthService\x12M\n\x0fGetHealthStatus\x12\x13.voltha.NullMessage\x1a\x14.voltha.HealthStatus\"\x0f\x82\xd3\xe4\x93\x02\t\x12\x07/health2\xc4\t\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\x12>\n\x10StreamPacketsOut\x12\x11.voltha.PacketOut\x1a\x13.voltha.NullMessage\"\x00(\x01\x12=\n\x10ReceivePacketsIn\x12\x13.voltha.NullMessage\x1a\x10.voltha.PacketIn\"\x00\x30\x01\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)
@@ -663,6 +663,82 @@
serialized_end=1244,
)
+
+_PACKETIN = _descriptor.Descriptor(
+ name='PacketIn',
+ full_name='voltha.PacketIn',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='id', full_name='voltha.PacketIn.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='packet_in', full_name='voltha.PacketIn.packet_in', 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=1246,
+ serialized_end=1315,
+)
+
+
+_PACKETOUT = _descriptor.Descriptor(
+ name='PacketOut',
+ full_name='voltha.PacketOut',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='id', full_name='voltha.PacketOut.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='packet_out', full_name='voltha.PacketOut.packet_out', 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=1317,
+ serialized_end=1389,
+)
+
_HEALTHSTATUS.fields_by_name['state'].enum_type = _HEALTHSTATUS_HEALTHSTATE
_HEALTHSTATUS_HEALTHSTATE.containing_type = _HEALTHSTATUS
_ADDRESSES.fields_by_name['addresses'].message_type = _ADDRESS
@@ -679,6 +755,8 @@
_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
+_PACKETIN.fields_by_name['packet_in'].message_type = openflow__13__pb2._OFP_PACKET_IN
+_PACKETOUT.fields_by_name['packet_out'].message_type = openflow__13__pb2._OFP_PACKET_OUT
DESCRIPTOR.message_types_by_name['NullMessage'] = _NULLMESSAGE
DESCRIPTOR.message_types_by_name['HealthStatus'] = _HEALTHSTATUS
DESCRIPTOR.message_types_by_name['Address'] = _ADDRESS
@@ -695,6 +773,8 @@
DESCRIPTOR.message_types_by_name['GroupTableUpdate'] = _GROUPTABLEUPDATE
DESCRIPTOR.message_types_by_name['Flows'] = _FLOWS
DESCRIPTOR.message_types_by_name['FlowGroups'] = _FLOWGROUPS
+DESCRIPTOR.message_types_by_name['PacketIn'] = _PACKETIN
+DESCRIPTOR.message_types_by_name['PacketOut'] = _PACKETOUT
NullMessage = _reflection.GeneratedProtocolMessageType('NullMessage', (_message.Message,), dict(
DESCRIPTOR = _NULLMESSAGE,
@@ -808,6 +888,20 @@
))
_sym_db.RegisterMessage(FlowGroups)
+PacketIn = _reflection.GeneratedProtocolMessageType('PacketIn', (_message.Message,), dict(
+ DESCRIPTOR = _PACKETIN,
+ __module__ = 'voltha_pb2'
+ # @@protoc_insertion_point(class_scope:voltha.PacketIn)
+ ))
+_sym_db.RegisterMessage(PacketIn)
+
+PacketOut = _reflection.GeneratedProtocolMessageType('PacketOut', (_message.Message,), dict(
+ DESCRIPTOR = _PACKETOUT,
+ __module__ = 'voltha_pb2'
+ # @@protoc_insertion_point(class_scope:voltha.PacketOut)
+ ))
+_sym_db.RegisterMessage(PacketOut)
+
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\023org.opencord.volthaB\014VolthaProtos\252\002\026Opencord.Voltha.Voltha'))
@@ -950,6 +1044,16 @@
request_serializer=ID.SerializeToString,
response_deserializer=FlowGroups.FromString,
)
+ self.StreamPacketsOut = channel.stream_unary(
+ '/voltha.VolthaLogicalLayer/StreamPacketsOut',
+ request_serializer=PacketOut.SerializeToString,
+ response_deserializer=NullMessage.FromString,
+ )
+ self.ReceivePacketsIn = channel.unary_stream(
+ '/voltha.VolthaLogicalLayer/ReceivePacketsIn',
+ request_serializer=NullMessage.SerializeToString,
+ response_deserializer=PacketIn.FromString,
+ )
self.CreateSubscriber = channel.unary_unary(
'/voltha.VolthaLogicalLayer/CreateSubscriber',
request_serializer=Subscriber.SerializeToString,
@@ -1028,6 +1132,22 @@
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
+ def StreamPacketsOut(self, request_iterator, context):
+ """Stream control packets to the dataplane
+ This does not have an HTTP representation
+ """
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def ReceivePacketsIn(self, request, context):
+ """Receive control packet stream
+ This does not have an HTTP representation
+ """
+ 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
"""
@@ -1101,6 +1221,16 @@
request_deserializer=ID.FromString,
response_serializer=FlowGroups.SerializeToString,
),
+ 'StreamPacketsOut': grpc.stream_unary_rpc_method_handler(
+ servicer.StreamPacketsOut,
+ request_deserializer=PacketOut.FromString,
+ response_serializer=NullMessage.SerializeToString,
+ ),
+ 'ReceivePacketsIn': grpc.unary_stream_rpc_method_handler(
+ servicer.ReceivePacketsIn,
+ request_deserializer=NullMessage.FromString,
+ response_serializer=PacketIn.SerializeToString,
+ ),
'CreateSubscriber': grpc.unary_unary_rpc_method_handler(
servicer.CreateSubscriber,
request_deserializer=Subscriber.FromString,
@@ -1161,6 +1291,16 @@
"""List all flow groups of a logical device
"""
context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+ def StreamPacketsOut(self, request_iterator, context):
+ """Stream control packets to the dataplane
+ This does not have an HTTP representation
+ """
+ context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
+ def ReceivePacketsIn(self, request, context):
+ """Receive control packet stream
+ This does not have an HTTP representation
+ """
+ context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
def CreateSubscriber(self, request, context):
"""Create a subscriber record
"""
@@ -1219,6 +1359,17 @@
"""
raise NotImplementedError()
ListDeviceFlowGroups.future = None
+ def StreamPacketsOut(self, request_iterator, timeout, metadata=None, with_call=False, protocol_options=None):
+ """Stream control packets to the dataplane
+ This does not have an HTTP representation
+ """
+ raise NotImplementedError()
+ StreamPacketsOut.future = None
+ def ReceivePacketsIn(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
+ """Receive control packet stream
+ This does not have an HTTP representation
+ """
+ raise NotImplementedError()
def CreateSubscriber(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
"""Create a subscriber record
"""
@@ -1257,6 +1408,8 @@
('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): ID.FromString,
('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): NullMessage.FromString,
('voltha.VolthaLogicalLayer', 'ListSubscribers'): NullMessage.FromString,
+ ('voltha.VolthaLogicalLayer', 'ReceivePacketsIn'): NullMessage.FromString,
+ ('voltha.VolthaLogicalLayer', 'StreamPacketsOut'): PacketOut.FromString,
('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): FlowTableUpdate.FromString,
('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): GroupTableUpdate.FromString,
('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.FromString,
@@ -1271,6 +1424,8 @@
('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): LogicalPorts.SerializeToString,
('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): LogicalDevices.SerializeToString,
('voltha.VolthaLogicalLayer', 'ListSubscribers'): Subscribers.SerializeToString,
+ ('voltha.VolthaLogicalLayer', 'ReceivePacketsIn'): PacketIn.SerializeToString,
+ ('voltha.VolthaLogicalLayer', 'StreamPacketsOut'): NullMessage.SerializeToString,
('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): NullMessage.SerializeToString,
('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): NullMessage.SerializeToString,
('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.SerializeToString,
@@ -1285,6 +1440,8 @@
('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', 'ReceivePacketsIn'): face_utilities.unary_stream_inline(servicer.ReceivePacketsIn),
+ ('voltha.VolthaLogicalLayer', 'StreamPacketsOut'): face_utilities.stream_unary_inline(servicer.StreamPacketsOut),
('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),
@@ -1304,6 +1461,8 @@
('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): ID.SerializeToString,
('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): NullMessage.SerializeToString,
('voltha.VolthaLogicalLayer', 'ListSubscribers'): NullMessage.SerializeToString,
+ ('voltha.VolthaLogicalLayer', 'ReceivePacketsIn'): NullMessage.SerializeToString,
+ ('voltha.VolthaLogicalLayer', 'StreamPacketsOut'): PacketOut.SerializeToString,
('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): FlowTableUpdate.SerializeToString,
('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): GroupTableUpdate.SerializeToString,
('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.SerializeToString,
@@ -1318,6 +1477,8 @@
('voltha.VolthaLogicalLayer', 'ListLogicalDevicePorts'): LogicalPorts.FromString,
('voltha.VolthaLogicalLayer', 'ListLogicalDevices'): LogicalDevices.FromString,
('voltha.VolthaLogicalLayer', 'ListSubscribers'): Subscribers.FromString,
+ ('voltha.VolthaLogicalLayer', 'ReceivePacketsIn'): PacketIn.FromString,
+ ('voltha.VolthaLogicalLayer', 'StreamPacketsOut'): NullMessage.FromString,
('voltha.VolthaLogicalLayer', 'UpdateFlowTable'): NullMessage.FromString,
('voltha.VolthaLogicalLayer', 'UpdateGroupTable'): NullMessage.FromString,
('voltha.VolthaLogicalLayer', 'UpdateSubscriber'): Subscriber.FromString,
@@ -1332,6 +1493,8 @@
'ListLogicalDevicePorts': cardinality.Cardinality.UNARY_UNARY,
'ListLogicalDevices': cardinality.Cardinality.UNARY_UNARY,
'ListSubscribers': cardinality.Cardinality.UNARY_UNARY,
+ 'ReceivePacketsIn': cardinality.Cardinality.UNARY_STREAM,
+ 'StreamPacketsOut': cardinality.Cardinality.STREAM_UNARY,
'UpdateFlowTable': cardinality.Cardinality.UNARY_UNARY,
'UpdateGroupTable': cardinality.Cardinality.UNARY_UNARY,
'UpdateSubscriber': cardinality.Cardinality.UNARY_UNARY,