etherint.hh revision 2566
111986Sandreas.sandberg@arm.com/*
211986Sandreas.sandberg@arm.com * Copyright (c) 2002-2005 The Regents of The University of Michigan
311986Sandreas.sandberg@arm.com * All rights reserved.
411986Sandreas.sandberg@arm.com *
511986Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
611986Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are
711986Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright
811986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer;
911986Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright
1011986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the
1111986Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution;
1211986Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its
1311986Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from
1411986Sandreas.sandberg@arm.com * this software without specific prior written permission.
1511986Sandreas.sandberg@arm.com *
1611986Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1711986Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1811986Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1911986Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2011986Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2111986Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2211986Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2311986Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2411986Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2511986Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2611986Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2712037Sandreas.sandberg@arm.com */
2811986Sandreas.sandberg@arm.com
2911986Sandreas.sandberg@arm.com/* @file
3011986Sandreas.sandberg@arm.com * Class representing the actual interface between two ethernet
3111986Sandreas.sandberg@arm.com * components.
3211986Sandreas.sandberg@arm.com */
3311986Sandreas.sandberg@arm.com
3411986Sandreas.sandberg@arm.com#ifndef __DEV_ETHERINT_HH__
3511986Sandreas.sandberg@arm.com#define __DEV_ETHERINT_HH__
3611986Sandreas.sandberg@arm.com
3711986Sandreas.sandberg@arm.com#include <string>
3811986Sandreas.sandberg@arm.com
3911986Sandreas.sandberg@arm.com#include "dev/etherpkt.hh"
4011986Sandreas.sandberg@arm.com#include "sim/sim_object.hh"
4111986Sandreas.sandberg@arm.com
4211986Sandreas.sandberg@arm.com/*
4311986Sandreas.sandberg@arm.com * Class representing the actual interface between two ethernet
4412037Sandreas.sandberg@arm.com * components.  These components are intended to attach to another
4511986Sandreas.sandberg@arm.com * ethernet interface on one side and whatever device on the other.
4611986Sandreas.sandberg@arm.com */
4711986Sandreas.sandberg@arm.comclass EtherInt : public SimObject
4811986Sandreas.sandberg@arm.com{
4911986Sandreas.sandberg@arm.com  protected:
5011986Sandreas.sandberg@arm.com    EtherInt *peer;
5111986Sandreas.sandberg@arm.com
5211986Sandreas.sandberg@arm.com  public:
5311986Sandreas.sandberg@arm.com    EtherInt(const std::string &name) : SimObject(name), peer(NULL) {}
5411986Sandreas.sandberg@arm.com    virtual ~EtherInt() {}
5511986Sandreas.sandberg@arm.com
5611986Sandreas.sandberg@arm.com    void setPeer(EtherInt *p);
5711986Sandreas.sandberg@arm.com
5811986Sandreas.sandberg@arm.com    void recvDone() { peer->sendDone(); }
5911986Sandreas.sandberg@arm.com    virtual void sendDone() = 0;
6011986Sandreas.sandberg@arm.com
6111986Sandreas.sandberg@arm.com    bool sendPacket(EthPacketPtr packet)
6211986Sandreas.sandberg@arm.com    { return peer ? peer->recvPacket(packet) : true; }
6311986Sandreas.sandberg@arm.com    virtual bool recvPacket(EthPacketPtr packet) = 0;
6411986Sandreas.sandberg@arm.com};
6511986Sandreas.sandberg@arm.com
6611986Sandreas.sandberg@arm.com#endif // __DEV_ETHERINT_HH__
6711986Sandreas.sandberg@arm.com