--- openflow-2013-11-18-3.h	2015-07-23 09:54:17.736479386 -0700
+++ openflow-2013-11-27-2.h	2015-07-23 09:54:17.740479386 -0700
@@ -1334,8 +1334,7 @@
     OFPAT_SET_FIELD    = 25, /* Set a header field using OXM TLV format. */
     OFPAT_PUSH_PBB     = 26, /* Push a new PBB service tag (I-TAG) */
     OFPAT_POP_PBB      = 27, /* Pop the outer PBB service tag (I-TAG) */
-    OFPAT_REG_MOVE     = 28, /* Move value between header and register. */
-    OFPAT_REG_LOAD     = 29, /* Load register with value. */
+    OFPAT_COPY_FIELD   = 28, /* Copy value between header and register. */
     OFPAT_EXPERIMENTER = 0xffff
 };
 
@@ -1445,32 +1444,21 @@
 };
 OFP_ASSERT(sizeof(struct ofp_action_set_field) == 8);
 
-/* Action structure for OFPAT_REG_MOVE. */
-struct ofp_action_reg_move {
-    uint16_t type;                  /* OFPAT_REG_MOVE. */
-    uint16_t len;                   /* Length is 16. */
-    uint8_t  n_bits;                /* Number of bits. */
-    uint8_t  pad;                   /* Align to 16 bits. */
-    uint8_t  src_offset;            /* Starting bit offset in source. */
-    uint8_t  dst_offset;            /* Starting bit offset in destination. */
-    uint32_t src_oxmid;             /* Source register OXM ID. */
-    uint32_t dst_oxmid;             /* Destination register OXM ID. */
-};
-OFP_ASSERT(sizeof(struct ofp_action_reg_move) == 16);
-
-/* Action structure for NXAST_REG_LOAD. */
-struct ofp_action_reg_load {
-    uint16_t type;                  /* OFPAT_REG_LOAD. */
-    uint16_t len;                   /* Length is 24. */
-    uint8_t  n_bits;                /* Number of bits. */
-    uint8_t  pad;                   /* Align to 16 bits. */
-    uint8_t  dst_offset;            /* Starting bit offset in destination. */
-    uint8_t  pad2;                  /* Align to 32 bits. */
-    uint32_t dst_oxmid;             /* Destination register OXM ID. */
-    uint8_t  pad3[4];               /* Align to 64 bits. */
-    uint64_t value;                 /* Immediate value. */
+/* Action structure for OFPAT_COPY_FIELD. */
+struct ofp_action_copy_field {
+    uint16_t type;                  /* OFPAT_COPY_FIELD. */
+    uint16_t len;                   /* Length is padded to 64 bits. */
+    uint16_t n_bits;                /* Number of bits to copy. */
+    uint16_t src_offset;            /* Starting bit offset in source. */
+    uint16_t dst_offset;            /* Starting bit offset in destination. */
+    uint16_t oxm_id_len;            /* Length of oxm_ids. */
+    /* Followed by:
+     *   - Exactly (oxm_id_len) bytes containing the oxm_ids, then
+     *   - Exactly (12 + oxm_id_len + 7)/8*8 - (12 + oxm_id_len) (between 0
+     *     and 7) bytes of all-zero bytes */
+    uint32_t         oxm_ids[0];   /* Source and destination OXM headers */
 };
-OFP_ASSERT(sizeof(struct ofp_action_reg_load) == 24);
+OFP_ASSERT(sizeof(struct ofp_action_copy_field) == 12);
 
 /* Action header for OFPAT_EXPERIMENTER.
  * The rest of the body is experimenter-defined. */
@@ -2446,10 +2434,10 @@
     OFPTFPT_APPLY_SETFIELD         = 14, /* Apply Set-Field property. */
     OFPTFPT_APPLY_SETFIELD_MISS    = 15, /* Apply Set-Field for table-miss. */
     OFPTFPT_TABLE_SYNC_FROM        = 16, /* Table synchronisation property. */
-    OFPTFPT_WRITE_REGMOVE          = 18, /* Write Reg-Move property. */
-    OFPTFPT_WRITE_REGMOVE_MISS     = 19, /* Write Reg-Move for table-miss. */
-    OFPTFPT_APPLY_REGMOVE          = 20, /* Apply Reg-Move property. */
-    OFPTFPT_APPLY_REGMOVE_MISS     = 21, /* Apply Reg-Move for table-miss. */
+    OFPTFPT_WRITE_COPYFIELD        = 18, /* Write Copy-Field property. */
+    OFPTFPT_WRITE_COPYFIELD_MISS   = 19, /* Write Copy-Field for table-miss. */
+    OFPTFPT_APPLY_COPYFIELD        = 20, /* Apply Copy-Field property. */
+    OFPTFPT_APPLY_COPYFIELD_MISS   = 21, /* Apply Copy-Field for table-miss. */
     OFPTFPT_EXPERIMENTER           = 0xFFFE, /* Experimenter property. */
     OFPTFPT_EXPERIMENTER_MISS      = 0xFFFF, /* Experimenter for table-miss. */
 };
