blob: fcabdcd269ac71a9175f679725cb28d69e4e478d [file] [log] [blame]
Yotam Harcholf3f11152013-09-05 16:47:16 -07001package org.projectfloodlight.openflow.types;
2
3import org.jboss.netty.buffer.ChannelBuffer;
4
Andreas Wundsam22ba3af2013-10-04 16:00:30 -07005import com.google.common.hash.PrimitiveSink;
6
Yotam Harcholf3f11152013-09-05 16:47:16 -07007public class OFMetadata implements OFValueType<OFMetadata> {
8
9 static int LENGTH = 8;
10
11 private final U64 u64;
12
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070013 public static final OFMetadata NONE = OFMetadata.of(U64.ZERO);
14
Yotam Harcholf3f11152013-09-05 16:47:16 -070015 public static final OFMetadata NO_MASK = OFMetadata.of(U64.ofRaw(0xFFFFFFFFFFFFFFFFl));
16 public static final OFMetadata FULL_MASK = OFMetadata.of(U64.ofRaw(0x0));
17
18 public OFMetadata(U64 ofRaw) {
19 u64 = ofRaw;
20 }
21
22 public static OFMetadata of(U64 u64) {
23 return new OFMetadata(u64);
24 }
25
26 public static OFMetadata ofRaw(long raw) {
27 return new OFMetadata(U64.ofRaw(raw));
28 }
29
Rob Vaterlaus934b4ad2013-11-12 10:08:59 -080030 public U64 getValue() {
31 return u64;
32 }
33
Yotam Harcholf3f11152013-09-05 16:47:16 -070034 public static OFMetadata read8Bytes(ChannelBuffer cb) {
35 return OFMetadata.ofRaw(cb.readLong());
36 }
37
38 public void write8Bytes(ChannelBuffer cb) {
39 u64.writeTo(cb);
40 }
41
42 @Override
43 public int getLength() {
44 return u64.getLength();
45 }
46
47 @Override
48 public OFMetadata applyMask(OFMetadata mask) {
49 return OFMetadata.of(this.u64.applyMask(mask.u64));
50 }
51
52 @Override
53 public boolean equals(Object arg0) {
54 if (!(arg0 instanceof OFMetadata))
55 return false;
56 OFMetadata other = (OFMetadata)arg0;
57
58 return this.u64.equals(other.u64);
59 }
60
61 @Override
62 public int hashCode() {
63 int prime = 53;
64 return this.u64.hashCode() * prime;
65 }
66
67 @Override
68 public String toString() {
69 return "Metadata: " + u64.toString();
70 }
71
Andreas Wundsam85c961f2013-09-29 21:22:12 -070072 @Override
73 public int compareTo(OFMetadata o) {
74 return u64.compareTo(o.u64);
75 }
Andreas Wundsam22ba3af2013-10-04 16:00:30 -070076
77 @Override
78 public void putTo(PrimitiveSink sink) {
79 u64.putTo(sink);
80 }
Yotam Harcholf3f11152013-09-05 16:47:16 -070081}