INET Framework for OMNeT++/OMNEST
IPv6ExtensionHeader Class Reference

#include <IPv6Datagram.h>

Inheritance diagram for IPv6ExtensionHeader:
IPv6ExtensionHeader_Base IPv6AuthenticationHeader IPv6DestinationOptionsHeader IPv6EncapsulatingSecurityPayloadHeader IPv6FragmentHeader IPv6HopByHopOptionsHeader IPv6RoutingHeader

List of all members.

Public Member Functions

 IPv6ExtensionHeader ()
 IPv6ExtensionHeader (const IPv6ExtensionHeader &other)
IPv6ExtensionHeaderoperator= (const IPv6ExtensionHeader &other)
virtual IPv6ExtensionHeaderdup () const
virtual IPProtocolId getExtensionType () const
virtual int getByteLength () const

Detailed Description

Represents an IPv6 extension header. More info in the IPv6Datagram.msg file (and the documentation generated from it).

Definition at line 74 of file IPv6Datagram.h.


Constructor & Destructor Documentation

Definition at line 78 of file IPv6Datagram.h.


Member Function Documentation

virtual IPv6ExtensionHeader* IPv6ExtensionHeader::dup ( ) const [inline, virtual]

Reimplemented from IPv6ExtensionHeader_Base.

Reimplemented in IPv6EncapsulatingSecurityPayloadHeader, IPv6AuthenticationHeader, IPv6DestinationOptionsHeader, IPv6FragmentHeader, IPv6RoutingHeader, and IPv6HopByHopOptionsHeader.

Definition at line 80 of file IPv6Datagram.h.

{throw cRuntimeError(this, "dup() should be redefined");}
int IPv6ExtensionHeader::getByteLength ( ) const [virtual]

Definition at line 111 of file IPv6Datagram.cc.

{
    // FIXME msg files don't yet support readonly attrs that can be
    // redefined in subclasses, so for now we resort to the following
    // unsafe and unextensible nasty solution
    if (dynamic_cast<const IPv6HopByHopOptionsHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6RoutingHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6FragmentHeader*>(this)) {
        return 8;
    } else if (dynamic_cast<const IPv6DestinationOptionsHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6AuthenticationHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6EncapsulatingSecurityPayloadHeader*>(this)) {
        return 8; // FIXME verify
    } else {
        throw cRuntimeError("unrecognised HeaderExtension subclass %s in IPv6ExtensionHeader::getExtensionType()", getClassName());
    }
}

Definition at line 89 of file IPv6Datagram.cc.

{
    // FIXME msg files don't yet support readonly attrs that can be
    // redefined in subclasses, so for now we resort to the following
    // unsafe and unextensible nasty solution
    if (dynamic_cast<const IPv6HopByHopOptionsHeader*>(this)) {
        return IP_PROT_IPv6EXT_HOP;
    } else if (dynamic_cast<const IPv6RoutingHeader*>(this)) {
        return IP_PROT_IPv6EXT_ROUTING;
    } else if (dynamic_cast<const IPv6FragmentHeader*>(this)) {
        return IP_PROT_IPv6EXT_FRAGMENT;
    } else if (dynamic_cast<const IPv6DestinationOptionsHeader*>(this)) {
        return IP_PROT_IPv6EXT_DEST;
    } else if (dynamic_cast<const IPv6AuthenticationHeader*>(this)) {
        return IP_PROT_IPv6EXT_AUTH;
    } else if (dynamic_cast<const IPv6EncapsulatingSecurityPayloadHeader*>(this)) {
        return IP_PROT_IPv6EXT_ESP;
    } else {
        throw cRuntimeError("unrecognised HeaderExtension subclass %s in IPv6ExtensionHeader::getExtensionType()", getClassName());
    }
}
IPv6ExtensionHeader& IPv6ExtensionHeader::operator= ( const IPv6ExtensionHeader other) [inline]

Definition at line 79 of file IPv6Datagram.h.

{IPv6ExtensionHeader_Base::operator=(other); return *this;}

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