From 2641f7fe88c7ad5d3b89851ba36a839685b0e389 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Mon, 30 Jul 2007 14:07:39 +0200 Subject: [PATCH 1/4] InetSocketAddress: replace explicit conversion to implicit conversion --- examples/csma-cd-one-subnet.cc | 4 ++-- examples/simple-point-to-point.cc | 4 ++-- samples/main-simple.cc | 4 ++-- src/internet-node/udp-socket.cc | 10 +++++----- src/node/inet-socket-address.cc | 10 ++++++++++ src/node/inet-socket-address.h | 10 +++++++--- 6 files changed, 28 insertions(+), 14 deletions(-) diff --git a/examples/csma-cd-one-subnet.cc b/examples/csma-cd-one-subnet.cc index ceaf88810..83b5b2259 100644 --- a/examples/csma-cd-one-subnet.cc +++ b/examples/csma-cd-one-subnet.cc @@ -132,7 +132,7 @@ int main (int argc, char *argv[]) // from n0 to n1 Ptr ooff = Create ( n0, - InetSocketAddress (Ipv4Address("10.1.1.2"), 80).ConvertTo (), + InetSocketAddress ("10.1.1.2", 80), "Udp", ConstantVariable(1), ConstantVariable(0)); @@ -143,7 +143,7 @@ int main (int argc, char *argv[]) // Create a similar flow from n3 to n0, starting at time 1.1 seconds ooff = Create ( n3, - InetSocketAddress (Ipv4Address("10.1.1.1"), 80).ConvertTo (), + InetSocketAddress ("10.1.1.1", 80), "Udp", ConstantVariable(1), ConstantVariable(0)); diff --git a/examples/simple-point-to-point.cc b/examples/simple-point-to-point.cc index 806c4d120..fa826ab5c 100644 --- a/examples/simple-point-to-point.cc +++ b/examples/simple-point-to-point.cc @@ -144,7 +144,7 @@ int main (int argc, char *argv[]) // 210 bytes at a rate of 448 Kb/s Ptr ooff = Create ( n0, - InetSocketAddress (Ipv4Address("10.1.3.2"), 80).ConvertTo (), + InetSocketAddress ("10.1.3.2", 80), "Udp", ConstantVariable(1), ConstantVariable(0)); @@ -155,7 +155,7 @@ int main (int argc, char *argv[]) // Create a similar flow from n3 to n1, starting at time 1.1 seconds ooff = Create ( n3, - InetSocketAddress (Ipv4Address("10.1.2.1"), 80).ConvertTo (), + InetSocketAddress ("10.1.2.1", 80), "Udp", ConstantVariable(1), ConstantVariable(0)); diff --git a/samples/main-simple.cc b/samples/main-simple.cc index e3567e0b1..3be286c46 100644 --- a/samples/main-simple.cc +++ b/samples/main-simple.cc @@ -46,11 +46,11 @@ RunSimulation (void) Ptr sink = socketFactory->CreateSocket (); InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80); - sink->Bind (local.ConvertTo ()); + sink->Bind (local); Ptr source = socketFactory->CreateSocket (); InetSocketAddress remote = InetSocketAddress (Ipv4Address::GetLoopback (), 80); - source->Connect (remote.ConvertTo ()); + source->Connect (remote); GenerateTraffic (source, 500); PrintTraffic (sink); diff --git a/src/internet-node/udp-socket.cc b/src/internet-node/udp-socket.cc index bc83c942c..438e59a53 100644 --- a/src/internet-node/udp-socket.cc +++ b/src/internet-node/udp-socket.cc @@ -95,7 +95,7 @@ UdpSocket::Bind (const Address &address) { return ERROR_INVAL; } - InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); + InetSocketAddress transport = address; Ipv4Address ipv4 = transport.GetIpv4 (); uint16_t port = transport.GetPort (); if (ipv4 == Ipv4Address::GetAny () && port == 0) @@ -151,7 +151,7 @@ UdpSocket::DoConnect(const Address & address, ns3::Callback > connectionFailed, ns3::Callback > halfClose) { - InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); + InetSocketAddress transport = address; m_defaultAddress = transport.GetIpv4 (); m_defaultPort = transport.GetPort (); if (!connectionSucceeded.IsNull ()) @@ -194,7 +194,7 @@ int UdpSocket::DoSendPacketTo (const Packet &p, const Address &address, ns3::Callback, uint32_t> dataSent) { - InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); + InetSocketAddress transport = address; Ipv4Address ipv4 = transport.GetIpv4 (); uint16_t port = transport.GetPort (); return DoSendPacketTo (p, ipv4, port, dataSent); @@ -245,7 +245,7 @@ UdpSocket::DoSendTo(const Address &address, { p = Packet (buffer, size); } - InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); + InetSocketAddress transport = address; Ipv4Address ipv4 = transport.GetIpv4 (); uint16_t port = transport.GetPort (); return DoSendPacketTo (p, ipv4, port, dataSent); @@ -269,7 +269,7 @@ UdpSocket::ForwardUp (const Packet &packet, Ipv4Address ipv4, uint16_t port) return; } - Address address = InetSocketAddress (ipv4, port).ConvertTo (); + Address address = InetSocketAddress (ipv4, port); Packet p = packet; if (!m_dummyRxCallback.IsNull ()) { diff --git a/src/node/inet-socket-address.cc b/src/node/inet-socket-address.cc index 232e9215f..43c32dcd1 100644 --- a/src/node/inet-socket-address.cc +++ b/src/node/inet-socket-address.cc @@ -51,6 +51,16 @@ InetSocketAddress::IsMatchingType (const Address &address) return address.CheckCompatible (GetType (), 6); } +InetSocketAddress::operator Address () const +{ + return ConvertTo (); +} + +InetSocketAddress::InetSocketAddress (const Address &address) +{ + *this = ConvertFrom (address); +} + Address InetSocketAddress::ConvertTo (void) const { diff --git a/src/node/inet-socket-address.h b/src/node/inet-socket-address.h index 6734f1496..c09a6c761 100644 --- a/src/node/inet-socket-address.h +++ b/src/node/inet-socket-address.h @@ -73,14 +73,18 @@ public: * \returns an Address instance which represents this * InetSocketAddress instance. */ - Address ConvertTo (void) const; + operator Address () const; + /** * \param address the Address instance to convert from. - * \returns an InetSocketAddress which corresponds to the input + * + * Construct an InetSocketAddress which corresponds to the input * Address */ - static InetSocketAddress ConvertFrom (const Address &address); + InetSocketAddress (const Address &address); private: + Address ConvertTo (void) const; + static InetSocketAddress ConvertFrom (const Address &address); static uint8_t GetType (void); Ipv4Address m_ipv4; uint16_t m_port; From 2e723a700d126db76e9109b269236af6ce1a60f5 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Mon, 30 Jul 2007 14:17:12 +0200 Subject: [PATCH 2/4] add implicit conversion to Eui48Address --- src/devices/csma-cd/csma-cd-net-device.cc | 14 ++++++------- .../point-to-point-net-device.cc | 4 ++-- src/node/eui48-address.cc | 8 ++++++++ src/node/eui48-address.h | 20 +++++++++++++------ 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/devices/csma-cd/csma-cd-net-device.cc b/src/devices/csma-cd/csma-cd-net-device.cc index ea4855f05..c07b8a438 100644 --- a/src/devices/csma-cd/csma-cd-net-device.cc +++ b/src/devices/csma-cd/csma-cd-net-device.cc @@ -37,7 +37,7 @@ namespace ns3 { CsmaCdNetDevice::CsmaCdNetDevice (Ptr node, Eui48Address addr, CsmaCdEncapsulationMode encapMode) - : NetDevice(node, addr.ConvertTo ()), + : NetDevice(node, addr), m_bps (DataRate (0xffffffff)) { NS_DEBUG ("CsmaCdNetDevice::CsmaCdNetDevice (" << node << ")"); @@ -49,7 +49,7 @@ CsmaCdNetDevice::CsmaCdNetDevice (Ptr node, Eui48Address addr, CsmaCdNetDevice::CsmaCdNetDevice (Ptr node, Eui48Address addr, CsmaCdEncapsulationMode encapMode, bool sendEnable, bool receiveEnable) - : NetDevice(node, addr.ConvertTo ()), + : NetDevice(node, addr), m_bps (DataRate (0xffffffff)) { NS_DEBUG ("CsmaCdNetDevice::CsmaCdNetDevice (" << node << ")"); @@ -96,7 +96,7 @@ CsmaCdNetDevice::Init(bool sendEnable, bool receiveEnable) m_channel = 0; m_queue = 0; - EnableBroadcast (Eui48Address ("ff:ff:ff:ff:ff:ff").ConvertTo ()); + EnableBroadcast (Eui48Address ("ff:ff:ff:ff:ff:ff")); EnableMulticast(); EnablePointToPoint(); @@ -160,7 +160,7 @@ CsmaCdNetDevice::AddHeader (Packet& p, Eui48Address dest, } EthernetHeader header (false); EthernetTrailer trailer; - Eui48Address source = Eui48Address::ConvertFrom (GetAddress ()); + Eui48Address source = GetAddress (); header.SetSource(source); header.SetDestination(dest); @@ -201,8 +201,8 @@ CsmaCdNetDevice::ProcessHeader (Packet& p, uint16_t & param) trailer.CheckFcs(p); p.RemoveHeader(header); - Eui48Address broadcast = Eui48Address::ConvertFrom (GetBroadcast ()); - Eui48Address destination = Eui48Address::ConvertFrom (GetAddress ()); + Eui48Address broadcast = GetBroadcast (); + Eui48Address destination = GetAddress (); if ((header.GetDestination() != broadcast) && (header.GetDestination() != destination)) { @@ -252,7 +252,7 @@ CsmaCdNetDevice::SendTo (Packet& p, const Address& dest, uint16_t protocolNumber if (!IsSendEnabled()) return false; - Eui48Address address = Eui48Address::ConvertFrom (dest); + Eui48Address address = dest; AddHeader(p, address, protocolNumber); // Place the packet to be sent on the send queue diff --git a/src/devices/point-to-point/point-to-point-net-device.cc b/src/devices/point-to-point/point-to-point-net-device.cc index 4b4157b26..1fe15f424 100644 --- a/src/devices/point-to-point/point-to-point-net-device.cc +++ b/src/devices/point-to-point/point-to-point-net-device.cc @@ -43,7 +43,7 @@ DataRateDefaultValue PointToPointNetDevice::g_defaultRate( PointToPointNetDevice::PointToPointNetDevice (Ptr node, const DataRate& rate) : - NetDevice(node, Eui48Address::Allocate ().ConvertTo ()), + NetDevice(node, Eui48Address::Allocate ()), m_txMachineState (READY), m_bps (rate), m_tInterframeGap (Seconds(0)), @@ -56,7 +56,7 @@ PointToPointNetDevice::PointToPointNetDevice (Ptr node, // BUGBUG FIXME // // You _must_ support broadcast to get any sort of packet from the ARP layer. - EnableBroadcast (Eui48Address ("ff:ff:ff:ff:ff:ff").ConvertTo ()); + EnableBroadcast (Eui48Address ("ff:ff:ff:ff:ff:ff")); EnableMulticast(); EnablePointToPoint(); } diff --git a/src/node/eui48-address.cc b/src/node/eui48-address.cc index 8196d7ba3..165bcb718 100644 --- a/src/node/eui48-address.cc +++ b/src/node/eui48-address.cc @@ -76,6 +76,14 @@ Eui48Address::IsMatchingType (const Address &address) { return address.CheckCompatible (GetType (), 6); } +Eui48Address::operator Address () +{ + return ConvertTo (); +} +Eui48Address::Eui48Address (const Address &address) +{ + *this = ConvertFrom (address); +} Address Eui48Address::ConvertTo (void) const { diff --git a/src/node/eui48-address.h b/src/node/eui48-address.h index 1d6c37da1..3e693f73c 100644 --- a/src/node/eui48-address.h +++ b/src/node/eui48-address.h @@ -36,28 +36,36 @@ public: * Copy the internal address to the input buffer. */ void CopyTo (uint8_t buffer[6]) const; + /** * \returns a new Address instance * * Convert an instance of this class to a polymorphic Address instance. */ - Address ConvertTo (void) const; - /** - * \returns true if the address matches, false otherwise. - */ - static bool IsMatchingType (const Address &address); + operator Address (); /** * \param address a polymorphic address * * Convert a polymorphic address to an Eui48Address instance. * The conversion performs a type check. */ - static Eui48Address ConvertFrom (const Address &address); + Eui48Address (const Address &address); + /** + * \returns true if the address matches, false otherwise. + */ + static bool IsMatchingType (const Address &address); /** * Allocate a new Eui48Address. */ static Eui48Address Allocate (void); private: + /** + * \returns a new Address instance + * + * Convert an instance of this class to a polymorphic Address instance. + */ + Address ConvertTo (void) const; + static Eui48Address ConvertFrom (const Address &address); static uint8_t GetType (void); uint8_t m_address[6]; }; From 497b9deadceef24de05b545b09523ffa26d325d5 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Mon, 30 Jul 2007 14:20:10 +0200 Subject: [PATCH 3/4] add implicit conversion to Ipv4Address --- src/node/ipv4-address.cc | 9 +++++++++ src/node/ipv4-address.h | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/node/ipv4-address.cc b/src/node/ipv4-address.cc index aae53c65f..91d4d0bc1 100644 --- a/src/node/ipv4-address.cc +++ b/src/node/ipv4-address.cc @@ -211,6 +211,15 @@ Ipv4Address::IsMatchingType (const Address &address) { return address.CheckCompatible (GetType (), 4); } +Ipv4Address::operator Address () +{ + return ConvertTo (); +} +Ipv4Address::Ipv4Address (const Address &address) +{ + *this = ConvertFrom (address); +} + Address Ipv4Address::ConvertTo (void) const { diff --git a/src/node/ipv4-address.h b/src/node/ipv4-address.h index 8e8976a18..d17854742 100644 --- a/src/node/ipv4-address.h +++ b/src/node/ipv4-address.h @@ -105,14 +105,16 @@ public: Ipv4Address CombineMask (Ipv4Mask const &mask) const; static bool IsMatchingType (const Address &address); - Address ConvertTo (void) const; - static Ipv4Address ConvertFrom (const Address &address); + operator Address (); + Ipv4Address (const Address &address); static Ipv4Address GetZero (void); static Ipv4Address GetAny (void); static Ipv4Address GetBroadcast (void); static Ipv4Address GetLoopback (void); private: + Address ConvertTo (void) const; + static Ipv4Address ConvertFrom (const Address &address); static uint8_t GetType (void); uint32_t m_address; }; From f1b93271230a12cd02417211a8e54a08178c0391 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Mon, 30 Jul 2007 14:57:49 +0200 Subject: [PATCH 4/4] remove implicit conversion from Address to Eui48Address, to Ipv4Address and to InetSocketAddress --- src/devices/csma-cd/csma-cd-net-device.cc | 12 +++++------- src/internet-node/udp-socket.cc | 8 ++++---- src/node/eui48-address.h | 11 ++++++----- src/node/inet-socket-address.cc | 5 ----- src/node/inet-socket-address.h | 6 +++--- src/node/ipv4-address.cc | 4 ---- src/node/ipv4-address.h | 3 +-- 7 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/devices/csma-cd/csma-cd-net-device.cc b/src/devices/csma-cd/csma-cd-net-device.cc index c07b8a438..f5936cb8b 100644 --- a/src/devices/csma-cd/csma-cd-net-device.cc +++ b/src/devices/csma-cd/csma-cd-net-device.cc @@ -160,7 +160,7 @@ CsmaCdNetDevice::AddHeader (Packet& p, Eui48Address dest, } EthernetHeader header (false); EthernetTrailer trailer; - Eui48Address source = GetAddress (); + Eui48Address source = Eui48Address::ConvertFrom (GetAddress ()); header.SetSource(source); header.SetDestination(dest); @@ -201,10 +201,8 @@ CsmaCdNetDevice::ProcessHeader (Packet& p, uint16_t & param) trailer.CheckFcs(p); p.RemoveHeader(header); - Eui48Address broadcast = GetBroadcast (); - Eui48Address destination = GetAddress (); - if ((header.GetDestination() != broadcast) && - (header.GetDestination() != destination)) + if ((header.GetDestination() != GetBroadcast ()) && + (header.GetDestination() != GetAddress ())) { return false; } @@ -252,8 +250,8 @@ CsmaCdNetDevice::SendTo (Packet& p, const Address& dest, uint16_t protocolNumber if (!IsSendEnabled()) return false; - Eui48Address address = dest; - AddHeader(p, address, protocolNumber); + Eui48Address destination = Eui48Address::ConvertFrom (dest); + AddHeader(p, destination, protocolNumber); // Place the packet to be sent on the send queue if (m_queue->Enqueue(p) == false ) diff --git a/src/internet-node/udp-socket.cc b/src/internet-node/udp-socket.cc index 438e59a53..01ac89c64 100644 --- a/src/internet-node/udp-socket.cc +++ b/src/internet-node/udp-socket.cc @@ -95,7 +95,7 @@ UdpSocket::Bind (const Address &address) { return ERROR_INVAL; } - InetSocketAddress transport = address; + InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); Ipv4Address ipv4 = transport.GetIpv4 (); uint16_t port = transport.GetPort (); if (ipv4 == Ipv4Address::GetAny () && port == 0) @@ -151,7 +151,7 @@ UdpSocket::DoConnect(const Address & address, ns3::Callback > connectionFailed, ns3::Callback > halfClose) { - InetSocketAddress transport = address; + InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); m_defaultAddress = transport.GetIpv4 (); m_defaultPort = transport.GetPort (); if (!connectionSucceeded.IsNull ()) @@ -194,7 +194,7 @@ int UdpSocket::DoSendPacketTo (const Packet &p, const Address &address, ns3::Callback, uint32_t> dataSent) { - InetSocketAddress transport = address; + InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); Ipv4Address ipv4 = transport.GetIpv4 (); uint16_t port = transport.GetPort (); return DoSendPacketTo (p, ipv4, port, dataSent); @@ -245,7 +245,7 @@ UdpSocket::DoSendTo(const Address &address, { p = Packet (buffer, size); } - InetSocketAddress transport = address; + InetSocketAddress transport = InetSocketAddress::ConvertFrom (address); Ipv4Address ipv4 = transport.GetIpv4 (); uint16_t port = transport.GetPort (); return DoSendPacketTo (p, ipv4, port, dataSent); diff --git a/src/node/eui48-address.h b/src/node/eui48-address.h index 3e693f73c..85f3e2202 100644 --- a/src/node/eui48-address.h +++ b/src/node/eui48-address.h @@ -45,11 +45,13 @@ public: operator Address (); /** * \param address a polymorphic address - * - * Convert a polymorphic address to an Eui48Address instance. - * The conversion performs a type check. + * \returns a new Eui48Address from the polymorphic address + * + * This function performs a type check and asserts if the + * type of the input address is not compatible with an + * Eui48Address. */ - Eui48Address (const Address &address); + static Eui48Address ConvertFrom (const Address &address); /** * \returns true if the address matches, false otherwise. */ @@ -65,7 +67,6 @@ private: * Convert an instance of this class to a polymorphic Address instance. */ Address ConvertTo (void) const; - static Eui48Address ConvertFrom (const Address &address); static uint8_t GetType (void); uint8_t m_address[6]; }; diff --git a/src/node/inet-socket-address.cc b/src/node/inet-socket-address.cc index 43c32dcd1..3b2ad5ba8 100644 --- a/src/node/inet-socket-address.cc +++ b/src/node/inet-socket-address.cc @@ -56,11 +56,6 @@ InetSocketAddress::operator Address () const return ConvertTo (); } -InetSocketAddress::InetSocketAddress (const Address &address) -{ - *this = ConvertFrom (address); -} - Address InetSocketAddress::ConvertTo (void) const { diff --git a/src/node/inet-socket-address.h b/src/node/inet-socket-address.h index c09a6c761..0a00172ba 100644 --- a/src/node/inet-socket-address.h +++ b/src/node/inet-socket-address.h @@ -78,13 +78,13 @@ public: /** * \param address the Address instance to convert from. * - * Construct an InetSocketAddress which corresponds to the input + * Returns an InetSocketAddress which corresponds to the input * Address */ - InetSocketAddress (const Address &address); + static InetSocketAddress ConvertFrom (const Address &address); private: Address ConvertTo (void) const; - static InetSocketAddress ConvertFrom (const Address &address); + static uint8_t GetType (void); Ipv4Address m_ipv4; uint16_t m_port; diff --git a/src/node/ipv4-address.cc b/src/node/ipv4-address.cc index 91d4d0bc1..4cf95aa22 100644 --- a/src/node/ipv4-address.cc +++ b/src/node/ipv4-address.cc @@ -215,10 +215,6 @@ Ipv4Address::operator Address () { return ConvertTo (); } -Ipv4Address::Ipv4Address (const Address &address) -{ - *this = ConvertFrom (address); -} Address Ipv4Address::ConvertTo (void) const diff --git a/src/node/ipv4-address.h b/src/node/ipv4-address.h index d17854742..a2f94592c 100644 --- a/src/node/ipv4-address.h +++ b/src/node/ipv4-address.h @@ -106,7 +106,7 @@ public: static bool IsMatchingType (const Address &address); operator Address (); - Ipv4Address (const Address &address); + static Ipv4Address ConvertFrom (const Address &address); static Ipv4Address GetZero (void); static Ipv4Address GetAny (void); @@ -114,7 +114,6 @@ public: static Ipv4Address GetLoopback (void); private: Address ConvertTo (void) const; - static Ipv4Address ConvertFrom (const Address &address); static uint8_t GetType (void); uint32_t m_address; };