X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fopenflow%2Fnicira-ext.h;h=df2488bd9200caa47d1095ba352230576e6230de;hb=1588bb8d91095366786aa92d53759b1cf48139d6;hp=e6f34baab1dd116d1a01b3c5f4465587629fbd81;hpb=9deba63bdebc2e0eceab8da186b79703fe694186;p=openvswitch diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index e6f34baa..df2488bd 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -118,18 +118,41 @@ enum nx_action_subtype { * Following the lookup, the original in_port is restored. * * If the modified flow matched in the flow table, then the corresponding - * actions are executed, except that NXAST_RESUBMIT actions found in the - * secondary set of actions are ignored. Afterward, actions following - * NXAST_RESUBMIT in the original set of actions, if any, are executed; any - * changes made to the packet (e.g. changes to VLAN) by secondary actions - * persist when those actions are executed, although the original in_port - * is restored. + * actions are executed. Afterward, actions following NXAST_RESUBMIT in + * the original set of actions, if any, are executed; any changes made to + * the packet (e.g. changes to VLAN) by secondary actions persist when + * those actions are executed, although the original in_port is restored. * * NXAST_RESUBMIT may be used any number of times within a set of actions. + * + * NXAST_RESUBMIT may nest to an implementation-defined depth. Beyond this + * implementation-defined depth, further NXAST_RESUBMIT actions are simply + * ignored. (Open vSwitch 1.0.1 and earlier did not support recursion.) */ NXAST_RESUBMIT, - NXAST_SET_TUNNEL /* Set encapsulating tunnel ID. */ + /* Set encapsulating tunnel ID. */ + NXAST_SET_TUNNEL, + + /* Stops processing further actions, if the packet being processed is an + * Ethernet+IPv4 ARP packet for which the source Ethernet address inside + * the ARP packet differs from the source Ethernet address in the Ethernet + * header. + * + * This is useful because OpenFlow does not provide a way to match on the + * Ethernet addresses inside ARP packets, so there is no other way to drop + * spoofed ARPs other than sending every ARP packet to a controller. */ + NXAST_DROP_SPOOFED_ARP, + + /* Set the queue that should be used when packets are output. This + * is similar to the OpenFlow OFPAT_ENQUEUE action, but does not + * take the output port as an argument. This allows the queue + * to be defined before the port is known. */ + NXAST_SET_QUEUE, + + /* Restore the queue to the value it was before any NXAST_SET_QUEUE + * actions were used. */ + NXAST_POP_QUEUE }; /* Action structure for NXAST_RESUBMIT. */ @@ -154,6 +177,17 @@ struct nx_action_set_tunnel { }; OFP_ASSERT(sizeof(struct nx_action_set_tunnel) == 16); +/* Action structure for NXAST_SET_QUEUE. */ +struct nx_action_set_queue { + uint16_t type; /* OFPAT_VENDOR. */ + uint16_t len; /* Length is 16. */ + uint32_t vendor; /* NX_VENDOR_ID. */ + uint16_t subtype; /* NXAST_SET_QUEUE. */ + uint8_t pad[2]; + uint32_t queue_id; /* Where to enqueue packets. */ +}; +OFP_ASSERT(sizeof(struct nx_action_set_queue) == 16); + /* Header for Nicira-defined actions. */ struct nx_action_header { uint16_t type; /* OFPAT_VENDOR. */