dist_packet.hh revision 10923
1/*
2 * Copyright (c) 2015 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder.  You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 *
37 * Authors: Gabor Dozsa
38 */
39
40/* @file
41 * Header packet class for multi gem5 runs.
42 *
43 * For a high level description about multi gem5 see comments in
44 * header file multi_iface.hh.
45 *
46 * The MultiHeaderPkt class defines the format of message headers
47 * sent among gem5 processes during a multi gem5 simulation. A header packet
48 * can either carry the description of data packet (i.e. a simulated Ethernet
49 * packet) or a synchronisation related control command. In case of
50 * data packet description, the corresponding data packet always follows
51 * the header packet back-to-back.
52 */
53#ifndef __DEV_MULTI_PACKET_HH__
54#define __DEV_MULTI_PACKET_HH__
55
56#include <cstring>
57
58#include "base/types.hh"
59
60class MultiHeaderPkt
61{
62  private:
63    MultiHeaderPkt() {}
64    ~MultiHeaderPkt() {}
65
66  public:
67    /**
68     * Simply type to help with calculating space requirements for
69     * the corresponding header field.
70     */
71    typedef uint8_t AddressType[6];
72
73    /**
74     *  The msg type defines what informarion a multi header packet carries.
75     */
76    enum class MsgType
77    {
78        dataDescriptor,
79        cmdPeriodicSyncReq,
80        cmdPeriodicSyncAck,
81        cmdCkptSyncReq,
82        cmdCkptSyncAck,
83        cmdAtomicSyncReq,
84        cmdAtomicSyncAck,
85        unknown
86    };
87
88    struct Header
89    {
90        /**
91         * The msg type field is valid for all header packets. In case of
92         * a synchronisation control command this is the only valid field.
93         */
94        MsgType msgType;
95        Tick sendTick;
96        Tick sendDelay;
97        /**
98         * Actual length of the simulated Ethernet packet.
99         */
100        unsigned dataPacketLength;
101        /**
102         * Source MAC address.
103         */
104        AddressType srcAddress;
105        /**
106         * Destination MAC address.
107         */
108        AddressType dstAddress;
109    };
110
111    static unsigned maxAddressLength();
112
113    /**
114     * Static functions for manipulating and comparing MAC addresses.
115     */
116    static void clearAddress(AddressType &addr);
117    static bool isAddressEqual(const AddressType &addr1,
118                               const AddressType &addr2);
119    static bool isAddressLess(const AddressType &addr1,
120                              const AddressType &addr2);
121
122    static void copyAddress(AddressType &dest,
123                            const AddressType &src);
124
125    static bool isUnicastAddress(const AddressType &addr);
126    static bool isMulticastAddress(const AddressType &addr);
127    static bool isBroadcastAddress(const AddressType &addr);
128};
129
130#endif
131