+++ /dev/null
-
-/*
- * Copyright (c) 2013-2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.sal.packet;
-
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.Pair;
-import org.opendaylight.controller.sal.match.Match;
-import org.opendaylight.controller.sal.match.MatchType;
-
-/**
- * Class that represents the TCP segment objects
- */
-public class TCP extends Packet {
-
- public static final String SRCPORT = "SourcePort";
- public static final String DESTPORT = "DestinationPort";
- public static final String SEQNUMBER = "SequenceNumber";
- public static final String ACKNUMBER = "AcknowledgementNumber";
- public static final String DATAOFFSET = "DataOffset";
- public static final String RESERVED = "Reserved";
- public static final String HEADERLENFLAGS = "HeaderLenFlags";
- public static final String WINDOWSIZE = "WindowSize";
- public static final String CHECKSUM = "Checksum";
- public static final String URGENTPOINTER = "UrgentPointer";
-
- private static Map<String, Pair<Integer, Integer>> fieldCoordinates = new LinkedHashMap<String, Pair<Integer, Integer>>() {
- private static final long serialVersionUID = 1L;
- {
- put(SRCPORT, new ImmutablePair<Integer, Integer>(0, 16));
- put(DESTPORT, new ImmutablePair<Integer, Integer>(16, 16));
- put(SEQNUMBER, new ImmutablePair<Integer, Integer>(32, 32));
- put(ACKNUMBER, new ImmutablePair<Integer, Integer>(64, 32));
- put(DATAOFFSET, new ImmutablePair<Integer, Integer>(96, 4));
- put(RESERVED, new ImmutablePair<Integer, Integer>(100, 3));
- put(HEADERLENFLAGS, new ImmutablePair<Integer, Integer>(103, 9));
- put(WINDOWSIZE, new ImmutablePair<Integer, Integer>(112, 16));
- put(CHECKSUM, new ImmutablePair<Integer, Integer>(128, 16));
- put(URGENTPOINTER, new ImmutablePair<Integer, Integer>(144, 16));
- }
- };
-
- private final Map<String, byte[]> fieldValues;
-
- /**
- * Default constructor that sets all the header fields to zero
- */
- public TCP() {
- super();
- fieldValues = new HashMap<String, byte[]>();
- hdrFieldCoordMap = fieldCoordinates;
- hdrFieldsMap = fieldValues;
- /* Setting all remaining header field values to
- * default value of 0. These maybe changed as needed
- */
- setSourcePort((short) 0);
- setDestinationPort((short) 0);
- setSequenceNumber(0);
- setAckNumber(0);
- setDataOffset((byte) 0);
- setReserved((byte) 0);
- setWindowSize((short) 0);
- setUrgentPointer((short) 0);
- setChecksum((short) 0);
- }
-
- /**
- * Constructor that sets the access level for the packet and
- * sets all the header fields to zero.
- */
- public TCP(boolean writeAccess) {
- super(writeAccess);
- fieldValues = new HashMap<String, byte[]>();
- hdrFieldCoordMap = fieldCoordinates;
- hdrFieldsMap = fieldValues;
- /* Setting all remaining header field values to
- * default value of 0. These maybe changed as needed
- */
- setSourcePort((short) 0);
- setDestinationPort((short) 0);
- setSequenceNumber(0);
- setAckNumber(0);
- setDataOffset((byte) 0);
- setReserved((byte) 0);
- setWindowSize((short) 0);
- setUrgentPointer((short) 0);
- setChecksum((short) 0);
- }
-
- @Override
- /**
- * Stores the value read from data stream
- */
- public void setHeaderField(String headerField, byte[] readValue) {
- hdrFieldsMap.put(headerField, readValue);
- }
-
- /**
- * Sets the TCP source port for the current TCP object instance
- * @param short tcpSourcePort
- * @return TCP
- */
- public TCP setSourcePort(short tcpSourcePort) {
- byte[] sourcePort = BitBufferHelper.toByteArray(tcpSourcePort);
- fieldValues.put(SRCPORT, sourcePort);
- return this;
- }
-
- /**
- * Sets the TCP destination port for the current TCP object instance
- * @param short tcpDestinationPort
- * @return TCP
- */
- public TCP setDestinationPort(short tcpDestinationPort) {
- byte[] destinationPort = BitBufferHelper
- .toByteArray(tcpDestinationPort);
- fieldValues.put(DESTPORT, destinationPort);
- return this;
- }
-
- /**
- * Sets the TCP sequence number for the current TCP object instance
- * @param int tcpSequenceNumber
- * @return TCP
- */
- public TCP setSequenceNumber(int tcpSequenceNumber) {
- byte[] sequenceNumber = BitBufferHelper.toByteArray(tcpSequenceNumber);
- fieldValues.put(SEQNUMBER, sequenceNumber);
- return this;
- }
-
- /**
- * Sets the TCP data offset for the current TCP object instance
- * @param byte tcpDataOffset
- * @return TCP
- */
- public TCP setDataOffset(byte tcpDataOffset) {
- byte[] offset = BitBufferHelper.toByteArray(tcpDataOffset);
- fieldValues.put("DataOffset", offset);
- return this;
- }
-
- /**
- * Sets the TCP reserved bits for the current TCP object instance
- * @param byte tcpReserved
- * @return TCP
- */
- public TCP setReserved(byte tcpReserved) {
- byte[] reserved = BitBufferHelper.toByteArray(tcpReserved);
- fieldValues.put("Reserved", reserved);
- return this;
- }
-
- /**
- * Sets the TCP Ack number for the current TCP object instance
- * @param int tcpAckNumber
- * @return TCP
- */
- public TCP setAckNumber(int tcpAckNumber) {
- byte[] ackNumber = BitBufferHelper.toByteArray(tcpAckNumber);
- fieldValues.put(ACKNUMBER, ackNumber);
- return this;
- }
-
- /**
- * Sets the TCP flags for the current TCP object instance
- * @param short tcpFlags
- * @return TCP
- */
- public TCP setHeaderLenFlags(short tcpFlags) {
- byte[] headerLenFlags = BitBufferHelper.toByteArray(tcpFlags);
- fieldValues.put(HEADERLENFLAGS, headerLenFlags);
- return this;
- }
-
- /**
- * Sets the TCP window size for the current TCP object instance
- * @param short tcpWsize
- * @return TCP
- */
- public TCP setWindowSize(short tcpWsize) {
- byte[] wsize = BitBufferHelper.toByteArray(tcpWsize);
- fieldValues.put(WINDOWSIZE, wsize);
- return this;
- }
-
- /**
- * Sets the TCP checksum for the current TCP object instance
- * @param short tcpChecksum
- * @return TCP
- */
- public TCP setChecksum(short tcpChecksum) {
- byte[] checksum = BitBufferHelper.toByteArray(tcpChecksum);
- fieldValues.put(CHECKSUM, checksum);
- return this;
- }
-
- /**
- * Sets the TCP Urgent Pointer for the current TCP object instance
- * @param short tcpUrgentPointer
- * @return TCP
- */
- public TCP setUrgentPointer(short tcpUrgentPointer) {
- byte[] urgentPointer = BitBufferHelper.toByteArray(tcpUrgentPointer);
- fieldValues.put(URGENTPOINTER, urgentPointer);
- return this;
- }
-
- /**
- * Gets the stored source port value of TCP header
- * @return the sourcePort
- */
- public short getSourcePort() {
- return (BitBufferHelper.getShort(fieldValues.get(SRCPORT)));
- }
-
- /**
- * Gets the stored destination port value of TCP header
- * @return the destinationPort
- */
- public short getDestinationPort() {
- return (BitBufferHelper.getShort(fieldValues.get(DESTPORT)));
- }
-
- /**
- * Get the stored checksum value of the TCP header
- * @return short - the checksum
- */
- public short getChecksum() {
- return (BitBufferHelper.getShort(fieldValues.get(CHECKSUM)));
- }
-
- @Override
- public void populateMatch(Match match) {
- match.setField(MatchType.TP_SRC, this.getSourcePort());
- match.setField(MatchType.TP_DST, this.getDestinationPort());
- }
-}