00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "ipv4-route.h"
00022 #include "ns3/assert.h"
00023
00024 namespace ns3 {
00025
00026
00027
00028
00029
00030 Ipv4Route::Ipv4Route ()
00031 {}
00032
00033 Ipv4Route::Ipv4Route (Ipv4Route const &route)
00034 : m_dest (route.m_dest),
00035 m_destNetworkMask (route.m_destNetworkMask),
00036 m_gateway (route.m_gateway),
00037 m_interface (route.m_interface)
00038 {}
00039
00040 Ipv4Route::Ipv4Route (Ipv4Route const *route)
00041 : m_dest (route->m_dest),
00042 m_destNetworkMask (route->m_destNetworkMask),
00043 m_gateway (route->m_gateway),
00044 m_interface (route->m_interface)
00045 {}
00046
00047 Ipv4Route::Ipv4Route (Ipv4Address dest,
00048 Ipv4Address gateway,
00049 uint32_t interface)
00050 : m_dest (dest),
00051 m_destNetworkMask (Ipv4Mask::GetZero ()),
00052 m_gateway (gateway),
00053 m_interface (interface)
00054 {}
00055 Ipv4Route::Ipv4Route (Ipv4Address dest,
00056 uint32_t interface)
00057 : m_dest (dest),
00058 m_destNetworkMask (Ipv4Mask::GetZero ()),
00059 m_gateway (Ipv4Address::GetZero ()),
00060 m_interface (interface)
00061 {}
00062 Ipv4Route::Ipv4Route (Ipv4Address network,
00063 Ipv4Mask networkMask,
00064 Ipv4Address gateway,
00065 uint32_t interface)
00066 : m_dest (network),
00067 m_destNetworkMask (networkMask),
00068 m_gateway (gateway),
00069 m_interface (interface)
00070 {}
00071 Ipv4Route::Ipv4Route (Ipv4Address network,
00072 Ipv4Mask networkMask,
00073 uint32_t interface)
00074 : m_dest (network),
00075 m_destNetworkMask (networkMask),
00076 m_gateway (Ipv4Address::GetZero ()),
00077 m_interface (interface)
00078 {}
00079
00080 bool
00081 Ipv4Route::IsHost (void) const
00082 {
00083 if (m_destNetworkMask.IsEqual (Ipv4Mask::GetZero ()))
00084 {
00085 return true;
00086 }
00087 else
00088 {
00089 return false;
00090 }
00091 }
00092 Ipv4Address
00093 Ipv4Route::GetDest (void) const
00094 {
00095 return m_dest;
00096 }
00097 bool
00098 Ipv4Route::IsNetwork (void) const
00099 {
00100 return !IsHost ();
00101 }
00102 bool
00103 Ipv4Route::IsDefault (void) const
00104 {
00105 if (m_dest.IsEqual (Ipv4Address::GetZero ()))
00106 {
00107 return true;
00108 }
00109 else
00110 {
00111 return false;
00112 }
00113 }
00114 Ipv4Address
00115 Ipv4Route::GetDestNetwork (void) const
00116 {
00117 return m_dest;
00118 }
00119 Ipv4Mask
00120 Ipv4Route::GetDestNetworkMask (void) const
00121 {
00122 return m_destNetworkMask;
00123 }
00124 bool
00125 Ipv4Route::IsGateway (void) const
00126 {
00127 if (m_gateway.IsEqual (Ipv4Address::GetZero ()))
00128 {
00129 return false;
00130 }
00131 else
00132 {
00133 return true;
00134 }
00135 }
00136 Ipv4Address
00137 Ipv4Route::GetGateway (void) const
00138 {
00139 return m_gateway;
00140 }
00141 uint32_t
00142 Ipv4Route::GetInterface (void) const
00143 {
00144 return m_interface;
00145 }
00146
00147 Ipv4Route
00148 Ipv4Route::CreateHostRouteTo (Ipv4Address dest,
00149 Ipv4Address nextHop,
00150 uint32_t interface)
00151 {
00152 return Ipv4Route (dest, nextHop, interface);
00153 }
00154 Ipv4Route
00155 Ipv4Route::CreateHostRouteTo (Ipv4Address dest,
00156 uint32_t interface)
00157 {
00158 return Ipv4Route (dest, interface);
00159 }
00160 Ipv4Route
00161 Ipv4Route::CreateNetworkRouteTo (Ipv4Address network,
00162 Ipv4Mask networkMask,
00163 Ipv4Address nextHop,
00164 uint32_t interface)
00165 {
00166 return Ipv4Route (network, networkMask,
00167 nextHop, interface);
00168 }
00169 Ipv4Route
00170 Ipv4Route::CreateNetworkRouteTo (Ipv4Address network,
00171 Ipv4Mask networkMask,
00172 uint32_t interface)
00173 {
00174 return Ipv4Route (network, networkMask,
00175 interface);
00176 }
00177 Ipv4Route
00178 Ipv4Route::CreateDefaultRoute (Ipv4Address nextHop,
00179 uint32_t interface)
00180 {
00181 return Ipv4Route (Ipv4Address::GetZero (), nextHop, interface);
00182 }
00183
00184
00185 std::ostream& operator<< (std::ostream& os, Ipv4Route const& route)
00186 {
00187 if (route.IsDefault ())
00188 {
00189 NS_ASSERT (route.IsGateway ());
00190 os << "default out=" << route.GetInterface () << ", next hop=" << route.GetGateway ();
00191 }
00192 else if (route.IsHost ())
00193 {
00194 if (route.IsGateway ())
00195 {
00196 os << "host="<< route.GetDest () <<
00197 ", out=" << route.GetInterface () <<
00198 ", next hop=" << route.GetGateway ();
00199 }
00200 else
00201 {
00202 os << "host="<< route.GetDest () <<
00203 ", out=" << route.GetInterface ();
00204 }
00205 }
00206 else if (route.IsNetwork ())
00207 {
00208 if (route.IsGateway ())
00209 {
00210 os << "network=" << route.GetDestNetwork () <<
00211 ", mask=" << route.GetDestNetworkMask () <<
00212 ",out=" << route.GetInterface () <<
00213 ", next hop=" << route.GetGateway ();
00214 }
00215 else
00216 {
00217 os << "network=" << route.GetDestNetwork () <<
00218 ", mask=" << route.GetDestNetworkMask () <<
00219 ",out=" << route.GetInterface ();
00220 }
00221 }
00222 else
00223 {
00224 NS_ASSERT (false);
00225 }
00226 return os;
00227 }
00228
00229
00230
00231
00232
00233 Ipv4MulticastRoute::Ipv4MulticastRoute ()
00234 {
00235 }
00236
00237 Ipv4MulticastRoute::Ipv4MulticastRoute (Ipv4MulticastRoute const &route)
00238 :
00239 m_origin (route.m_origin),
00240 m_group (route.m_group),
00241 m_inputInterface (route.m_inputInterface),
00242 m_outputInterfaces (route.m_outputInterfaces)
00243 {
00244 }
00245
00246 Ipv4MulticastRoute::Ipv4MulticastRoute (Ipv4MulticastRoute const *route)
00247 :
00248 m_origin (route->m_origin),
00249 m_group (route->m_group),
00250 m_inputInterface (route->m_inputInterface),
00251 m_outputInterfaces (route->m_outputInterfaces)
00252 {
00253 }
00254
00255 Ipv4MulticastRoute::Ipv4MulticastRoute (
00256 Ipv4Address origin,
00257 Ipv4Address group,
00258 uint32_t inputInterface,
00259 std::vector<uint32_t> outputInterfaces)
00260 {
00261 m_origin = origin;
00262 m_group = group;
00263 m_inputInterface = inputInterface;
00264 m_outputInterfaces = outputInterfaces;
00265 }
00266
00267 Ipv4Address
00268 Ipv4MulticastRoute::GetOrigin (void) const
00269 {
00270 return m_origin;
00271 }
00272
00273 Ipv4Address
00274 Ipv4MulticastRoute::GetGroup (void) const
00275 {
00276 return m_group;
00277 }
00278
00279 uint32_t
00280 Ipv4MulticastRoute::GetInputInterface (void) const
00281 {
00282 return m_inputInterface;
00283 }
00284
00285 uint32_t
00286 Ipv4MulticastRoute::GetNOutputInterfaces (void) const
00287 {
00288 return m_outputInterfaces.size ();
00289 }
00290
00291 uint32_t
00292 Ipv4MulticastRoute::GetOutputInterface (uint32_t n) const
00293 {
00294 NS_ASSERT_MSG(n < m_outputInterfaces.size (),
00295 "Ipv4MulticastRoute::GetOutputInterface (): index out of bounds");
00296
00297 return m_outputInterfaces[n];
00298 }
00299
00300 std::vector<uint32_t>
00301 Ipv4MulticastRoute::GetOutputInterfaces (void) const
00302 {
00303 return m_outputInterfaces;
00304 }
00305
00306 Ipv4MulticastRoute
00307 Ipv4MulticastRoute::CreateMulticastRoute (
00308 Ipv4Address origin,
00309 Ipv4Address group,
00310 uint32_t inputInterface,
00311 std::vector<uint32_t> outputInterfaces)
00312 {
00313 return Ipv4MulticastRoute (origin, group, inputInterface, outputInterfaces);
00314 }
00315
00316 std::ostream&
00317 operator<< (std::ostream& os, Ipv4MulticastRoute const& route)
00318 {
00319 os << "origin=" << route.GetOrigin () <<
00320 ", group=" << route.GetGroup () <<
00321 ", input interface=" << route.GetInputInterface () <<
00322 ", output interfaces=";
00323
00324 for (uint32_t i = 0; i < route.GetNOutputInterfaces (); ++i)
00325 {
00326 os << route.GetOutputInterface (i) << " ";
00327
00328 }
00329
00330 return os;
00331 }
00332
00333 }