blob: d1a23df1fd30733d2a39261d06b11f23a7b2b326 [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
30 public static OFMetadata read8Bytes(ChannelBuffer cb) {
31 return OFMetadata.ofRaw(cb.readLong());
32 }
33
34 public void write8Bytes(ChannelBuffer cb) {
35 u64.writeTo(cb);
36 }
37
38 @Override
39 public int getLength() {
40 return u64.getLength();
41 }
42
43 @Override
44 public OFMetadata applyMask(OFMetadata mask) {
45 return OFMetadata.of(this.u64.applyMask(mask.u64));
46 }
47
48 @Override
49 public boolean equals(Object arg0) {
50 if (!(arg0 instanceof OFMetadata))
51 return false;
52 OFMetadata other = (OFMetadata)arg0;
53
54 return this.u64.equals(other.u64);
55 }
56
57 @Override
58 public int hashCode() {
59 int prime = 53;
60 return this.u64.hashCode() * prime;
61 }
62
63 @Override
64 public String toString() {
65 return "Metadata: " + u64.toString();
66 }
67
Andreas Wundsam85c961f2013-09-29 21:22:12 -070068 @Override
69 public int compareTo(OFMetadata o) {
70 return u64.compareTo(o.u64);
71 }
Andreas Wundsam22ba3af2013-10-04 16:00:30 -070072
73 @Override
74 public void putTo(PrimitiveSink sink) {
75 u64.putTo(sink);
76 }
Yotam Harcholf3f11152013-09-05 16:47:16 -070077}