blob: bf431556fa254abfe47b4f5395c24d50e8c985d9 [file] [log] [blame]
Jonathan Hart472062d2014-04-03 10:56:48 -07001package net.onrc.onos.core.topology;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -08002
Yuta HIGUCHIb5107282014-02-14 17:18:24 -08003import java.nio.ByteBuffer;
4
Jonathan Hart472062d2014-04-03 10:56:48 -07005import net.onrc.onos.core.topology.PortEvent.SwitchPort;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -08006
7/**
Yuta HIGUCHIdac4caa2014-02-11 18:51:35 -08008 * Self-contained Link event Object
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -08009 *
10 * TODO: We probably want common base class/interface for Self-Contained Event Object
11 *
12 */
13public class LinkEvent {
Yuta HIGUCHIf65bcd52014-02-23 15:09:57 -080014 protected final SwitchPort src;
15 protected final SwitchPort dst;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080016
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080017 /**
Yuta HIGUCHI9cc421b2014-02-24 15:34:44 -080018 * Default constructor for Serializer to use.
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080019 */
Yuta HIGUCHI9cc421b2014-02-24 15:34:44 -080020 @Deprecated
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080021 public LinkEvent() {
22 src = null;
23 dst = null;
24 }
25
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080026 public LinkEvent(Long src_dpid, Long src_port_no, Long dst_dpid,
27 Long dst_port_no) {
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080028 src = new SwitchPort(src_dpid, src_port_no);
29 dst = new SwitchPort(dst_dpid, dst_port_no);
Toshio Koide0c9106d2014-02-19 15:26:38 -080030 }
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080031
Toshio Koide0c9106d2014-02-19 15:26:38 -080032 public LinkEvent(Link link) {
Pavlin Radoslavov7c8f69a2014-02-19 19:01:45 -080033 src = new SwitchPort(link.getSrcSwitch().getDpid(),
34 link.getSrcPort().getNumber());
35 dst = new SwitchPort(link.getDstSwitch().getDpid(),
36 link.getDstPort().getNumber());
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080037 }
38
39 public SwitchPort getSrc() {
Toshio Koide0c9106d2014-02-19 15:26:38 -080040 return src;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080041 }
42
43 public SwitchPort getDst() {
Toshio Koide0c9106d2014-02-19 15:26:38 -080044 return dst;
Yuta HIGUCHI54ab8cd2014-02-11 09:43:34 -080045 }
46
47 @Override
48 public String toString() {
49 return "[LinkEvent " + src + "->" + dst + "]";
50 }
51
Yuta HIGUCHIb5107282014-02-14 17:18:24 -080052 public static final int LINKID_BYTES = 2 + PortEvent.PORTID_BYTES * 2;
53
Yuta HIGUCHIa341b112014-02-23 15:42:00 -080054 public static ByteBuffer getLinkID(Long src_dpid, Long src_port_no,
Yuta HIGUCHIb5107282014-02-14 17:18:24 -080055 Long dst_dpid, Long dst_port_no) {
Yuta HIGUCHI9e873bd2014-02-24 13:29:13 -080056 return (ByteBuffer) ByteBuffer.allocate(LinkEvent.LINKID_BYTES).putChar('L')
Yuta HIGUCHIb5107282014-02-14 17:18:24 -080057 .put(PortEvent.getPortID(src_dpid, src_port_no))
Yuta HIGUCHI9e873bd2014-02-24 13:29:13 -080058 .put(PortEvent.getPortID(dst_dpid, dst_port_no)).flip();
Yuta HIGUCHIb5107282014-02-14 17:18:24 -080059 }
60
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080061 public byte[] getID() {
62 return getLinkID(src.getDpid(), src.getNumber(),
Yuta HIGUCHIa341b112014-02-23 15:42:00 -080063 dst.getDpid(), dst.getNumber()).array();
64 }
65
66 public ByteBuffer getIDasByteBuffer() {
67 return getLinkID(src.getDpid(), src.getNumber(),
Toshio Koide0c9106d2014-02-19 15:26:38 -080068 dst.getDpid(), dst.getNumber());
Pavlin Radoslavov45ec04b2014-02-14 23:29:33 -080069 }
Toshio Koide0c9106d2014-02-19 15:26:38 -080070
Toshio Koide0c9106d2014-02-19 15:26:38 -080071 @Override
72 public int hashCode() {
73 final int prime = 31;
74 int result = 1;
75 result = prime * result + ((dst == null) ? 0 : dst.hashCode());
76 result = prime * result + ((src == null) ? 0 : src.hashCode());
77 return result;
78 }
79
80 @Override
81 public boolean equals(Object obj) {
82 if (this == obj)
83 return true;
84 if (obj == null)
85 return false;
86 if (getClass() != obj.getClass())
87 return false;
88 LinkEvent other = (LinkEvent) obj;
89 if (dst == null) {
90 if (other.dst != null)
91 return false;
92 } else if (!dst.equals(other.dst))
93 return false;
94 if (src == null) {
95 if (other.src != null)
96 return false;
97 } else if (!src.equals(other.src))
98 return false;
99 return true;
100 }
101}