Index: src/devices/uan/uan-address.h |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/src/devices/uan/uan-address.h |
@@ -0,0 +1,102 @@ |
+/* -*- 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 <http://www.gnu.org/licenses/>. |
+ * |
+ * Author: Leonard Tracy <lentracy@u.washington.edu> |
+ * |
+ * |
+ */ |
+ |
+ |
+#ifndef UANADDRESS_H_ |
+#define UANADDRESS_H_ |
+ |
+#include "ns3/address.h" |
+#include <iostream> |
+ |
+namespace ns3 |
+{ |
+ |
+/** |
+ * \class UanAddress |
+ * |
+ * A class used for addressing UAN MAC's. This implementation uses a simple 8 bit |
+ * flat addressing scheme. It is unlikely that perceived underwater networks will |
+ * soon exceed 200 nodes (or the overlapping of two underwater networks - the ocean is big), |
+ * so this should provide adequate addressing for most applications. |
+ */ |
+class UanAddress |
+{ |
+public: |
+ UanAddress (); |
+ |
+ UanAddress (uint8_t addr); |
+ virtual ~UanAddress (); |
+ |
+ /** |
+ * \param address Address to convert to UAN address |
+ * \returns UanAddress from Address |
+ */ |
+ static UanAddress ConvertFrom (const Address &address); |
+ /** |
+ * \param address Address to test |
+ * \returns True if address given is consistant with UanAddress |
+ */ |
+ static bool IsMatchingType (const Address &address); |
+ operator Address () const; |
+ |
+ void CopyFrom (const uint8_t *pBuffer); |
+ void CopyTo (uint8_t *pBuffer); |
+ |
+ /** |
+ * \returns 8 bit integer version of address |
+ */ |
+ uint8_t GetAsInt (void) const; |
+ |
+ /** |
+ * \returns Broadcast address: 255 |
+ */ |
+ static UanAddress GetBroadcast (void); |
+ |
+ /** |
+ * \brief Allocates UanAddress from 0-254 (will wrap back to 0 if more than 255 are allocated) |
+ */ |
+ static UanAddress Allocate (); |
+ |
+ |
+private: |
+ uint8_t m_address; |
+ |
+ static uint8_t GetType (void); |
+ Address ConvertTo (void) const; |
+ |
+ friend bool operator == (const UanAddress &a, const UanAddress &b); |
+ friend bool operator != (const UanAddress &a, const UanAddress &b); |
+ friend std::ostream& operator<< (std::ostream& os, const UanAddress & address); |
+ friend std::istream& operator>> (std::istream& is, UanAddress & address); |
+ |
+}; |
+ |
+ |
+ |
+bool operator == (const UanAddress &a, const UanAddress &b); |
+bool operator != (const UanAddress &a, const UanAddress &b); |
+std::ostream& operator<< (std::ostream& os, const UanAddress & address); |
+std::istream& operator>> (std::istream& is, UanAddress & address); |
+ |
+} //namespace ns3 |
+ |
+#endif /*UANADDRESS_H_*/ |