Imported vpnservice as a subtree
[netvirt.git] / vpnservice / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / vpnservice / mdsalutil / packet / IEEE8021Q.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.vpnservice.mdsalutil.packet;
9
10 import java.util.HashMap;
11 import java.util.LinkedHashMap;
12 import java.util.Map;
13
14 import org.apache.commons.lang3.tuple.ImmutablePair;
15 import org.apache.commons.lang3.tuple.Pair;
16 import org.opendaylight.controller.liblldp.BitBufferHelper;
17
18 public class IEEE8021Q extends Ethernet {
19     private static final String PRIORITY = "Priority";
20     private static final String CFI = "CFI";
21     private static final String VLAN_ID = "VlanId";
22     private static final String ETHT = "EtherType";
23
24     private static Map<String, Pair<Integer, Integer>> fieldCoordinates = new LinkedHashMap<String, Pair<Integer, Integer>>() {
25         private static final long serialVersionUID = 1L;
26         {
27             put(PRIORITY, new ImmutablePair<Integer, Integer>(0, 3));
28             put(CFI, new ImmutablePair<Integer, Integer>(3, 1));
29             put(VLAN_ID, new ImmutablePair<Integer, Integer>(4, 12));
30             put(ETHT, new ImmutablePair<Integer, Integer>(16, 16));
31         }
32     };
33     private Map<String, byte[]> fieldValues;
34
35     /**
36      * Default constructor that creates and sets the HashMap
37      */
38     public IEEE8021Q() {
39         super();
40         fieldValues = new HashMap<String, byte[]>();
41         hdrFieldCoordMap = fieldCoordinates;
42         hdrFieldsMap = fieldValues;
43     }
44
45     public IEEE8021Q(boolean writeAccess) {
46         super(writeAccess);
47         fieldValues = new HashMap<String, byte[]>();
48         hdrFieldCoordMap = fieldCoordinates;
49         hdrFieldsMap = fieldValues;
50     }
51
52     public short getPriority() {
53         return (BitBufferHelper.getShort(fieldValues.get(PRIORITY)));
54     }
55
56     public short getCfi() {
57         return (BitBufferHelper.getShort(fieldValues.get(CFI)));
58     }
59
60     public short getVlanId() {
61         return (BitBufferHelper.getShort(fieldValues.get(VLAN_ID)));
62     }
63
64     @Override
65     public short getEtherType() {
66         return BitBufferHelper.getShort(fieldValues.get(ETHT));
67     }
68
69     public IEEE8021Q setPriority(short priority) {
70         byte[] priorityByte = BitBufferHelper.toByteArray(priority);
71         fieldValues.put(PRIORITY, priorityByte);
72         return this;
73     }
74
75     public IEEE8021Q setCFI(short cfi) {
76         byte[] cfiByte = BitBufferHelper
77                 .toByteArray(cfi);
78         fieldValues.put(CFI, cfiByte);
79         return this;
80     }
81
82     public IEEE8021Q setVlanId(short vlanId) {
83         byte[] vlan = BitBufferHelper
84                 .toByteArray(vlanId);
85         fieldValues.put(VLAN_ID, vlan);
86         return this;
87     }
88
89     @Override
90     public IEEE8021Q setEtherType(short etherType) {
91         byte[] ethType = BitBufferHelper.toByteArray(etherType);
92         fieldValues.put(ETHT, ethType);
93         return this;
94     }
95
96     @Override
97     public int hashCode() {
98         final int prime = 31;
99         int result = super.hashCode();
100         result = prime * result
101                 + ((fieldValues == null) ? 0 : fieldValues.hashCode());
102         return result;
103     }
104
105     @Override
106     public boolean equals(Object obj) {
107         if (this == obj) {
108             return true;
109         }
110         if (!super.equals(obj)) {
111             return false;
112         }
113         if (getClass() != obj.getClass()) {
114             return false;
115         }
116         IEEE8021Q other = (IEEE8021Q) obj;
117         if (fieldValues == null) {
118             if (other.fieldValues != null) {
119                 return false;
120             }
121         } else if (!fieldValues.equals(other.fieldValues)) {
122             return false;
123         }
124         return true;
125     }
126 }