Renamed registry and packet packages
net.onrc.onos.registry.controller.* => net.onrc.onos.core.registry.*
net.onrc.onos.packet => net.onrc.onos.core.packet
Change-Id: I595e325a2c0bab709f248dde5d84ff7b6185cf8b
diff --git a/src/main/java/net/onrc/onos/core/packet/BSN.java b/src/main/java/net/onrc/onos/core/packet/BSN.java
new file mode 100644
index 0000000..fead254
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/packet/BSN.java
@@ -0,0 +1,172 @@
+/**
+* Copyright 2012, Big Switch Networks, Inc.
+*
+* Licensed under the Apache License, Version 2.0 (the "License"); you may
+* not use this file except in compliance with the License. You may obtain
+* a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+* License for the specific language governing permissions and limitations
+* under the License.
+**/
+
+/**
+ *
+ */
+package net.onrc.onos.core.packet;
+
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Shudong Zhou (shudong.zhou@bigswitch.com)
+ *
+ */
+public class BSN extends BasePacket {
+ public static final int BSN_MAGIC = 0x20000604;
+ public static final short BSN_VERSION_CURRENT = 0x0;
+ public static final short BSN_TYPE_PROBE = 0x1;
+ public static final short BSN_TYPE_BDDP = 0x2;
+ public static Map<Short, Class<? extends IPacket>> typeClassMap;
+
+ static {
+ typeClassMap = new HashMap<Short, Class<? extends IPacket>>();
+ typeClassMap.put(BSN_TYPE_PROBE, BSNPROBE.class);
+ typeClassMap.put(BSN_TYPE_BDDP, LLDP.class);
+ }
+
+ protected short type;
+ protected short version;
+
+ public BSN() {
+ version = BSN_VERSION_CURRENT;
+ }
+
+ public BSN(short type) {
+ this.type = type;
+ version = BSN_VERSION_CURRENT;
+ }
+
+ public short getType() {
+ return type;
+ }
+
+ public BSN setType(short type) {
+ this.type = type;
+ return this;
+ }
+
+ public short getVersion() {
+ return version;
+ }
+
+ public BSN setVersion(short version) {
+ this.version = version;
+ return this;
+ }
+
+ @Override
+ public byte[] serialize() {
+ short length = 4 /* magic */ + 2 /* type */ + 2 /* version */;
+
+ byte[] payloadData = null;
+ if (this.payload != null) {
+ payload.setParent(this);
+ payloadData = payload.serialize();
+ length += payloadData.length;
+ }
+
+ byte[] data = new byte[length];
+ ByteBuffer bb = ByteBuffer.wrap(data);
+ bb.putInt(BSN_MAGIC);
+ bb.putShort(this.type);
+ bb.putShort(this.version);
+ if (payloadData != null)
+ bb.put(payloadData);
+
+ if (this.parent != null && this.parent instanceof Ethernet)
+ ((Ethernet)this.parent).setEtherType(Ethernet.TYPE_BSN);
+
+ return data;
+ }
+
+ @Override
+ public IPacket deserialize(byte[] data, int offset, int length) {
+ ByteBuffer bb = ByteBuffer.wrap(data, offset, length);
+
+ int magic = bb.getInt();
+ if (magic != BSN_MAGIC) {
+ throw new RuntimeException("Invalid BSN magic " + magic);
+ }
+
+ this.type = bb.getShort();
+ this.version = bb.getShort();
+ if (this.version != BSN_VERSION_CURRENT) {
+ throw new RuntimeException(
+ "Invalid BSN packet version " + this.version + ", should be "
+ + BSN_VERSION_CURRENT);
+ }
+
+ IPacket payload;
+ if (typeClassMap.containsKey(this.type)) {
+ Class<? extends IPacket> clazz = typeClassMap.get(this.type);
+ try {
+ payload = clazz.newInstance();
+ } catch (Exception e) {
+ throw new RuntimeException("Error parsing payload for BSN packet" + e);
+ }
+ } else {
+ payload = new Data();
+ }
+
+ this.payload = new Data();
+ this.payload = payload.deserialize(data, bb.position(), bb.limit() - bb.position());
+ this.payload.setParent(this);
+
+ return this;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 883;
+ int result = super.hashCode();
+ result = prime * result + version;
+ result = prime * result + type;
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (!(obj instanceof BSN))
+ return false;
+ BSN other = (BSN) obj;
+ return (type == other.type &&
+ version == other.version);
+ }
+
+ public String toString() {
+ StringBuffer sb = new StringBuffer("\n");
+ sb.append("BSN packet");
+ if (typeClassMap.containsKey(this.type))
+ sb.append(" type: " + typeClassMap.get(this.type).getCanonicalName());
+ else
+ sb.append(" type: " + this.type);
+
+ return sb.toString();
+ }
+}