Msg File src/inet/networklayer/icmpv6/IPv6NDMessage.msg

Name Type Description
IPv6NDOptionLength enum

TLB options (type, length, bytes), length must be divisible by eight, max value is 8*255 Length in bytes:

IPv6NDOptionTypes enum

TLB options (type, length, bytes), length must be divisible by eight, max value is 8*255 Type codes:

IPv6NDPrefixInformation class

IPv6ND Prefix Information RFC 2461 / RFC 4861 Section 4.6.2 RFC 3775 Section 7.2 (routerAddressFlag)

MIPv6NDAdvertisementInterval class

MIPv6 New Advertisement Interval Option RFC 3775 Section 7.3

MIPv6HAInformation class

MIPv6 Home Agent Information Option RFC 3775 Section 7.4

IPv6NDMessage packet

Neighbour Discovery for IPv6. RFC 2461

IPv6RouterSolicitation packet

Router Solicitation Message Format RFC 4861 Section 4.1

IPv6RouterAdvertisement packet

Router Advertisement Message Format RFC 2461 Section 4.2 RFC 3775 Section 7.1, RFC 5175 Section 3. (homeAgentFlag)

IPv6NeighbourSolicitation packet

Neighbour Solicitation Message Format RFC 4861 Section 4.3

IPv6NeighbourAdvertisement packet

Neighbour Advertisement Message Format RFC 2461 Section 4.4

IPv6Redirect packet

Redirect Message Format RFC 2461 Section 4.5

IPv6NDControlInfo class (no description)

Source code:

//
// Copyright (C) 2005 Wei Yang, Ng
// Copyright (C) 2005 Andras Varga
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// 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 Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, see <http://www.gnu.org/licenses/>.
//

cplusplus {{
#include "inet/networklayer/icmpv6/ICMPv6Message_m.h"
#include "inet/networklayer/contract/ipv6/IPv6Address.h"
#include "inet/linklayer/common/MACAddress.h"
}}

namespace inet;

packet ICMPv6Message;

class noncobject IPv6Address;

class noncobject MACAddress;

// TLB options (type, length, bytes), length must be divisible by eight, max value is 8*255
// Length in bytes:
enum IPv6NDOptionLength {
    IPv6ND_LINK_LAYER_ADDRESS_OPTION_LENGTH = 8;    // RFC 2461, Section 4.6.1. Source/Target Link-layer Address
    IPv6ND_PREFIX_INFORMATION_OPTION_LENGTH = 32;   // RFC 2461, Section 4.6.2. Prefix Information
    IPv6ND_REDIRECTED_HEADER_OPTION_LENGTH = 8;     // 8 + redirected packet, RFC 2461, Section 4.6.3. Redirected Header.
                                                    // The original packet truncated to ensure that the size of the redirect message does not exceed 1280 octets.
    IPv6ND_MTU_OPTION_LENGTH = 8;                   // RFC 2461, Section 4.6.4. MTU
}

// TLB options (type, length, bytes), length must be divisible by eight, max value is 8*255
// Type codes:
enum IPv6NDOptionTypes {
    IPv6ND_SOURCE_LINK_LAYER_ADDR_OPTION = 1;          // RFC 2461
    IPv6ND_TARGET_LINK_LAYER_ADDR_OPTION = 2;          // RFC 2461
}
//
// IPv6ND Prefix Information
// RFC 2461 / RFC 4861 Section 4.6.2
// RFC 3775 Section 7.2 (routerAddressFlag)
//
class IPv6NDPrefixInformation
{
    unsigned short prefixLength;
    bool onlinkFlag;        //L-bit
    bool autoAddressConfFlag;    //A-bit
    bool routerAddressFlag;        //R-bit: used in case of MIPv6 when the H-bit is set
    unsigned int validLifetime;    // seconds
    unsigned int preferredLifetime;    // seconds
    IPv6Address prefix;
}

// MIPv6 New Advertisement Interval Option
// RFC 3775 Section 7.3
//
class MIPv6NDAdvertisementInterval
{
    unsigned int advertisementInterval;    // milliseconds
}

//MIPv6 Home Agent Information Option
//RFC 3775 Section 7.4
class MIPv6HAInformation
{
    unsigned int homeAgentPreference;
    unsigned int homeAgentLifetime;    // seconds
}

//
// Neighbour Discovery for IPv6.
// RFC 2461
//
// ICMP fields inherited from ~ICMPv6Message:
//    - Type
//
// ICMP fields not implemented:
//    - Checksum
//    - Reserved
//
packet IPv6NDMessage extends ICMPv6Message
{
    //customize=true;
    int code = 0;
}

//
// Router Solicitation Message Format
// RFC 4861 Section 4.1
//
packet IPv6RouterSolicitation extends IPv6NDMessage
{
    //Possible Options

    // The link-layer address of the sender, if known.
    // MUST NOT be included if the Source Address is the unspecified address.
    // Otherwise, it SHOULD be included on link layers that have addresses.
    MACAddress sourceLinkLayerAddress;
}

//
// Router Advertisement Message Format
// RFC 2461 Section 4.2
// RFC 3775 Section 7.1, RFC 5175 Section 3. (homeAgentFlag)
//
packet IPv6RouterAdvertisement extends IPv6NDMessage
{
    //Additional ICMP fields
    unsigned short curHopLimit;
    bool managedAddrConfFlag;    //M-bit
    bool otherStatefulConfFlag;    //O-bit
    bool homeAgentFlag = false;        //H-bit
    unsigned short routerLifetime;  // 0 indicates router is not a default router
    unsigned int reachableTime;
    unsigned int retransTimer;

    //Possible Options
    MACAddress sourceLinkLayerAddress;        //source link layer option
    unsigned int MTU;                //MTU option
    IPv6NDPrefixInformation prefixInformation[];    //Prefix Information Option
    MIPv6NDAdvertisementInterval advInterval;    //New Advertisement Interval Option (MIPv6)
    MIPv6HAInformation haInformation;    //New Home Agent Information Option (MIPv6)
}

//
// Neighbour Solicitation Message Format
// RFC 4861 Section 4.3
//
packet IPv6NeighbourSolicitation extends IPv6NDMessage
{
    //Additional ICMP fields
    IPv6Address targetAddress;// MUST NOT be a multicast address.

    //Possible Options

    // The link-layer address for the sender.
    // MUST NOT be included when the source IP address is the unspecified address.
    // Otherwise, on link layers that have addresses this option MUST be included in multicast
    // solicitations and SHOULD be included in unicast solicitations.
    MACAddress sourceLinkLayerAddress;
}

//
// Neighbour Advertisement Message Format
// RFC 2461 Section 4.4
//
packet IPv6NeighbourAdvertisement extends IPv6NDMessage
{
    //Additional ICMP fields
    bool routerFlag;    //R-flag
    bool solicitedFlag;    //S-flag
    bool overrideFlag;    //O-flag
    IPv6Address targetAddress;// MUST NOT be a multicast address.

    //Possible Options
    MACAddress targetLinkLayerAddress;    //Target Link Layer Address option
}

//
// Redirect Message Format
// RFC 2461 Section 4.5
//
packet IPv6Redirect extends IPv6NDMessage
{
    //Additional ICMP fields
    IPv6Address targetAddress;
    IPv6Address destinationAddress;

    //Possible Options
    MACAddress targetLinkLayerAddress;
        //Redirected Header Encapsulated Msg
}

class IPv6NDControlInfo
{
    IPv6Address nextHop;   // next hop address
    int interfaceId = -1; // interface on which the datagram should be sent
    bool fromHL = false;    // packet came from higher layer
}