A Discrete-Event Network Simulator
API
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#include "ns3/deprecated.h"
33#include "mac8-address.h"
34
35namespace ns3 {
36
37class Ipv6Prefix;
38class Mac16Address;
39class Mac48Address;
40class Mac64Address;
41
50{
51public:
55 Ipv6Address ();
56
61 Ipv6Address (char const* address);
62
68 Ipv6Address (uint8_t address[16]);
69
74 Ipv6Address (Ipv6Address const & addr);
75
80 Ipv6Address (Ipv6Address const* addr);
81
85 ~Ipv6Address ();
86
91 void Set (char const* address);
92
99 void Set (uint8_t address[16]);
100
106 void Serialize (uint8_t buf[16]) const;
107
113 static Ipv6Address Deserialize (const uint8_t buf[16]);
114
121
128
134
145
157
168
179
187
198
208
218
228
235
245
252 void Print (std::ostream& os) const;
253
258 bool IsLocalhost () const;
259
264 bool IsMulticast () const;
265
270 bool IsLinkLocalMulticast () const;
271
276 bool IsAllNodesMulticast () const;
277
282 bool IsAllRoutersMulticast () const;
283
288 bool IsLinkLocal () const;
289
294 bool IsSolicitedMulticast () const;
295
300 bool IsAny () const;
301
306 bool IsDocumentation () const;
307
313 bool HasPrefix (Ipv6Prefix const& prefix) const;
314
321 Ipv6Address CombinePrefix (Ipv6Prefix const & prefix) const;
322
328 static bool IsMatchingType (const Address& address);
329
334 bool IsIpv4MappedAddress() const;
335
339 operator Address () const;
340
346 static Ipv6Address ConvertFrom (const Address& address);
347
351 bool IsInitialized (void) const;
352
357 static Ipv6Address GetZero ();
358
363 static Ipv6Address GetAny ();
364
370
376
382
387 static Ipv6Address GetLoopback ();
388
393 static Ipv6Address GetOnes ();
394
399 void GetBytes (uint8_t buf[16]) const;
400
401private:
406 Address ConvertTo (void) const;
407
412 static uint8_t GetType (void);
413
417 uint8_t m_address[16];
419
427 friend bool operator == (Ipv6Address const &a, Ipv6Address const &b);
428
436 friend bool operator != (Ipv6Address const &a, Ipv6Address const &b);
437
445 friend bool operator < (Ipv6Address const &a, Ipv6Address const &b);
446};
447
456{
457public:
461 Ipv6Prefix ();
462
471 Ipv6Prefix (uint8_t prefix[16]);
472
481 Ipv6Prefix (char const* prefix);
482
488 Ipv6Prefix (uint8_t prefix[16], uint8_t prefixLength);
489
495 Ipv6Prefix (char const* prefix, uint8_t prefixLength);
496
502 Ipv6Prefix (uint8_t prefix);
503
508 Ipv6Prefix (Ipv6Prefix const& prefix);
509
514 Ipv6Prefix (Ipv6Prefix const* prefix);
515
519 ~Ipv6Prefix ();
520
527 bool IsMatch (Ipv6Address a, Ipv6Address b) const;
528
533 void GetBytes (uint8_t buf[16]) const;
534
540
545 uint8_t GetPrefixLength () const;
546
551 void SetPrefixLength (uint8_t prefixLength);
552
557 uint8_t GetMinimumPrefixLength () const;
558
565 void Print (std::ostream &os) const;
566
571 static Ipv6Prefix GetLoopback ();
572
577 static Ipv6Prefix GetOnes ();
578
583 static Ipv6Prefix GetZero ();
584
585private:
589 uint8_t m_prefix[16];
590
595
603 friend bool operator == (Ipv6Prefix const &a, Ipv6Prefix const &b);
604
612 friend bool operator != (Ipv6Prefix const &a, Ipv6Prefix const &b);
613};
614
617
625std::ostream & operator << (std::ostream& os, Ipv6Address const& address);
626
634std::ostream & operator << (std::ostream& os, Ipv6Prefix const& prefix);
635
643std::istream & operator >> (std::istream &is, Ipv6Address &address);
644
652std::istream & operator >> (std::istream &is, Ipv6Prefix &prefix);
653
654inline bool operator == (const Ipv6Address& a, const Ipv6Address& b)
655{
656 return (!std::memcmp (a.m_address, b.m_address, 16));
657}
658
659inline bool operator != (const Ipv6Address& a, const Ipv6Address& b)
660{
661 return std::memcmp (a.m_address, b.m_address, 16);
662}
663
664inline bool operator < (const Ipv6Address& a, const Ipv6Address& b)
665{
666 return (std::memcmp (a.m_address, b.m_address, 16) < 0);
667}
668
669inline bool operator == (const Ipv6Prefix& a, const Ipv6Prefix& b)
670{
671 return (!std::memcmp (a.m_prefix, b.m_prefix, 16));
672}
673
674inline bool operator != (const Ipv6Prefix& a, const Ipv6Prefix& b)
675{
676 return std::memcmp (a.m_prefix, b.m_prefix, 16);
677}
678
684{
685public:
691 size_t operator () (Ipv6Address const &x) const;
692};
693
694} /* namespace ns3 */
695
696#endif /* IPV6_ADDRESS_H */
697
a polymophic address class
Definition: address.h:91
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
Hash function class for IPv6 addresses.
Definition: ipv6-address.h:684
size_t operator()(Ipv6Address const &x) const
Returns the hash of an IPv6 address.
Describes an IPv6 address.
Definition: ipv6-address.h:50
bool IsLinkLocal() const
If the IPv6 address is a link-local address (fe80::/64).
bool IsSolicitedMulticast() const
If the IPv6 address is a Solicited multicast address.
static Ipv6Address GetAllNodesMulticast()
Get the "all nodes multicast" address.
void Print(std::ostream &os) const
Print this address to the given output stream.
Address ConvertTo(void) const
convert the IPv6Address object to an Address object.
static Ipv6Address MakeSolicitedAddress(Ipv6Address addr)
Make the solicited IPv6 address.
static Ipv6Address GetAny()
Get the "any" (::) Ipv6Address.
Ipv6Address CombinePrefix(Ipv6Prefix const &prefix) const
Combine this address with a prefix.
bool IsDocumentation() const
If the IPv6 address is a documentation address (2001:DB8::/32).
static Ipv6Address GetAllHostsMulticast()
Get the "all hosts multicast" address.
bool IsAllNodesMulticast() const
If the IPv6 address is "all nodes multicast" (ff02::1/8).
bool IsLinkLocalMulticast() const
If the IPv6 address is link-local multicast (ff02::/16).
static Ipv6Address Deserialize(const uint8_t buf[16])
Deserialize this address.
static Ipv6Address GetZero()
Get the 0 (::) Ipv6Address.
static Ipv6Address MakeAutoconfiguredAddress(Address addr, Ipv6Address prefix)
Make the autoconfigured IPv6 address from a Mac address.
~Ipv6Address()
Destructor.
bool IsMulticast() const
If the IPv6 address is multicast (ff00::/8).
void GetBytes(uint8_t buf[16]) const
Get the bytes corresponding to the address.
bool IsIpv4MappedAddress() const
If the address is an IPv4-mapped address.
friend bool operator!=(Ipv6Address const &a, Ipv6Address const &b)
Not equal to operator.
Definition: ipv6-address.h:659
void Serialize(uint8_t buf[16]) const
Serialize this address to a 16-byte buffer.
friend bool operator==(Ipv6Address const &a, Ipv6Address const &b)
Equal to operator.
Definition: ipv6-address.h:654
void Set(char const *address)
Sets an Ipv6Address by parsing the input C-string.
Ipv6Address()
Default constructor.
bool IsInitialized(void) const
bool IsAny() const
If the IPv6 address is the "Any" address.
static Ipv6Address GetAllRoutersMulticast()
Get the "all routers multicast" address.
bool IsLocalhost() const
If the IPv6 address is localhost (::1).
bool m_initialized
IPv6 address has been explicitly initialized to a valid value.
Definition: ipv6-address.h:418
uint8_t m_address[16]
The address representation on 128 bits (16 bytes).
Definition: ipv6-address.h:417
static Ipv6Address ConvertFrom(const Address &address)
Convert the Address object into an Ipv6Address ones.
static Ipv6Address GetOnes()
Get the "all-1" IPv6 address (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
static Ipv6Address MakeAutoconfiguredLinkLocalAddress(Address mac)
Make the autoconfigured link-local IPv6 address from a Mac address.
Ipv4Address GetIpv4MappedAddress() const
Return the Ipv4 address.
static bool IsMatchingType(const Address &address)
If the Address matches the type.
bool HasPrefix(Ipv6Prefix const &prefix) const
Compares an address and a prefix.
static Ipv6Address MakeIpv4MappedAddress(Ipv4Address addr)
Make the Ipv4-mapped IPv6 address.
static uint8_t GetType(void)
Return the Type of address.
friend bool operator<(Ipv6Address const &a, Ipv6Address const &b)
Less than to operator.
Definition: ipv6-address.h:664
static Ipv6Address GetLoopback()
Get the loopback address.
bool IsAllRoutersMulticast() const
If the IPv6 address is "all routers multicast" (ff02::2/8).
Describes an IPv6 prefix.
Definition: ipv6-address.h:456
uint8_t m_prefixLength
The prefix length.
Definition: ipv6-address.h:594
static Ipv6Prefix GetLoopback()
Get the loopback prefix ( /128).
~Ipv6Prefix()
Destructor.
uint8_t m_prefix[16]
The prefix representation.
Definition: ipv6-address.h:589
void Print(std::ostream &os) const
Print this address to the given output stream.
uint8_t GetPrefixLength() const
Get prefix length.
Ipv6Address ConvertToIpv6Address() const
Convert the Prefix into an IPv6 Address.
friend bool operator==(Ipv6Prefix const &a, Ipv6Prefix const &b)
Equal to operator.
Definition: ipv6-address.h:669
static Ipv6Prefix GetZero()
Get the zero prefix ( /0).
bool IsMatch(Ipv6Address a, Ipv6Address b) const
If the Address match the type.
friend bool operator!=(Ipv6Prefix const &a, Ipv6Prefix const &b)
Not equal to operator.
Definition: ipv6-address.h:674
static Ipv6Prefix GetOnes()
Get the "all-1" IPv6 mask (ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff).
void SetPrefixLength(uint8_t prefixLength)
Set prefix length.
Ipv6Prefix()
Default constructor.
uint8_t GetMinimumPrefixLength() const
Get the minimum prefix length, i.e., 128 - the length of the largest sequence trailing zeroes.
void GetBytes(uint8_t buf[16]) const
Get the bytes corresponding to the prefix.
This class can contain 16 bit addresses.
Definition: mac16-address.h:42
an EUI-48 address
Definition: mac48-address.h:44
an EUI-64 address
Definition: mac64-address.h:44
A class used for addressing MAC8 MAC's.
Definition: mac8-address.h:43
address
Definition: first.py:44
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool operator==(const EventId &a, const EventId &b)
Definition: event-id.h:158
ATTRIBUTE_HELPER_HEADER(ValueClassTest)
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139
std::istream & operator>>(std::istream &is, Angles &a)
Definition: angles.cc:162
bool operator<(const EventId &a, const EventId &b)
Definition: event-id.h:176
bool operator!=(Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > a, Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 > b)
Inequality test.
Definition: callback.h:1612
list x
Random number samples.
mac
Definition: third.py:96