1 | """Defines OpenFlow queues structures and related items.""" |
||
2 | |||
3 | # System imports |
||
4 | 1 | from enum import IntEnum |
|
5 | |||
6 | # Local source tree imports |
||
7 | 1 | from pyof.foundation.base import GenericStruct |
|
8 | 1 | from pyof.foundation.basic_types import FixedTypeList, Pad, UBInt16, UBInt32 |
|
9 | |||
10 | # Third-party imports |
||
11 | |||
12 | |||
13 | 1 | __all__ = ('QueuePropHeader', 'PacketQueue', 'QueuePropMinRate', |
|
14 | 'QueueProperties', 'ListOfProperties', 'ListOfQueues') |
||
15 | |||
16 | # Enums |
||
17 | |||
18 | |||
19 | 1 | class QueueProperties(IntEnum): |
|
20 | """Describe queue properties.""" |
||
21 | |||
22 | #: No property defined for queue (default) |
||
23 | 1 | OFPQT_NONE = 0 |
|
24 | #: Minimum datarate guaranteed |
||
25 | 1 | OFPQT_MIN_RATE = 1 |
|
26 | |||
27 | |||
28 | # Classes |
||
29 | |||
30 | |||
31 | 1 | class ListOfProperties(FixedTypeList): |
|
32 | """List of properties. |
||
33 | |||
34 | Represented by instances of :class:`QueuePropHeader` and used on |
||
35 | :class:`PacketQueue` objects. |
||
36 | """ |
||
37 | |||
38 | 1 | def __init__(self, items=None): |
|
39 | """Create a ListOfProperties with the optional parameters below. |
||
40 | |||
41 | Args: |
||
42 | items (:class:`list` of/or :class:`QueuePropHeader`): |
||
43 | :class:`QueuePropHeader` instance or list of instances. |
||
44 | """ |
||
45 | 1 | super().__init__(pyof_class=QueuePropHeader, |
|
46 | items=items) |
||
47 | |||
48 | |||
49 | 1 | class QueuePropHeader(GenericStruct): |
|
50 | """Describe the header of each queue property.""" |
||
51 | |||
52 | 1 | queue_property = UBInt16(enum_ref=QueueProperties) |
|
53 | 1 | length = UBInt16() |
|
54 | #: 64-bit alignment |
||
55 | 1 | pad = Pad(4) |
|
56 | |||
57 | 1 | def __init__(self, queue_property=None, length=None): |
|
58 | """Create a QueuePropHeader with the optional parameters below. |
||
59 | |||
60 | Args: |
||
61 | queue_property (~pyof.v0x01.common.queue.QueueProperties): |
||
62 | The queue property. |
||
63 | length (int): Length of property, including this header. |
||
64 | """ |
||
65 | 1 | super().__init__() |
|
66 | 1 | self.queue_property = queue_property |
|
67 | 1 | self.length = length |
|
68 | |||
69 | |||
70 | 1 | View Code Duplication | class PacketQueue(GenericStruct): |
0 ignored issues
–
show
Duplication
introduced
by
![]() |
|||
71 | """Describe a queue.""" |
||
72 | |||
73 | 1 | queue_id = UBInt32() |
|
74 | 1 | length = UBInt16() |
|
75 | #: 64-bit alignment. |
||
76 | 1 | pad = Pad(2) |
|
77 | 1 | properties = ListOfProperties() |
|
78 | |||
79 | 1 | def __init__(self, queue_id=None, length=None, properties=None): |
|
80 | """Create a PacketQueue with the optional parameters below. |
||
81 | |||
82 | Args: |
||
83 | queue_id (int): ID of the specific queue. |
||
84 | length (int): Length in bytes of this queue desc. |
||
85 | properties(~pyof.v0x01.common.queue.ListOfProperties): |
||
86 | Queue's list of properties. Default is an empty list. |
||
87 | """ |
||
88 | 1 | super().__init__() |
|
89 | 1 | self.queue_id = queue_id |
|
90 | 1 | self.length = length |
|
91 | 1 | self.properties = [] if properties is None else properties |
|
92 | |||
93 | |||
94 | 1 | class QueuePropMinRate(GenericStruct): |
|
95 | """Define the minimum-rate type queue.""" |
||
96 | |||
97 | 1 | prop_header = QueuePropHeader( |
|
98 | queue_property=QueueProperties.OFPQT_MIN_RATE, length=16) |
||
99 | 1 | rate = UBInt16() |
|
100 | #: 64-bit alignmet. |
||
101 | 1 | pad = Pad(6) |
|
102 | |||
103 | 1 | def __init__(self, rate=None): |
|
104 | """Create a QueuePropMinRate with the optional parameters below. |
||
105 | |||
106 | Args: |
||
107 | rate (int): In 1/10 of a percent (1000 -> 100%); >1000 -> disabled. |
||
108 | """ |
||
109 | 1 | super().__init__() |
|
110 | 1 | self.rate = rate |
|
111 | |||
112 | |||
113 | 1 | class ListOfQueues(FixedTypeList): |
|
114 | """List of queues. |
||
115 | |||
116 | Represented by instances of :class:`PacketQueue` and used on |
||
117 | :class:`QueueGetConfigReply` objects. |
||
118 | """ |
||
119 | |||
120 | 1 | def __init__(self, items=None): |
|
121 | """Create a ListOfQueues with the optional parameters below. |
||
122 | |||
123 | Args: |
||
124 | items (:class:`list` of/or :class:`PacketQueue`): |
||
125 | :class:`PacketQueue` instance or list of instances. |
||
126 | """ |
||
127 | 1 | super().__init__(pyof_class=PacketQueue, |
|
128 | items=items) |
||
129 |