Classes | Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes

IPv6InterfaceData Class Reference

#include <IPv6InterfaceData.h>

Inheritance diagram for IPv6InterfaceData:
InterfaceProtocolData

List of all members.

Classes

struct  AddressData
struct  AdvPrefix
struct  HostConstants
struct  HostVariables
struct  NodeConstants
struct  NodeVariables
struct  RouterConstants
struct  RouterVariables

Public Member Functions

 IPv6InterfaceData ()
virtual ~IPv6InterfaceData ()
std::string info () const
std::string detailedInfo () const
Addresses

virtual void assignAddress (const IPv6Address &addr, bool tentative, simtime_t expiryTime, simtime_t prefExpiryTime)
virtual void updateMatchingAddressExpiryTimes (const IPv6Address &prefix, int length, simtime_t expiryTime=0, simtime_t prefExpiryTime=0)
int getNumAddresses () const
const IPv6AddressgetAddress (int i) const
bool isTentativeAddress (int i) const
bool hasAddress (const IPv6Address &addr) const
bool matchesSolicitedNodeMulticastAddress (const IPv6Address &solNodeAddr) const
bool isTentativeAddress (const IPv6Address &addr) const
virtual void permanentlyAssign (const IPv6Address &addr)
const IPv6AddressgetPreferredAddress () const
const IPv6AddressgetLinkLocalAddress () const
virtual void removeAddress (const IPv6Address &address)
simtime_t _getMaxInitialRtrAdvertInterval ()
uint _getMaxInitialRtrAdvertisements ()
uint _getMaxFinalRtrAdvertisements ()
simtime_t _getMinDelayBetweenRAs ()
simtime_t _getMaxRADelayTime ()
virtual void _setMaxInitialRtrAdvertInterval (simtime_t d)
virtual void _setMaxInitialRtrAdvertisements (uint d)
virtual void _setMaxFinalRtrAdvertisements (uint d)
virtual void _setMinDelayBetweenRAs (simtime_t d)
virtual void _setMaxRADelayTime (simtime_t d)
simtime_t _getMaxRtrSolicitationDelay ()
simtime_t _getRtrSolicitationInterval ()
uint _getMaxRtrSolicitations ()
virtual void _setMaxRtrSolicitationDelay (simtime_t d)
virtual void _setRtrSolicitationInterval (simtime_t d)
virtual void _setMaxRtrSolicitations (uint d)
uint _getMaxMulticastSolicit ()
uint _getMaxUnicastSolicit ()
simtime_t _getMaxAnycastDelayTime ()
uint _getMaxNeighbourAdvertisement ()
simtime_t _getReachableTime ()
simtime_t _getRetransTimer ()
simtime_t _getDelayFirstProbeTime ()
double _getMinRandomFactor ()
double _getMaxRandomFactor ()
virtual void _setMaxMulticastSolicit (uint d)
virtual void _setMaxUnicastSolicit (uint d)
virtual void _setMaxAnycastDelayTime (simtime_t d)
virtual void _setMaxNeighbourAdvertisement (uint d)
virtual void _setReachableTime (simtime_t d)
virtual void _setRetransTimer (simtime_t d)
virtual void _setDelayFirstProbeTime (simtime_t d)
virtual void _setMinRandomFactor (double d)
virtual void _setMaxRandomFactor (double d)
int dupAddrDetectTransmits ()
virtual void setDupAddrDetectTransmits (int d)
uint getLinkMTU ()
short getCurHopLimit ()
uint getBaseReachableTime ()
simtime_t getReachableTime ()
uint getRetransTimer ()
virtual void setLinkMTU (uint d)
virtual void setCurHopLimit (short d)
virtual void setBaseReachableTime (uint d)
virtual void setReachableTime (simtime_t d)
virtual void setRetransTimer (uint d)
bool getAdvSendAdvertisements ()
simtime_t getMaxRtrAdvInterval ()
simtime_t getMinRtrAdvInterval ()
bool getAdvManagedFlag ()
bool getAdvOtherConfigFlag ()
int getAdvLinkMTU ()
int getAdvReachableTime ()
int getAdvRetransTimer ()
short getAdvCurHopLimit ()
simtime_t getAdvDefaultLifetime ()
virtual void setAdvSendAdvertisements (bool d)
virtual void setMaxRtrAdvInterval (simtime_t d)
virtual void setMinRtrAdvInterval (simtime_t d)
virtual void setAdvManagedFlag (bool d)
virtual void setAdvOtherConfigFlag (bool d)
virtual void setAdvLinkMTU (int d)
virtual void setAdvReachableTime (int d)
virtual void setAdvRetransTimer (int d)
virtual void setAdvCurHopLimit (short d)
virtual void setAdvDefaultLifetime (simtime_t d)
Router advertised prefixes

virtual void addAdvPrefix (const AdvPrefix &advPrefix)
int getNumAdvPrefixes () const
const AdvPrefixgetAdvPrefix (int i) const
virtual void setAdvPrefix (int i, const AdvPrefix &advPrefix)
virtual void removeAdvPrefix (int i)
virtual simtime_t generateReachableTime (double MIN_RANDOM_FACTOR, double MAX_RANDOM_FACTOR, uint baseReachableTime)
virtual simtime_t generateReachableTime ()

Public Attributes

RouterConstants routerConstants
HostConstants hostConstants
NodeConstants nodeConstants

Protected Types

typedef std::vector< AddressDataAddressDataVector
typedef std::vector< AdvPrefixAdvPrefixList

Protected Member Functions

int findAddress (const IPv6Address &addr) const
void choosePreferredAddress ()
void changed1 ()

Static Protected Member Functions

static bool addrLess (const AddressData &a, const AddressData &b)

Protected Attributes

AddressDataVector addresses
IPv6Address preferredAddr
simtime_t preferredAddrExpiryTime
NodeVariables nodeVars
HostVariables hostVars
RouterVariables rtrVars

Detailed Description

IPv6-specific data for InterfaceEntry. Most of this comes from section 6.2.1 of RFC 2461 (IPv6 Neighbor Discovery, Router Configuration Variables).

Definition at line 70 of file IPv6InterfaceData.h.


Member Typedef Documentation

typedef std::vector<AddressData> IPv6InterfaceData::AddressDataVector [protected]

Definition at line 135 of file IPv6InterfaceData.h.

typedef std::vector<AdvPrefix> IPv6InterfaceData::AdvPrefixList [protected]

Definition at line 210 of file IPv6InterfaceData.h.


Constructor & Destructor Documentation

IPv6InterfaceData::IPv6InterfaceData (  ) 

Definition at line 26 of file IPv6InterfaceData.cc.

{
    /*******************Setting host/node/router Protocol Constants************/
    routerConstants.maxInitialRtrAdvertInterval = IPv6_MAX_INITIAL_RTR_ADVERT_INTERVAL;
    routerConstants.maxInitialRtrAdvertisements = IPv6_MAX_INITIAL_RTR_ADVERTISEMENTS;
    routerConstants.maxFinalRtrAdvertisements = IPv6_MAX_FINAL_RTR_ADVERTISEMENTS;
    routerConstants.minDelayBetweenRAs = IPv6_MIN_DELAY_BETWEEN_RAS;
    routerConstants.maxRADelayTime = IPv6_MAX_RA_DELAY_TIME;

    hostConstants.maxRtrSolicitationDelay = IPv6_MAX_RTR_SOLICITATION_DELAY;
    hostConstants.rtrSolicitationInterval = IPv6_RTR_SOLICITATION_INTERVAL;
    hostConstants.maxRtrSolicitations = IPv6_MAX_RTR_SOLICITATIONS;

    nodeConstants.maxMulticastSolicit = IPv6_MAX_MULTICAST_SOLICIT;
    nodeConstants.maxUnicastSolicit = IPv6_MAX_UNICAST_SOLICIT;
    nodeConstants.maxAnycastDelayTime = IPv6_MAX_ANYCAST_DELAY_TIME;
    nodeConstants.maxNeighbourAdvertisement = IPv6_MAX_NEIGHBOUR_ADVERTISEMENT;
    nodeConstants.reachableTime = IPv6_REACHABLE_TIME;
    nodeConstants.retransTimer = IPv6_RETRANS_TIMER;
    nodeConstants.delayFirstProbeTime = IPv6_DELAY_FIRST_PROBE_TIME;
    nodeConstants.minRandomFactor = IPv6_MIN_RANDOM_FACTOR;
    nodeConstants.maxRandomFactor = IPv6_MAX_RANDOM_FACTOR;

    /*******************Setting host/node/router variables*********************/
    nodeVars.dupAddrDetectTransmits = IPv6_DEFAULT_DUPADDRDETECTTRANSMITS;

    hostVars.linkMTU = IPv6_MIN_MTU;
    hostVars.curHopLimit = IPv6_DEFAULT_ADVCURHOPLIMIT;//value specified in RFC 1700-can't find it
    hostVars.baseReachableTime = IPv6_REACHABLE_TIME;
    hostVars.reachableTime = generateReachableTime(_getMinRandomFactor(),
        _getMaxRandomFactor(), getBaseReachableTime());
    hostVars.retransTimer = IPv6_RETRANS_TIMER;

    //rtrVars.advSendAdvertisements is set in RoutingTable6.cc:line 143
    rtrVars.maxRtrAdvInterval = IPv6_DEFAULT_MAX_RTR_ADV_INT;
    rtrVars.minRtrAdvInterval = 0.33*rtrVars.maxRtrAdvInterval;
    rtrVars.advManagedFlag = false;
    rtrVars.advOtherConfigFlag = false;
    rtrVars.advLinkMTU = IPv6_MIN_MTU;
    rtrVars.advReachableTime = IPv6_DEFAULT_ADV_REACHABLE_TIME;
    rtrVars.advRetransTimer = IPv6_DEFAULT_ADV_RETRANS_TIMER;
    rtrVars.advCurHopLimit = IPv6_DEFAULT_ADVCURHOPLIMIT;
    rtrVars.advDefaultLifetime = 3*rtrVars.maxRtrAdvInterval;
#if USE_MOBILITY
    if (rtrVars.advDefaultLifetime<1)
        rtrVars.advDefaultLifetime = 1;
#endif
}

virtual IPv6InterfaceData::~IPv6InterfaceData (  )  [inline, virtual]

Definition at line 312 of file IPv6InterfaceData.h.

{}


Member Function Documentation

simtime_t IPv6InterfaceData::_getDelayFirstProbeTime (  )  [inline]
simtime_t IPv6InterfaceData::_getMaxAnycastDelayTime (  )  [inline]

Definition at line 434 of file IPv6InterfaceData.h.

uint IPv6InterfaceData::_getMaxFinalRtrAdvertisements (  )  [inline]

Definition at line 410 of file IPv6InterfaceData.h.

simtime_t IPv6InterfaceData::_getMaxInitialRtrAdvertInterval (  )  [inline]

Getters/Setters for all variables and constants defined in RFC 2461/2462 can be found here. Operations responsible for protocol constants are marked with a "_" prefix. Constants in this class are stored as instance variables. Default values for certain variables are defined at the top of this file, while certain variables have to be generated. Protocol constants are subject to change as specified in RFC2461:section 10 depending on different link layer operation. Getters and setters have been implemented for protocol constants so that a wireless interface may be set to a different set of constant values. (ie. changed by the FlatNetworkConfigurator) Such a design allows both wired and wireless networks to co-exist within a simulation run.

Definition at line 408 of file IPv6InterfaceData.h.

Referenced by IPv6NeighbourDiscovery::sendPeriodicRA().

uint IPv6InterfaceData::_getMaxInitialRtrAdvertisements (  )  [inline]
uint IPv6InterfaceData::_getMaxMulticastSolicit (  )  [inline]
uint IPv6InterfaceData::_getMaxNeighbourAdvertisement (  )  [inline]

Definition at line 435 of file IPv6InterfaceData.h.

simtime_t IPv6InterfaceData::_getMaxRADelayTime (  )  [inline]
double IPv6InterfaceData::_getMaxRandomFactor (  )  [inline]

Definition at line 440 of file IPv6InterfaceData.h.

Referenced by generateReachableTime(), and IPv6InterfaceData().

simtime_t IPv6InterfaceData::_getMaxRtrSolicitationDelay (  )  [inline]
uint IPv6InterfaceData::_getMaxRtrSolicitations (  )  [inline]
uint IPv6InterfaceData::_getMaxUnicastSolicit (  )  [inline]
simtime_t IPv6InterfaceData::_getMinDelayBetweenRAs (  )  [inline]

Definition at line 411 of file IPv6InterfaceData.h.

double IPv6InterfaceData::_getMinRandomFactor (  )  [inline]

Definition at line 439 of file IPv6InterfaceData.h.

Referenced by generateReachableTime(), and IPv6InterfaceData().

simtime_t IPv6InterfaceData::_getReachableTime (  )  [inline]
simtime_t IPv6InterfaceData::_getRetransTimer (  )  [inline]
simtime_t IPv6InterfaceData::_getRtrSolicitationInterval (  )  [inline]
virtual void IPv6InterfaceData::_setDelayFirstProbeTime ( simtime_t  d  )  [inline, virtual]

Definition at line 448 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxAnycastDelayTime ( simtime_t  d  )  [inline, virtual]

Definition at line 444 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxFinalRtrAdvertisements ( uint  d  )  [inline, virtual]
virtual void IPv6InterfaceData::_setMaxInitialRtrAdvertInterval ( simtime_t  d  )  [inline, virtual]
virtual void IPv6InterfaceData::_setMaxInitialRtrAdvertisements ( uint  d  )  [inline, virtual]
virtual void IPv6InterfaceData::_setMaxMulticastSolicit ( uint  d  )  [inline, virtual]

Definition at line 442 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxNeighbourAdvertisement ( uint  d  )  [inline, virtual]

Definition at line 445 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxRADelayTime ( simtime_t  d  )  [inline, virtual]

Definition at line 418 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxRandomFactor ( double  d  )  [inline, virtual]

Definition at line 450 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxRtrSolicitationDelay ( simtime_t  d  )  [inline, virtual]

Definition at line 426 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxRtrSolicitations ( uint  d  )  [inline, virtual]

Definition at line 428 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMaxUnicastSolicit ( uint  d  )  [inline, virtual]

Definition at line 443 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMinDelayBetweenRAs ( simtime_t  d  )  [inline, virtual]

Definition at line 417 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setMinRandomFactor ( double  d  )  [inline, virtual]

Definition at line 449 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setReachableTime ( simtime_t  d  )  [inline, virtual]

Definition at line 446 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setRetransTimer ( simtime_t  d  )  [inline, virtual]

Definition at line 447 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::_setRtrSolicitationInterval ( simtime_t  d  )  [inline, virtual]

Definition at line 427 of file IPv6InterfaceData.h.

void IPv6InterfaceData::addAdvPrefix ( const AdvPrefix advPrefix  )  [virtual]

Adds the given advertised prefix to the interface.

Definition at line 258 of file IPv6InterfaceData.cc.

Referenced by FlatNetworkConfigurator6::configureAdvPrefixes(), and RoutingTable6::configureInterfaceFromXML().

{
    rtrVars.advPrefixList.push_back(advPrefix);
}

bool IPv6InterfaceData::addrLess ( const AddressData a,
const AddressData b 
) [static, protected]

Definition at line 226 of file IPv6InterfaceData.cc.

{
    // This method is used in choosePreferredAddress().
    // sort() produces increasing order, so "better" addresses should
    // compare as "less", to make them appear first in the array
    if (a.tentative!=b.tentative)
         return !a.tentative; // tentative=false is better
    if (a.address.getScope()!=b.address.getScope())
         return a.address.getScope()>b.address.getScope(); // bigger scope is better
    return (a.expiryTime==0 && b.expiryTime!=0) || a.expiryTime>b.expiryTime;  // longer expiry time is better
}

void IPv6InterfaceData::assignAddress ( const IPv6Address addr,
bool  tentative,
simtime_t  expiryTime,
simtime_t  prefExpiryTime 
) [virtual]

Assigns the given address to the interface.

Definition at line 137 of file IPv6InterfaceData.cc.

Referenced by IPv6NeighbourDiscovery::assignLinkLocalAddress(), RoutingTable6::assignRequiredNodeAddresses(), FlatNetworkConfigurator6::configureAdvPrefixes(), RoutingTable6::configureInterfaceFromXML(), and IPv6NeighbourDiscovery::processRAPrefixInfoForAddrAutoConf().

{
    addresses.push_back(AddressData());
    AddressData& a = addresses.back();
    a.address = addr;
    a.tentative = tentative;
    a.expiryTime = expiryTime;
    a.prefExpiryTime = prefExpiryTime;
    choosePreferredAddress();
}

void IPv6InterfaceData::changed1 (  )  [inline, protected]
void IPv6InterfaceData::choosePreferredAddress (  )  [protected]

Definition at line 238 of file IPv6InterfaceData.cc.

Referenced by assignAddress(), permanentlyAssign(), removeAddress(), and updateMatchingAddressExpiryTimes().

{
    // do we have addresses?
    if (addresses.size()==0)
    {
        preferredAddr = IPv6Address();
        return;
    }

    // FIXME shouldn't we stick to the current preferredAddress if its prefLifetime
    // hasn't expired yet?

    // FIXME TBD throw out expired addresses! 0 should be treated as infinity

    // sort addresses by scope and expiry time, then pick the first one
    std::sort(addresses.begin(), addresses.end(), addrLess);
    preferredAddr = addresses[0].address;
    preferredAddrExpiryTime = addresses[0].expiryTime;
}

std::string IPv6InterfaceData::detailedInfo (  )  const

Definition at line 132 of file IPv6InterfaceData.cc.

{
    return info(); // TBD this could be improved: multi-line text, etc
}

int IPv6InterfaceData::dupAddrDetectTransmits (  )  [inline]
int IPv6InterfaceData::findAddress ( const IPv6Address addr  )  const [protected]

Definition at line 163 of file IPv6InterfaceData.cc.

Referenced by hasAddress(), isTentativeAddress(), permanentlyAssign(), and removeAddress().

{
    for (AddressDataVector::const_iterator it=addresses.begin(); it!=addresses.end(); it++)
        if (it->address==addr)
            return it-addresses.begin();
    return -1;
}

simtime_t IPv6InterfaceData::generateReachableTime ( double  MIN_RANDOM_FACTOR,
double  MAX_RANDOM_FACTOR,
uint  baseReachableTime 
) [virtual]

This method randomly generates a reachableTime given the MIN_RANDOM_FACTOR MAX_RANDOM_FACTOR and baseReachableTime. Refer to RFC 2461: Section 6.3.2

Definition at line 283 of file IPv6InterfaceData.cc.

Referenced by IPv6NeighbourDiscovery::processRAForRouterUpdates().

{
    return uniform(MIN_RANDOM_FACTOR, MAX_RANDOM_FACTOR) * baseReachableTime;
}

simtime_t IPv6InterfaceData::generateReachableTime (  )  [virtual]

Arg-less version.

Definition at line 289 of file IPv6InterfaceData.cc.

Referenced by IPv6InterfaceData().

const IPv6Address & IPv6InterfaceData::getAddress ( int  i  )  const

Returns ith address of the interface.

Definition at line 171 of file IPv6InterfaceData.cc.

Referenced by info(), SCTPAssociation::processInitArrived(), IPv6NeighbourDiscovery::processRAPrefixInfoForAddrAutoConf(), and SCTPAssociation::sendInit().

{
    ASSERT(i>=0 && i<(int)addresses.size());
    return addresses[i].address;
}

short IPv6InterfaceData::getAdvCurHopLimit (  )  [inline]
simtime_t IPv6InterfaceData::getAdvDefaultLifetime (  )  [inline]
int IPv6InterfaceData::getAdvLinkMTU (  )  [inline]

Definition at line 479 of file IPv6InterfaceData.h.

Referenced by IPv6NeighbourDiscovery::createAndSendRAPacket().

{return rtrVars.advLinkMTU;}

bool IPv6InterfaceData::getAdvManagedFlag (  )  [inline]
bool IPv6InterfaceData::getAdvOtherConfigFlag (  )  [inline]
const IPv6InterfaceData::AdvPrefix & IPv6InterfaceData::getAdvPrefix ( int  i  )  const

Returns the ith advertised prefix on the interface.

Definition at line 263 of file IPv6InterfaceData.cc.

Referenced by FlatNetworkConfigurator6::addOwnAdvPrefixRoutes(), FlatNetworkConfigurator6::addStaticRoutes(), IPv6NeighbourDiscovery::createAndSendRAPacket(), info(), and RoutingTable6::initialize().

{
    ASSERT(i>=0 && i<(int)rtrVars.advPrefixList.size());
    return rtrVars.advPrefixList[i];
}

int IPv6InterfaceData::getAdvReachableTime (  )  [inline]
int IPv6InterfaceData::getAdvRetransTimer (  )  [inline]
uint IPv6InterfaceData::getBaseReachableTime (  )  [inline]

Definition at line 462 of file IPv6InterfaceData.h.

Referenced by generateReachableTime(), and IPv6InterfaceData().

short IPv6InterfaceData::getCurHopLimit (  )  [inline]

Definition at line 461 of file IPv6InterfaceData.h.

const IPv6Address & IPv6InterfaceData::getLinkLocalAddress (  )  const

Returns the first valid link-local address of the interface, or UNSPECIFIED_ADDRESS if there's none.

Definition at line 210 of file IPv6InterfaceData.cc.

Referenced by FlatNetworkConfigurator6::addStaticRoutes(), IPv6NeighbourDiscovery::assignLinkLocalAddress(), FlatNetworkConfigurator6::configureAdvPrefixes(), IPv6NeighbourDiscovery::createAndSendRAPacket(), IPv6NeighbourDiscovery::createAndSendRSPacket(), and IPv6NeighbourDiscovery::processRAPrefixInfoForAddrAutoConf().

{
    for (AddressDataVector::const_iterator it=addresses.begin(); it!=addresses.end(); it++)
        if (it->address.isLinkLocal())  // FIXME and valid
            return it->address;
    return IPv6Address::UNSPECIFIED_ADDRESS;
}

uint IPv6InterfaceData::getLinkMTU (  )  [inline]

Definition at line 460 of file IPv6InterfaceData.h.

{return hostVars.linkMTU;}

simtime_t IPv6InterfaceData::getMaxRtrAdvInterval (  )  [inline]
simtime_t IPv6InterfaceData::getMinRtrAdvInterval (  )  [inline]
int IPv6InterfaceData::getNumAddresses (  )  const [inline]

Returns the number of addresses the interface has.

Definition at line 335 of file IPv6InterfaceData.h.

Referenced by info(), IPv6NeighbourDiscovery::processRAPrefixInfoForAddrAutoConf(), and SCTPAssociation::sendInit().

{return addresses.size();}

int IPv6InterfaceData::getNumAdvPrefixes (  )  const [inline]
const IPv6Address& IPv6InterfaceData::getPreferredAddress (  )  const [inline]

Chooses a preferred address for the interface and returns it. This is the address that should be used as source address for outgoing datagrams, if one is not explicitly specified.

Selection is based on scope (globally routable addresses are preferred), then on lifetime (the one that expires last is chosen). See private choosePreferredAddress() function.

FIXME turn into preferredGLOBALAddress()!

Definition at line 382 of file IPv6InterfaceData.h.

Referenced by IPv6NeighbourDiscovery::createAndSendRSPacket(), IPAddressResolver::getInterfaceIPv6Address(), IPAddressResolver::getIPv6AddressFrom(), IPv6NeighbourDiscovery::initiateAddressResolution(), IPv6NeighbourDiscovery::processNUDTimeout(), IPv6::routePacket(), and IPv6NeighbourDiscovery::sendSolicitedNA().

{return preferredAddr;}  // FIXME TBD check expiry time!

simtime_t IPv6InterfaceData::getReachableTime (  )  [inline]
uint IPv6InterfaceData::getRetransTimer (  )  [inline]
bool IPv6InterfaceData::hasAddress ( const IPv6Address addr  )  const

Returns true if the given address is one of the addresses assigned, regardless whether it is tentative or not.

Definition at line 183 of file IPv6InterfaceData.cc.

Referenced by RoutingTable6::getInterfaceByAddress(), IPv6NeighbourDiscovery::initiateAddressResolution(), RoutingTable6::isLocalAddress(), and IPv6NeighbourDiscovery::processNSPacket().

{
    return findAddress(addr)!=-1;
}

std::string IPv6InterfaceData::info (  )  const

Definition at line 75 of file IPv6InterfaceData.cc.

Referenced by detailedInfo().

{
    // FIXME FIXME FIXME FIXME info() should never print a newline
    std::ostringstream os;
    os << "IPv6:{" << endl;
    for (int i=0; i<getNumAddresses(); i++)
    {
        os << (i?"\t            , ":"\tAddrs:") << getAddress(i)
           << "(" << IPv6Address::scopeName(getAddress(i).getScope())
           << (isTentativeAddress(i)?" tent":"") << ") "
           << " expiryTime: " << (addresses[i].expiryTime==0 ? "inf" : SIMTIME_STR(addresses[i].expiryTime))
           << " prefExpiryTime: " << (addresses[i].prefExpiryTime==0 ? "inf" : SIMTIME_STR(addresses[i].prefExpiryTime))
           << endl;
    }

    for (int i=0; i<getNumAdvPrefixes(); i++)
    {
        const AdvPrefix& a = getAdvPrefix(i);
        os << (i?", ":"\tAdvPrefixes: ") << a.prefix << "/" << a.prefixLength << "("
           << (a.advOnLinkFlag?"":"off-link ")
           << (a.advAutonomousFlag?"":"non-auto ");
        if (a.advValidLifetime==0)
           os  << "lifetime:inf";
        else if (a.advValidLifetime>0)
           os  << "expires:" << a.advValidLifetime;
        else
           os  << "lifetime:+" << (-1 * a.advValidLifetime);
        os << ")" << endl;
    }
    os << " ";

    // uncomment the following as needed!
    os << "\tNode:";
    os << " dupAddrDetectTrans=" << nodeVars.dupAddrDetectTransmits;
    //os << " curHopLimit=" << hostVars.curHopLimit;
    //os << " retransTimer=" << hostVars.retransTimer;
    //os << " baseReachableTime=" << hostVars.baseReachableTime;
    os << " reachableTime=" << hostVars.reachableTime << endl;

    if (rtrVars.advSendAdvertisements)
    {
        os << "\tRouter:";
        os << " maxRtrAdvInt=" << rtrVars.maxRtrAdvInterval;
        os << " minRtrAdvInt=" << rtrVars.minRtrAdvInterval << endl;
        //os << " advManagedFlag=" << rtrVars.advManagedFlag;
        //os << " advOtherFlag=" << rtrVars.advOtherFlag;
        //os << " advLinkMTU=" << rtrVars.advLinkMTU;
        //os << " advReachableTime=" << rtrVars.advReachableTime;
        //os << " advRetransTimer=" << rtrVars.advRetransTimer;
        //os << " advCurHopLimit=" << rtrVars.advCurHopLimit;
        //os << " advDefaultLifetime=" << rtrVars.advDefaultLifetime;
    }

    os << "   }" << endl;
    return os.str();
}

bool IPv6InterfaceData::isTentativeAddress ( int  i  )  const

Returns true if the ith address of the interface is tentative.

Definition at line 177 of file IPv6InterfaceData.cc.

Referenced by IPv6NeighbourDiscovery::createAndSendRSPacket(), info(), IPv6NeighbourDiscovery::processNAPacket(), and IPv6NeighbourDiscovery::processNSPacket().

{
    ASSERT(i>=0 && i<(int)addresses.size());
    return addresses[i].tentative;
}

bool IPv6InterfaceData::isTentativeAddress ( const IPv6Address addr  )  const

Returns true if the interface has the given address and it is tentative.

Definition at line 196 of file IPv6InterfaceData.cc.

{
    int k = findAddress(addr);
    return k!=-1 && addresses[k].tentative;
}

bool IPv6InterfaceData::matchesSolicitedNodeMulticastAddress ( const IPv6Address solNodeAddr  )  const

Returns true if the interface has an address matching the given solicited-node multicast addresses.

Definition at line 188 of file IPv6InterfaceData.cc.

Referenced by RoutingTable6::isLocalAddress().

{
    for (AddressDataVector::const_iterator it=addresses.begin(); it!=addresses.end(); it++)
        if (it->address.formSolicitedNodeMulticastAddress()==solNodeAddr)
            return true;
    return false;
}

void IPv6InterfaceData::permanentlyAssign ( const IPv6Address addr  )  [virtual]

Clears the "tentative" flag of an existing interface address.

Definition at line 202 of file IPv6InterfaceData.cc.

Referenced by IPv6NeighbourDiscovery::processDADTimeout().

{
    int k = findAddress(addr);
    ASSERT(k!=-1);
    addresses[k].tentative = false;
    choosePreferredAddress();
}

void IPv6InterfaceData::removeAddress ( const IPv6Address address  )  [virtual]

Removes the address. Called when the valid lifetime expires.

Definition at line 218 of file IPv6InterfaceData.cc.

{
    int k = findAddress(address);
    ASSERT(k!=-1);
    addresses.erase(addresses.begin()+k);
    choosePreferredAddress();
}

void IPv6InterfaceData::removeAdvPrefix ( int  i  )  [virtual]

Remove the ith advertised prefix on the interface. Prefixes at larger indices will shift down.

Definition at line 277 of file IPv6InterfaceData.cc.

{
    ASSERT(i>=0 && i<(int)rtrVars.advPrefixList.size());
    rtrVars.advPrefixList.erase(rtrVars.advPrefixList.begin()+i);
}

virtual void IPv6InterfaceData::setAdvCurHopLimit ( short  d  )  [inline, virtual]

Definition at line 493 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setAdvDefaultLifetime ( simtime_t  d  )  [inline, virtual]

Definition at line 494 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setAdvLinkMTU ( int  d  )  [inline, virtual]

Definition at line 490 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setAdvManagedFlag ( bool  d  )  [inline, virtual]

Definition at line 488 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setAdvOtherConfigFlag ( bool  d  )  [inline, virtual]

Definition at line 489 of file IPv6InterfaceData.h.

void IPv6InterfaceData::setAdvPrefix ( int  i,
const AdvPrefix advPrefix 
) [virtual]

Changes the configuration of the ith advertised prefix on the interface. The prefix itself should stay the same.

Definition at line 269 of file IPv6InterfaceData.cc.

{
    ASSERT(i>=0 && i<(int)rtrVars.advPrefixList.size());
    ASSERT(rtrVars.advPrefixList[i].prefix == advPrefix.prefix);
    ASSERT(rtrVars.advPrefixList[i].prefixLength == advPrefix.prefixLength);
    rtrVars.advPrefixList[i] = advPrefix;
}

virtual void IPv6InterfaceData::setAdvReachableTime ( int  d  )  [inline, virtual]

Definition at line 491 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setAdvRetransTimer ( int  d  )  [inline, virtual]

Definition at line 492 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setAdvSendAdvertisements ( bool  d  )  [inline, virtual]
virtual void IPv6InterfaceData::setBaseReachableTime ( uint  d  )  [inline, virtual]
virtual void IPv6InterfaceData::setCurHopLimit ( short  d  )  [inline, virtual]
virtual void IPv6InterfaceData::setDupAddrDetectTransmits ( int  d  )  [inline, virtual]

Definition at line 456 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setLinkMTU ( uint  d  )  [inline, virtual]

Definition at line 466 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setMaxRtrAdvInterval ( simtime_t  d  )  [inline, virtual]

Definition at line 486 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setMinRtrAdvInterval ( simtime_t  d  )  [inline, virtual]

Definition at line 487 of file IPv6InterfaceData.h.

virtual void IPv6InterfaceData::setReachableTime ( simtime_t  d  )  [inline, virtual]
virtual void IPv6InterfaceData::setRetransTimer ( uint  d  )  [inline, virtual]
void IPv6InterfaceData::updateMatchingAddressExpiryTimes ( const IPv6Address prefix,
int  length,
simtime_t  expiryTime = 0,
simtime_t  prefExpiryTime = 0 
) [virtual]

Update expiry times of addresses. Expiry times possibly come from prefixes (with on-link flag set to either zero or one) in Router Advertisements. Zero expiry time means infinity.

Definition at line 149 of file IPv6InterfaceData.cc.

{
    for (AddressDataVector::iterator it=addresses.begin(); it!=addresses.end(); it++)
    {
        if (it->address.matches(prefix,length))
        {
            it->expiryTime = expiryTime;
            it->prefExpiryTime = prefExpiryTime;
        }
    }
    choosePreferredAddress();
}


Member Data Documentation

Definition at line 206 of file IPv6InterfaceData.h.

Referenced by info(), and IPv6InterfaceData().

Definition at line 166 of file IPv6InterfaceData.h.

Referenced by info(), and IPv6InterfaceData().

Definition at line 139 of file IPv6InterfaceData.h.

Referenced by choosePreferredAddress().

Definition at line 140 of file IPv6InterfaceData.h.

Referenced by choosePreferredAddress().


The documentation for this class was generated from the following files: