A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ipv6-address.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007-2008 Louis Pasteur University
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
19  */
20 
21 #ifndef IPV6_ADDRESS_H
22 #define IPV6_ADDRESS_H
23 
24 #include <stdint.h>
25 #include <cstring>
26 
27 #include <ostream>
28 
29 #include "ns3/attribute-helper.h"
30 #include "ns3/address.h"
31 #include "ns3/ipv4-address.h"
32 
33 namespace ns3 {
34 
35 class Ipv6Prefix;
36 class Mac48Address;
37 
45 {
46 public:
50  Ipv6Address ();
51 
56  Ipv6Address (char const* address);
57 
63  Ipv6Address (uint8_t address[16]);
64 
69  Ipv6Address (Ipv6Address const & addr);
70 
75  Ipv6Address (Ipv6Address const* addr);
76 
80  ~Ipv6Address ();
81 
86  void Set (char const* address);
87 
94  void Set (uint8_t address[16]);
95 
102  bool IsEqual (const Ipv6Address& other) const;
103 
109  void Serialize (uint8_t buf[16]) const;
110 
116  static Ipv6Address Deserialize (const uint8_t buf[16]);
117 
124 
131 
137 
145 
152 
159  void Print (std::ostream& os) const;
160 
165  bool IsLocalhost () const;
166 
171  bool IsMulticast () const;
172 
177  bool IsLinkLocalMulticast () const;
178 
183  bool IsAllNodesMulticast () const;
184 
189  bool IsAllRoutersMulticast () const;
190 
195  bool IsAllHostsMulticast () const;
196 
201  bool IsLinkLocal () const;
202 
207  bool IsSolicitedMulticast () const;
208 
213  bool IsAny () const;
214 
221  Ipv6Address CombinePrefix (Ipv6Prefix const & prefix);
222 
228  static bool IsMatchingType (const Address& address);
229 
234  bool IsIpv4MappedAddress();
235 
239  operator Address () const;
240 
246  static Ipv6Address ConvertFrom (const Address& address);
247 
252  static Ipv6Address GetZero ();
253 
258  static Ipv6Address GetAny ();
259 
265 
271 
277 
282  static Ipv6Address GetLoopback ();
283 
288  static Ipv6Address GetOnes ();
289 
295  void GetBytes (uint8_t buf[16]) const;
296 
297 private:
302  Address ConvertTo (void) const;
303 
308  static uint8_t GetType (void);
309 
313  uint8_t m_address[16];
314 
315  friend bool operator == (Ipv6Address const &a, Ipv6Address const &b);
316  friend bool operator != (Ipv6Address const &a, Ipv6Address const &b);
317  friend bool operator < (Ipv6Address const &a, Ipv6Address const &b);
318 };
319 
327 {
328 public:
332  Ipv6Prefix ();
333 
338  Ipv6Prefix (uint8_t prefix[16]);
339 
344  Ipv6Prefix (char const* prefix);
345 
351  Ipv6Prefix (uint8_t prefix);
352 
357  Ipv6Prefix (Ipv6Prefix const& prefix);
358 
363  Ipv6Prefix (Ipv6Prefix const* prefix);
364 
368  ~Ipv6Prefix ();
369 
376  bool IsMatch (Ipv6Address a, Ipv6Address b) const;
377 
382  void GetBytes (uint8_t buf[16]) const;
383 
388  uint8_t GetPrefixLength () const;
389 
395  bool IsEqual (const Ipv6Prefix& other) const;
396 
403  void Print (std::ostream &os) const;
404 
409  static Ipv6Prefix GetLoopback ();
410 
415  static Ipv6Prefix GetOnes ();
416 
421  static Ipv6Prefix GetZero ();
422 
423 private:
427  uint8_t m_prefix[16];
428 };
429 
435 
441 
442 std::ostream& operator << (std::ostream& os, Ipv6Address const& address);
443 std::ostream& operator<< (std::ostream& os, Ipv6Prefix const& prefix);
444 std::istream & operator >> (std::istream &is, Ipv6Address &address);
445 std::istream & operator >> (std::istream &is, Ipv6Prefix &prefix);
446 
447 inline bool operator == (const Ipv6Address& a, const Ipv6Address& b)
448 {
449  return (!std::memcmp (a.m_address, b.m_address, 16));
450 }
451 
452 inline bool operator != (const Ipv6Address& a, const Ipv6Address& b)
453 {
454  return std::memcmp (a.m_address, b.m_address, 16);
455 }
456 
457 inline bool operator < (const Ipv6Address& a, const Ipv6Address& b)
458 {
459  return (std::memcmp (a.m_address, b.m_address, 16) < 0);
460 }
461 
466 class Ipv6AddressHash : public std::unary_function<Ipv6Address, size_t>
467 {
468 public:
473  size_t operator () (Ipv6Address const &x) const;
474 };
475 
476 bool operator == (Ipv6Prefix const &a, Ipv6Prefix const &b);
477 bool operator != (Ipv6Prefix const &a, Ipv6Prefix const &b);
478 
479 } /* namespace ns3 */
480 
481 #endif /* IPV6_ADDRESS_H */
482