/usr/include/ns3.27/ns3/ipv4-interface-address.h is in libns3-dev 3.27+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2008 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 version 2 as
* published by the Free Software Foundation;
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef IPV4_INTERFACE_ADDRESS_H
#define IPV4_INTERFACE_ADDRESS_H
#include <stdint.h>
#include <ostream>
#include "ns3/ipv4-address.h"
namespace ns3 {
/**
* \ingroup address
* \ingroup ipv4
*
* \brief a class to store IPv4 address information on an interface
*
* Corresponds to Linux struct in_ifaddr. A list of these addresses
* is stored in Ipv4Interface. This class is modelled after how current
* Linux handles IP aliasing for IPv4. Notably, aliasing of IPv4
* interfaces (e.g., "eth0:1") is not used, and instead an interface
* is assigned possibly multiple addresses, with each address being
* classified as being primary and secondary. See the iproute2
* documentation for this distinction.
*/
class Ipv4InterfaceAddress
{
public:
/**
* \enum InterfaceAddressScope_e
* \brief Address scope.
*/
enum InterfaceAddressScope_e {
HOST,
LINK,
GLOBAL
};
Ipv4InterfaceAddress ();
/**
* \brief Configure local address, mask and broadcast address
* \param local the local address
* \param mask the network mask
*/
Ipv4InterfaceAddress (Ipv4Address local, Ipv4Mask mask);
/**
* Copy constructor
* \param o the object to copy
*/
Ipv4InterfaceAddress (const Ipv4InterfaceAddress &o);
/**
* \brief Set local address
* \param local the address
*/
void SetLocal (Ipv4Address local);
/**
* \brief Get the local address
* \returns the local address
*/
Ipv4Address GetLocal (void) const;
/**
* \brief Set the network mask
* \param mask the network mask
*/
void SetMask (Ipv4Mask mask);
/**
* \brief Get the network mask
* \returns the network mask
*/
Ipv4Mask GetMask (void) const;
/**
* \brief Set the broadcast address
* \param broadcast the broadcast address
*/
void SetBroadcast (Ipv4Address broadcast);
/**
* \brief Get the broadcast address
* \returns the broadcast address
*/
Ipv4Address GetBroadcast (void) const;
/**
* \brief Set the scope.
* \param scope the scope of address
*/
void SetScope (Ipv4InterfaceAddress::InterfaceAddressScope_e scope);
/**
* \brief Get address scope.
* \return scope
*/
Ipv4InterfaceAddress::InterfaceAddressScope_e GetScope (void) const;
/**
* \brief Check if the address is a secondary address
*
* Secondary address is used for multihoming
* \returns true if the address is secondary
*/
bool IsSecondary (void) const;
/**
* \brief Make the address secondary (used for multihoming)
*/
void SetSecondary (void);
/**
* \brief Make the address primary
*/
void SetPrimary (void);
private:
Ipv4Address m_local; //!< Interface address
// Note: m_peer may be added in future when necessary
// Ipv4Address m_peer; // Peer destination address (in Linux: m_address)
Ipv4Mask m_mask; //!< Network mask
Ipv4Address m_broadcast; //!< Broadcast address
InterfaceAddressScope_e m_scope; //!< Address scope
bool m_secondary; //!< For use in multihoming
/**
* \brief Equal to operator.
*
* \param a the first operand
* \param b the first operand
* \returns true if the operands are equal
*/
friend bool operator == (Ipv4InterfaceAddress const &a, Ipv4InterfaceAddress const &b);
/**
* \brief Not equal to operator.
*
* \param a the first operand
* \param b the first operand
* \returns true if the operands are not equal
*/
friend bool operator != (Ipv4InterfaceAddress const &a, Ipv4InterfaceAddress const &b);
};
/**
* \brief Stream insertion operator.
*
* \param os the reference to the output stream
* \param addr the Ipv4InterfaceAddress
* \returns the reference to the output stream
*/
std::ostream& operator<< (std::ostream& os, const Ipv4InterfaceAddress &addr);
inline bool operator == (const Ipv4InterfaceAddress &a, const Ipv4InterfaceAddress &b)
{
return (a.m_local == b.m_local && a.m_mask == b.m_mask &&
a.m_broadcast == b.m_broadcast && a.m_scope == b.m_scope && a.m_secondary == b.m_secondary);
}
inline bool operator != (const Ipv4InterfaceAddress &a, const Ipv4InterfaceAddress &b)
{
return (a.m_local != b.m_local || a.m_mask != b.m_mask ||
a.m_broadcast != b.m_broadcast || a.m_scope != b.m_scope || a.m_secondary != b.m_secondary);
}
} // namespace ns3
#endif /* IPV4_ADDRESS_H */
|