|
INET Framework for OMNeT++/OMNEST
|
Ipv4-specific data in an NetworkInterface.
More...
#include <Ipv4InterfaceData.h>
|
| enum | {
F_IP_ADDRESS,
F_NETMASK,
F_METRIC,
F_MULTICAST_TTL_THRESHOLD,
F_MULTICAST_ADDRESSES,
F_MULTICAST_LISTENERS
} |
| |
| typedef std::vector< Ipv4Address > | Ipv4AddressVector |
| |
| enum | PrintLevel {
PRINT_LEVEL_TRACE,
PRINT_LEVEL_DEBUG,
PRINT_LEVEL_DETAIL,
PRINT_LEVEL_INFO,
PRINT_LEVEL_COMPLETE = INT_MIN
} |
| |
| enum | PrintFlag { PRINT_FLAG_FORMATTED = (1 << 0),
PRINT_FLAG_MULTILINE = (1 << 1)
} |
| |
|
| | Ipv4InterfaceData () |
| |
| virtual | ~Ipv4InterfaceData () |
| |
| virtual std::string | str () const override |
| |
| virtual std::string | detailedInfo () const |
| |
|
| Ipv4Address | getIPAddress () const |
| |
| Ipv4Address | getNetmask () const |
| |
| Ipv4Address | getNetworkBroadcastAddress () const |
| |
| int | getMetric () const |
| |
| int | getMulticastTtlThreshold () const |
| |
| int | getNumOfJoinedMulticastGroups () const |
| |
| Ipv4Address | getJoinedMulticastGroup (int index) const |
| |
| const Ipv4MulticastSourceList & | getJoinedMulticastSources (int index) |
| |
| int | getNumOfReportedMulticastGroups () const |
| |
| Ipv4Address | getReportedMulticastGroup (int index) const |
| |
| const Ipv4MulticastSourceList & | getReportedMulticastSources (int index) const |
| |
| bool | isMemberOfMulticastGroup (const Ipv4Address &multicastAddress) const |
| |
| bool | hasMulticastListener (Ipv4Address multicastAddress) const |
| |
| bool | hasMulticastListener (Ipv4Address multicastAddress, Ipv4Address sourceAddress) const |
| |
|
| virtual void | setIPAddress (Ipv4Address a) |
| |
| virtual void | setNetmask (Ipv4Address m) |
| |
| virtual void | setMetric (int m) |
| |
| virtual void | setMulticastTtlThreshold (int threshold) |
| |
| virtual void | joinMulticastGroup (const Ipv4Address &multicastAddress) |
| |
| virtual void | leaveMulticastGroup (const Ipv4Address &multicastAddress) |
| |
| virtual void | changeMulticastGroupMembership (Ipv4Address multicastAddress, McastSourceFilterMode oldFilterMode, const Ipv4AddressVector &oldSourceList, McastSourceFilterMode newFilterMode, const Ipv4AddressVector &newSourceList) |
| | This method is called by sockets to register their multicast group membership changes in the interface. More...
|
| |
| virtual void | addMulticastListener (const Ipv4Address &multicastAddress) |
| |
| virtual void | addMulticastListener (Ipv4Address multicastAddress, Ipv4Address sourceAddress) |
| |
| virtual void | removeMulticastListener (const Ipv4Address &multicastAddress) |
| |
| virtual void | removeMulticastListener (Ipv4Address multicastAddress, Ipv4Address sourceAddress) |
| |
| virtual void | setMulticastListeners (Ipv4Address multicastAddress, McastSourceFilterMode filterMode, const Ipv4AddressVector &sourceList) |
| |
| | InterfaceProtocolData (int id) |
| |
| NetworkInterface * | getNetworkInterface () const |
| | Returns the NetworkInterface that contains this data object, or nullptr. More...
|
| |
| virtual const Ptr< TagBase > | dupShared () const |
| |
| virtual const Ptr< TagBase > | changeRegion (b offsetDelta, b lengthDelta) const |
| |
| virtual void | parsimPack (cCommBuffer *buffer) const override |
| |
| virtual void | parsimUnpack (cCommBuffer *buffer) override |
| |
| virtual std::ostream & | printToStream (std::ostream &stream, int level, int evFlags) const override |
| | Prints this object to the provided output stream. More...
|
| |
| virtual std::ostream & | printFieldsToStream (std::ostream &stream, int level, int evFlags) const |
| |
| virtual | ~IPrintableObject () |
| |
| virtual std::string | printToString () const |
| |
| virtual std::string | printToString (int level, int evFlags=0) const |
| |
| virtual std::string | getInfoStringRepresentation (int evFlags=0) const |
| |
| virtual std::string | getDetailStringRepresentation (int evFlags=0) const |
| |
| virtual std::string | getDebugStringRepresentation (int evFlags=0) const |
| |
| virtual std::string | getTraceStringRepresentation (int evFlags=0) const |
| |
| virtual std::string | getCompleteStringRepresentation (int evFlags=0) const |
| |
Ipv4-specific data in an NetworkInterface.
Stores interface Ipv4 address, netmask, metric, etc.
- See also
- NetworkInterface
◆ HostMulticastGroupVector
◆ Ipv4AddressVector
◆ RouterMulticastGroupVector
◆ anonymous enum
| Enumerator |
|---|
| F_IP_ADDRESS | |
| F_NETMASK | |
| F_METRIC | |
| F_MULTICAST_TTL_THRESHOLD | |
| F_MULTICAST_ADDRESSES | |
| F_MULTICAST_LISTENERS | |
◆ Ipv4InterfaceData() [1/2]
◆ Ipv4InterfaceData() [2/2]
| inet::Ipv4InterfaceData::Ipv4InterfaceData |
( |
| ) |
|
◆ ~Ipv4InterfaceData()
| inet::Ipv4InterfaceData::~Ipv4InterfaceData |
( |
| ) |
|
|
virtual |
◆ addMulticastListener() [1/2]
| void inet::Ipv4InterfaceData::addMulticastListener |
( |
const Ipv4Address & |
multicastAddress | ) |
|
|
virtual |
351 if (!multicastAddress.isMulticast())
352 throw cRuntimeError(
"Ipv4InterfaceData::addMulticastListener(): multicast address expected, received %s.", multicastAddress.str().c_str());
356 groupData =
new RouterMulticastGroupData(multicastAddress);
363 if (!groupData->sourceList.containsAll()) {
◆ addMulticastListener() [2/2]
| void inet::Ipv4InterfaceData::addMulticastListener |
( |
Ipv4Address |
multicastAddress, |
|
|
Ipv4Address |
sourceAddress |
|
) |
| |
|
virtual |
371 if (!multicastAddress.isMulticast())
372 throw cRuntimeError(
"Ipv4InterfaceData::addMulticastListener(): multicast address expected, received %s.", multicastAddress.str().c_str());
376 groupData =
new RouterMulticastGroupData(multicastAddress);
383 if (!groupData->sourceList.contains(sourceAddress)) {
384 groupData->sourceList.add(sourceAddress);
◆ changed1()
| void inet::Ipv4InterfaceData::changed1 |
( |
int |
fieldId | ) |
|
|
inlineprotected |
◆ changeMulticastGroupMembership()
This method is called by sockets to register their multicast group membership changes in the interface.
215 if (!multicastAddress.isMulticast())
216 throw cRuntimeError(
"Ipv4InterfaceData::changeMulticastGroupMembership(): multicast address expected, received %s.", multicastAddress.str().c_str());
222 data->joinedMulticastGroups.push_back(
new HostMulticastGroupData(multicastAddress));
223 entry = data->joinedMulticastGroups.back();
226 std::map<Ipv4Address, int> *counts = oldFilterMode ==
MCAST_INCLUDE_SOURCES ? &entry->includeCounts : &entry->excludeCounts;
227 for (
const auto& elem : oldSourceList) {
228 auto count = counts->find(elem);
229 if (
count == counts->end())
230 throw cRuntimeError(
"Inconsistent reference counts in Ipv4InterfaceData.");
231 else if (
count->second == 1)
232 counts->erase(
count);
238 for (
const auto& elem : newSourceList) {
239 auto count = counts->find(elem);
240 if (
count == counts->end())
248 entry->numOfExcludeModeSockets++;
250 entry->numOfExcludeModeSockets--;
253 bool changed = entry->updateSourceList();
260 Ipv4MulticastGroupSourceInfo info(
ownerp, multicastAddress, entry->sourceList);
265 if (oldFilterMode != newFilterMode && oldSourceList.empty() && newSourceList.empty()) {
268 Ipv4MulticastGroupInfo info2(
ownerp, multicastAddress);
274 if (entry->sourceList.isEmpty()) {
Referenced by joinMulticastGroup(), and leaveMulticastGroup().
◆ detailedInfo()
| std::string inet::Ipv4InterfaceData::detailedInfo |
( |
| ) |
const |
|
virtual |
174 std::stringstream out;
176 out <<
"Metric: " <<
getMetric() <<
"\n";
◆ findHostGroupData()
457 ASSERT(multicastAddress.isMulticast());
459 for (
auto& entrie : entries)
460 if ((entrie)->multicastGroup == multicastAddress)
Referenced by changeMulticastGroupMembership().
◆ findRouterGroupData()
◆ getHostData() [1/2]
◆ getHostData() [2/2]
◆ getIPAddress()
| Ipv4Address inet::Ipv4InterfaceData::getIPAddress |
( |
| ) |
const |
|
inline |
Referenced by inet::DhcpClient::chooseInterface(), inet::Ipv4RoutingTable::configureRouterId(), inet::sctp::SctpNatHook::datagramForwardHook(), detailedInfo(), inet::ospfv3::Ospfv3Interface::detailedInfo(), inet::bgp::BgpConfigReader::findMyAS(), inet::Ipv4::fragmentPostRouting(), inet::Ipv4RoutingTable::gatherAddresses(), inet::Dsdv::handleMessageWhenUp(), inet::LinkStateRouting::initialize(), inet::Ted::initializeTED(), inet::bgp::BgpConfigReader::isInInterfaceTable(), inet::PimDm::multicastPacketArrivedOnNonRpfInterface(), inet::PimSm::multicastPacketArrivedOnNonRpfInterface(), inet::bgp::BgpRouter::openTCPConnectionToPeer(), inet::Icmp::possiblyLocalBroadcast(), inet::Ipv4::preroutingFinish(), inet::Ipv4RoutingTable::printRoutingTable(), inet::PimDm::processAssert(), inet::PimSm::processAssertG(), inet::PimSm::processAssertSG(), inet::DhcpServer::processDhcpMessage(), inet::PimDm::processGraftAckPacket(), inet::PimDm::processJoin(), inet::PimSm::processJoinG(), inet::PimSm::processJoinSG(), inet::PimDm::processPrune(), inet::PimSm::processPruneG(), inet::PimSm::processPruneSG(), inet::Igmpv3::processQuery(), inet::DhcpServer::sendAck(), inet::DhcpServer::sendNak(), inet::DhcpServer::sendOffer(), inet::RsvpTe::setupHello(), str(), inet::InterfaceTable::updateLinkDisplayString(), and inet::bgp::BgpRouter::updateSendProcess().
◆ getJoinedMulticastGroup()
| Ipv4Address inet::Ipv4InterfaceData::getJoinedMulticastGroup |
( |
int |
index | ) |
const |
|
inline |
◆ getJoinedMulticastSources()
◆ getMetric()
| int inet::Ipv4InterfaceData::getMetric |
( |
| ) |
const |
|
inline |
◆ getMulticastTtlThreshold()
| int inet::Ipv4InterfaceData::getMulticastTtlThreshold |
( |
| ) |
const |
|
inline |
◆ getNetmask()
| Ipv4Address inet::Ipv4InterfaceData::getNetmask |
( |
| ) |
const |
|
inline |
◆ getNetworkBroadcastAddress()
| Ipv4Address inet::Ipv4InterfaceData::getNetworkBroadcastAddress |
( |
| ) |
const |
|
inline |
◆ getNumOfJoinedMulticastGroups()
| int inet::Ipv4InterfaceData::getNumOfJoinedMulticastGroups |
( |
| ) |
const |
|
inline |
◆ getNumOfReportedMulticastGroups()
| int inet::Ipv4InterfaceData::getNumOfReportedMulticastGroups |
( |
| ) |
const |
|
inline |
◆ getReportedMulticastGroup()
| Ipv4Address inet::Ipv4InterfaceData::getReportedMulticastGroup |
( |
int |
index | ) |
const |
|
inline |
◆ getReportedMulticastSources()
◆ getRouterData() [1/2]
◆ getRouterData() [2/2]
◆ hasMulticastListener() [1/2]
| bool inet::Ipv4InterfaceData::hasMulticastListener |
( |
Ipv4Address |
multicastAddress | ) |
const |
◆ hasMulticastListener() [2/2]
| bool inet::Ipv4InterfaceData::hasMulticastListener |
( |
Ipv4Address |
multicastAddress, |
|
|
Ipv4Address |
sourceAddress |
|
) |
| const |
346 return groupData && !groupData->sourceList.contains(sourceAddress);
◆ isMemberOfMulticastGroup()
| bool inet::Ipv4InterfaceData::isMemberOfMulticastGroup |
( |
const Ipv4Address & |
multicastAddress | ) |
const |
◆ joinMulticastGroup()
| void inet::Ipv4InterfaceData::joinMulticastGroup |
( |
const Ipv4Address & |
multicastAddress | ) |
|
|
virtual |
◆ leaveMulticastGroup()
| void inet::Ipv4InterfaceData::leaveMulticastGroup |
( |
const Ipv4Address & |
multicastAddress | ) |
|
|
virtual |
◆ operator=()
◆ removeHostGroupData()
| bool inet::Ipv4InterfaceData::removeHostGroupData |
( |
Ipv4Address |
multicastAddress | ) |
|
|
protected |
468 ASSERT(multicastAddress.isMulticast());
470 for (
auto it = entries.begin(); it != entries.end(); ++it)
471 if ((*it)->multicastGroup == multicastAddress) {
Referenced by changeMulticastGroupMembership().
◆ removeMulticastListener() [1/2]
| void inet::Ipv4InterfaceData::removeMulticastListener |
( |
const Ipv4Address & |
multicastAddress | ) |
|
|
virtual |
393 int n = multicastGroups.size();
395 for (i = 0; i < n; i++)
396 if (multicastGroups[i]->multicastGroup == multicastAddress)
400 delete multicastGroups[i];
401 multicastGroups.erase(multicastGroups.begin() + i);
◆ removeMulticastListener() [2/2]
| void inet::Ipv4InterfaceData::removeMulticastListener |
( |
Ipv4Address |
multicastAddress, |
|
|
Ipv4Address |
sourceAddress |
|
) |
| |
|
virtual |
413 int n = multicastGroups.size();
415 for (i = 0; i < n; i++)
416 if (multicastGroups[i]->multicastGroup == multicastAddress)
420 multicastGroups[i]->sourceList.remove(sourceAddress);
421 if (multicastGroups[i]->sourceList.isEmpty()) {
422 delete multicastGroups[i];
423 multicastGroups.erase(multicastGroups.begin() + i);
◆ removeRouterGroupData()
| bool inet::Ipv4InterfaceData::removeRouterGroupData |
( |
Ipv4Address |
multicastAddress | ) |
|
|
protected |
326 ASSERT(multicastAddress.isMulticast());
328 for (
auto it = entries.begin(); it != entries.end(); ++it)
329 if ((*it)->multicastGroup == multicastAddress) {
Referenced by setMulticastListeners().
◆ setIPAddress()
| virtual void inet::Ipv4InterfaceData::setIPAddress |
( |
Ipv4Address |
a | ) |
|
|
inlinevirtual |
◆ setMetric()
| virtual void inet::Ipv4InterfaceData::setMetric |
( |
int |
m | ) |
|
|
inlinevirtual |
◆ setMulticastListeners()
434 if (!multicastAddress.isMulticast())
435 throw cRuntimeError(
"Ipv4InterfaceData::setMulticastListeners(): multicast address expected, received %s.", multicastAddress.str().c_str());
439 groupData =
new RouterMulticastGroupData(multicastAddress);
443 if (filterMode != groupData->sourceList.filterMode || sourceList != groupData->sourceList.sources) {
445 groupData->sourceList.filterMode = filterMode;
446 groupData->sourceList.sources = sourceList;
◆ setMulticastTtlThreshold()
| virtual void inet::Ipv4InterfaceData::setMulticastTtlThreshold |
( |
int |
threshold | ) |
|
|
inlinevirtual |
◆ setNetmask()
| virtual void inet::Ipv4InterfaceData::setNetmask |
( |
Ipv4Address |
m | ) |
|
|
inlinevirtual |
◆ str()
| std::string inet::Ipv4InterfaceData::str |
( |
| ) |
const |
|
overridevirtual |
◆ hostData
◆ inetAddr
Ipv4 address of interface.
◆ metric
| int inet::Ipv4InterfaceData::metric |
|
protected |
◆ netmask
◆ routerData
The documentation for this class was generated from the following files:
@ F_MULTICAST_TTL_THRESHOLD
Definition: Ipv4InterfaceData.h:78
int metric
link "cost"; see e.g. MS KB article Q299540
Definition: Ipv4InterfaceData.h:128
NetworkInterface * getNetworkInterface() const
Returns the NetworkInterface that contains this data object, or nullptr.
Definition: NetworkInterface.h:67
@ F_IPV4_DATA
Definition: NetworkInterface.h:150
simsignal_t ipv4MulticastGroupLeftSignal
Definition: Simsignals.cc:50
HostMulticastData * getHostData()
Definition: Ipv4InterfaceData.h:134
const char empty[]
Definition: ConstType.h:29
@ F_NETMASK
Definition: Ipv4InterfaceData.h:78
std::string str()
Definition: Ipv4InterfaceData.cc:83
int getNetmaskLength() const
Counts 1 bits in a netmask.
Definition: Ipv4Address.cc:234
int count(const std::vector< T > &v, const Tk &a)
Definition: stlutils.h:54
simsignal_t ipv4MulticastGroupJoinedSignal
Definition: Simsignals.cc:49
simsignal_t ipv4MulticastChangeSignal
Definition: Simsignals.cc:51
NetworkInterface * ownerp
Definition: NetworkInterface.h:54
std::string detailedInfo()
Definition: Ipv4InterfaceData.cc:132
static const Ipv4MulticastSourceList ALL_SOURCES
Definition: Ipv4InterfaceData.h:28
static const Ipv4Address ALLONES_ADDRESS
255.255.255.255
Definition: Ipv4Address.h:94
std::vector< Ipv4Address > Ipv4AddressVector
Definition: Ipv4InterfaceData.h:75
RouterMulticastData * routerData
Definition: Ipv4InterfaceData.h:130
std::string detailedInfo()
Definition: Ipv4InterfaceData.cc:97
virtual void changeMulticastGroupMembership(Ipv4Address multicastAddress, McastSourceFilterMode oldFilterMode, const Ipv4AddressVector &oldSourceList, McastSourceFilterMode newFilterMode, const Ipv4AddressVector &newSourceList)
This method is called by sockets to register their multicast group membership changes in the interfac...
Definition: Ipv4InterfaceData.cc:211
InterfaceProtocolData(int id)
Definition: NetworkInterface.h:62
simsignal_t ipv4MulticastGroupRegisteredSignal
Definition: Simsignals.cc:52
HostMulticastData * hostData
Definition: Ipv4InterfaceData.h:129
Ipv4Address getNetmask() const
Definition: Ipv4InterfaceData.h:157
IInterfaceTable * getInterfaceTable() const
Returns the IInterfaceTable this interface is in, or nullptr.
Definition: NetworkInterface.h:205
@ F_MULTICAST_ADDRESSES
Definition: Ipv4InterfaceData.h:78
Ipv4InterfaceData()
Definition: Ipv4InterfaceData.cc:145
void changed1(int fieldId)
Definition: Ipv4InterfaceData.h:133
HostMulticastGroupVector joinedMulticastGroups
Definition: Ipv4InterfaceData.h:99
std::vector< RouterMulticastGroupData * > RouterMulticastGroupVector
Definition: Ipv4InterfaceData.h:114
@ F_IP_ADDRESS
Definition: Ipv4InterfaceData.h:78
virtual void changed(simsignal_t signalID, int fieldId)
Definition: NetworkInterface.cc:50
bool removeRouterGroupData(Ipv4Address multicastAddress)
Definition: Ipv4InterfaceData.cc:324
RouterMulticastGroupData * findRouterGroupData(Ipv4Address multicastAddress) const
Definition: Ipv4InterfaceData.cc:313
int getMetric() const
Definition: Ipv4InterfaceData.h:159
simsignal_t ipv4MulticastGroupUnregisteredSignal
Definition: Simsignals.cc:53
HostMulticastGroupData * findHostGroupData(Ipv4Address multicastAddress)
Definition: Ipv4InterfaceData.cc:455
Ipv4Address makeBroadcastAddress(Ipv4Address netmask) const
Returns the broadcast address for the given netmask.
Definition: Ipv4Address.cc:264
simsignal_t interfaceIpv4ConfigChangedSignal
Definition: Simsignals.cc:35
Ipv4Address netmask
netmask
Definition: Ipv4InterfaceData.h:127
@ F_METRIC
Definition: Ipv4InterfaceData.h:78
RouterMulticastData * getRouterData()
Definition: Ipv4InterfaceData.h:138
int multicastTtlThreshold
multicast ttl threshold, used by multicast routers to limit multicast scope
Definition: Ipv4InterfaceData.h:118
@ F_MULTICAST_LISTENERS
Definition: Ipv4InterfaceData.h:78
@ MCAST_EXCLUDE_SOURCES
Definition: NetworkInterface.h:33
value< double, units::m > m
Definition: Units.h:1233
Ipv4Address getIPAddress() const
Definition: Ipv4InterfaceData.h:156
@ MCAST_INCLUDE_SOURCES
Definition: NetworkInterface.h:33
RouterMulticastGroupVector reportedMulticastGroups
multicast groups that have listeners on the link connected to this interface
Definition: Ipv4InterfaceData.h:117
bool removeHostGroupData(Ipv4Address multicastAddress)
Definition: Ipv4InterfaceData.cc:466
Ipv4Address inetAddr
Ipv4 address of interface.
Definition: Ipv4InterfaceData.h:126
std::string str()
Definition: Ipv4InterfaceData.cc:116
std::vector< HostMulticastGroupData * > HostMulticastGroupVector
Definition: Ipv4InterfaceData.h:96