5 #ifndef __OF1X_ACTION_H__
6 #define __OF1X_ACTION_H__
14 #include "../../../common/ternary_fields.h"
121 OF1X_AT_COPY_TTL_OUT,
125 OF1X_AT_DEC_MPLS_TTL,
128 OF1X_AT_SET_MPLS_TTL,
132 OF1X_AT_SET_FIELD_ETH_DST,
133 OF1X_AT_SET_FIELD_ETH_SRC,
134 OF1X_AT_SET_FIELD_ETH_TYPE,
136 OF1X_AT_SET_FIELD_MPLS_LABEL,
137 OF1X_AT_SET_FIELD_MPLS_TC,
138 OF1X_AT_SET_FIELD_MPLS_BOS,
140 OF1X_AT_SET_FIELD_VLAN_VID,
141 OF1X_AT_SET_FIELD_VLAN_PCP,
142 OF1X_AT_SET_FIELD_ARP_OPCODE,
144 OF1X_AT_SET_FIELD_ARP_SHA,
145 OF1X_AT_SET_FIELD_ARP_SPA,
146 OF1X_AT_SET_FIELD_ARP_THA,
147 OF1X_AT_SET_FIELD_ARP_TPA,
150 OF1X_AT_SET_FIELD_NW_PROTO,
151 OF1X_AT_SET_FIELD_NW_SRC,
152 OF1X_AT_SET_FIELD_NW_DST,
156 OF1X_AT_SET_FIELD_IP_DSCP,
157 OF1X_AT_SET_FIELD_IP_ECN,
158 OF1X_AT_SET_FIELD_IP_PROTO,
160 OF1X_AT_SET_FIELD_IPV4_SRC,
161 OF1X_AT_SET_FIELD_IPV4_DST,
162 OF1X_AT_SET_FIELD_IPV6_SRC,
164 OF1X_AT_SET_FIELD_IPV6_DST,
165 OF1X_AT_SET_FIELD_IPV6_FLABEL,
166 OF1X_AT_SET_FIELD_IPV6_ND_TARGET,
167 OF1X_AT_SET_FIELD_IPV6_ND_SLL,
168 OF1X_AT_SET_FIELD_IPV6_ND_TLL,
169 OF1X_AT_SET_FIELD_IPV6_EXTHDR,
171 OF1X_AT_SET_FIELD_TCP_SRC,
172 OF1X_AT_SET_FIELD_TCP_DST,
174 OF1X_AT_SET_FIELD_UDP_SRC,
175 OF1X_AT_SET_FIELD_UDP_DST,
177 OF1X_AT_SET_FIELD_SCTP_SRC,
178 OF1X_AT_SET_FIELD_SCTP_DST,
181 OF1X_AT_SET_FIELD_TP_SRC,
182 OF1X_AT_SET_FIELD_TP_DST,
185 OF1X_AT_SET_FIELD_ICMPV4_TYPE,
186 OF1X_AT_SET_FIELD_ICMPV4_CODE,
188 OF1X_AT_SET_FIELD_ICMPV6_TYPE,
189 OF1X_AT_SET_FIELD_ICMPV6_CODE,
191 OF1X_AT_SET_FIELD_PBB_ISID,
192 OF1X_AT_SET_FIELD_TUNNEL_ID,
198 OF1X_AT_SET_FIELD_PPPOE_CODE,
199 OF1X_AT_SET_FIELD_PPPOE_TYPE,
200 OF1X_AT_SET_FIELD_PPPOE_SID,
201 OF1X_AT_SET_FIELD_PPP_PROT,
203 OF1X_AT_SET_FIELD_GTP_MSG_TYPE,
204 OF1X_AT_SET_FIELD_GTP_TEID,
206 OF1X_AT_SET_FIELD_CAPWAP_WBID,
207 OF1X_AT_SET_FIELD_CAPWAP_RID,
208 OF1X_AT_SET_FIELD_CAPWAP_FLAGS,
210 OF1X_AT_SET_FIELD_WLAN_FC,
211 OF1X_AT_SET_FIELD_WLAN_TYPE,
212 OF1X_AT_SET_FIELD_WLAN_SUBTYPE,
213 OF1X_AT_SET_FIELD_WLAN_DIRECTION,
214 OF1X_AT_SET_FIELD_WLAN_ADDRESS_1,
215 OF1X_AT_SET_FIELD_WLAN_ADDRESS_2,
216 OF1X_AT_SET_FIELD_WLAN_ADDRESS_3,
218 OF1X_AT_SET_FIELD_GRE_VERSION,
219 OF1X_AT_SET_FIELD_GRE_PROT_TYPE,
220 OF1X_AT_SET_FIELD_GRE_KEY,
228 OF1X_AT_EXPERIMENTER,
233 #define OF1X_AT_NUMBER OF1X_AT_OUTPUT+1
236 #if OF1X_AT_NUMBER >= 128
237 #error Number of actions beyond 128 not supported by bitmap128_t. Implement bitmap256_t.
247 OF1X_PORT_MAX = 0xffffff00,
250 OF1X_PORT_IN_PORT = 0xfffffff8,
255 OF1X_PORT_TABLE = 0xfffffff9,
258 OF1X_PORT_NORMAL = 0xfffffffa,
259 OF1X_PORT_FLOOD = 0xfffffffb,
261 OF1X_PORT_ALL = 0xfffffffc,
262 OF1X_PORT_CONTROLLER = 0xfffffffd,
263 OF1X_PORT_LOCAL = 0xfffffffe,
264 OF1X_PORT_ANY = 0xffffffff
309 unsigned int num_of_actions;
316 unsigned int num_of_output_actions;
319 bool has_output_table;
339 unsigned int num_of_actions;
340 unsigned int num_of_output_actions;
384 return action->__field.u8;
386 switch(action->type){
387 case OF1X_AT_SET_FIELD_IP_DSCP:
388 return OF1X_IP_DSCP_VALUE(action->__field.u8);
390 case OF1X_AT_SET_FIELD_VLAN_PCP:
391 return OF1X_VLAN_PCP_VALUE(action->__field.u8);
393 case OF1X_AT_SET_FIELD_MPLS_TC:
394 return OF1X_MPLS_TC_VALUE(action->__field.u8);
396 case OF1X_AT_SET_FIELD_IP_ECN:
397 case OF1X_AT_SET_FIELD_NW_PROTO:
398 case OF1X_AT_SET_FIELD_ICMPV6_TYPE:
399 case OF1X_AT_SET_FIELD_ICMPV6_CODE:
400 case OF1X_AT_SET_FIELD_PPPOE_CODE:
401 case OF1X_AT_SET_FIELD_PPPOE_TYPE:
402 case OF1X_AT_SET_MPLS_TTL:
403 case OF1X_AT_SET_NW_TTL:
404 case OF1X_AT_SET_FIELD_IP_PROTO:
405 case OF1X_AT_SET_FIELD_ICMPV4_TYPE:
406 case OF1X_AT_SET_FIELD_ICMPV4_CODE:
407 case OF1X_AT_SET_FIELD_GTP_MSG_TYPE:
408 case OF1X_AT_SET_FIELD_MPLS_BOS:
409 return action->__field.u8;
426 return __of1x_get_packet_action_field8(action,
false);
435 return action->__field.u16;
437 switch(action->type){
438 case OF1X_AT_SET_FIELD_ETH_TYPE:
439 case OF1X_AT_SET_FIELD_ARP_OPCODE:
440 case OF1X_AT_SET_FIELD_TP_SRC:
441 case OF1X_AT_SET_FIELD_TP_DST:
442 case OF1X_AT_SET_FIELD_TCP_SRC:
443 case OF1X_AT_SET_FIELD_TCP_DST:
444 case OF1X_AT_SET_FIELD_UDP_SRC:
445 case OF1X_AT_SET_FIELD_UDP_DST:
446 case OF1X_AT_SET_FIELD_SCTP_SRC:
447 case OF1X_AT_SET_FIELD_SCTP_DST:
448 case OF1X_AT_SET_FIELD_PPPOE_SID:
449 case OF1X_AT_SET_FIELD_PPP_PROT:
450 case OF1X_AT_POP_MPLS:
451 case OF1X_AT_POP_PPPOE:
452 case OF1X_AT_POP_PBB:
453 case OF1X_AT_PUSH_PPPOE:
454 case OF1X_AT_PUSH_MPLS:
455 case OF1X_AT_PUSH_VLAN:
456 case OF1X_AT_PUSH_PBB:
457 case OF1X_AT_SET_FIELD_VLAN_VID:
458 case OF1X_AT_SET_FIELD_GRE_VERSION:
459 case OF1X_AT_SET_FIELD_GRE_PROT_TYPE:
460 return NTOHB16(action->__field.u16);
462 case OF1X_AT_SET_FIELD_IPV6_EXTHDR:
478 return __of1x_get_packet_action_field16(action,
false);
486 return action->__field.u32;
488 switch(action->type){
489 case OF1X_AT_SET_FIELD_MPLS_LABEL:
490 return OF1X_MPLS_LABEL_VALUE(NTOHB32(action->__field.u32));
491 case OF1X_AT_SET_FIELD_IPV6_FLABEL:
492 return OF1X_IP6_FLABEL_VALUE(NTOHB32(action->__field.u32));
494 case OF1X_AT_SET_FIELD_IPV4_SRC:
495 case OF1X_AT_SET_FIELD_IPV4_DST:
496 case OF1X_AT_SET_FIELD_NW_SRC:
497 case OF1X_AT_SET_FIELD_NW_DST:
498 case OF1X_AT_SET_FIELD_ARP_SPA:
499 case OF1X_AT_SET_FIELD_ARP_TPA:
500 case OF1X_AT_SET_FIELD_GTP_TEID:
501 case OF1X_AT_SET_FIELD_PBB_ISID:
502 case OF1X_AT_SET_FIELD_GRE_KEY:
503 return NTOHB32(action->__field.u32);
505 case OF1X_AT_SET_QUEUE:
508 return action->__field.u32;
525 return __of1x_get_packet_action_field32(action,
false);
533 return action->__field.u64;
535 switch(action->type){
536 case OF1X_AT_SET_FIELD_PBB_ISID:
537 case OF1X_AT_SET_FIELD_TUNNEL_ID:
538 return action->__field.u64;
540 case OF1X_AT_SET_FIELD_IPV6_ND_SLL:
541 case OF1X_AT_SET_FIELD_IPV6_ND_TLL:
542 case OF1X_AT_SET_FIELD_ETH_DST:
543 case OF1X_AT_SET_FIELD_ETH_SRC:
544 case OF1X_AT_SET_FIELD_ARP_SHA:
545 case OF1X_AT_SET_FIELD_ARP_THA:
546 return OF1X_MAC_VALUE(NTOHB64(action->__field.u64));
563 return __of1x_get_packet_action_field64(action,
false);
572 return action->__field.u128;
574 switch(action->type){
575 case OF1X_AT_SET_FIELD_IPV6_ND_TARGET:
576 case OF1X_AT_SET_FIELD_IPV6_SRC:
577 case OF1X_AT_SET_FIELD_IPV6_DST:
578 tmp = action->__field.u128;
597 return __of1x_get_packet_action_field128(action,
false);
of1x_packet_action_type_t
Actions over a packet as per defined in OF10, OF12, OF13.
Packet action abstraction data structure.
OpenFlow-enabled v1.0, 1.2 and 1.3.2 switch abstraction.
Group structure definition.
static uint16_t of1x_get_packet_action_field16(const of1x_packet_action_t *action)
Retrieve the action field for 16 bit values (or less) in HOST BYTE ORDER.
of1x_action_group_t * of1x_init_action_group(of1x_packet_action_t *actions)
Create an action group (apply actions)
void of1x_push_packet_action_to_group(of1x_action_group_t *group, of1x_packet_action_t *action)
Push an action to the group.
OpenFlow v1.0, 1.2 and 1.3.2 flow table abstraction.
void of1x_destroy_action_group(of1x_action_group_t *group)
Destroy an action group.
struct of1x_action_group of1x_action_group_t
Action group (apply-actions) structure.
static uint8_t of1x_get_packet_action_field8(const of1x_packet_action_t *action)
Retrieve the action field for 8 bit values (or less) in HOST BYTE ORDER.
static uint128__t of1x_get_packet_action_field128(const of1x_packet_action_t *action)
Retrieve the action field for 128 bit values (or less) in HOST BYTE ORDER.
Action group (apply-actions) structure.
struct of1x_packet_action of1x_packet_action_t
Packet action abstraction data structure.
of1x_port_numbers
Special port numbers, according to OF1X (of1xp_port_no )
void of1x_destroy_packet_action(of1x_packet_action_t *action)
Destroys packet action (OF action)
rofl_result_t of1x_set_packet_action_on_write_actions(of1x_write_actions_t *write_actions, of1x_packet_action_t *action)
Set (copy) the action to the write actions.
of1x_write_actions_t * of1x_init_write_actions(void)
Create a write actions group.
static uint64_t of1x_get_packet_action_field64(const of1x_packet_action_t *action)
Retrieve the action field for 64 bit values (or less) in HOST BYTE ORDER.
static uint32_t of1x_get_packet_action_field32(const of1x_packet_action_t *action)
Retrieve the action field for 32 bit values (or less) in HOST BYTE ORDER.
ROFL_BEGIN_DECLS of1x_packet_action_t * of1x_init_packet_action(of1x_packet_action_type_t type, wrap_uint_t field, uint16_t output_send_len)
Initializes a packet action (OF action)