etherpkt.hh revision 11263
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: 522007SN/A /* 532007SN/A * Pointer to packet data will be deleted 542007SN/A */ 552SN/A uint8_t *data; 562007SN/A 572007SN/A /* 582007SN/A * Length of the current packet 592007SN/A */ 606227SN/A unsigned length; 612SN/A 622SN/A public: 635483SN/A EthPacketData() 645483SN/A : data(NULL), length(0) 654981SN/A { } 664981SN/A 676227SN/A explicit EthPacketData(unsigned size) 685483SN/A : data(new uint8_t[size]), length(0) 694981SN/A { } 704981SN/A 712566SN/A ~EthPacketData() { if (data) delete [] data; } 72228SN/A 731078SN/A public: 7410923SN/A /** 7510923SN/A * This function pulls out the MAC source and destination addresses from 7610923SN/A * the packet data and stores them in the caller specified buffers. 7710923SN/A * 7810923SN/A * @param src_addr The buffer to store the source MAC address. 7910923SN/A * @param dst_addr The buffer to store the destination MAC address. 8010923SN/A * @param length This is an inout parameter. The caller stores in this 8110923SN/A * the size of the address buffers. On return, this will contain the 8210923SN/A * actual address size stored in the buffers. (We assume that source 8310923SN/A * address size is equal to that of the destination address.) 8410923SN/A */ 8510923SN/A void packAddress(uint8_t *src_addr, uint8_t *dst_addr, unsigned &length); 8610923SN/A 8710905SN/A void serialize(const std::string &base, CheckpointOut &cp) const; 8810905SN/A void unserialize(const std::string &base, CheckpointIn &cp); 8910923SN/A 9010923SN/A unsigned size() const { return length; } 912SN/A}; 922SN/A 9310469SN/Atypedef std::shared_ptr<EthPacketData> EthPacketPtr; 942SN/A 9511263Sandreas.sandberg@arm.com#endif // __DEV_NET_ETHERPKT_HH__ 96