5 #ifndef __OF1X_UTILS_H__
6 #define __OF1X_UTILS_H__
9 #include "../../of_switch.h"
26 ROFL_OF1X_FM_SUCCESS = EXIT_SUCCESS,
27 ROFL_OF1X_FM_FAILURE = EXIT_FAILURE,
39 typedef enum of1x_mutex_acquisition_required{
40 MUTEX_NOT_ACQUIRED = 0,
41 MUTEX_ALREADY_ACQUIRED_BY_TIMER_EXPIRATION,
42 MUTEX_ALREADY_ACQUIRED_NON_STRICT_SEARCH
43 }of1x_mutex_acquisition_required_t;
57 #define OF1X_MIN_VERSION OF_VERSION_10
58 #define OF1X_MAX_VERSION OF_VERSION_13
64 #if defined(BIG_ENDIAN_DETECTED)
69 #define OF1X_8_BYTE_MASK 0xFFFFFFFFFFFFFFFFULL
70 #define OF1X_6_BYTE_MASK 0xFFFFFFFFFFFF0000ULL
71 #define OF1X_4_BYTE_MASK 0xFFFFFFFF
72 #define OF1X_3_BYTE_MASK 0xFFFFFF00
73 #define OF1X_2_BYTE_MASK 0xFFFF
74 #define OF1X_1_BYTE_MASK 0xFF
77 #define OF1X_48_BITS_MASK 0xFFFFFFFFFFFF0000ULL
78 #define OF1X_20_BITS_MASK 0xFFFFF000
79 #define OF1X_14_BITS_MASK 0xFFFC
80 #define OF1X_13_BITS_MASK 0xFFF8
81 #define OF1X_12_BITS_MASK 0xFFF0
82 #define OF1X_9_BITS_MASK 0xFF80
83 #define OF1X_6_BITS_MASK 0xFC
84 #define OF1X_4_BITS_MASK 0xF0
85 #define OF1X_3_BITS_MASK 0xE0
87 #define OF1X_VLAN_PRESENT_MASK 0x0008
88 #define OF1X_VLAN_ID_MASK 0x0FFF
90 #define OF1X_8MIDDLE_BITS_MASK 0x0FF0 //ipv6 TC
91 #define OF1X_20_BITS_IPV6_FLABEL_MASK 0x0FFFFF00
93 #elif defined(LITTLE_ENDIAN_DETECTED)
98 #define OF1X_8_BYTE_MASK 0xFFFFFFFFFFFFFFFFULL
99 #define OF1X_6_BYTE_MASK 0x0000FFFFFFFFFFFFULL
100 #define OF1X_4_BYTE_MASK 0x00000000FFFFFFFF
101 #define OF1X_3_BYTE_MASK 0x0000000000FFFFFF
102 #define OF1X_2_BYTE_MASK 0x000000000000FFFF
103 #define OF1X_1_BYTE_MASK 0x00000000000000FF
106 #define OF1X_48_BITS_MASK 0x0000FFFFFFFFFFFFULL
107 #define OF1X_20_BITS_MASK 0x0000000000F0FFFF
108 #define OF1X_14_BITS_MASK 0x0000000000003FFF
109 #define OF1X_13_BITS_MASK 0x0000000000001FFF
110 #define OF1X_12_BITS_MASK 0x000000000000FF0F
111 #define OF1X_9_BITS_MASK 0x00000000000001FF
112 #define OF1X_6_BITS_MASK 0x000000000000003F
113 #define OF1X_4_BITS_MASK 0x000000000000000F
114 #define OF1X_3_BITS_MASK 0x0000000000000007
116 #define OF1X_VLAN_PRESENT_MASK 0x0010
117 #define OF1X_VLAN_ID_MASK 0xFF0F
119 #define OF1X_8MIDDLE_BITS_MASK 0xF00F
120 #define OF1X_20_BITS_IPV6_FLABEL_MASK 0x00FFFF0F
123 #error Unknwon endianness
127 #define OF1X_BIT0_MASK 1<<0 // 0x01 // 0000 0001
128 #define OF1X_BIT1_MASK 1<<1 // 0x02 // 0000 0010
129 #define OF1X_BIT2_MASK 1<<2 // 0x04 // 0000 0100
130 #define OF1X_BIT3_MASK 1<<3 // 0x08 // 0000 1000
131 #define OF1X_BIT4_MASK 1<<4 // 0x10 // 0001 0000
132 #define OF1X_BIT5_MASK 1<<5 // 0x20 // 0010 0000
133 #define OF1X_BIT6_MASK 1<<6 // 0x40 // 0100 0000
134 #define OF1X_BIT7_MASK 1<<7 // 0x80 // 1000 0000
136 #define OF1X_4MSBITS_MASK 0xF0 // 1111 0000
137 #define OF1X_4LSBITS_MASK 0x0F // 0000 1111
138 #define OF1X_6MSBITS_MASK 0xFC // 1111 1100
139 #define OF1X_2LSBITS_MASK 0x03 // 0000 0011
140 #define OF1X_3LSBITS_MASK 0x07 // 0000 0111
141 #define OF1X_3MSBITS_MASK 0xE0 // 1110 0000
142 #define OF1X_2MSBITS_MASK 0xC0 // 1100 0000
143 #define OF1X_6LSBITS_MASK 0x3F // 0011 1111
144 #define OF1X_BITS_2AND3_MASK 0x30 // 0000 1100
145 #define OF1X_BITS_4AND5_MASK 0x30 // 0011 0000
146 #define OF1X_BITS_12AND3_MASK 0x0E // 0000 1110
152 #define OF1X_SHIFT_LEFT(x, y) (x<<y)
153 #define OF1X_SHIFT_RIGHT(x, y) (x>>y)
156 #define OF1X_SWAP_AND_SHIFT_64(x, y) do{ \
166 #define OF1X_MAC_ALIGN(x) OF1X_SHIFT_LEFT(x, 16)
167 #define OF1X_MAC_VALUE(x) OF1X_SHIFT_RIGHT(x, 16)
169 #define OF1X_VLAN_PCP_ALIGN(x) OF1X_SHIFT_LEFT(x, 5)
170 #define OF1X_VLAN_PCP_VALUE(x) OF1X_SHIFT_RIGHT(x, 5)
172 #define OF1X_MPLS_LABEL_ALIGN(x) OF1X_SHIFT_LEFT(x, 12)
173 #define OF1X_MPLS_LABEL_VALUE(x) OF1X_SHIFT_RIGHT(x, 12)
175 #define OF1X_MPLS_TC_ALIGN(x) OF1X_SHIFT_LEFT(x, 1)
176 #define OF1X_MPLS_TC_VALUE(x) OF1X_SHIFT_RIGHT(x, 1)
178 #define OF1X_IP_DSCP_ALIGN(x) OF1X_SHIFT_LEFT(x, 2)
179 #define OF1X_IP_DSCP_VALUE(x) OF1X_SHIFT_RIGHT(x, 2)
181 #define OF1X_IP6_FLABEL_ALIGN(x) OF1X_SHIFT_LEFT(x, 8)
182 #define OF1X_IP6_FLABEL_VALUE(x) OF1X_SHIFT_RIGHT(x, 8)
186 #define OF1X_ALIGN_64_BIT(x) (((x/8)+1)*8)
rofl_of1x_fm_result
Extended flowmod return codes.
enum rofl_of1x_fm_result rofl_of1x_fm_result_t
Extended flowmod return codes.