blob: 8c57adcd62d219d1473a36c3a2b0df176ade1201 [file] [log] [blame]
tom613d8142014-09-11 15:09:37 -07001package org.onlab.onos.net.packet;
2
3import org.onlab.onos.net.ConnectPoint;
4import org.onlab.packet.Ethernet;
5
6import java.nio.ByteBuffer;
7import java.util.Objects;
8
9import static com.google.common.base.MoreObjects.toStringHelper;
10
11/**
12 * Default implementation of an immutable inbound packet.
13 */
14public class DefaultInboundPacket implements InboundPacket {
15
16 private final ConnectPoint receivedFrom;
17 private final Ethernet parsed;
18 private final ByteBuffer unparsed;
19
20 /**
21 * Creates an immutable inbound packet.
22 *
23 * @param receivedFrom connection point where received
24 * @param parsed parsed ethernet frame
25 * @param unparsed unparsed raw bytes
26 */
27 public DefaultInboundPacket(ConnectPoint receivedFrom, Ethernet parsed,
28 ByteBuffer unparsed) {
29 this.receivedFrom = receivedFrom;
30 this.parsed = parsed;
31 this.unparsed = unparsed;
32 }
33
34 @Override
35 public ConnectPoint receivedFrom() {
36 return receivedFrom;
37 }
38
39 @Override
40 public Ethernet parsed() {
41 return parsed;
42 }
43
44 @Override
45 public ByteBuffer unparsed() {
46 // FIXME: figure out immutability here
47 return unparsed;
48 }
49
50 @Override
51 public int hashCode() {
52 return Objects.hash(receivedFrom, parsed, unparsed);
53 }
54
55 @Override
56 public boolean equals(Object obj) {
57 if (obj instanceof InboundPacket) {
58 final DefaultInboundPacket other = (DefaultInboundPacket) obj;
59 return Objects.equals(this.receivedFrom, other.receivedFrom) &&
60 Objects.equals(this.parsed, other.parsed) &&
61 Objects.equals(this.unparsed, other.unparsed);
62 }
63 return false;
64 }
65
66 @Override
67 public String toString() {
68 return toStringHelper(this)
69 .add("receivedFrom", receivedFrom)
70 .add("parsed", parsed)
71 .toString();
72 }
73}