|
INET Framework for OMNeT++/OMNEST
|
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_ */