|
357 |
// |
357 |
// |
358 |
// We want to get as much of this stuff automagically as possible. |
358 |
// We want to get as much of this stuff automagically as possible. |
359 |
// |
359 |
// |
|
|
360 |
// For CONFIGURE_LOCAL mode only: |
360 |
// <IP-address> is the IP address we are going to set in the newly |
361 |
// <IP-address> is the IP address we are going to set in the newly |
361 |
// created Tap device on the Linux host. At the point in the simulation |
362 |
// created Tap device on the Linux host. At the point in the simulation |
362 |
// where devices are coming up, we should have all of our IP addresses |
363 |
// where devices are coming up, we should have all of our IP addresses |
|
364 |
// the new Tap device from the IP address associated with the bridged |
365 |
// the new Tap device from the IP address associated with the bridged |
365 |
// net device. |
366 |
// net device. |
366 |
// |
367 |
// |
|
|
368 |
|
369 |
bool wantIp = (m_mode == CONFIGURE_LOCAL); |
370 |
|
367 |
Ptr<NetDevice> nd = GetBridgedNetDevice (); |
371 |
Ptr<NetDevice> nd = GetBridgedNetDevice (); |
368 |
Ptr<Node> n = nd->GetNode (); |
372 |
Ptr<Node> n = nd->GetNode (); |
369 |
Ptr<Ipv4> ipv4 = n->GetObject<Ipv4> (); |
373 |
Ptr<Ipv4> ipv4 = n->GetObject<Ipv4> (); |
370 |
uint32_t index = ipv4->GetInterfaceForDevice (nd); |
374 |
|
371 |
if (ipv4->GetNAddresses (index) > 1) |
375 |
if (wantIp |
|
|
376 |
&& (ipv4 == 0) |
377 |
&& m_tapIp.IsBroadcast () |
378 |
&& m_tapNetmask.IsEqual (Ipv4Mask::GetOnes ())) |
372 |
{ |
379 |
{ |
373 |
NS_LOG_WARN ("Underlying bridged NetDevice has multiple IP addresses; using first one."); |
380 |
NS_FATAL_ERROR ("TapBridge::CreateTap(): Tap device IP configuration requested but neither IP address nor IP netmask is provided"); |
374 |
} |
381 |
} |
375 |
Ipv4Address ipv4Address = ipv4->GetAddress (index, 0).GetLocal (); |
|
|
376 |
|
382 |
|
377 |
// |
383 |
// Some stub values to make tap-creator happy |
378 |
// The net mask is sitting right there next to the ipv4 address. |
384 |
Ipv4Address ipv4Address ("255.255.255.255"); |
379 |
// |
385 |
Ipv4Mask ipv4Mask ("255.255.255.255"); |
380 |
Ipv4Mask ipv4Mask = ipv4->GetAddress (index, 0).GetMask (); |
386 |
|
|
|
387 |
if (ipv4 != 0) |
388 |
{ |
389 |
uint32_t index = ipv4->GetInterfaceForDevice (nd); |
390 |
if (ipv4->GetNAddresses (index) > 1) |
391 |
{ |
392 |
NS_LOG_WARN ("Underlying bridged NetDevice has multiple IP addresses; using first one."); |
393 |
} |
394 |
ipv4Address = ipv4->GetAddress (index, 0).GetLocal (); |
395 |
|
396 |
// |
397 |
// The net mask is sitting right there next to the ipv4 address. |
398 |
// |
399 |
ipv4Mask = ipv4->GetAddress (index, 0).GetMask (); |
400 |
} |
381 |
|
401 |
|
382 |
// |
402 |
// |
383 |
// The MAC address should also already be assigned and waiting for us in |
403 |
// The MAC address should also already be assigned and waiting for us in |