ovs-save: Use timeout option for ovs-vsctl
[openvswitch] / ofproto / ofproto-dpif.c
index 0c954df170a86ef7fedddd3e082d59644ae0e2dc..fea4dac3235675a147acb2dc9bb3a7ca8ca625b4 100644 (file)
@@ -5460,6 +5460,7 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
     }
     OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
         struct ofpact_controller *controller;
+        const struct ofpact_metadata *metadata;
 
         if (ctx->exit) {
             break;
@@ -5499,6 +5500,11 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
             ctx->flow.vlan_tci = htons(0);
             break;
 
+        case OFPACT_PUSH_VLAN:
+            /* TODO:XXX 802.1AD(QinQ) */
+            ctx->flow.vlan_tci = htons(VLAN_CFI);
+            break;
+
         case OFPACT_SET_ETH_SRC:
             memcpy(ctx->flow.dl_src, ofpact_get_SET_ETH_SRC(a)->mac,
                    ETH_ADDR_LEN);
@@ -5608,6 +5614,12 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len,
              */
             break;
 
+        case OFPACT_WRITE_METADATA:
+            metadata = ofpact_get_WRITE_METADATA(a);
+            ctx->flow.metadata &= ~metadata->mask;
+            ctx->flow.metadata |= metadata->metadata & metadata->mask;
+            break;
+
         case OFPACT_GOTO_TABLE: {
             /* TODO:XXX remove recursion */
             /* It is assumed that goto-table is last action */