Skip to content
This repository was archived by the owner on Apr 22, 2024. It is now read-only.

Commit b66c4b6

Browse files
committed
Added support for OpenFlow 1.3 OFP_ERROR codes with the get_class method
1 parent da680e6 commit b66c4b6

3 files changed

Lines changed: 49 additions & 3 deletions

File tree

CHANGELOG.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ Security
2828
Added
2929
=====
3030
- [v0x04] Fixed bug when unpacking MultiPart messages (#529). Thanks @jondef95
31+
- [v0x04] Added support for for OpenFlow 1.3 OFP_ERROR codes with the get_class method
32+
- [v0x01 | v0x04] Added GenericFailedCode error PR #533
3133

3234
[2018.2b1] - "ernesto" beta1 - 2018-9-6
3335
***************************************

pyof/v0x01/asynchronous/error_msg.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
__all__ = ('ErrorMsg', 'ErrorType', 'BadActionCode', 'BadRequestCode',
1313
'FlowModFailedCode', 'HelloFailedCode', 'PortModFailedCode',
14-
'QueueOpFailedCode')
14+
'QueueOpFailedCode', 'GenericFailedCode')
1515

1616

1717
# Enums
@@ -49,7 +49,17 @@ def get_class(self):
4949
'OFPET_FLOW_MOD_FAILED': FlowModFailedCode,
5050
'OFPET_PORT_MOD_FAILED': PortModFailedCode,
5151
'OFPET_QUEUE_OP_FAILED': QueueOpFailedCode}
52-
return classes[self.name]
52+
return classes.get(self.name, GenericFailedCode)
53+
54+
55+
class GenericFailedCode(IntEnum):
56+
"""Error_msg 'code' values for OFPET_BAD_ACTION.
57+
58+
'data' contains at least the first 64 bytes of the failed request.
59+
"""
60+
61+
#: Unknown error
62+
GENERIC_ERROR = 0
5363

5464

5565
class HelloFailedCode(IntEnum):

pyof/v0x04/asynchronous/error_msg.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,22 @@
1515
'FlowModFailedCode', 'GroupModFailedCode', 'HelloFailedCode',
1616
'MeterModFailedCode', 'PortModFailedCode', 'QueueOpFailedCode',
1717
'RoleRequestFailedCode', 'SwitchConfigFailedCode',
18-
'TableFeaturesFailedCode', 'TableModFailedCode')
18+
'TableFeaturesFailedCode', 'TableModFailedCode',
19+
'GenericFailedCode')
1920

2021
# Enums
2122

2223

24+
class GenericFailedCode(IntEnum):
25+
"""Error_msg 'code' values for OFPET_BAD_ACTION.
26+
27+
'data' contains at least the first 64 bytes of the failed request.
28+
"""
29+
30+
#: Unknown error
31+
GENERIC_ERROR = 0
32+
33+
2334
class BadActionCode(IntEnum):
2435
"""Error_msg 'code' values for OFPET_BAD_ACTION.
2536
@@ -197,6 +208,29 @@ class ErrorType(IntEnum):
197208
#: Experimenter error messages.
198209
OFPET_EXPERIMENTER = 0xffff
199210

211+
def get_class(self):
212+
"""Return a Code class based on current ErrorType value.
213+
214+
Returns:
215+
enum.IntEnum: class referenced by current error type.
216+
217+
"""
218+
classes = {'OFPET_HELLO_FAILED': HelloFailedCode,
219+
'OFPET_BAD_REQUEST': BadRequestCode,
220+
'OFPET_BAD_ACTION': BadActionCode,
221+
'OFPET_BAD_INSTRUCTION': BadInstructionCode,
222+
'OFPET_BAD_MATCH': BadMatchCode,
223+
'OFPET_FLOW_MOD_FAILED': FlowModFailedCode,
224+
'OFPET_GROUP_MOD_FAILED': GroupModFailedCode,
225+
'OFPET_PORT_MOD_FAILED': PortModFailedCode,
226+
'OFPET_QUEUE_OP_FAILED': QueueOpFailedCode,
227+
'OFPET_SWITCH_CONFIG_FAILED': SwitchConfigFailedCode,
228+
'OFPET_ROLE_REQUEST_FAILED': RoleRequestFailedCode,
229+
'OFPET_METER_MOD_FAILED': MeterModFailedCode,
230+
'OFPET_TABLE_MOD_FAILED': TableModFailedCode,
231+
'OFPET_TABLE_FEATURES_FAILED': TableFeaturesFailedCode}
232+
return classes.get(self.name, GenericFailedCode)
233+
200234

201235
class FlowModFailedCode(IntEnum):
202236
"""Error_msg 'code' values for OFPET_FLOW_MOD_FAILED.

0 commit comments

Comments
 (0)