blob: 722c80274a4501def5e4b5249ba4fe7a4dcf9e22 [file] [log] [blame]
package net.onrc.onos.core.util;
import org.codehaus.jackson.annotate.JsonProperty;
/**
* The class representing a network port of a switch.
*/
public class Port {
/**
* Special port values.
*
* Those values are taken as-is from the OpenFlow-v1.0.0 specification
* (pp 18-19).
*/
public enum PortValues {
/* Maximum number of physical switch ports. */
PORT_MAX ((short)0xff00),
/* Fake output "ports". */
/* Send the packet out the input port. This
virtual port must be explicitly used
in order to send back out of the input
port. */
PORT_IN_PORT ((short)0xfff8),
/* Perform actions in flow table.
NB: This can only be the destination
port for packet-out messages. */
PORT_TABLE ((short)0xfff9),
/* Process with normal L2/L3 switching. */
PORT_NORMAL ((short)0xfffa),
/* All physical ports except input port and
those disabled by STP. */
PORT_FLOOD ((short)0xfffb),
/* All physical ports except input port. */
PORT_ALL ((short)0xfffc),
/* Send to controller. */
PORT_CONTROLLER ((short)0xfffd),
/* Local openflow "port". */
PORT_LOCAL ((short)0xfffe),
/* Not associated with a physical port. */
PORT_NONE ((short)0xffff);
private final short value; // The value
/**
* Constructor for a given value.
*
* @param value the value to use for the initialization.
*/
private PortValues(short value) {
this.value = value;
}
/**
* Get the value as a short integer.
*
* @return the value as a short integer.
*/
private short value() { return this.value; }
}
private short value;
/**
* Default constructor.
*/
public Port() {
this.value = 0;
}
/**
* Copy constructor.
*
* @param other the object to copy from.
*/
public Port(Port other) {
this.value = other.value();
}
/**
* Constructor from a short integer value.
*
* @param value the value to use.
*/
public Port(short value) {
this.value = value;
}
/**
* Constructor from a PortValues enum value.
*
* @param value the value to use.
*/
public Port(PortValues value) {
this.value = value.value();
}
/**
* Get the value of the port.
*
* @return the value of the port.
*/
@JsonProperty("value")
public short value() { return value; }
/**
* Set the value of the port.
*
* @param value the value to set.
*/
@JsonProperty("value")
public void setValue(short value) {
this.value = value;
}
/**
* Convert the port value to a string.
*
* @return the port value as a string.
*/
@Override
public String toString() {
return Short.toString(this.value);
}
@Override
public boolean equals(Object other) {
if (!(other instanceof Port)) {
return false;
}
Port otherPort = (Port) other;
return value == otherPort.value;
}
@Override
public int hashCode() {
int hash = 17;
hash += 31 * hash + (int)value;
return hash;
}
}