Sensor.h 1.93 KB
Newer Older
Robert Ricci's avatar
Robert Ricci committed
1 2
/*
 * Copyright (c) 2006 University of Utah and the Flux Group.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
 * 
 * {{{EMULAB-LICENSE
 * 
 * This file is part of the Emulab network testbed software.
 * 
 * This file is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or (at
 * your option) any later version.
 * 
 * This file is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
 * License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this file.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * }}}
Robert Ricci's avatar
Robert Ricci committed
22 23
 */

24 25 26 27 28 29 30 31 32
// Sensor.h

// This is the abstract base class for all of the individual
// measurement code, filters, and others. It includes code which
// allows a Sensor to represent a polymorphic list.

#ifndef SENSOR_H_STUB_2
#define SENSOR_H_STUB_2

33 34
#include "log.h"

35 36
class Sensor
{
37
public:
38
  Sensor();
39 40 41
  virtual ~Sensor();
  Sensor * getTail(void);
  void addNode(std::auto_ptr<Sensor> node);
42
  void capturePacket(PacketInfo * packet);
43 44
  bool isSendValid(void) const;
  bool isAckValid(void) const;
45 46 47
private:
  std::auto_ptr<Sensor> next;
protected:
48 49
  virtual void localSend(PacketInfo * packet)=0;
  virtual void localAck(PacketInfo * packet)=0;
50 51 52 53 54
protected:
  // This is used for functions which only yield data on a send.
  bool sendValid;
  // This is used for functions which only yield data on an ack.
  bool ackValid;
55 56 57 58 59
};

class NullSensor : public Sensor
{
public:
60
  NullSensor();
61
  virtual ~NullSensor();
62
protected:
63
  virtual void localSend(PacketInfo *);
64
  virtual void localAck(PacketInfo * packet);
65 66 67 68 69
  
  // This is used to detect packets that we see in a different order than
  // the appeared on the wire
  Time lastPacketTime;

70 71 72
};

#endif