etherpkt.hh revision 11701
12SN/A/* 21762SN/A * Copyright (c) 2002-2005 The Regents of The University of Michigan 32SN/A * All rights reserved. 42SN/A * 52SN/A * Redistribution and use in source and binary forms, with or without 62SN/A * modification, are permitted provided that the following conditions are 72SN/A * met: redistributions of source code must retain the above copyright 82SN/A * notice, this list of conditions and the following disclaimer; 92SN/A * redistributions in binary form must reproduce the above copyright 102SN/A * notice, this list of conditions and the following disclaimer in the 112SN/A * documentation and/or other materials provided with the distribution; 122SN/A * neither the name of the copyright holders nor the names of its 132SN/A * contributors may be used to endorse or promote products derived from 142SN/A * this software without specific prior written permission. 152SN/A * 162SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665SN/A * 282665SN/A * Authors: Nathan Binkert 292665SN/A * Lisa Hsu 302SN/A */ 312SN/A 322SN/A/* @file 332SN/A * Reference counted class containing ethernet packet data 342SN/A */ 352SN/A 3611263Sandreas.sandberg@arm.com#ifndef __DEV_NET_ETHERPKT_HH__ 3711263Sandreas.sandberg@arm.com#define __DEV_NET_ETHERPKT_HH__ 382SN/A 396216SN/A#include <cassert> 40572SN/A#include <iosfwd> 412SN/A#include <memory> 422SN/A 436214SN/A#include "base/types.hh" 4410905SN/A#include "sim/serialize.hh" 45837SN/A 462SN/A/* 472SN/A * Reference counted class containing ethernet packet data 482SN/A */ 4910469SN/Aclass EthPacketData 502SN/A{ 512SN/A public: 5211701Smichael.lebeane@amd.com /** 532007SN/A * Pointer to packet data will be deleted 542007SN/A */ 552SN/A uint8_t *data; 562007SN/A 5711701Smichael.lebeane@amd.com /** 5811701Smichael.lebeane@amd.com * Amount of space occupied by the payload in the data buffer 592007SN/A */ 606227SN/A unsigned length; 612SN/A 6211701Smichael.lebeane@amd.com /** 6311701Smichael.lebeane@amd.com * Effective length, used for modeling timing in the simulator. 6411701Smichael.lebeane@amd.com * This could be different from length if the packets are assumed 6511701Smichael.lebeane@amd.com * to use a tightly packed or compressed format, but it's not worth 6611701Smichael.lebeane@amd.com * the performance/complexity hit to perform that packing or compression 6711701Smichael.lebeane@amd.com * in the simulation. 6811701Smichael.lebeane@amd.com */ 6911701Smichael.lebeane@amd.com unsigned simLength; 7011701Smichael.lebeane@amd.com 715483SN/A EthPacketData() 7211701Smichael.lebeane@amd.com : data(nullptr), length(0), simLength(0) 734981SN/A { } 744981SN/A 756227SN/A explicit EthPacketData(unsigned size) 7611701Smichael.lebeane@amd.com : data(new uint8_t[size]), length(0), simLength(0) 774981SN/A { } 784981SN/A 792566SN/A ~EthPacketData() { if (data) delete [] data; } 80228SN/A 8110905SN/A void serialize(const std::string &base, CheckpointOut &cp) const; 8210905SN/A void unserialize(const std::string &base, CheckpointIn &cp); 832SN/A}; 842SN/A 8510469SN/Atypedef std::shared_ptr<EthPacketData> EthPacketPtr; 862SN/A 8711263Sandreas.sandberg@arm.com#endif // __DEV_NET_ETHERPKT_HH__ 88