Jian Li

Deprecate PushHeaderInstructions and PopVlanInstruction

PushHeaderInstruction is used by mpls header push, pop, vlan header
push. Also PopVlanInstruction should be augmented to cover vlan
header push case.

Change-Id: Ic0da77b1f86e1e4a396080caa463d1d727b4c7dd
...@@ -148,7 +148,11 @@ public abstract class L2ModificationInstruction implements Instruction { ...@@ -148,7 +148,11 @@ public abstract class L2ModificationInstruction implements Instruction {
148 } 148 }
149 } 149 }
150 150
151 - // TODO This instruction is reused for Pop-Mpls. Consider renaming. 151 + /**
152 + * @deprecated 1.6.0 Goldeneye release.
153 + * Recommended to use ModMplsHeaderInstruction or ModVlanHeaderInstruction instead.
154 + */
155 + @Deprecated
152 public static final class PushHeaderInstructions extends 156 public static final class PushHeaderInstructions extends
153 L2ModificationInstruction { 157 L2ModificationInstruction {
154 158
...@@ -194,7 +198,51 @@ public abstract class L2ModificationInstruction implements Instruction { ...@@ -194,7 +198,51 @@ public abstract class L2ModificationInstruction implements Instruction {
194 } 198 }
195 } 199 }
196 200
201 + /**
202 + * Represents a MPLS header modification instruction.
203 + */
204 + public static final class ModMplsHeaderInstruction extends L2ModificationInstruction {
205 +
206 + private final L2SubType subtype;
207 + private final EthType ethernetType; // Ethernet type value: 16 bits
208 +
209 + ModMplsHeaderInstruction(L2SubType subType, EthType ethernetType) {
210 + this.subtype = subType;
211 + this.ethernetType = ethernetType;
212 + }
213 +
214 + public EthType ethernetType() {
215 + return ethernetType;
216 + }
217 +
218 + @Override
219 + public L2SubType subtype() {
220 + return subtype;
221 + }
222 +
223 + @Override
224 + public String toString() {
225 + return subtype().toString() + SEPARATOR + ethernetType;
226 + }
227 +
228 + @Override
229 + public int hashCode() {
230 + return Objects.hash(type(), subtype, ethernetType);
231 + }
197 232
233 + @Override
234 + public boolean equals(Object obj) {
235 + if (this == obj) {
236 + return true;
237 + }
238 + if (obj instanceof ModMplsHeaderInstruction) {
239 + ModMplsHeaderInstruction that = (ModMplsHeaderInstruction) obj;
240 + return Objects.equals(subtype, that.subtype) &&
241 + Objects.equals(this.ethernetType, that.ethernetType);
242 + }
243 + return false;
244 + }
245 + }
198 246
199 /** 247 /**
200 * Represents a VLAN id modification instruction. 248 * Represents a VLAN id modification instruction.
...@@ -285,7 +333,10 @@ public abstract class L2ModificationInstruction implements Instruction { ...@@ -285,7 +333,10 @@ public abstract class L2ModificationInstruction implements Instruction {
285 333
286 /** 334 /**
287 * Represents a VLAN POP modification instruction. 335 * Represents a VLAN POP modification instruction.
336 + * @deprecated 1.6.0 Goldeneye release.
337 + * Recommended to use ModVlanHeaderInstruction instead.
288 */ 338 */
339 + @Deprecated
289 public static final class PopVlanInstruction extends L2ModificationInstruction { 340 public static final class PopVlanInstruction extends L2ModificationInstruction {
290 private final L2SubType subtype; 341 private final L2SubType subtype;
291 342
...@@ -322,6 +373,56 @@ public abstract class L2ModificationInstruction implements Instruction { ...@@ -322,6 +373,56 @@ public abstract class L2ModificationInstruction implements Instruction {
322 } 373 }
323 374
324 /** 375 /**
376 + * Represents a VLAN Header modification instruction.
377 + */
378 + public static final class ModVlanHeaderInstruction extends L2ModificationInstruction {
379 +
380 + private final L2SubType subtype;
381 + private EthType ethernetType; // Ethernet type value: 16 bits
382 +
383 + ModVlanHeaderInstruction(L2SubType subType, EthType ethernetType) {
384 + this.subtype = subType;
385 + this.ethernetType = ethernetType;
386 + }
387 +
388 + ModVlanHeaderInstruction(L2SubType subType) {
389 + this(subType, EthType.EtherType.UNKNOWN.ethType());
390 + }
391 +
392 + public EthType ethernetType() {
393 + return ethernetType;
394 + }
395 +
396 + @Override
397 + public L2SubType subtype() {
398 + return subtype;
399 + }
400 +
401 + @Override
402 + public String toString() {
403 + return subtype().toString() + SEPARATOR + ethernetType;
404 + }
405 +
406 + @Override
407 + public int hashCode() {
408 + return Objects.hash(type(), subtype, ethernetType);
409 + }
410 +
411 + @Override
412 + public boolean equals(Object obj) {
413 + if (this == obj) {
414 + return true;
415 + }
416 + if (obj instanceof ModVlanHeaderInstruction) {
417 + ModVlanHeaderInstruction that = (ModVlanHeaderInstruction) obj;
418 + return Objects.equals(subtype, that.subtype) &&
419 + Objects.equals(this.ethernetType, that.ethernetType);
420 + }
421 + return false;
422 + }
423 + }
424 +
425 + /**
325 * Represents a MPLS label modification. 426 * Represents a MPLS label modification.
326 */ 427 */
327 public static final class ModMplsLabelInstruction 428 public static final class ModMplsLabelInstruction
......