Adding support for VLAN_PUSH with EtherType (incl. Q-in-Q)

 - Allowing VLAN_PUSH Instruction to use ethernetType (incl. using REST API)
 - Adding QINQ (0x88a8) Ethernet type
 - Updating InstructionCodec decoders/encoders
 - Updating TrafficTreatment/FlowEntryBuilder

Change-Id: I723cc936a8a49c39da9abe65ba9e5b1bdc1392bf
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java b/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java
index 2b3c9d7..f523430 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java
@@ -136,6 +136,11 @@
                         (L2ModificationInstruction.ModVlanPcpInstruction) l2Instruction;
                 result.put(InstructionCodec.VLAN_PCP, modVlanPcpInstruction.vlanPcp());
                 break;
+            case VLAN_PUSH:
+                final L2ModificationInstruction.ModVlanHeaderInstruction pushVlanInstruction =
+                        (L2ModificationInstruction.ModVlanHeaderInstruction) l2Instruction;
+                result.put(InstructionCodec.ETHERNET_TYPE, pushVlanInstruction.ethernetType().toString());
+                break;
             case MPLS_LABEL:
                 final L2ModificationInstruction.ModMplsLabelInstruction modMplsLabelInstruction =
                         (L2ModificationInstruction.ModMplsLabelInstruction) l2Instruction;