Index: src/devices/uan/uan-net-device.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/devices/uan/uan-net-device.h
@@ -0,0 +1,142 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 University of Washington
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Author: Leonard Tracy
+ *
+ *
+ */
+
+#ifndef UAN_NET_DEVICE_H
+#define UAN_NET_DEVICE_H
+
+#include "ns3/net-device.h"
+#include "ns3/pointer.h"
+#include "ns3/traced-callback.h"
+#include "uan-address.h"
+#include
+
+namespace ns3
+{
+
+class UanChannel;
+class UanPhy;
+class UanMac;
+class UanTransducer;
+
+/**
+ * \class UanNetDevice
+ *
+ * \brief Net device for UAN models
+ */
+class UanNetDevice : public NetDevice
+{
+public:
+ typedef std::list > UanPhyList;
+ typedef std::list > UanTransducerList;
+
+ static TypeId GetTypeId (void);
+
+ UanNetDevice ();
+ virtual ~UanNetDevice ();
+
+ /**
+ * \param mac Set MAC layer for this device
+ */
+ void SetMac (Ptr mac);
+
+ /**
+ * \param phy Set PHY layer for this device
+ */
+ void SetPhy (Ptr phy);
+
+ /**
+ * \param channel The channel this device is attached to
+ */
+ void SetChannel (Ptr channel);
+
+ /**
+ * \returns MAC this device is using
+ */
+ Ptr GetMac (void) const;
+
+ /**
+ * \returns PHY this device is using
+ */
+ Ptr GetPhy (void) const;
+
+ /**
+ * \returns Transducer in net device
+ */
+ Ptr GetTransducer (void) const;
+ /**
+ * \param trans Transducer to use in this net device
+ */
+ void SetTransducer (Ptr trans);
+
+ // Purely virtual functions from base class
+ virtual void SetName (const std::string name);
+ virtual std::string GetName (void) const;
+ virtual void SetIfIndex (const uint32_t index);
+ virtual uint32_t GetIfIndex (void) const;
+ virtual Ptr GetChannel (void) const;
+ virtual Address GetAddress (void) const;
+ virtual bool SetMtu (const uint16_t mtu);
+ virtual uint16_t GetMtu (void) const;
+ virtual bool IsLinkUp (void) const;
+ virtual void SetLinkChangeCallback (Callback callback);
+ virtual bool IsBroadcast (void) const;
+ virtual Address GetBroadcast (void) const;
+ virtual bool IsMulticast (void) const;
+ virtual Address GetMulticast (Ipv4Address multicastGroup) const;
+ virtual Address GetMulticast (Ipv6Address addr) const;
+ virtual bool IsBridge (void) const ;
+ virtual bool IsPointToPoint (void) const;
+ virtual bool Send (Ptr packet, const Address& dest, uint16_t protocolNumber);
+ virtual bool SendFrom (Ptr packet, const Address& source, const Address& dest, uint16_t protocolNumber);
+ virtual Ptr GetNode (void) const;
+ virtual void SetNode (Ptr node);
+ virtual bool NeedsArp (void) const;
+ virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
+ virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
+ virtual bool SupportsSendFrom (void) const;
+private:
+
+ virtual void ForwardUp (Ptr pkt, const UanAddress &src);
+ Ptr DoGetChannel(void) const;
+
+ Ptr m_trans;
+ Ptr m_node;
+ Ptr m_channel;
+ Ptr m_mac;
+ Ptr m_phy;
+
+ std::string m_name;
+ uint32_t m_ifIndex;
+ uint16_t m_mtu;
+ bool m_linkup;
+ Callback m_linkchange;
+ ReceiveCallback m_forwardUp;
+
+ TracedCallback, UanAddress> m_rxLogger;
+ TracedCallback, UanAddress> m_txLogger;
+protected:
+ virtual void DoDispose ();
+};
+
+} // namespace ns3
+
+#endif /* UAN_NET_DEVICE_H */