32 |
32 |
33 NS_LOG_COMPONENT_DEFINE ("UdpSocket"); |
33 NS_LOG_COMPONENT_DEFINE ("UdpSocket"); |
34 |
34 |
35 namespace ns3 { |
35 namespace ns3 { |
36 |
36 |
37 UdpSocket::UdpSocket (Ptr<Node> node, Ptr<UdpL4Protocol> udp) |
37 UdpSocket::UdpSocket () |
38 : m_endPoint (0), |
38 : m_endPoint (0), |
39 m_node (node), |
39 m_node (0), |
40 m_udp (udp), |
40 m_udp (0), |
41 m_errno (ERROR_NOTERROR), |
41 m_errno (ERROR_NOTERROR), |
42 m_shutdownSend (false), |
42 m_shutdownSend (false), |
43 m_shutdownRecv (false), |
43 m_shutdownRecv (false), |
44 m_connected (false) |
44 m_connected (false) |
45 { |
45 { |
66 m_udp->DeAllocate (m_endPoint); |
66 m_udp->DeAllocate (m_endPoint); |
67 NS_ASSERT (m_endPoint == 0); |
67 NS_ASSERT (m_endPoint == 0); |
68 } |
68 } |
69 m_udp = 0; |
69 m_udp = 0; |
70 } |
70 } |
|
71 |
|
72 void |
|
73 UdpSocket::SetNode (Ptr<Node> node) |
|
74 { |
|
75 m_node = node; |
|
76 } |
|
77 void |
|
78 UdpSocket::SetUdp (Ptr<UdpL4Protocol> udp) |
|
79 { |
|
80 m_udp = udp; |
|
81 } |
|
82 |
71 |
83 |
72 enum Socket::SocketErrno |
84 enum Socket::SocketErrno |
73 UdpSocket::GetErrno (void) const |
85 UdpSocket::GetErrno (void) const |
74 { |
86 { |
75 NS_LOG_FUNCTION; |
87 NS_LOG_FUNCTION; |
398 |
410 |
399 // Receiver Node |
411 // Receiver Node |
400 Ptr<Node> rxNode = CreateObject<InternetNode> (); |
412 Ptr<Node> rxNode = CreateObject<InternetNode> (); |
401 Ptr<PointToPointNetDevice> rxDev1, rxDev2; |
413 Ptr<PointToPointNetDevice> rxDev1, rxDev2; |
402 { // first interface |
414 { // first interface |
403 rxDev1 = CreateObjectWith<PointToPointNetDevice> ("Node", rxNode, "Address", Mac48Address::Allocate ()); |
415 rxDev1 = CreateObject<PointToPointNetDevice> ("Node", rxNode, "Address", Mac48Address::Allocate ()); |
404 rxNode->AddDevice (rxDev1); |
416 rxNode->AddDevice (rxDev1); |
405 rxDev1->AddQueue(CreateObject<DropTailQueue> ()); |
417 rxDev1->AddQueue(CreateObject<DropTailQueue> ()); |
406 Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); |
418 Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); |
407 uint32_t netdev_idx = ipv4->AddInterface (rxDev1); |
419 uint32_t netdev_idx = ipv4->AddInterface (rxDev1); |
408 ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.1")); |
420 ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.1")); |
409 ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); |
421 ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); |
410 ipv4->SetUp (netdev_idx); |
422 ipv4->SetUp (netdev_idx); |
411 } |
423 } |
412 |
424 |
413 { // second interface |
425 { // second interface |
414 rxDev2 = CreateObjectWith<PointToPointNetDevice> ("Node", rxNode, "Address", Mac48Address::Allocate ()); |
426 rxDev2 = CreateObject<PointToPointNetDevice> ("Node", rxNode, "Address", Mac48Address::Allocate ()); |
415 rxNode->AddDevice (rxDev2); |
427 rxNode->AddDevice (rxDev2); |
416 rxDev2->AddQueue(CreateObject<DropTailQueue> ()); |
428 rxDev2->AddQueue(CreateObject<DropTailQueue> ()); |
417 Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); |
429 Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); |
418 uint32_t netdev_idx = ipv4->AddInterface (rxDev2); |
430 uint32_t netdev_idx = ipv4->AddInterface (rxDev2); |
419 ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.1.1")); |
431 ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.1.1")); |
423 |
435 |
424 // Sender Node |
436 // Sender Node |
425 Ptr<Node> txNode = CreateObject<InternetNode> (); |
437 Ptr<Node> txNode = CreateObject<InternetNode> (); |
426 Ptr<PointToPointNetDevice> txDev; |
438 Ptr<PointToPointNetDevice> txDev; |
427 { |
439 { |
428 txDev = CreateObjectWith<PointToPointNetDevice> ("Node", txNode, "Address", Mac48Address::Allocate ()); |
440 txDev = CreateObject<PointToPointNetDevice> ("Node", txNode, "Address", Mac48Address::Allocate ()); |
429 txNode->AddDevice (txDev); |
441 txNode->AddDevice (txDev); |
430 txDev->AddQueue(CreateObject<DropTailQueue> ()); |
442 txDev->AddQueue(CreateObject<DropTailQueue> ()); |
431 Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> (); |
443 Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> (); |
432 uint32_t netdev_idx = ipv4->AddInterface (txDev); |
444 uint32_t netdev_idx = ipv4->AddInterface (txDev); |
433 ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.2")); |
445 ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.2")); |