INET Framework for OMNeT++/OMNEST
ansaOspfCommon6.h
Go to the documentation of this file.
00001 /*
00002  * ansaOSPFCommon6.h
00003  *
00004  *  Created on: 2.4.2011
00005  *      Author: TDLmarek
00006  */
00007 
00008 #ifndef ANSAOSPFCOMMON6_H_
00009 #define ANSAOSPFCOMMON6_H_
00010 
00011 #include "IPv6Address.h"
00012 #include "IPAddress.h"
00013 
00014 #define OSPF_MAX_PROCESSID    65535
00015 #define OSPF_MAX_INSTANCEID   255
00016 #define OSPF_MAX_COST         65535
00017 #define OSPF_MAX_PRIORITY     255
00018 
00019 #define LS_REFRESH_TIME                     1800
00020 #define MIN_LS_INTERVAL                     5
00021 #define MIN_LS_ARRIVAL                      1
00022 #define MAX_AGE                             3600
00023 #define CHECK_AGE                           300
00024 #define MAX_AGE_DIFF                        900
00025 #define LS_INFINITY                         16777215
00026 #define DEFAULT_DESTINATION_ADDRESS         0
00027 #define INITIAL_SEQUENCE_NUMBER             -2147483647
00028 #define MAX_SEQUENCE_NUMBER                 2147483647
00029 
00030 #define VIRTUAL_LINK_TTL                    32
00031 
00032 namespace AnsaOspf6 {
00033 
00034 typedef uint32 RouterID;
00035 typedef uint32 DesignatedRouterID;
00036 typedef uint32 ProcessID;
00037 typedef uint32 AreaID;
00038 typedef uint32 IfaceID;
00039 typedef uint8  InstanceID;
00040 typedef uint16 Metric;
00041 typedef uint32 LinkStateID;
00042 
00043 
00044 class IPv6Address_Less : public std::binary_function <IPv6Address, IPv6Address, bool> {
00045    public:
00046       bool operator() (IPv6Address leftAddress, IPv6Address rightAddress) const;
00047 };
00048 
00049 // replaces IPv4AddressRange
00050 struct IPv6AddressPrefix {
00051    IPv6Address address;
00052    int prefixLen;
00053 };
00054 
00055 class IPv6AddressPrefix_Less : public std::binary_function <IPv6AddressPrefix, IPv6AddressPrefix, bool> {
00056    public:
00057       bool operator() (IPv6AddressPrefix leftAddressRange, IPv6AddressPrefix rightAddressRange) const;
00058 };
00059 
00060 struct HostRouteParameters {
00061    unsigned char ifIndex;
00062    IPv6Address   address;
00063    Metric        linkCost;
00064 };
00065 
00066 struct LsaKeyType6 {
00067     LinkStateID linkStateID;
00068     RouterID    advertisingRouter;
00069 };
00070 
00071 
00072 class LsaKeyType6_Less: public std::binary_function<LsaKeyType6, LsaKeyType6, bool> {
00073    public:
00074       bool operator()(LsaKeyType6 leftKey, LsaKeyType6 rightKey) const;
00075 };
00076 
00077 const RouterID    NullRouterID = 0;
00078 const AreaID      BackboneAreaID = 0;
00079 const LinkStateID NullLinkStateID = 0;
00080 
00081 // http://tools.ietf.org/html/rfc5340#appendix-A.1
00082 const IPv6Address AllSPFRouters  = "FF02::5";
00083 const IPv6Address AllDRouters    = "FF02::6";
00084 const IPv6AddressPrefix NullAddressPrefix = {IPv6Address::UNSPECIFIED_ADDRESS, 128};
00085 
00086 const DesignatedRouterID NullDesignatedRouterID = NullRouterID;
00087 }
00088 
00089 inline std::ostream& operator<<(std::ostream& os, AnsaOspf6::InstanceID instanceId){
00090    os << (int) instanceId;
00091    return os;
00092 }
00093 
00094 inline bool AnsaOspf6::IPv6Address_Less::operator() (IPv6Address leftAddress, IPv6Address rightAddress) const {
00095    return (leftAddress < rightAddress);
00096 }
00097 
00098 inline bool operator==(AnsaOspf6::IPv6AddressPrefix left, AnsaOspf6::IPv6AddressPrefix right) {
00099    return ( (left.address == right.address) &&
00100             (left.prefixLen == right.prefixLen));
00101 }
00102 
00103 inline bool operator!=(AnsaOspf6::IPv6AddressPrefix left, AnsaOspf6::IPv6AddressPrefix right) {
00104    return (!(left==right));
00105 }
00106 
00107 inline bool AnsaOspf6::IPv6AddressPrefix_Less::operator() (AnsaOspf6::IPv6AddressPrefix leftPrefix, AnsaOspf6::IPv6AddressPrefix rightPrefix) const {
00108    return ( (leftPrefix.address < rightPrefix.address)
00109          || (  (leftPrefix.address == rightPrefix.address)
00110             && (leftPrefix.prefixLen < rightPrefix.prefixLen)));
00111 }
00112 
00113 inline bool AnsaOspf6::LsaKeyType6_Less::operator() (AnsaOspf6::LsaKeyType6 leftKey, AnsaOspf6::LsaKeyType6 rightKey) const{
00114     return (   (leftKey.linkStateID < rightKey.linkStateID)
00115             || (  (leftKey.linkStateID == rightKey.linkStateID)
00116                && (leftKey.advertisingRouter < rightKey.advertisingRouter)));
00117 }
00118 
00119 #endif /* ANSAOSPFCOMMON6_H_ */